# Una Breve Introducción a los Lenguajes de Programación

Comencemos con lo mas elemental, cuando dos o mas personas se comunican, para transmitirse información, expresar ideas, noticias, conceptos y hasta contarse algún chisme, utilizan un elemento para hacerlo y a tal elemento lo conocemos como Lenguaje. Sin ahondar en formalidades, un lenguaje es una herramienta para comunicarse por medio de signos, que pueden ser, escritos, sonoros, gestuales, etc. Usualmente, al lenguaje que usamos los humanos (independientemente del idioma) se le llama Lenguaje Natural. De esta manera, por ejemplo, un español, un mexicano y un uruguayo se comunicarán entre sí usando su lenguaje natural (que en particular es expresado en Español con sus variantes regionales), de forma análoga dialogarían un australiano, un irlandés y un estadounidense (seguramente comunicándose en Inglés con sus variantes regionales). La importancia en si, de ésta herramienta, es el poder de comunicar, solicitar e incluso dar instrucciones para realizar algo concreto. En el mundo de la informática, debemos ser muy precisos en como damos esas indicaciones y por ello se procura siempre que todo sea claro, sin confusiones, contradicciones ni ambigüedades. El Lenguaje Natural humano, es complejo para ser interpretado por máquinas, para ello, a lo largo de la historia, se han creado lenguajes simples y concretos, para poder interactuar con máquinas. La Programación, es una actividad en la cual tenemos que dar instrucciones precisas a una máquina, para que haga exactamente lo que queremos y para ello, se han creado y perfeccionado lenguajes, conocidos hoy como Lenguajes de Programación.
Los actuales lenguajes de programación tienen características que pueden asemejarse en buen grado a los lenguajes naturales como el Español, Inglés, o cualquier otro; ya que al igual que en la comunicación oral o escrita, los lenguajes de programación tienen un vocabulario definido, además de reglas ortográficas, de estructura, de puntuación, es decir la sintaxis que deben seguir y por supesto una semántica, esto es el significado que adquieren las conformaciones basadas en las reglas antes mencionadas.
Como en los lenguajes humanos corrientes (Lenguajes Naturales), estas reglas deben tomarse en cuenta para que las ideas que tratamos de expresar tengan sentido. También sucede que un lenguaje de programación cambia con el tiempo, igual que un lenguaje natural . Si tú eres un hispano-hablante sabrás que en cada país hispanoamericano se usan palabras que en otros países no se utilizan o las mismas palabras tienen un significado distinto entre países (esto es llamado ambigüedad): el idioma Español ha venido evolucionando con el tiempo y se ha adaptado a la geografía.
En este mismo sentido, el lenguaje de programación C#.NET es una actualización técnica de otros lenguajes de programación más antiguos como lo son el C, C++, Java, Visual Basic, Delphi, etc. El creador de este lenguaje Anders Heljsberg, es un calificado profesional de la informática que además ha desarrollado lenguajes y herramientas como Turbo Pascal, Delphi (de Borland Co.) y Visual J++ (Microsoft). Por lo que C# pretende ser el siguiente eslabón en la evolución de los lenguajes de programación mas avanzados, buscando combinar en proporciones adecuadas: Potencia, Sencillez y Actualidad/Tendencia.
La evolución de los ordenadores (computadores) y de los lenguajes de programación ha sido grandísima. No hace muchos años existían personas que tenían que hacer agujeros en tarjetas de cartulina para poder dar instrucciones al computador: eran las famosas tarjetas perforadas. Pocos años despúes de esos días existían personas (y hasta ahora existen aquellos) que pueden "hablar con el ordenador", se trata de informáticos que en su época solo disponían de elementos de muy bajo nivel para controlar el computador, eso hasta el día de hoy es la base de las técnicas de cómputo, independientemente de cuanto hayan aumentado las capacidades de memorias, velocidades de microprocesadores, miniaturizaciones, etc.
La forma en que una máquina de cómputo recibe instrucciones es una manera peculiar. No es la idea aquí ahondar sobre este tema, pero es importante brindar una idea al respecto.
Supóngase que se cuenta con un sistema de riego, en principio asúmase algo simple, un jardín con un dispersor de agua, que se activa o desactiva utilizando una simple llave de encendido y apagado, como las de las luces.
De esta forma podemos decir que tenemos un sistema que interpreta o entiende 2 instrucciones:
Llave para arriba ---> ENCENDIDO Llave hacia abajo ---> APAGADO
De esta manera el sistema se enciende o se apaga conforme alguien le da una de estas 2 instrucciones que el mismo interpreta o "entiende".
Podemos esquematizar el referido sistema de esta forma:
[ INSTRUCCIONES ]====>[ PROCESAMIENTO ]====>[ Acciones / Resultados ]
Para tratar de simplificar la forma de transmitir o escribir una de esas instrucciones, podemos decir que si al bloque de procesamiento le enviamos la instrucción "1", implica un ENCENDIDO, es decir que le estamos pidiendo poner en marcha el sistema. Por el contrario, si le enviamos un "0", es un APAGADO, le estamos pidiendo detener el sistema. Hemos hecho esto, porque como antes mencionamos, las máquinas deben trabajar con interpretaciones lo mas concreta y simplificadas posibles. Es mas fácil para una máquina elemental, interpretar un "1", un "0" o incluso una serie de éstos números [*].
Así que ahora tenemos algo como un lenguaje elemental para dar indicaciones, donde tenemos dos instrucciones:
Instrucción: ENCENDIDO ............. Equivale a: 1
Instrucción: APAGADO ................ Equivale a: 0
Imaginemos ahora que el sistema de riego, además de tener encendido y apagado, tiene otra modalidad llamada DIARIO, que simplemente provoca que el mismo se encienda una vez al día, a una hora indicada, por un lapso determinado (ej: 90 minutos).
Así que necesitamos otra representación o equivalencia simple para indicar esta nueva instrucción. Reformulemos el caso anterior, de la siguiente manera:
Instrucción: ENCENDIDO .............. Equivale a: 01
Instrucción: APAGADO ................ Equivale a: 00
Instrucción: DIARIO ................. Equivale a: 10
**** Añadir más para ilustrar sobre el lenguaje binario (bajo nivel) y los lenguajes de alto nivel**** (en construcción)
Ya que hemos recalcado las similitudes entre los lenguajes de programación y los lenguajes naturales también hay que tener presente que un lenguaje de programación es mucho más estricto que uno natural en el sentido de que no pueden existir ambigüedades. Es muy fácil en el idioma Español tener frases que impliquen algo que ya conocemos o que signifiquen cosas diferentes. Por el contrario los lenguajes de programación son claros, específicos y directos, no se admiten ambigüedades ni suposiciones.
Para poder dominar un lenguaje de programación (al igual que con los lenguajes naturales) se requiere mucho estudio pero por sobre todo muchísima práctica. Una persona podría leer este manual unas 500 veces pero si no pone en práctica los conceptos ni investiga por su cuenta, jamás llegará a dominar este maravilloso lenguaje de programación. Así que: ¡a practicar se ha dicho!
[*] Al sistema numérico compuesto únicamente por los elementos "0" y "1" se le llama Sistema Numérico Binario, o popularmente Sistema Binario.