401 meneos
5279 clics
Las universidades de EEUU al fin lo han reconocido: empezar a programar por Java es una mala idea
Java ha sido y es desde hace mucho tiempo uno de los pilares básicos de la programación. Un lenguaje óptimo para según qué tareas. Sin embargo, su reinado como punto de partida para el estudiantado parece estar llegando a su fin. "Hay que aprender la lógica de la programación. El lenguaje es lo de menos. Por eso es un error enseñar con Java porque los programadores no tienen idea de lo que están haciendo", decía hace un par de años para Economía Digital Ricardo Galli, profesor universitario y socio-fundador de Menéame.
|
comentarios cerrados
Uso Python a diario y cada día me gusta menos.
"Ya has enviado un enlace al mismo sitio hace poco tiempo - Debes esperar 30 minutos entre envíos al mismo sitio."
CC @ur_quan_master @apple3
Vaya mierda de universidades, sinceramente. Que les pongan como me pusieron a mí, en Pascal o en C++ con objetos a cascoporro, ampersands y asteriscos. Al menos así aprenderían algo sobre gestión de memoria.
O con tarjetas.
Otra cosa es que un padre enseñe a sus hijos a programar usando Java. Son niños y hay que darles facilidades. ¿A una persona de 18 años? ¿no pasan la selectividad allí? ¿de verdad hay que enseñar usando lenguajes de programación que no son tipados ni compilan y que les van a petar por activa y por pasiva en sus primeros proyectos y no van a saber por qué?
Nada hombre, que se compren Basic para niños y que Arturo les prepare los exámenes del primer trimestre.
El 69% de los centros más prestigiosos empiezan por aquí, mientras que otros apuestan por JavaScript, MATLAB, Scheme y Scratch.
Di clases a niños entre 8 y 12 años sobre programación de videojuegos. Durante dos semanas dimos Scratch (comenzando por Code.org) y a muchos se les quedó cortísimo. Se me caería la cara de vergüenza si a mis 18 años viniera un profesor a enseñarle programación con Scratch... seguramente no volvería a esa clase en todo el año.
En la facultad nos enseñaban pseudocodigo (Usando tipos abstracto de datos, no recuerdo si se veía la gestión de la memoria) y C. Pero en la noticia no hablan de pseudocodigo. Por otro lado, el ejemplo que ponen no me parece muy bueno.
Hombre, java es potente y tal, pero no es lo mejor para aprender. Para hacer el código más sencillo tienes que usar elementos que no se dan el primer día de clase precisamente, así que te quedas con la idea de "esto es así por narices" hasta que te lo explican cuando toca.
Para aprender, Pascal. O el que me "enamoró a primera instrucción", Python, que luego te sirve para hacer POO también.
Lo que sí que me parece cierto es que abusar de Java en la carrera hasta el punto de dar a entender que cualquier lenguaje que se precie debe tener un recolector de basura es mala idea. En particular, cuando empiezas a programar sin ruedines vienen los cores, las visitas del oom_killer o iluminados como este señor: matt.sh/howto-c (al que, menos mal, hay gente dispuesta a rebatirle: github.com/Keith-S-Thompson/how-to-c-response/blob/master/README.md).
El miedo a Java es infundado e incomprensible. Incluso es posible programar en Java con un estilo tirando a Pascal dejando mucho de lado la programación orientada a objetos al principio. La programación orientada a objetos no es tan complicada de entender (si no te metes de lleno con temas de estructuras de datos avanzadas) y permite que incluso gente que no entiende bien como funciona internamente un ordenador escriba programas de forma ordenada y efectiva que resuelven problemas del mundo real.
Por lo que parece el nivel de los nuevos estudiantes es en general penoso, a nivel de redacción (no son capaces de escribir más de 10 líneas seguidas), gramática, comprensión lectora, matemáticas...
www.elconfidencial.com/alma-corazon-vida/2013-10-08/solo-uno-de-cada-t
El problema con Java es que libros y profesores pretendan empezar a enseñarlo por el tejado, cuando como en todo lo ideal es empezar por la base. Para empezar con Java lo mejor es seguir ejemplos y olvidarse al principio de los conceptos repetidos una y mil veces sobre programación orientada a objetos.
Sí, soy un abuelo cebolleta, lo admito.
Si buscas programadores que resuelvan problemas cientítico-técnicos relacionados con computación y computadoras 'C' es la opción natural para sistemas operativos y pequeñas utilidades mientras que 'C++' es la opción natural para proyectos grandes que sigan requiriendo cercanía al hardware y una optima velocidad de proceso.
Goto #26 #29.
La sintaxis de python es muy cercana a un lenguaje de scripting, con lo que es extremadamente facil iniciarse. Mientras que C# es un lenguaje de 3º generacion un poco mas moderno que java. Si combinas las convenciones de ambos lenguajes, terminas un estilo de código realmente limpio.
Es un mercado laboral de mierda el informático en parte por todos esos que tiran de acrónimos sin venir a cuento y postulan desde su falta de estudios base.
En cuanto al articulo, yo en su dia empece con Pascal y al principio pensaba que para que daba un lenguaje que nunca iba a usar, cuando descubri C, sus punteros y su manejo de memoria agradeci enormemente haber aprendido a utilizar punteros de forma mucho mas simple en Pascal.
puestos a aprender a programar podemos volver al lenguaje ensambador o quizá al cobol
Pero bueno, creo que cada punto de vista tiene su lógica.
Yo enseño programación en Pascal, y me río cada vez que alguien dice que es un lenguaje muy didáctico porque es muy estricto. Sí, es estricto en las chorradas que no importan: no te deja definir una variable en mitad de una función, por ejemplo. Pero luego resulta que te deja poner variables globales (y las puedes poner hasta sin querer, mis alumnos lo hacen a menudo: tienes una variable local al bloque principal del programa, metes una función en medio, y zas, ya es global). Y también resulta que el sistema de módulos es un coladero: en teoría tiene una parte pública y una parte privada, pero en la práctica tiene la genial restricción de que la definición interna de los tipos de datos que usas en la parte pública tiene que ser también pública (porque ya se sabe, vamos a ordenarlo todo para que sea didáctico, entonces lo público viene antes de lo privado, y como no puedes usar un tipo que aún no has definido... zasca). Con lo cual, defines un módulo para una lista enlazada, que en teoría debería ser abstracto y no darte acceso a la implementación, y en la práctica te puedes meter hasta la cocina. Luego súmale una sintaxis desconcertante (la gente de forma natural intenta poner puntos y coma al final de cada sentencia, aunque no haya visto C en su vida) y un compilador que tampoco ayuda, porque salirse del límite de un array es como en C, no como en Java: ojalá tengas la suerte de que el programa pete, pero como tengas mala suerte, estarás modificando quién sabe qué variable, y buena suerte para debuggear siendo novato.
Pues mira, me parece mucho, pero mucho más didáctico un lenguaje menos estricto a la hora de ordenar las declaraciones de variables o poner puntos y coma, pero más estricto a la hora de no permitir cosas como variables globales, romper la abstracción o salirse del límite de un array. Por ello creo que Java es bastante mejor que Pascal para enseñar a programar hoy por hoy.
Estoy de acuerdo con el artículo en que Java es un demasiado verboso para aprender, eso sí. Python es mejor en ese sentido. La verdad es que no conozco ningún lenguaje que realmente me parezca bueno para aprender (lo mejor a mi juicio sería algo con el tipado estático y los chequeos en tiempo de ejecución de Java, pero con una sintaxis más simple tipo Python). Sólo sé que Pascal no, por favor. Lagarto, lagarto.
Recuerdo mi primera clase de programación:
PROFESOR: La programación orientada a objetos es muy sencilla, tan sólo tenemos que representar las clases, por ejemplo un Camión. ¿Qué tiene un camión? Cuatro ruedas, pues eso son los atributos. ¿Qué hace? Avanza, pues eso es un método.
ALUMNOS: ¿Pero qué cojones nos estás contando?
PROFESOR: Venga, ahora vamos a hacer el Holamundo, copiad este código y ya está.
ALUMNOS: WTF?
Y luego más de una semana para conseguir hacerlo funcionar, hasta que el profesor me dijo que tenía que poder en la variable del sistema CLASSPATH un punto que no tenía ni idea de lo que significaba.
No sé muy bien que decirte con esa burrada que has soltado. En fin, no merece la pena que me ponga a explicarte por qué la programación funcional es tan importante ni por qué la tendencia es programación funcional y no de otros tipos. Tu a lo tuyo. A borrar cores para liberar memoria.
En definitiva, la curva de aprendizaje es más corta y la barrera de acceso al mundo de la programación es más fácil de saltar.
En mi opinión no está de más enseñar programación funcional en la universidad, como parte de la aplicación matemática de la computación.
La gran ventaja es la capacidad de escribir código ad hoc para modificar un set de datos, y poder aplicar técnicas programáticas a información, lo que ahora se conoce como data modeling.
Particularmente creo que Python + Haskel + mathlab sería una combinación perfecta para iniciar a los futuros profesionales.
En todo lo demás, los recolectores de basura cada vez son más prevalentes, así que tampoco veo mal que se enfoquen como "lo normal", siendo la gestión manual algo especializado. La verdad es que hoy por hoy, no creo ni que el 20% de los alumnos vayan a salir de entornos con recolector de basura en su vida profesional.
Si eso te indigna, piensa que hace 40 años estarían diciendo lo mismo del ensamblador. Hoy, si un ingeniero informático sólo vio ensamblador en una asignatura o dos y no hizo nada serio con él, la verdad es que da igual. Los pocos que acaban en un empleo donde se usa ya lo aprenden. A medida que el nivel de abstracción va subiendo, el destino de los malloc será el mismo.
Hay otros entornos en los que efectivamente los recursos están más limitados y no queda otra que optimizar.
La universidad debería dar una base sólida de conocimientos teóricos lo más absolutos e inmutables que permita el estado de la ciencia y el conocimiento, y sobre eso que el alumno practique con "el mundo real" en las asignaturas "laboratorio" (que al menos había cuando yo estudié, ahora lo mismo se las han follado).
Resultado de preparar para el mundo laboral... que ahora te llegan becarios que sí, (y algunos, pq otros.... pura mierda) saben picar en Python mal, en Java Mal y alguna otra cosa Mal... ni puta idea de corrección de código ni de hacer las cosas bien, imagino que dentro del "preparar para el mundo laboral" les han enseñado a hacer software de mierda que es lo que piden las charcuteras y de paso tendrán créditos en tirado de caña que es lo que pide Ejpaña.
Mira que hasta el año pasado me costaba creer lo que oía, pero metieron unos becarios... y en fin.... vi la triste realidad.
Lo de mayor abstracción y tal está muy bien...y que el programador se concentre en la lógica pero cuando ya tienes claros los conceptos y fundamentos. En otro caso es como ir a la autoescuela y hacer prácticas en un fórmula uno.
(En mi modesta opinión de desarrollador cutre y salchichero)
"En este caso, que los alumnos se apasionen por la materia y aprendan fundamentos que luego sirvan en la empresa." Lógico, no enseñes Java en la universidad, porque luego el 70%> de las empresas en España lo van a usar
'... En C++, la expresión "C++" significa "incremento de C" y se refiere a que C++ es una extensión de C...'
es.wikipedia.org/wiki/C++
Ojo, el SICP es DURO.
Sinceramente, no entiendo ese fan por Python. Es un lenguaje script para ubas pocas lineas de código al estilo MATLAB. Ya está. Pero sí he visto como hubo que tirar un millón de euros a la basura de un proyecto que hubo que reprogramar entero en C, porque al manager le comieron la oreja con el Python.
Normalmente en una carrera de ingeniería informática, por lo menos habrá una asignatura de sistemas operativos donde se programe en C, y alguna optativa de sistemas embebidos o cosas así, que al final es donde hoy por hoy se usan mallocs y frees.
En C, y en C++ también (que los new hay que emparejarlos con su delete). C y C++ siguen siendo usados en aplicaciones de escritorio de forma masiva, no olvidemos.
En todo lo demás, los recolectores de basura cada vez son más prevalentes, así que tampoco veo mal que se enfoquen como "lo normal", siendo la gestión manual algo especializado. La verdad es que hoy por hoy, no creo ni que el 20% de los alumnos vayan a salir de entornos con recolector de basura en su vida profesional.
Hombre, si lo único que quieres es una máquina para picar alto nivel (Java y demás), probablemente ni siquiera necesites hacer una carrera. Aunque por otro lado no creo que una empresa te desarrollo te vaya a contratar sin un título que certifique que has pasado 5 años de tu vida encerrado en una facultad.
Si eso te indigna, piensa que hace 40 años estarían diciendo lo mismo del ensamblador. Hoy, si un ingeniero informático sólo vio ensamblador en una asignatura o dos y no hizo nada serio con él, la verdad es que da igual. Los pocos que acaban en un empleo donde se usa ya lo aprenden. A medida que el nivel de abstracción va subiendo, el destino de los malloc será el mismo.
La verdad es que tienes razón. El mercado está siendo cada vez más dominado por lenguajes a prueba de idiotas, lo cual es bueno ya que acerca la programación a un mayor sector de la población. Sería muy preocupante que el acto creativo en un mundo tan profundamente informatizado estuviese dominado por unos pocos gurús.
También te digo una cosa, y es que es posible que yo tenga una visión demasiado romántica de lo que debe ser un ingeniero informático. Para mí un ingeniero debería tener un conocimiento profundo de cómo funcionan las cosas por debajo, y a mayor abstracción, más fácil es perder la perspectiva (lo cual luego tiene también sus implicaciones desde el punto de vista de la seguridad de los sistemas, y eso es un fregado en el que ya no me quiero meter).
¿Qué eres la puta sin dientes?
'...The Android NDK (Native Development Kit) is a toolset that lets you implement parts of your app in native code, using languages such as C and C++. For certain types of apps, this can help you reuse code libraries written in those languages...'
public class MyActivity extends Activity {
/**
* Native method implemented in C/C++
*/
public native void computeFoo();
}
NDK : developer.android.com/ndk/index.html
SDK : en.wikipedia.org/wiki/Software_development_kit
La tabulación es una chorrada, los IDEs ya la ajustan automáticamente, te obliga a hacer legible el código, no tienes que usar llaves o BEGIN/END...
Lo que pierdes en rendimiento lo ganas en facilidad de desarrollo, todo depende del tipo de proyecto.
Como ingenieros, los ingenieros informáticos debería aprender a diseñar soluciones informáticas usando el mínimo de recursos posibles. Si se aprende a programar con un lenguaje que te da a entender que la memoria es barra libre, difícilmente harás un programa mínimamente eficiente.
Tampoco estoy hablando de afinar las cosas a nivel de poder correr los programas en una Nespresso, pero por lo menos que no necesites un chorrocientos mil cores y gigas de RAM para correr un todo.
Y ojo, que yo llevo toda mi vida profesional con lenguajes que me hacen olvidarme de la memoria. Pero el haber trasteado con C/C++ me hizo ser un poquito más cuidadoso con esas cosas.
Estoy de acuerdo con lo que decía Gallir: creo que, si de verdad se quiere que el alumno entienda lo que está haciendo, lo mejor es empezar por C. Es cierto que no es muy glamuroso, y que sería más difícil motivar al alumno, pero imagino que es cuestión de plantearlo de la forma correcta, que no sea todo, como dice el artículo, programas de operaciones con matrices en línea de comando. Lenguajes como JavaScript tienen la ventaja de que desde el primer momento puedes hacer cosas "chulas", ya que tienes acceso directamente al interfaz del navegador, pero probablemente a costa de crear vicios y no entender en profundidad cómo funciona lo que estás haciendo.
www.youtube.com/watch?v=OgIRAjnnJzI
Tampoco pienso que sea lo ideal empezar por java, pero tampoco pienso que sea algo que por sí mismo convierta a buenos alumnos en un desastre, el problema de la motivación me parece más grave. Los profesores tienen que motivar a los alumnos, pero no todo puede ser que el profesor motive, la principal motivación la tienen que encontrar ellos mismos. Si no les motiva estudiar una carrera pues igual deberían irse a otra...
Una de las soluciones es pasar a utilizar structs en vez de clases y gestionar la memoria con el stack. Entonces te das de narices con otro problema, de que no existen default constructors, y que al no existir referencias tienes que hacer cosas raras para modificar los datos en una List, por ejemplo.
A parte de que la gente se vuelve loca con la programación orientada a objetos y cosas que puedes hacer con dos funciones, se inventan un espaqueti de clases, con constructores que ejecutan código...
En fin. C# no es mi lenguaje favorito, tampoco es que me desagrade mucho, pero fue creado para hacer ventanitas,! botones, menus y poco mas. En aplicaciones en tiempo real da muchos problemas.
C.
Aprendes que estas haciendo. Aprendes que esta haciendo la maquina con lo que tu ordenas.
A partir de ahi C++, Java, python, kotlin... lo que quieras, pero para aprender: lo basico.
Eso es BUENO. Es lo mejor de python.