En Slashdot publicaron una noticia sobre un artículo escrito por Robert B.K. Dewar y Edmond Schonberg, dos profesores de la Universidad de Nueva York: “Educación de Ciencias de la Computación: ¿Dónde están los ingenieros de software del mañana?“.
En ella, apuntan a Java como “dañino” en el aprendizaje de la programación, así como critican a las universidades por no enseñar lenguajes sólidos como C, C++, Lisp y Ada. En lo personal estoy totalmente de acuerdo con éste artículo. Si bien tengo que admitir que mis estudios formales (por formales quiero decir “en clase”) en programación, en su mayoría, arrastran los defectos que señala este artículo. Sin embargo, siendo conciente de ello, intento profundizar éstos temas fuera de clase, y compensar esas carencias por mi cuenta.
El artículo se hizo eco en varios sitios, y parece un verdadero referente del estado actual de la educación formal en Ciencias de la computación. Como estudiante, recomiendo a todos aquellos que estén estudiando programación (o similar) leerlo.
En su mayoría, éste post es una traducción libre resumida de dicho artículo, así como opiniones y reflexiones personales agregadas.
Según Dewar y Schoenberg, las tendencias más preocupantes que notan en los últimos años de educación, en resumen, son:
1 – Se están reduciendo los requerimientos de matemáticas en Ciencias de la Computación.
2 – El desarrollo de habilidades de programación en varios lenguajes está dando lugar a acercamientos tipo receta usando grandes bibliotecas y paquetes de prop´sito especial.
3 – El set de habilidades resultantes es insuficiente para la industria del software de hoy.
Creo que esto se coincide con otros posts en los que he hablado sobre “programadores express”. Hoy en día, para preparar a los “programadores” a salir al mercado laboral lo antes posible, se enseña lo básico para poder trabajar y listo. Éste artículo en general ataca a Java, ya que es el lenguaje usado en varias universidades para la introducción al curso, pero se aplicaría a cualquier lenguaje de alto nivel, sobre todo .NET.
En los comentarios de la noticia en Slashdot, un usuario comenta:
“desafortunadamente no llega lo suficientemente lejos al núcleo del problema, el cual es que las universidades de hoy están produciendo en masa lo que los empleadores quieren, en vez de los pensadores del mañana. Los empleadores no quieren más que zánganos reemplazables que vengan con una habilidad fácilmente definible la cual puedan reemplazar cuando aparezca una nueva palabra de moda. Esto NO ES a lo que las universidades deberían apuntar.”
Joel Spolsky (de joelonsoftware.com), aporta la idea de crear un bachillerato en artes para la programación, de ésta forma atraer estudiantes a Ciencias de la computación. Comenta cómo algunas universidades ya hacen algo similar, y plantea mientras tanto cuántos departamentos de ciencia han ganado una reputación gracias a lo que han escrito: X Window de MIT, Athena y la Lisp Machine, entre otros. “¿Dónde están esos hoy? ¿Qué nos han dado las universidades recientemente? ¿Cuál es el mejor colegio para un graduado de secundaria que ama programar pero no está emocionado con cálculo lambda?”
Respecto a Java, el artículo dice: “Debido a la popularidad en aplicaciones web y la facilidad con la que novatos pueden producir programas gráficos, Java se ha convertido en el lenguaje más usado en los cursos introductorios a la programación.”
Consideran esto “un intento desviado de hacer la programación más divertida, tal vez en reacción a la reducción de anotados a Ciencias de la computación desde la caída de las .com.”
Las observaciones fueron que “a los estudiantes les resultaba difícil escribir programas sin interfase gráfica, no sentían la relación entre el programa fuente lo que el hardware haría, y (más dañino) no entendían las semánticas de punteros en absoluto, lo que hace muy desafiante el uso de C en programación de sistemas”.
Proponen éste principio: “La irresistible belleza de programar consiste en la reducción de procesos complejos formales a un pequeño set de operaciones primitivas. Java, en vez de exponer ésta belleza, anima a los programadores a enfocar la solución de problemas como un plomero en una ferretería: buscar en una multitud de cajones (paquetes) encontraremos algún dispositivo (clase) que hace más o menos lo que queremos. Cómo lo hace no es interesante! El resultado es un estudiante que sabe cómo armar un programa simple, pero no sabe cómo programar.”
Continúan su artículo con “Un verdadero programador puede escribir cualquier lenguaje“, en mi opinión, una verdad absoluta de la programación. “Por ejemplo, un verdadero programador debería poder programar herencia y envío dinámico en C, esconder información en Lisp, bibliotecas de manipulación de árboles en Ada, y recolector de basura en cualquier cosa menos Java.” Continuan con:
Porqué C Importa
“C es el lenguaje de bajo nivel que todos deben conocer”. En muchos lugares he leído “el lenguaje fundamental”, y otras frases aludiendo a C. “Puede ser visto como un lenguaje assembly portable, y como tal, expone la máquina subyacente forzando al estudiante a entender claramente la relación entre el software y el hardware. El análisis de performance es más directo, porque el costo de cada declaración está claro. Finalmente, compiladores (GCC por ejemplo) facilitan examinar el código assembly generado, lo cual es una excelente herramienta para entender el lenguaje y arquitectura de máquina.
Porqué C++ importa
C++ trae a C los conceptos fundamentales de la ingeniería del software moderno: encapsulación con clases y namespaces, esconder información a través de operaciones y datos protegidos y privados, programar por extensión a través de métodos virtuales y clases derivadas, etc. C++ también impulsa la administración de almacenamiento lo más lejos posible sin recolección de basura completo, con constructores y destructores.
Porqué Lisp Importa
Todo programador debe estar cómodo con programación funcional y con la importante noción de transparencia referencial. Un beneficio adicional es que el programa está escrito lo que suma a sintaxis abstracta, a saber la interpretación interna que usan la mayoría de los compiladores entre parsing y generación de código. Finalmente, Lisp es manejable a una definición propia muy compacta. Ver es intérprete de Lisp completo escrito en Lisp es una revelación intelectual que todo científico de la computación debería experimentar.
Porqué Java importa
A pesar de los comentarios negativos sobre Java, creen que tiene un rol importante en la instrucción de Ciencias de la Computación. Mencionan dos aspectos del lenguaje que deben ser parte del set de habilidades del programador:
1 – Entender programación concurrente (para la cual los threads o hilos proveen un modelo básico a bajo nivel).
2 – Reflection, a saber el entendimiento de que un programa puede ser instrumentado para examinar su propio estado y para determinar su propio comportamiento en un ambiente que cambia dinámicamente.
También describen que Ada es un lenguaje importante por otras tantas características, aunque ésto puede ser tomado con pinzas, viniendo del presidente y vicepresidente de AdaCore…
Para resumir, admiten que el lenguaje de programación no lo es todo. Concluyen algo como “un buen currículum incluirá una variedad de lenguajes, entendimiento de procesos de programación, en vez de un resumen de lenguajes populares percibidos”. Se sienten un poco consternados por la popularidad de lenguajes de scripting en cursos introductorios (Javascript, PHP, Atlas) quienes cargan con los defectos que le señalan a Java: “su ausencia de tipado fuerte lleva a un estilo de programación por prueba-y-error y les impide a los estudiantes adquirir la disciplina de separar el diseño de las interfaces de la especificación”.
Finalizan con que enseñar los lenguajes correctos no es suficiente. Los estudiantes deben ser expuestos a las herramientas para construír programas confiables a gran escala. Como científico de computación, deberías tener algún conocimiento de cómo se alcanza el alto nivel de confiabilidad. “Nuestros estudiantes deben estar listos para este nuevo mundo”.
Hay que entender entonces, que el lenguaje de programación con el que se empieza, si bien probablemente influya el resto de la carrera, no debe ser lo más importante. Más que un lenguaje, hay que aprender a programar. El problema radica también en enseñar UNICAMENTE un lenguaje, que de todas formas, depende del estudiante. Si uno se queda solo con lo que aprende en clase… Si aparte de tener cursos/profesores malos, uno no intenta ir más allá de lo que le están inculcando, no va a haber mucho lugar para evolucionar como programador.
Si te gustó éste post, podés apoyar a PicandoCódigo a través de PayPal!
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB6.3; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
Hola lo que quisiera comentar es que en paises latinoamericanos lamentablemente a los estudiantes de programacion sobretodo en las zonas rurales hay dificultad para que se trasladen al sitio de estudio pero también nos gusta la programación no debemos desanimarnos, pero hay problemas económicos que nos impiden seguir adelante,por otro lado la internet es muy lenta por estos lares y lo que es peor me esta yendo muy mal en la clase de programacion por que a veces llueve y tengo que sacar de donde no hay para que un buen cristiano me lleve, solo quería que supieran que se hace lo que se puede pero quisiera más sobre todo si alguien de bueena fé me ayuda con un codigo para el desarrollo de una aplicacion que gestiona información relativa a la gestión de vuelos en c++.
les agradeceria no he podido ir a todas las clases y con un ejemplo bastaría.
Trackbacks y pingbacks:
[...] recomiendo a todos aquellos que estén estudiando programación (o similar) leerlo. En su mayoría, este post es una traducción libre resumida de dicho artículo, así como opiniones y reflexiones personales [...]
[...] picandocodigo.net En Slashdot publicaron una noticia sobre un artículo escrito por Robert B.K. Dewar y Edmond [...]
Ingenieros informáticos de mañana…
Interesante lo que leo vía barrapunto. Dos profesores de la universidad de New York hablan sobre cómo se enseña informática hoy en día y tienen bastante razón. Lectura recomendada.
……
[...] ¿Donde están los ingenieros del Software del manaña? [...]
¿Dónde están los ingenieros de software del mañana?…
En Slashdot publicaron una noticia sobre un artículo escrito por Robert B.K. Dewar y Edmond Schonberg, dos profesores de Ingeniería Informática de la Universidad de Nueva York: "Educación de Ciencias de la Computación: ¿Dónde están los ing…
[...] recomiendo a todos aquellos que estén estudiando programación (o similar) leerlo. En su mayoría, este post es una traducción libre resumida de dicho artículo, así como opiniones y reflexiones personales [...]
[...] [http://picandocodigo.net/index.php/2008/01/09/estudiando-programacion-%C2%BFdonde-estan-los-ingenier...] [...]
[...] Arquivado em: Programação — snnangola @ 7:56 pm Tags: Angola, Programação Este artigo (tradução em espanhol) vem lançar algumas questoes interessantes sobre o rumo nao menos claro que tem [...]
[...] Dewar, autor junto Edmond Schoenberg del artículo “¿Dónde están los Ingenieros de Software del mañana?” continuó la discusión al respecto en otra entrevista para Datamation. A continuación una [...]
[...] Link [...]
Additional comments powered by BackType
Enlaces
- Re: List Category Posts WordPress Plugin support
- Re: List Category Posts WordPress Plugin support
- Re: List Category Posts WordPress Plugin support
- Re: List Category Posts WordPress Plugin support
- Add Tags Support (Here's how)
- Herramienta
- Re: List Category Posts WordPress Plugin support
- Re: List Category Posts WordPress Plugin support
- Re: List Category Posts WordPress Plugin new features request
- Re: List Category Posts WordPress Plugin support
\n\nRSS del foro:Últimos comentarios
Categorías
Blogroll