Lenguajes de Programación

Tenía un rato sin escribir. Muchas cosas encima.

Estaba acordándome de muchas cosas que vi en la universidad. Una de ella fue la electiva de lenguajes de programación. Justo me he estado acordando, primero por programar todo el tiempo y estar leyendo cosas nuevas, que salen. También he programado en muchos lenguajes, en algunos poco y en otros bastante, y siempre ando aprendiendo cosas nuevas.

De la universidad tengo uno que otro libro. Los cuadernos tendría que buscarlo bastante. A lo que quiero llegar, es que lo único que guarde fueron los apuntes de esas cosas que aprendí.

Esa electiva es la abren cada 2 años debido a la poca demanda. Segundo, es considerada bastante compleja y difícil, lo cual es muy cierto. En ella se ve toda la teoría detrás de los compiladores, optimización y alguna que otra cosa que el profesor desee dar (en mi caso, fue equivalencia de lenguajes o algo por el estilo, no me acuerdo 100% bien). Estás razones, agregándole el poco “uso” a la hora de trabajar hacen que muy pocas personas la vean.

Me agradaría comentar el porque yo elegí verla, que opino de ella y que cosas vi y aprendí.

Primero, nunca he sido un gran amante de tener un horario, trabajar y siempre quise primero, tener mucho conocimiento y luego aplicarlo.  Sumando el hecho de mi indecisión de tomar tesis o pasantía, las fechas en que abren las materias, la termine cursando. Me pareció una excelente oportunidad de expandir mis conocimientos y aprender algo que es sumamente complicado en algún trabajo. Me llamó mucho la atención la dificultad, el hecho que se complementara con la otra electiva que tome (diseño de algoritmos) y de tener una gran teórica a la hora que desee aplicar a un postgrado.

Ahora mi opinión. Me pareció excelente, al principio espere otra cosa, pero ya a la mitad del curso se puso sumamente interesante. Capte mucho mejor la teoría detrás de los lexers/parsers. Viví en carne propia como se hace la generación de código ensamblador, lo cual en realidad no es complicado, sino trabajoso. El manejo de memoria estática, como se hace con las variables anidadas. Debido a que el proyecto era en parejas y la cantidad de tiempo limitada, el hacer una manejador de memoria dinámica era opcional y evidentemente no lo hice.

Una de las cosas que más me gusto fueron las técnicas de optimización de código. Vi como 7 – 8,  pero de las más importantes y que mejoran la velocidad significativamente. Es de mucha ayuda generar primero un código intermedio, al cual se le pueden hacer análisis de flujo, optimización de ciclos, eliminar variables innecesarias, etc. Y luego generar el código de máquina objetivo y aplicar las optimizaciones respectivas que se le puedan hacer a eso. Viendo los grafos de flujo del código, se puede eliminar código que no se usar, ver que variables permanecen vivas a medida que el código se ejecuta y mediante eso hacer muchas mejoras.

Con los ciclos se puede sacar invariantes, calcular mucho más rapido el acceso a estructuras (por ejemplo, arreglos), y así muchas otras cosas.

Yo solo vi como un abre boca a la cantidad de mejoras que se pueden hacer. Lo interesante es que en el análisis de flujo, se usan unas ecuaciones matemáticas bastante interesantes llamadas, ecuaciones de punto fijo (fixed point en inglés). Es posible que ande mal, pero sino me equivoco son dos fórmulas recursivas dependientes entre sí mismas. Ya hay un algoritmo matemático que las resuelve y el análisis del flujo se expresa en ese formato.  Se puede crear una especia de librería que tenga la capacidad de optimizar el código y no dudaría si ya existen.

Pienso que salí como un gran programador después de ver la cadena. En mi opinión saber programar y hacerlo bien es más importante que tener todo el conocimiento en algún lenguaje. La capacidad que uno adquiere de adaptarse a cualquier lenguaje, librería, software, luego de ver la electiva, me parece que aumenta. Opino que no tiene nada que envidiarle a cualquier otra electiva y no hay nada que temerle. El conocer como es el funcionamiento por debajo de un lenguaje, las decisiones que se toman a la hora de su diseño, las capacidades, etc., son muy útiles en la vida real.

Eso era todo quería expresar ésto!

Advertisements