¿Qué es programación?

Codeando Pues - Season 0 Episode 0


Según la definición de Wikipedia, programación es el proceso de diseñar, codificar, depurar y mantener el código fuente de programas de computadora. Hoy en día las computadoras se utilizan para infinidad de cosas, desde el lanzamiento controlado de un misil nuclear hasta los dispensadores automáticos de comida para tu mascota. Estamos rodeados de tanta tecnología que se nos hace raro tener que llamar por teléfono para pedir algo cuando deberíamos estar utilizando nuestra televisión para ordenar una pizza.

En 2013 se formó un movimiento llamado Code cuya premisa es que se lleve la programación a las aulas de todo el mundo, esto por que la programación ayuda al pensamiento crítico y la habilidad para resolver problemas. Éste movimiento ha tenido apoyo y desprecio por varias personas importantes en la industria tecnológica. En lo personal soy de las personas que trata de tomar las cosas de una manera positiva, y creo que al pertenecer a una ciencia, la programación es algo que debería ser enseñado —En lugar de esas clases de word que dan en algunas escuelas primarias… no es broma :S—.

Las matemáticas y física gobiernan nuestro mundo, y la tecnología está tomando una gran importancia en ámbitos que nunca nos hubiéramos imaginado —claro, también ha influenciado en nuevas enfermedades como el síndrome de “me dejó en visto”—.

Ok, vamos a programar.

Wow, wow, wow. Tranquilo viejo.

Antes de escribirle una carta a nuestra computadora, necesitamos aprender conceptos básicos.

Compilador

Un compilador es un programa que traduce un programa que ha sido escrito en un lenguaje de programación a un lenguaje diferente, usualmente lenguaje de máquina. Un ejemplo de compilador es JavaC, que compila el código escrito en Javaun lenguaje muy famoso— en ByteCode¿recuerdan? No todos los compiladores traducen directamente a lenguaje máquina— que luego será traducido a lenguaje máquina por medio del compilador Just-In-TimeO JIT pa’ los cuates—. Me gustaría recalcar que éste método de compilación realizada por Java, el de generar bytecode, le da la habilidad de portabilidad para pasar sin problema alguno nuestro código a diferentes plataformas, es decir, que podremos ejecutar sin problemas gracias a la Máquina Virtual de Java nuestro programa en Linux, MacOS o Windows.

Un compilador tiene las siguientes fases:

  • Análisis Léxico: Consiste en la descomposición del programa fuente en componentes léxicos.

Aquí podemos observar cómo se generan tokens a partir de una línea de código.

  • Análisis Sintáctico: Agrupación de los componentes léxicos en frases gramaticales.

La representación de la imagen se llama árbol de sintaxis abstracta. En ciencias computacionales veremos muchos árboles. El ejemplo es una operación de 3 + 4*5, donde se agrupan por números, operadores —como la suma y multiplicación— y expresiones.

  • Análisis Semántico: Comprobación de la validez semántica de las sentencias aceptadas en la fase de análisis sintáctico.

Intérprete

Un intérprete es capaz de analizar y ejecutar otros programas. Se diferencían de los compiladores en que sólo realizan la traducción a medida que sea necesaria, típicamente, instrucción por instrucción, y normalmente no guardan el resultado de dicha traducción. Un ejemplo de lenguaje de programación interpretado, es Javascriptque nada tiene que ver con JAVA— quien se ha ganado una popularidad impresionante ya que puede ser utilizada para crear páginas web e incluso robots.

Algoritmo

Un algoritmo es un conjunto prescrito de instrucciones o reglas bien definidas, ordenadas y finitas que permite llevar a cabo una actividad. Los diagramas de flujo son una representación gráfica utilizada habitualmente para escribir un algoritmo. Para representar dichos diagramas utilizamos el Lenguaje Unificado de Modelado (UML) —que raramente utilizamos profesionalmente, sin embargo son muy útiles y pueden ayudar a entender lógica sin tener que observar el código fuente.—.

Aquí tenemos un algoritmo para “arreglar” una lámpara —por lo menos de una manera sencilla, sin meternos con componentes eléctricos—. El inicio marca nuestra acción, y nos encontramos con preguntas, dependiendo de la respuesta es el camino que seguiremos hasta obtener un resultado.

Paradigmas de Programación

Los paradigmas son propuestas tecnológicas para resolver uno o varios problemas.

Programación Imperativa

Es el más usado, el cual describe la programación por medio de estados e instrucciones de cómo realizar una tarea. Esto quiere decir, que se guardan los avances por medio de espacios de memoria. Por ejemplo, si tenemos un programa bancario, deberemos guardar el estado del usuario con su dinero actual, e iremos modificando dicha cantidad conforme se hagan transacciones. A esto se le conoce como mutación, ya que estamos cambiando el estado conforme nuestro programa avanza. El estilo de Programación Orientada a Objectos es uno de los mas famosos en ésta categoría.

Programación Declarativa

Está basado en describir el problema declarando propiedades y reglas que deben cumplirse, en lugar de instrucciones. En pocas palabras, declaramos qué es lo que queremos y no como lo queremos hecho. Por ejemplo, cuando vamos a comprar un refresco de una máquina expendedora, sólo requerimos teclear el número indicado y la máquina hará el resto para entregarnos el artículo. La programación declárativa se basa mucho en funciones —similares a las funciones matemáticas— para no cambiar el estado de nuestro programa —haciendo que nuestros valores sean inmutables, es decir, no pueden ser modificados—. El estilo de programación funcional es uno de los más famosos en ésta categoría.

Eso es todo por hoy amigos.

Las ciencias computaciones son un mundo inmenso, pero ¿qué mundo no lo es? Si has llegado hasta aquí, tengo que decirte que aún hay mucho por aprender y que ésta ciencia tiene mucha vida adelante ya que cada día encuentras algo nuevo. Creo que esa es una de las cosas que lo hace sumamente interesante, y si te ha picado la curiosidad, ya sea que desees o no convertirte en Artesano, Desarrollador, Ingeniero, Programador o cualquier otro nombre que quieras inventar —como Unicorn Ninja Rockstar developer— , te invito a que hagas preguntas en éste espacio, youtube o mandes un tweet a @AlgusDark.

Nos leemos