Capacitación VS Formación

November 2, 2005

Desde hace ya un par de décadas, por lo menos en cuanto a computación se refiere, existe en las universidades el problema de una enseñanza con demasiada tendencia a ser una capacitación en el empleo de de las herramientas que están de moda en vez de enfocarse a una formación sólida en los conceptos esenciales.

Esto conduce a que los alumnos adquieran conocimientos que son, al mismo tiempo, superficiales en cuanto a los conceptos básicos y demasiado específicos en cuanto a particularidades irrelevantes de las herramientas empleadas. Este tipo de conocimientos se vuelven muy rapidamente obsoletos y dejan a los egresados de estas universidades sin una buena base teórica y conceptual que les permita asimilar facilmente el uso de nuevas tecnologías y herramientas.

Por parte de la industria, esta falta de formación fomenta el empleo de herramientas fáciles de aprender; aunque estas no sean las más apropiadas para enfrentar los problemas con los que se topan.

Además, el inevitable cambio en las modas tecnológicas forza las instituciones a un ciclo constante y frecuente de actualización, el cual impide que su personal académico pueda dedicar todo su tiempo a perfeccionar sus conocimientos, material de cursos y métodos de enseñanza.

Aprender a programar es una formación que requiere por parte del alumno la creación de unas estructuras mentales sofisticadas, y para eso se necesita tiempo y mucha práctica. No existe ningún atajo. Lo que sí se puede hacer es facilitar su aprendizaje por medio de explicaciones claras e, inicialmente, omitir los detalles no esenciales tanto en la teoría como en las herramientas didácticas empleadas.

La omisión de detalles no esenciales es algo mucho más facilmente dicho que hecho. Las computadoras modernas y sus sistemas operativos son muy complejos (desde el punto de vista conceptual, aunque parezcan sencillos de operar). Para escribir un programa hay que primero familiarizarse con los comandos del sistema operativo, el manejo de un editor y probablemente también con los detalles de como se invoca el compilador. Los IDEs (Integrated Development Environment), aunque a primera vista parecen ofrecer una solución, realmente no hacen más que empeorar el problema con sus cientos de menues, ventanas y botones; además de sus “wizards” y otras herramientas que le ¡ocultan al alumno los mismos conceptos que debería estar aprendiendo!

Yo opino que se necesita una herramienta didáctica con las siguientes características:

  • Simple de usar
  • Conceptualmente sencilla
  • Que no intente hacer el trabajo en lugar del alumno
  • Estable en el tiempo (es decir que las mejoras en nuevas versiones de la herramienta no deben volver obsoletos ni el material de cursos ni la experiencia adquirida por los enseñantes)

Por estas razones fue que decidimos crear el IENJINIA DevKit. Por ahora sólo están disponibles la herramienta, un poco de documentación y un primer borrador para las primeras cuatro lecciones de un curso basado en estos conceptos. Esperamos próximamente tener más material didáctico disponible.

Me interesa mucho toda la retroalimentación que nos puedan proporcionar sobre este tema.

Lenguajes de programación y su sintaxis

August 11, 2005

Existen muchas maneras de clasificar los lenguajes de programación. Se puede ver si son orientados a objetos o no, si manejan validación estática o dinámica de tipos, etc.
Yo opino que una de las maneras de clasificar los lenguajes de programación que no ha recibido la suficiente atención es en base a su sintaxis.

La sintaxis de los lenguajes de programación se puede dividir en 2 categorias:

  • Los que tienen una sintaxis basada en Algol
  • Todos los otros lenguajes

Cuando hablo de una sintaxis basada en Algol no me refiero a que visualmente se parezcan al lenguaje Algol, lo que quiero decir es que la manera en que los lee un interprete o compilador esta basada en las tecnologias de compilación desarrolladas para los primeros compiladores de Algol: análisis léxico para separar el fuente en tokens seguido de un análisis sintáctico basado en la gramática del lenguaje.

Entre los lenguajes con una sintaxis basada en Algol se encuentran: Pascal, C, C++, C#, Java, JavaScript, Eiffel, Basic, Python, Ruby y hasta Perl. Entre los otros lenguajes están: Fortran, COBOL, Forth, Smalltalk, APL, Common Lisp y Scheme.
Dentro de la categoria de los otros lenguajes todavia se puede hacer una subdivisión basada en los lenguajes derivados de Lisp y los demás lenguajes. Los lenguajes derivados de Lisp, y que podriamos llamar dialectos de Lisp, que se emplean mucho actualmente son: Scheme, Common Lisp, AutoLisp y EmacsLisp.

Debido a su sintaxis “extraña” (es decir: no esta basada en Algol) muchos programadores se sienten intimidados por los dialectos de Lisp y esto ha evitado que estos lenguajes se vuelvan más populares, lo cual es una lástima ya que en Lisp hay muchos conceptos que pueden ser muy útiles en el desarrollo de software. De hecho, hay por lo menos un par de lenguajes (Python y Ruby) que han tomado varios conceptos de Lisp para plasmarlos en una sintaxis más “tradicional” y que han tenido en estos ultimos años mucho éxito entre los programadores, aunque el uso de una sintaxis basada en Algol unicamente permite aprovechar una pequeña fracción de estos conceptos.

El ciencias computacionales existe el premio Turing que es el equivalente al premio Nobel para otras ciencias. En 1978 el ganador del premio Turin fué Robert Floyd por: “Helping to found the following subfields of computer science: the theory of parsing, the semantics of programming languages, automatic program verification, automatic program synthesis and analysis of algorithms. Floyd implemented one of the first Algol 60 compilers, finishing his work on this project in 1962. In the process, he did some early work on compiler optimization. Subsequently, in the years before 1965, Floyd systematized the parsing of programming languages. For that he originated the precedence method, the bounded context method, and the production language method of parsing”.

En otras palabras: Robert Floyd recibió el premio Turing por inventar la tecnología empleada en la implementación de todos los lenguajes con una sintaxis badasa en Algol. Lo interesante es que el ganador del premio Turing, en la ceremonia donde se le entrega el premio, tiene que dar alguna conferencia sobre el tema que quiera. Lo siguiente es parte de lo que dijo Robert Floyd en su conferencia: “Contact with the programming written under alien conventions may help. Visiting MIT on sabbatical this year, I have seen numerous examples of the programming power which Lisp programmers obtain from having a single data structure, which is also used as a uniform syntactic structure for all the functions and operations which appear in programs, with the capability to manipulate programs as data. Although my own previous enthusiasm has been for syntactically rich languages like the Algol family, I see now clearly and concretely the force of Minsky’s 1970 Turing Lecture, in which he argued that Lisp’s uniformity of structure and power of self-reference gave the programmer capabilities whose content was well worth the sacrifice of visual form.”