En Slashdot publicaron una noticia sobre un artículo escrito por Robert B.K. Dewar y Edmond Schonberg, 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, señala 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. 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. Pero  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 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.

Foto por Dominik Rusiecki - http://www.dominik-leszno.prv.pl/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 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 como .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. (...) 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:

Por qué 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.

Por qué 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.

Por qué 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.

Por qué 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.

42 comentarios en este post

Feed de comentarios
  1. Avatar

    Tormes 9 enero. 2008 - 16:49

    Yo estudio en la facultad de informática de la universidad politécnica de Madrid y se enseña a programar en lenguaje Ada, orientando la enseñanza a aprender fundamentos de la programación más que para aprender a programar específicamente para Ada. Curiosamente hasta hace 1 año no se enseñaba Java en ninguna asignatura.

  2. Avatar

    esauro 9 enero. 2008 - 16:52

    Soy estudiante de informática y creo que en muchos casos lo que se busca (al menos en las enseñanzas universitarias) es utilizar lenguajes capaces de abarcarlo todo con los menos conocmientos posibles.

    Esto es un error. Se debería enseñar un lenguaje de cada categoría disponible (estructurado, orientado a objetos, funcional, tipado débil, etc) y en muchos casos adaptar qué se enseña a qué alumno.

    Esta visión es extensible al mundo empresarial. Muchas empresas utilizan Java o .Net para todos sus proyectos. En mi opinión serían más productivos si adaptasen las herramientas al tipo de proyecto del que se trata.

  3. Avatar

    fernando 9 enero. 2008 - 17:07

    Tormes:
    Supongo que podés decir que en la Universidad Politécnica de Madrid van por buen camino! Por lo que tengo entendido, en la Facultad de Ingeniería de mi país (Uruguay), no se ven lenguajes de alto nivel(Java – C++) hasta muy adelante en la carrera, se empieza con C y Pascal. Y así debería seguir.

    esauro:
    Opinamos igual. Muchas veces también las empresas se casa con una tecnología, sea Java o .Net, cerrándose a otras posibilidades. Y ésto es totalmente contraproducente, tanto para el mundo empresarial, como para los estudiantes que anhelan conseguir un trabajo más adelante en ese mundo.

    A ambos gracias por comentar y saludos!

  4. Avatar

    Alginros 9 enero. 2008 - 17:11

    Francamente considero positivo aprender C/C++ por el mero hecho de ser lenguajes muy populares y que permiten bajo nivel. Pero como lenguajes idóneos para aprender para nada. Son los peores lenguajes con los que un novato se puede introducir en la programación. ¿Por qué? Por el mero hecho de que si no te obligan a programar con una estructura sólida que no tolere las guarrerías, puedes encontrate en la situación de ser un pésimo programador. Lo crean o no, lenguajes como Pascal (ya bastante obsoletos), Modula2 que tienen un tipado muy fuerte son más idóneos para introducirse en la programción. Cuando uno ya ha aprendido, entonces es el momento de aprender estos lenguajes. Al menos yo lo considero así.

    Por otro lado, entiendo la preocupación de estos señores a que la gente aprenda mal Java. Pero Java es un lenguaje muy bueno para programar orientado a objetos (mucho mejor que C++). Otra cosa es la eficiencia.

    Saludos

  5. Avatar

    dobleM 9 enero. 2008 - 19:05

    Yo estudio en la EUI Politecnica de Madrid y los primeros cursos aprendemos con fc-concurrent, pascal, c, c++, caml, lisp; mas tarde pasamos a Java que suele ser opcional.

    La verdad me parece una chorrada criticar a Java y cia.; existen dos problemas:

    1.- Universidades (la mayoria, todos las conocemos) de mierda que expiden titulos como churros ; ahora incluso, dobles titulaciones; Licenciado en Matematicas e Ingeniero en 4 años ……… para hacer eso, algo tienes que dejar por el camino (que se lo digan a mi profesor de estdistica)
    2.- El intruso de turno que hace el cursillo porque sale de la carrera sin saber nada.

    El segundo punto tiene solucion, ATRIBUCIONES YA; el primero no: universidades vacias comportandose como empresas privadas, dentro de poco, los doctorados regalados, y una sociedad donde lo ultimo que prima es el conocimiento.

    Señores, enfoquemos el problema.
    Un saludo !

  6. Avatar

    José 9 enero. 2008 - 20:47

    He visto cosas que nunca creeríais que existen. Un programa de 2 Mb para tratar un fichero con dos campos (lista), ordenarlo (sort), actualizarlo (quitar registros y añadir registros) y 30.000 registros. No se busca la eficiencia se mira que quede bonito y que la máquina (hardware) resuelva el problema de velocidad. Recuerdo que en 64Kb o menos se podía meter un videojuego. El algoritmo DES se preparó para que se pudiese ejecutar con 64Kb de código ¿Alguien es capaz de hacerlo ahora? ¡Chapuzas!

  7. Avatar

    Dheiirba 9 enero. 2008 - 20:50

    En la Carlos III de Madrid te enseñan java, y un poco de esamblador, desde el principio.
    Pero lo más gracioso es que en segundo varias asignaturas presuponen que conoces C, yo ya lo conocía así que no tuve mucho problema pero te partías al ver las caras de la gente cuando los hablabas de punteros.

  8. Avatar

    SrPyYy 9 enero. 2008 - 23:06

    Yo estudio en la ETSII(Escuela Tecnica Superior de Ingenieria Informatica) de Sevilla(España) y en primero daban antes C y JAVA, este año solo damos JAVA, mucho mas en profundidad, pero al fin y al cabo JAVA, lo cual es malo si nos damos cuenta de que C es un lenguaje que da mucho mas “juego” JAVA se queda un poco corto y es TELA de lento… ademas para Sistemas operativos… como nos de por inventarnos un sistema operativo en java… xDDD en fin, creo que lo mejor es dar un primer cuatrimestre de JAVA para introducir la programacion, y un segundo cuatrimestre de C, para aprender algo de verdad.

    Saludos!

  9. Avatar

    tigreci 9 enero. 2008 - 23:36

    Pues yo no hice universidad, hice un curso de 9 meses de duracion impartido por IBM mas de 2600 horas y nos enseñaron las bases, el funcionamiento de un procesador, a programar a traves de pseudocodigo (ningun lenguaje especifico con tus propias palabras), he podido adaptarme a lenguajes y plataformas que nunca habia visto, por ejemplo weblogic, jsp y cualquier tipo de servidor de aplicaciones.

    c++ no lo vi nunca en el curso pero no me supuso ningún problema manejar la api de Lotus Notes y crear mis propias librerias dll y mezclar código c,c++ y asm(este lo aprendi por mi cuenta)

    Llevo 8 años incansables de aprendizaje y nunca me cansare de aprender cosas nuevas, mi curriculum cambia constantemente

    El gran problema es el mercado-unido a las universidades, la crisis que hubo hace tiempo fue causada precisamente por la baja calidad del software proporcionado y la inmensa cantidad de dinero gastados de las empresas clientes, en software, no digo la empresa porque no quiero darles mala fama.

    Las prisas nunca fueron buenas, una aplicación que se tardó 2 años en hacerse se va a ir dentro de poco al traste por un fallo de base muy gordo, provocado por el afan de ofertar mejor, a mas bajo costo,

    Me he encontrado con auténticos marrones, las empresas buscan personal prescindible.

    Os cuento un poco mi caso yo entre a desarrollar para el servidor de aplicaciones de Bea Weblogic, bien pues ahora estoy en soporte de dichas aplicaciones, vamos que la programación ni olerla, lo unico que me mantiene (y solo por un poco de tiempo), es que manejo Unix que me gusta y programo scripts en bash, perl, awk, python, java, ant(bueno esto no es programar),maven, pero el caso no es ese, el caso es que aprendes a manejar herramientas distintas a las tipicas

    por ejemplo kdevelop (shellscript, c, c++)
    eclipse (java, c, c++, jsp)
    monodevelop (bueno esto es un .net pero de Linux)

    pero vamos hay mas lenguajes que los que he mencionado

    por ejemplo el lenguaje ensamblador en Linux/Unix es ligeramente distinto.

    Y paro ya que me estoy enrollando.

    La mejor practica que hice en ese curso fue el echo de crear un programa en c de ejemplo que escribiese en una base de datos DBase y nosotros teniamos que hacer todas las funciones del programa, como compactar la base de datos y actualizar la estructura del archivo a la hora de añadir o hacer borrados lógicos de registros, esa practica me gustó muchisimo.

    al final lo que se entregaba eran los fuentes para que ellos los compilasen (vamos como si fuese una entrega en el trabajo)

    tenia que crearse una libreria estatica .lib que debia enlazar correctamente con el programa ejemplo.

  10. Avatar

    Juan Pablo 10 enero. 2008 - 07:36

    En respuesta a dobleM. Es cierto que hay titulaciones con menos valor que otras. Pero yo he conocido gente que estudiaba matemáticas e ingeniería informática en la UAM (4 cursos). Se trata de 10 alumnos por año con 8.5-9 de nota media en la selectividad que estudian y hacen prácticas durante 12-14 horas diarias incluyendo fines de semana durante 5 ó 6 años (ninguno lo hace en 4) y que acaba aprobando todos los créditos de ambas carreras. Lo único que hacen es definir unos horarios compatibles entre ambas carreras, pero tienes que estar cambiandote de edificio para las clases. Yo creo que esta gente no se deja nada…

  11. Avatar

    teothen 10 enero. 2008 - 07:53

    La verdad es que hoy dia cualquier persona con inquietudes puede aprender desde su silla y su pantalla de 20″ y programar mejor y mas rapido que cualquier titualo de Fp o Ingeniero por muchos años de carrera master y cursos que tenga pero el problema es: ¿Quien diseñará los programas de mañana? si te enseñan a escribir codigo ¿de que te sirve si nadie te dice que escribir?
    tenemos que aprender a optimizar recursos, a conocer las entrañas de la maquina de destino he incluso saber que le ocurre a cada bits entonces podemos programar un juego en 60 kb

    Yo estudie un FP de Electronica digital donde lo que realmente importaba eran los bits, y obtube una gran ventaja sobre mis compañeros de mis 2º FP de Programacion donde pasé del ensamblador al C y C++ y hoy dia no le tengo miedo a nada y si, las librerias son muy utiles pero solo consiguen marear a la maquina y consumir recursos, ver un claro ejemplo en WINDOWS X
    ¿cuantas funciones necesita para pintar un pixel?

  12. Avatar

    Marcos 10 enero. 2008 - 07:58

    Yo cuando emepeze a estudiar lo hize con C y gane una base muy buena, sobre todo con el tema de vectores y punteros, a partir de ahí­ todo era más facil. Creo que para aprender a programar hay que empezar con un lenguaje como C que tienes que hacerlo todo y sobre todo no empezar con un .Net o Java. Los conceptos básicos que nunca se te olvidaran con C se aprenden muy bien. Y por su puesto que la versatilidad es clave pero a la hora de trabajar los lenguajes requeridos son Java, .Net y lenguajes WEB que con una base de C te adaptaras…

  13. Avatar

    dobleM,onemoretime 10 enero. 2008 - 08:17

    En respuesta a Jose, …., como tu hay muchos esgrimiendo esa clase de argumentos.

    1.- Si quieres seguir programando en binario (dudo que lo hagas) pues adelante.
    2.- En las buenas escuelas de Ingnieros si no optimizas recorridos y consumos en tus algoritmos = 0.
    3.- A lo de los juegos en 64 Kb o 32Kb, pues creo que sin comentarios, seguiremos viendo a los personajes de videojuego con tres movimientos: salto, parado y agachado 🙂 whatever….. Aleluya la ley de moore

    Repito una vez mas, enfoquemos el tema:
    1.- Ingenieros bien formados [ESENCIAL] ===> Y es aqui donde ellos estan hablando, del problema en origen.
    2.- Una vez pasado el 1, con todo lo que esto conlleva, que cada uno eliga las herramientas que se amolden a cada proyecto, y los recursos necesarios.

  14. Avatar

    Santi 10 enero. 2008 - 08:23

    Estudiando Telecos aprendí a programar en BASIC hace 30 años. En realidad aprendí a cocinar spaguetti-code. Mi actividad profesional en ASM me obligó a disciplinarme, y de ahí el salto a programar en “C” fue una disfrute, ya que es el assembler universal. Coincido con los que afirman que todos los lenguajes procedurales son equivalentes, aunque el orden de aprendizaje sí que es importante: pasar del ensamblador a “C” es muy sencillo y cómodo; en cambio, pasar de Pascal u otros lenguajes de alto nivel, con gestión automática de la memoria, a “C” es muy duro.

    Creo que los conocimientos tienen que asentarse sobre bases sólidas: matemáticas, lógica matemática, lógica booleana, electrónica digital, (puede obviarse la física de semiconductores), arquitectura de microprocesadores, ensamblador de un micro de 8 bits, después de uno de 16 bits, lenguaje “C”, lenguaje “C++”, ADA, Pascal, Modula-2, LISP, Prolog, Java, javascript, Perl, etc; en este orden o parecido.

  15. Avatar

    Astharoth 10 enero. 2008 - 09:22

    Cuanta verdad junta en el articulo.

    Trabajo desde hace 10+ años en temas de desarrollo de software e investigacion (a pequeña y gran escala) y de verdad, en las empresas en las que he trabajado… cuesta encontrar gente que programe sistema y con ello no me refiero a conocer un API o un lenguaje.. me refiero a que tenga los conceptos de como funciona la maquina en la cabeza.. ¿Que es C? ok, ¿Que es kernel para Windoze? ok… pero lo importante son los conceptos.

    Abstraen en mi opinion demasiado a los estudiantes de la realidad real que va por bajo en la maquina y luego se producen las carencias.

    Y como ejemplo:

    Un amiguete estaba trabajando en una movida.
    Dicha movida era un componente de tecnologia N que tenia que ir tirando millas. Dicho componente tenia que ser manejado desde una aplicacion N (que tambien deberia de aprovechar el componente bien).

    El interfaz de aplicacion lo exponian “a Java”… y el me dijo “Sabes porque en Java?” yo le pregunte porque, si a todas luces era poco eficiente e incluso complejo para lo que requerian, su respuesta fue “Porque hay programadores Java”… a lo cual yo añadi “Menos mal que no hay programadores en mierda, sino hariais el interfaz hacia mierda…”

    Con esto, creo que esta todo dicho. Moved el culo los que no sepais y aprended como funciona el sistema.. luego ya vereis que herramientas / lenguajes usais.

  16. Avatar

    Leonardo Figueroa 10 enero. 2008 - 14:01

    YO estudio en la Universidad Don Bosco de El Salvador es una de las mejores en sacar Ingenieros de cualquier especialidad, yo estudio Ingenieria en Ciencias de la Computacion, una de las ventajas que ofrece la universidad con la carrera es que ofrece cuatro materia de programacion puramente C++, eso ayuda abrir las puerta de la logica que lleva desde un programita simple como Hello World hasta la complejidad de un sistema bancario.

    Hay que aceptar que todo los lenguajes de programacion estan basados en C, sino veamos PHP, .Net, JAVA, C++ y muchos mas.

    Hay que tomar en cuenta que debemos ser Ingenieros de Software y no simplemente programadores de un lenguaje especifico.

  17. Avatar

    Miguel del Amor Herrera 10 enero. 2008 - 15:32

    Yo también soy estudiante de informática ( H.N.D. in Software Development ). Y comentaros que lenguajes de alto nivel no lo ví hasta muy avanzado en la carrera, me he tirado casi todo el tiempo con ASM, Pascal, C, y C++.

    Sin contar que antes de todo ésto estuve como medio año estudiando sólo metodología y algoritmia, con una especie de intérprete raro donde diseñabas el diagrama de flujo y te permitía compilar.

    Pues el principal problema con el que me encuentro ahora es que no me veo capacitado de primeras para programar en por ejemplo .NET por la sencilla razón de que tienes que programar a su manera ( creo que ésto es debido a que no se donde está el cajón con el plomo del peso que deseo ).

    Y cuando me pongo a programar como mas o menos me imagino luego descubro que hay otra forma de hacer lo mismo mucho mas rápida ( que no se si mas optima ), el caso esque desde luego, orientado a “currarselo” uno 2mismo no está.

    No digo yo que ésto no aumente la productividad sobremanera, pero no está hecho para que un programador trabaje sinó para que alguien que ha hecho su curso en particular sepa utilizar su generador de aplicaciones enlatadas, sin contar que estoy casi seguro que la mayoría de programadores no tiene idea exacta de que está sucediendo por debajo en muchas ocasiones.

    En fin, yo creo que la prensa rosa ha llegado al software y encima lo “friki” está de moda.. Nos están jodiendo la carrera, y el futuro.

    Ojalá viviese en los 70-80, con mis conocimientos sería reconocido, tendría un sueldo digno y no me mirarían por encima del hombro los demás titulados como si yo fuese un fontanero o similar ( sin menospreciar a éstos ).

    Un saludo.

  18. Avatar

    wlcmToPlanetaPaketillo 10 enero. 2008 - 16:31

    Parece que todo el que escribe está totalmente de acuerdo con el artículo. Yo creo que el problema no está en el lenguaje de programación por el que empieces o en el número de lenguajes en los que seas capaz de programar.

    En mi caso estudio la Ingeniería Técnica en Informática de Gestión en la ETSII (Sevilla) y termino en un par de meses.

    En mi corta experiencia (llevo desde el año pasado de prácticas) mi percepción de los problemas en las universidades y empresas es otra:

    Universidades:

    1. Lejanía de la realidad: El primer problema que se encuentra un estudiante es que el alumno no ve un plan de desarrollo profesional, sólo ve un puñado de profesores que intendan dar su temario (siempre sin tiempo) sin pararse en lo que de verdad le va a servir al alumno.

    2. Superpoblación: Las aulas no siempre están llenas, pero si vas los primeros días de clase te das cuenta de la gran cantidad de personas matriculadas entre las cuales más de la mitad o se cansará la carrera y la dejará o no ejercerá nunca porque en realidad no le gusta programar (sí,sí, que hay muchos…).

    3. Poca profundidad. En todas las asignaturas se abre un camino, pero en ninguna se termina. Este aspecto sí que está muy bien reflejado en el artículo: si te quedas con lo que das en la carrera mal vamos.

    Además también es denunciable la tendencia a complicar los nombres de las asignaturas de manera que no sabes de lo que te matriculas, simplemente te matriculas. Como ejemplo significativo véase Ampliación de Base de Datos (ABD, lógicamente utilizamos iniciales pues no tiene sentido el nombre) en el que básicamente se inicia a los estudiantes en el desarrollo de aplicaciones Web basadas en páginas ASP.

    Empresas:

    1. ¿Y los ingenieros del ayer? Creo que este es el punto más problemático. Las empresas lo que quieren son clientes y los clientes vienen si les ofreces algo novedoso (o al menos no muy desfasado), por lo que, en general, los proyectos que llegan están basados en nuevas tecnologías en las que no hay ningún “ingeniero del ayer”. El resultado es que el programador que se va a encargar del proyecto va a ser el que haya hecho el curso de la tecnología en cuestión esté o no capacitado para diseñar el proyecto. El que tiene más experiencia toma un cargo de más responsabilidad alejándose del desarrollo, de modo que los que están abajo se encomendan al santo de moda: “San Google”. Dentro de este punto puedo meter un comentario que me dijo un conocido en mi primer año de carrera: “los informáticos que se dedican a la enseñanza es porque no valen para programar”, no creo que en la actualidad sea así, creo que más bien los informáticos que se dedican a la enseñanza no les gustan las posibilidades profesionales que hay, pero si que es cierto que el que sea un buen arquitecto de software no te va a estar dando clases, estará haciendo su trabajo (tan lejos de los curritos…).

    2. Presión. Un buen amigo mío me dijo no hace mucho que le gustaba trabajar con presión. Lo cierto es que se refería a algo muy distinto a lo que hace un programador: estaba diseñando un calendario familiar para el 6 de enero. La diferencia radica en que el resultado del calendario es un cuadernillo de medio folio el que lo que has podido dejar con las prisas es un borde mal recortado o una frase un poco más torcida, mientras que si te piden que desarrolles un programa sin tiempo, lo que vas a hacer es irte a lo práctico, a lo que el cliente va a ver y no pararte a investigar o a mejorar tu código. Esta es la verdadera razón de por qué se tiende a los lenguajes de alto nivel, por ahorrar tiempo y dinero siempre mirando al resultado y no a la eficiencia de los medios.

    3. Impresión. El resultado de todo esto es que cuando llegas a la empresa y te hacen la entrevista te contratan por conocer un lenguaje o una herramienta, da igual de que Ingeniería vengas o si vienes de un módulo o de un curso de reciclaje; esto solo influye en lo poco o muy poco que te van a pagar.

    Con todo esto sólo quiero decir que poco tiene que ver los lenguajes que sepas con los problemas de la INFORMÁTICA en general, pues sabiendo programar en cualquier lenguaje, sólo es necesario algo de tiempo para aprender un lenguaje distinto. ¿Qué más da que la máquina sea real o imaginaria? El buen programador es el que conoce la máquina con la que trabaja, ya sea una ALU, un microprocesador o una JVM; y para conocerla sólo hay que estudiarla.

  19. Avatar

    Ronny Yabar Aizcorbe 10 enero. 2008 - 18:35

    Interesante el artículo, hay muchas cosas en que reflexionar. Yo estudio Ingenieria Informatica en la Universidad San Pablo (Peru) y el curso de introduccion a la programacion que lleve fue Haskell, un lenguaje funcional que te abre la mente y hace funcionar mucho tu cerebro. Por mi cuenta aprendí Ruby y ahora estoy aprendiendo Python,lenguajes con tanto potencial para desarrollar varios tipos de aplicaciones y con tan buena documentación,comunidad,etc. Pero es lamentable que en la ciudad donde vivo (Arequipa) y en general en mi pais, hay una lluvia de anuncios donde se piden programadores JAVA, Visual Basic .Net, C#, ASP. Y considero (en mi humilde opinión) que ello se debe a que la mayoría de empresarios, instituciones, profesores, capacitadores se orinan de miedo por dar el gran cambio e imitan como monos lo que otros hacen o simplemente se orientan a lo que el mercado pide. Esto sin lugar a dudas repercute en las decisiones de los estudiantes de Ciencia de la Computación: Estudian un lenguaje, tema, área específica, no por vocación, pasión, ni por mejorar sus habilidades en computación, sino porque eso les hare ganar dinero, eso les recomendaron sus autoridades y esto consecuentemente afecta en su razonamiento lógico, capacidad de abstracción y los lleva a malos hábitos de programación y en general a perderse lo bonito que es estudiar no solo por dinero, sino también por ser cada día mejor.

  20. Avatar

    Astharoth 11 enero. 2008 - 06:36

    Hola, voy a responder a wlcmToPlanetaPaketillo

    -¿Y los ingenieros del ayer?

    Si quieres te digo donde estan despues de explicarte el panorama.

    a) Ingeniero entra en empresa.
    b) Curra N años, se lo curra, es reconocido,etc, buenas condiciones.
    c) Empresa crece
    d) Ya no es tan reconocido, RRHH no entiende de la diferencia de uno bueno y uno malo, putean a todos por igual
    e) Ingeniero bueno puede pillar otro curro, se pira de la empresa
    f) Patosos comprados baratos se quedan a medrar en la empresa
    g) Ingeniero bueno ve que lo que el pide / quiere no lo da nadie (las consultoras quieren picadores de java barato y “pocas” empresas mas hay en España)
    h) Ingeniero bueno o se pasa a “management” o emigra.

    Si quieres te doy nombres de muchos compañeros mios que han emigrado.
    Si quieres te pongo nombres de “consultoras” donde no contratan a nadie por mas de N por mucho conocimiento que tenga.. prefieren a tios baratos aunque no sepan hacer la O con un canuto.

    Un Saludete, asi es y asi se lo hemos contado.

  21. Avatar

    wlcmToPlanetaPaketillo 13 enero. 2008 - 09:24

    Astharoth estoy totalmente de acuerdo con lo que dices, no quer&iacutea decir que no hay ingenieros del ayer, sino que en las empresas del panorama actual (al menos a las que puede acceder una persona que empieza) no se ven, como mucho te encuentras con uno que est&aacute en pleno desarrollo.

    Saludos desde uno que empieza y no le gusta lo que ve.

  22. Avatar

    xavi 16 enero. 2008 - 12:26

    teothen, estas un poco perdido si crees que no hay que pasar por la universidad para ser un buen profesional (y tampoco te lo garantiza). Vas a ser un chapucillas toda tu vida.

  23. Avatar

    Mariano 23 enero. 2008 - 07:14

    Este post y todas las discusiones que en él se han hecho deberían ser leidos por muchos más ingenieros y responsables universitarios que los que en principio parecen directamente afectados. No solo afecta a la informática, afecta (al menos) a cualquier ingeniería.

    Decía un compañero (no recueerdo si de teleco o de industriales) que quien desarrolló la telefonía nóvil no la estudió en su carrera, en ese momento aun no existía.
    No es fácil conjugar la demanda inmediata de ingenieros que puedan salir a la calle con conocimientos suficientes como para realizar un trabajo, con la formación básica y fundamental aunque requiera tiempo y no produzca resultados inmediatos. Pero puede y debe hacerse.
    En lo que estoy totalmente en desacuerdo es con un comentario de dobleM, las atribuciones son el mal endémico de otras ingenierías, y si no piensa en un ingeniero de 40 años, con 15 de experiencia y al qe solamente evaluen (o permitan trabajar) en función de unas “atribuciones” dadas por lo que estudió hace 20 años durante un período de tres o cinco años. ¿de verdad crees que eso evita el intrusismo?
    Salu2.

  24. Avatar

    Danielek 3 febrero. 2008 - 02:29

    Es realmente indignante que pensemos en depender de empresas XXX al momento de egresar de las universidaddes, pues si no queremos que las empresas esten en contraste con las buenas universidades, debemos ser impulsores de empresas que desarrolen Ciencia Computacional(si vale el termino).

  25. Avatar

    maramirezc 19 febrero. 2008 - 16:08

    Algo que falta aclarar, es que NO ES SUFICIENTE enseñar el lenguaje de programacion, sin su metodologia adecuada.

    Muchos profesores solo enseñan la sintaxis del lenguaje, pero no la metodologia que propicio la creacion del lenguaje.

    Por ejemplo, en la escuela me enseñaron pascal, pero NO programacion estructurada (la aprendi con Karel, una emzcla de pascal con logo:

    http://en.wikipedia.org/wiki/Karel_%28programming_language%29

    Me enseñaron C, pero yo aprendi por mi cuenta apuntadores, con Pascal (???).

    No me enseñaron programacion orientada a objetos/clases, pero la aprendi por mi cuenta con C++/Object Pascal.

    Y no me pregunten sobre Lisp (programacion Funcional), SQL (Modelo Entidad Relacion) o Prolog (Programacion Logica)

    solo mis 2 centavos “gringos”/ $200 M.N.

  26. Avatar

    Simca 18 marzo. 2008 - 18:42

    Hola, este mensaje esta para los uruguayos que no estan de acuerdo con el plan de programacion de la Facultad de Ingenieria.

    Para que sepan, la FIng de Uruguay educa a los mejores Ingenieros en competencia mundial por decirlo asi, sin subestimar a ingenieros de otros paises y sin ser modesto, por su puesto.

    El problema es que ustedes no saben cual es el plan de la facultad, y es el siguiente.

    Segun ustedes, la facultad tendria que enseñar c y c++ o java, en fin , su facultad “ideal” les haria expertos en c++ y java y otros lenguajes avanzados no? Seria un sueño saber los mejores lenguajes y asi conseguir trabajo, no?

    Honestamente, ese es el motivo por el cual FIng es la mejor de todas las universidades uruguayas en programacion, porque mientras ustedes aprenden lenguajes de programacion en sus facultades ideales, yo en la FIng, APRENDO A PROGRAMAR.

    Para todos los extrangeros, este es el plan de la FIng Uruguaya:

    Se enseña vigorosa y estrictamente, a programar, el primer curso de programación se empieza con Pascal, el segundo con Modula-2, el tercero con c-sharp, el cuarto con c++, el quinto con javascript, y no importa cual lenguaje mas, porque aca no se aprenden lenguajes, se aprende a programar, TODO ingeniero que sale de la FIng, NO necesita saber un lenguaje, porque esta capacitado para aprenderlo cuando sea necesario.
    Ejemplos: te ofrecen trabajo el cual necesitas saber c++? te reciviste de la FIng de Uruguay? Solucion: agarrar un libro de c++, y leerlo, en un dia, ya sabes c++. por que? porque sabes PROGRAMAR. Y esto pasa en la VIDA REAL.
    Algo mas que tenga que explicar? quieren ser programadores de c++ y java? o quieren ser PROGRAMADORES 100%, sea cual sea el lenguaje, sin importar si lo saben o no ya que lo aprenderan rapido ya que saben todas las nociones de programacion? Decidan ustedes….

  27. Avatar

    fernando 3 noviembre. 2008 - 22:53

    aprender c++ es agarrar un libro en un dia y listo?
    Super genios cómo creerles?

    Bueno yo, ya llevo como 8 años en el rubro de la `programacion, mi especialidad es la de hacer aplicaciones para los sistemas de automatizacion industrial o sistemas SCADA, hay mucha verdad en lo que expusieron algunos mas arriba, es bueno empezar por assembler y luego pasar a c y posteriormente a c++, yo termine con VC++, el concepto de compreder un proceso en la industria, y el enlace a los controladores de temperatura y los PLC’s cualquiera que sea la marca, llevan diferentes protocolos de comunicacion para ser accedidos, mis conocimientos de c y assembler resultaron una gran ayuda, en cuanto a la estabilidad de las aplicaciones, quede muy decepcionado con los .net ya que no lograba lo es el desarrollo en tiempo real, sin embargo el vc++6, vc++2003 o el vc++2005, me permitieron programar en codigo nativo, con esto alcance un grado elvado en la confiabilñidad de mis aplicaciones y del sistema en si, (hacer mucho con menos recurso), en muchas ocaciones y cabeza iba a la ahorca por los contratos que hacia con mi empresa con el robro industrial sin embargo salimos adelante, como anecdota, en una petrolera nos dieron un mes para terminar un software o ya no se firmaria mas contratos (ellos tambien estaban pendiendo de un hilo), el sistema recogia datos del satelite de las válvulas de gasoductos en el campo, esta informacion deberia ser entregada a un entorno scada DELTA-V, el trabajo consistia en desarrollar un conjunto de servidores y clientes OPC, en c++ era mucho mas fiable y estable el DCOM y COM que manejar visual basic, datos malos repercutian en perdidadas millonarias para las petroleras, bueno hay muchas mas anecdotas que les puedo contar como el de procesamiento digital de imagenes en tiempo real, un logro mio para otra petrolera en una de sus empresas engarrafaban GLP, cada garrafa tenia que ser repesada para su verificacion, a la velocidad en que estos salian y la estabilidad jodian de todas partes, si que me hizo hasta llorar en mi interior, busque ayuda en la red, ni gringos ni europeos, por un temita de tecnicas con el CStdioFile, la memoria global y local, liberaciones de memoria (los datos entraban cada 120ms y necesitaba rebajarlos a 70ms)y conversiones de graficos dentro la memoria. En fin me decia en donde me he metido, incluso me trajeron a auno de los mejores programadores de la ciudad le di una preguntra relacionada a punteros de objetos el crudo sabia Fox Pro y basic.net y c#, todos relacionandos a paginas web, ni modo no me servia para nada, hasta que siempre hay similares a nosotros en otras partes del planeta, en mi caso la misma pregunta pero en chino pero el codigo estaba en C++ no se que rayos se ayudaban entre ellos pero comprendia lo que estaba escrito en su código, su mismo concepto lo traslade para el que yo necesitaba, primero analice, modifique y luego probe, vi el estado de mis subprocesos como trabajaban que carajos esto es lo que yo estaba buscando, despues me centre en ir a mas profundiodad hasta lograr llara a un tiempo de procesamiento de imgenes cargando memoria procesando y liberando en 70ms, y adicionando otros 30ms para el enlace con los equipos de control externos era un PLC Telemecanique, y controladores Alen bradley, logrando en 100ms el ciclo, las garrafas salian cada 120ms, esto me daba un margen de 20ms, de actualizacion y otros subprocesos. no se que haran ustedes pero cada contrato que agarro me deja en suspenso, estres avces siento que me acaba, pero al final cuando tu proyecto esta terminado te sientes como el rey del muno, cabe mecionar que tambien hacemos la parte de montaje del cableado de sensores y controladors PLC o relacionados a la automatizacion industrial. Quieren hacer algo bueno con sus vidas, aprendan C las dara mas solides y confianza en si mismos no solo en el trabajo sino tambien en la vida misma.

  28. Avatar

    Juan 1 agosto. 2009 - 21:02

    Sin pretender ofender las creencias religiosas de muchos, les planteo este argumento que se lo escuche a un predicador del Islam: “El mundo está dividido entre ricos y pobres. Bien por los ricos, por que ellos han sido bendecidos por Dios. Los pobres deben aceptar su suerte por que así lo ha querido Dios”

    En programación de computadoras se maneja el mismo argumento fundamentalista: “La programación es de calidad si la haces a nivel de los bits, pero entre más alto sea el nivel, menor será la calidad”.

    Según estos dos argumentos fundamentalistas, es mejor viajar de Europa a America en una balsa, por que esa es la forma elemental que inventó el ser humano, que en un barco o en un avión.

  29. Avatar

    pepe d 4 diciembre. 2009 - 17:40

    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.

  1. ¿Donde están los ingenieros de software del mañana? « Open the door close the “Windows” | 9 enero. 2008 - 17:28

    […] 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 […]

  2. alpaxco » Archivo del Blog » ¿Dónde están los ingenieros de software del mañana? | 9 enero. 2008 - 19:35

    […] picandocodigo.net En Slashdot publicaron una noticia sobre un artículo escrito por Robert B.K. Dewar y Edmond […]

  3. Last Train Home | 9 enero. 2008 - 20:13

    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.

    ……

  4. Los Links de Tolito » Blog Archive » Links del 10 de Enero del 2008 | 10 enero. 2008 - 04:44

    […] ¿Donde están los ingenieros del Software del manaña? […]

  5. programame.net | 10 enero. 2008 - 10:36

    ¿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…

  6. ¿Dónde están los ingenieros de software del mañana? « Conocimiento Libre | 10 enero. 2008 - 18:23

    […] 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 […]

  7. Un poco Geek » ¿Dónde están los ingenieros de software del mañana? | 11 enero. 2008 - 14:58

    […] [https://picandocodigo.net/index.php/2008/01/09/estudiando-programacion-%C2%BFdonde-estan-los-ingenier…] […]

  8. A realidade mundial sobre o ensino da programação. Que futuro para os programadores do amanha? « Nataniel Baiao. tecnologias de informação | 20 enero. 2008 - 17:33

    […] 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 […]

  9. Picando Código » Blog Archive » Seguimiento de “¿Dónde están los ingenieros del mañana?” | 22 enero. 2008 - 13:32

    […] 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 […]

  10. Estudiando programacion, ¿donde estan los ingenieros de software del mañana? « Yo pongo el bollo y tu las gambas | 23 enero. 2008 - 07:06

    […] Link […]

Dejar un comentario

Toasty!