Sunday, October 19, 2008

El LayerD de las eminencias

Me agrada muchísimo enterarme – lamentablemente recién ahora – del trabajo de eminencias mundiales en ciencias de la computación como son:

  • Alan Kay : Creador de Smalltalk, Simula, uno de los padres inventores de la orientación a objetos en los 70, Ganador del premio Turing (para quienes no conocen son como los premios nobel en las ciencias de la computación)… bue si no sabes quién es Alan Kay se merece lo "googlees".
  • Dan Ingalls: Colaborador de Alan Kay en los míticos Xerox PARC implemento el primer compilador de Small Talk, trabajo en los equipos que inventaron las primeras UI de la historia, en los laboratorios de HP, entro otros trabajos.
  • Yoshiki Ohshima, Ian Piumarta, Andreas Raab: Todos ellos conocidos científicos de ciencias de la computación con docenas de trabajos publicados en los congresos "top" como los organizados por el ACM.

Entre otros colaboradores están desarrollando el proyecto "Steps Toward the Reinvention of Programming" el cual intenta resolver muchos de los problemas existentes en la ingeniería de software planteando (humildemente al igual que lo afirmo e intento colaborar proponiendo soluciones con LayerD) las limitaciones del software actual y sus problemas de implementación como el "bloated code", la fragilidad del software, la escasa expresividad de los programas, las limitaciones de acoplamiento del código fuente actual entre otros problemas.

Aún no he tenido tiempo de estudiar este proyecto en profundidad pero por lo que he leído es muy ambicioso y no abarca sólo la etapa de implementación.

Me resulto muy grato como para la etapa de implementación del software planean (y utilizan) mecanismos muy similares a los que uso en LayerD:

La diferencia principal de su método (principalmente está detrás de esta parte Ian Piumarta parece ser) es que utilizan lenguajes dinámicos en tiempo de compilación y ejecución. También tiene en común como tratan y hablan del problema de los lenguajes y tecnologías actuales de desarrollo en cuanto al acoplamiento a los entornos de ejecución, librerías y hardware (el ambiente) y señalan que es necesario eliminar estas limitaciones para poder "reinventar la programación". En definitiva, se trata de un proyecto que tiene mucho en común filosóficamente hablando con LayerD aunque la implementación sea diferente en varios sentidos y común en algunos otros.

No es la primera vez que encuentro que existe algún proyecto "filosóficamente" similar a LayerD, de hecho es algo que se viene buscando hace mucho tiempo lograr. Anteriormente tenía conocimiento de proyectos similares como el empuje de la Programación Orientada al Lenguaje por tipos como Sergey Dmitriev y la programación intencional impulsada por el mítico Charles Simonyi (Xerox, Microsoft, Intentional Programming); aunque estos autores no hablan demasiado del acoplamiento del software a APIs y entornos de ejecución, lo cual para mi es fundamental erradicar, sino que hablan más de utilizar paradigmas más abstractos.

LayerD se desarrollo en su formato actual alrededor de fines del año 2002, es muy grato para mi saber que aún cuando no conocía nada de estos proyectos, meta-programación, programación orientada al lenguaje o programación intencional, haya llegado a desarrollar algo muy similar a las tecnologías que estas eminencias ganadoras de premios Turing y repletas en PhD, Masters y cosas por el estilo. Me da esperanzas porque me hace pensar que en la próxima década definitivamente veremos nacer un nueva era en la ingeniería de software de la mano de algunos de estos proyectos y saber que humildemente forme parte de uno de ellos que impulsa con pasión hacia ese destino inevitable de nuestra querida profesión me hace sentir bien y tener la certeza de que no perdí el tiempo todos estos años que tanto esfuerzo – a pesar de mis limitaciones, ignorancia y falta de experiencia – puse en este proyecto.

Les dejo algunos links, y sigo estudiando :-P

http://www.vpri.org/html/work/NSFproposal.pdf

http://piumarta.com/papers/colas-whitepaper.pdf

http://vpri.org/html/work/ifnct.htm

Sunday, October 5, 2008

Hablemos de Ingeniería



El viernes pasado dí una pequeña charla en el Laboratorio de Investigación de Software de mi facultad (UTN - FRC) y duro poco más de hora y cuarto.

El objetivo era dar una introducción al proyecto LayerD a quienes no lo conocían.


Los temas de la charla fueron:

  • ¿Qué es LayerD? : una introducción en dos minutos explicando que se trata básicamente de lenguajes de programación con algunas características "novedosas" como compiladores multi-stage, extensibles y modulares.
  • Motivaciones del Proyecto : se explico como se tuvieron en cuenta los problemas actuales a la hora de implementar software, lo que se espera para el hardware de las proximas decadas y el software que se viene en los proximos años. Todo ello influyo en el diseño de LayerD.
  • Hablemos de Ingeniería : a lo largo del tiempo aprendi que no es sencillo explicar el framework LayerD y menos justificar sus características simplemente nombrandolas, por lo tanto me tome la mayor parte de la charla para hablar sobre ingeniería de software, compararla con otra ingeniería (civil) y analizar las limitaciones y frustraciones actuales de nuestra querida profeción, también introducir sobre como sobrellevar estas límitaciones. Se introdujo al tema de diseñar lo que llamo arquitecturas "bidimensionales" de software, donde no sólo se tiene en cuenta la "dimensión de tiempo de ejecución" (es decir todo lo que sucede cuando el software se esta ejecutando) sino también empezar a considerar la existencia de otra dimensión la "dimesión física". Aplicar tecnicas conocidas de diseño como la separación en capas también en esta dimensión física del software nos permite elevar considerablemente su nivel de abstracción y abrir la puerta para una mayor reutilización, tiempo de vida y menores costos de mantenimiento del software.
  • Paradigmas al Vuelo : se hablo rápidamente del impulso que se le esta dando a "nuevos" (no tanto) paradigmas que impulsan el desarrollo de software más abstracto como la orientación al lenguaje, programación declarativa, lenguajes de dominio especifico, programación intencional, model driven development, etc. Y como con LayerD es posible implementar software bajo estos paradigmas.
  • El Diseño de LayerD : Se explico brevemente el diseño y como todo encaja con los requerimientos y los problemas existentes en la ingenieria de software. Si todo salio como esperaba, se mostro porque LayerD tiene el diseño que tiene y como cada pieza y funcionalidad es necesaria.
  • Ejemplos : Se mostraron diversos ejemplos.
  • El Futuro / Lo pendiente : Se hablo de toda la inmensa lista de pendientes dentro del proyecto y como esto es apenas un punto de partida. Se invito a quienes quieran participar a ayudar a completar el proyecto o tomar lo aprendido para sus propios proyectos.
Para quienes le interese dejo las diapositivas aquí (no son tan interesantes sin el "speech" supongo je). Por cierto, si sos de la UTN recorda que todos los viernes estamos dando charlas en nuestro laboratorio, además compartimos galletas y café. Seas o no alumno de la UTN podes entrar a nuestra pequeña red social para enterarte de varias cosas que pasan en nuestro laboratorio.

Ya no pongo fechas (demasiado trabajo y terminando de cursar) pero en cualquier momento publico los manuales y actualizo la documentación además del SDK y los fuentes publicos.

Saludos.