Aprender C# es bastante simple e intuitivo, sobretodo si ya se tiene alguna experiencia en algún lenguaje de programación. Tan solo se precisa un poco de tiempo y algo de ganas.

En este articulo se mostrarán las instrucciones básicas del lenguaje de forma que una persona con unos escasos conocimientos de programación pueda rapidamente hacerse con el.

Evidentemente explicar todas las funciones y librerias del lenguaje llevaria mucho tiempo y no es mi intención hacer una descripción pormenorizada de todas las posibilidades del lenguaje asi que si despues de leer este articulo te has quedado con ganas de más te recomiendo que te acerques a la libreria tecnica más cercana y compres alguno de los multiples libros que tratan el tema ya que aqui solo encontrarás una introducción breve que te permitirá seguir los siguientes articulos de la serie.

Asi que, si ya posees unos minimos conocimientos del lenguaje, puede que no te interese seguir leyendo, aunque si sigues leyendo el articulo talvez puedas descubrir alguna cosa que desconocias. nunca se sabe.

C#, que se lee en Español algo asi como “Ce charp” (C-sharp en inglés), apareció en el año 2000 de la mano de Microsoft, que lo presento como parte de una nueva tecnologia que denominó punto net (.NET). Dicha tecnologia permitía realizar aplicaciones en diversos lenguajes con una mayor interoperabilidad ente ellos y permitiendo a la vez que funcionaran con independencia de la maquina para la que se habian escrito. (Aunque hay que decir que inicialmente solo se podia hacer uso de esta tecnologia en equipos que corrieran windows)

Para entender las ventajas y desventajas de la tecnologia .NET, y por extensión del lenguaje C# hay que hacer algo de historia y explicar un poco el desarrollo de los lenguajes de programación.

Todos los procesadores informaticos actuales basan su funcionalidad en la posibilidad de ejecutar distintos programas. Dichos programas, para que el procesador pueda entenderlos deben estar escritos en un lenguaje denominado “código máquina”. Dicho lenguaje se compone por una serie de codigos numericos (los famosos 1 y 0) que el procesador entiende y puede procesar.

No obstante, los seres humanos normales no tienen excesiva facilidad en recordar grandes series de numeros por lo que, para que fuera más facil la programación de procesadores, se emplearon una serie de codigos memotecnicos correspondiendes a las distintas instrucciones que entendia el procesador. A estos codigos se les llamó codigos de ensamblador.

Además de los codigos memotecnicos se le añadieron algunas funcionalidades extra que permitian que la programación de los procesadores fuera mucho mas simple. Aunque a decir verdad el programar procesadores con ensamblador no es que sea excesivamente simple.

Por si esto fuera poco tanto el codigo maquina como el ensamblador son especificos para cada tipo de procesador, por lo que el codigo realizado para un procesador no puede ser utilizado por un procesador de una familia distinta. Es decir, un programa creado para un PC no se puede utilizar en una playStation, por que ambos dispositivos tienen procesadores distintos.

Finalmente, para que los programas realizados en ensamblador, los pueda entender el procesador, deben ser compilados, es decir, se deben transformar  adecuadamente para que se conviertan en las series numericas que realmente entiende el procesador, es decir en codigo máquina.

Dada la excesiva complejidad de la programación tanto en código máquina como en ensamblador, se inventaron una serie de lenguajes, mucho más cercanos al lenguaje humano que se denominaron genericamente lenguajes de alto nivel. El C# es uno de ellos.

Estos lenguajes tienen una mayor facilidad de uso ya que en unas pocas lineas de codigo permiten hacer lo que en ensamblador corresponderia a cientos o miles de lineas. En la actualidad la mayoria de las aplicaciones informaticas se realizan mediante lenguajes de alto nivel dejando el codigo ensamblador para aplicaciones muy especificas que requieran una gran velocidad de proceso o un espacio de memoria muy reducido.

Además de la ventaja de su facilidad de uso la mayor ventaja de los lenguajes de alto nivel es que son independientes del procesador. Un lenguaje de alto nivel puede funcionar en distintos procesadores siempre que se disponga de una aplicación que transforme dicho lenguaje a codigo máquina.

Existen diversas formas de ejecutar aplicaciones escritas en lenguajes de alto nivel. Las principales son la compilación, es decir, transformar la aplicación al codigo maquina especifico del procesador en el que se vaya a utilizar y la interpetación, en el que se transforman las distintas instrucciones del codigo del programa a medida que se necesitan. El primer sistema produce aplicaciones mucho más compactas y rápidas, pero en contrapartida, una vez compilada la aplicación esta solo puede funcionar en los procesadores para el que ha sido compilada. En el caso de la interpretación la ejecución de las aplicaciones en mucho más lenta ya que debe transformarse el codigo de alto nivel en codigo máquina durante la ejecución de la aplicación, pero como contrapartida permite que la misma aplicación funcione con independencia del procesador sin necesidad de transformarla.

La mayoria de las aplicaciones de hoy en dia utilizan el sistema de la compilación ofreciendose distintas versiones para cada plataforma especifica, no obstante los lenguajes interpretados se utilizan ampliamente en internet y en videojuegos para añadir funcionalidades extra a las aplicaciones.

Existen, además de la compilación y la interpretación, otras sistemas que permiten la ejecución de aplicaciones de forma independiente del procesador en la que se ejecutan y sin necesidad de reprocesar el código para cada procesador. Uno de estos sistemas es el de los emuladores y las maquinas virtuales.

Un emulador es una aplicación capaz de ejecutar una aplicación que está compilada para una maquina distinta de la que corre el emulador. La funcion de los emuladores es la de transformar el codigo maquina de un procesador al codigo maquina del procesador en el que está corriendo.

Evidentemente la velocidad de las instrucciones es muy inferior al que se tendria en caso de que se corriera en el sistema para el que fué compilado el programa. Este sistema suele utilizarse para programar en plataformas para las que es muy dificil tener un entorno de desarrollo en el propio sistema, por ejemplo para programar videojuegos para consolas desde un PC o para crear programas para dispositivos moviles o microcontroladores.

Una variante de los emuladores, y que merece una mencion especial por su amplia extensión es el de la maquina virtual de Java. La maquina virtual realmente es un emulador, pero un emulador algo particular ya que no emula a ningún procesador concreto sino que tiene un juego de instrucciones propio. Las aplicaciones realizadas con Java deben ser compiladas para crear los denominados applets, que son ni mas ni menos aplicaciones en codigo maquina de Java. Estos “applets” son interpretados por la “Maquina virtual de Java” y transformados a codigo maquina del procesador que este ejecutando la aplicación del mismo modo que lo haria un interprete. La ventaja principal de la maquina virtual de java es que las aplicaciones compiladas pueden correr en cualquier procesador que disponga de maquina virtual java. Asi mismo, al ser aplicaciones preprocesadas la transformación que debe realizar la maquina virtual es mucho más simple, y por lo tanto más rapida que si se tratara de una aplicación interpretada. Además el que la aplicación se ejecute en una “maquina virtual” y no directamente en el procesador ofrece una seguridad añadida ya que algunas funciones como el acceso directo a los dispositivos o a la memoria pueden ser limitados, evitando la ejecución de codigo nocivo como virus o similares.

La tecnologia .NET utiliza un sitema similar a la maquina virtual de java pero con ciertas particularidades. Al igual que las aplicaciones Java las aplicaciones .NET son compiladas y producen un codigo propio, que en caso del .NET es denominado “Lenguaje Comun” (CL o Common Language). Este es un lenguaje de bajo nivel que cuando se ejecuta la aplicación es recompilado para transformar el codigo del lenguaje común al codigo maquina del procesador que está ejecutando la aplicación. Esto produce aplicaciones que inicialmente tardan algo más en arrancar, pero que una vez empiezan a funcionar lo hacen tan rapido como si se tratara de alicaciones compiladas exclusivamente para una plataforma exclusiva (de hecho, en el fondo,  se trata de eso). Además, dada la filosofia con la que fué creado el sistema es mucho mas simple el manejo de la memoria, ya que lo hace automaticamente y ofrece ventajas de seguridad y robustez evitando asi, en parte la ejecución de codigo malicioso que pueda afectar a la aplicación.

Y por hoy eso es todo.

En el proximo articulo empezaremos a ver los fundamentos del lenguaje.

Hasta la proxima.