Se que mucha gente se me tirara encima pero siento decir que Java me parece un lenguaje de maravilla para aprender orientación a objetos de forma sencilla pero ahí se acaba su ventaja, tomad el primer curso universitario de programación con Java y veréis lo fácil que os resulta, eso si, cuando lleguéis a arboles binarios preparaos para pasarlo realmente mal.
Hay dos cosas que no aguanto de Java, la primera de ellas es la falta visible de punteros y la segunda es la perdida completa de los structs respecto a C, en el caso de C++ un desarrollador puede usar una struct de C si quiere pero en Java no, en Java creas un método/función que sea un struct y… bueno, es que no puedes hacerlo.
Java esta siendo escogido en primero y segundo de carrera por muchas universidades para poder ahorrarse tiempo explicando, ya no te enseñan realmente como funciona una lista enlazada o un árbol, ya no se enseñan algoritmos sino que simplemente tiran de Java y sus librerías completamente prediseñadas para que hagas las prácticas.
Tiene su gracia que al final acabes superando las prácticas de la siguiente manera:
- Llegas a clase de prácticas, solo sabes sintaxis
- Pruebas y le das vueltas, no te sale nada y te sientes inútil
- Decides ir a la librería general de Java y ves como funciona el tema y aprendes que lo que te han puesto en la práctica ya esta solucionado en la librería general en forma de clase.
- Copias el contenido de los métodos y los personalizas.
- Tras ensayo y error ves que la práctica te funciona
Tras estos 5 pasos te das cuenta que no has aprendido nada, no sabes como funciona internamente ciertas cosas y tampoco aprendes algoritmos, es la informática para tontos que quieren implementar en ciertas universidades, quieren que seamos lo suficientemente inteligentes para codificar pero al mismo tiempo sigamos siendo lo suficientemente ignorantes como para no quitarles el sitio privilegiado.
El problema es la curva de aprendizaje, la mayoría de libros de programación para novatos en Java se quedan en los arrays y en los bucles, ahí no avanzan ni siguen adelante para dar la imagen de que Java es 1000 veces más accesible que C, hay un capitulo en C que es esencial que son los punteros y es el capitulo puente entre los conceptos básicos y los avanzados. Como Java no tiene punteros explicitos, y muchos libros y gente pasan de explicar que es un puntero y sobretodo para que sirve en los lenguajes de programación, pues cuando te encuentras con temas más avanzados, donde los punteros si que son esenciales para explicar y entender lo que estas haciendo, es cuando aparece el “usa la clase tal que te lo hace por la cara”.
Al final acabas por odiar a Java solamente por eso, es el nuevo Visual Basic, todo el mundo lo esta usando pero mal, en vez de aprovechar la potencia del lenguaje para crear los algoritmos desde 0 mucha gente prefiere no pensar y tirar de la librería general de Java, muy poca gente prefiere pensar y hacer las cosas desde 0. Si esta actitud ya se enseña desde la Universidad entonces mal vamos.
Un artículo de Urián en Disruptive Sketchbook
A mi me enseñaron Java el pasado año (en la Universidad)…. pero junto con prog orientada a objectos y UML y tal… Puede que sea la excepción, pero creo que no hay para tanto….
Saludos!
Estoy contigo Urián
Java nunca me ha acabado de agradar, es la versión «Visual Basic avanzada» sin licencias
No estoy de acuerdo contigo.
Veo bien que en las universidades se enseñe Java para dar introducción a la programación. Te permite entender los conceptos básicos de la OOP: clases, funciones, variables, etc…
Hay en otras asignaturas en las que igual es más adecuado usar otro tipo de lenguajes. Por ejemplo en estructura de datos te enseñen como se hace una lista simplemente anidad, doblemente anidada, un arbol, un hashmap, etc… Y que para ello te enseñen como funcionan con los punteros. O por ejemplo también en asignaturas como sistemas operativos.
En otras asignaturas más relacionadas con el hardware también está bien que te enseñen ensamblador. O incluso en algunas que te enseñen algo de código máquina, como funciona, como el procesador interpreta las instrucciones, etc…
Y en otras asignaturas de inteligencia artificial te enseñen lenguajes como Lisp o Prolog.
Cada lenguaje se adapta mejor a un tipo de trabajo en concreto. La tendencia actual en la mayoría de empresas es usar lenguajes sin punteros: java, C# (si, pueden usarse punteros, pero también te permite prescindir de ellos). Ya que para la gran mayoría de las aplicaciones no es imprescindible el uso de los punteros. Que solo en casos bastante concretos son más utilizados lenguajes con punteros, o lenguajes de más bajo nivel: SO, juegos, software militar, etc…
Por otro lado, está bien que en la universidad te enseñen en alguna asignatura a crearte estructuras de datos desde cero como listas, heaps, colas, etc. Para que comprendas como funcionan y como se usan. Pero también tienes que aprender a usar librerias creadas por terceras personas. Y acostumbrarte a usarlas. Si ya existe una librería que implementa una lista y esa librería te ofrece todo lo que tu necesitas, ¿para que te vas a crear tu propia librería de tratamiento de listas?
No estoy de acuerdo contigo. Bien vale que haya que enseñar como se usan librerías de terceros, pero hay que aprender (que para eso estás en la universidad) a hacer las tuyas propias.
Es como la calculadora: porque existan y sean omnipresentes no quiere decir que tengamos que dejar de aprender a realizar operaciones de memoria o a mano.
Si bien puedes tener razón en la referencia al mal uso del lenguaje por parte de las universidades, entiendo que te refieres a las carreras de informática. Si estas estudiando estructuras de datos es inútil resolver los ejercicios con las librerías. Pero si estas programando un método para solucionar el problema del viajante de comercio, es un sobre-esfuerzo descender a nivel de estructuras de datos, utiliza librerías y dedica el esfuerzo a resolver el problema en si.
Además existen otras disciplinas donde no es necesario saber que es un puntero, una cola o una lista enlazada. Pero que tienen que saber desarrollar métodos de cálculo por computador. Por ejemplo en físicas, matemáticas,… donde enseñan métodos de calculo numérico con Matlab. Imagínate programarte todos los procedimientos de cálculo que necesites cada vez que quieres resolver un problema.
Que en el ámbito de informáticos esta usándose mal, puede. Cuando yo curse la carrera no era así, pero no se de otros casos. Pero como ha señalado el comentario anterior, depende de lo que quieras hacer, existirán lenguajes más adecuados que otros. Vamos que puede que tengas razón en lo tocante a la universidad, pero Java tiene sus defectos y sus virtudes como todos los lenguajes, ojalá existiese el lenguaje universal, lamentablemente no es así.
Una cosa es aprender estructuras de datos, control de consumo de recursos, análitica de lenguajes, teoría lingüistica, fundamentos de OOP, lógica difusa, análisis matemático de requerimientos, arquitectura de sistemas o lo que sea y otra es hecharle la culpa a la punta del lapicero de que no escribimos bien (java… pobrecillo).
El concepto de reutilización de código es la base para tirar de librería, y con OpenSource si quieres hasta ayudar a hacerlas plenamente eficientes.
Dios!!, si hay quien quiere aún reinventar la rueda.
Alegrate que las practicas sean con ordenador… yo las hacia a mano sobre papel, nuestro micro eran nuestras neuronas.
Pobre Pascal, pobre Ada, pobre SmallTalk ….
:)))))
Si, hay que aprender. Es justo lo que indicaba yo arriba.
Que está bien, que para aprender te hagan construirte en C++ una librería de listas, pero también está bien, que en las ultimas prácticas usaras las librerías STDLIB, que sepas que existen, como se usan, etc…
También es interesante que te enseñen como funciona los procedimientos de entrada y salida, las interrupciones del sistema, el DMA. ¿pero es realmente necesario que te crees tu propia librería en ensamblador para el tratamiento de ficheros? En el 99’99% de los casos seguramente no sea necesario.
También es interesante que te digan que es un XML, como se forma. Incluso que lo uses en tus aplicaciones o prácticas en la universidad. Pero seguramente no sea necesario que te pidan que te construyas tu propio parseador XML.
Ser un buen programador no consiste en reinventar la rueda para todos los elementos y estructuras que van a formar tus aplicaciones. Ser un buen programador consiste en saber escoger los elementos que más se ajustan a tus necesidades y como combinarlos para obtener el resultado que deseas; si hay algo que no se ajusta a tus necesidades entonces molestarte en crearlo.
Es una crítica al mal uso de Java para enseñar.
Estamos hablando del mundo academico donde lo importante es aprender y enseñar, no a solucionar problemas ni hacer trabajos para terceros y lo importante es que si estas aprendiendo estructuras de datos entonces deberías saber hacerlas desde 0.
Yo que recuerde las carreras de informática se llaman ingenenierias o al menos eso pone en mi matricula, si resulta que a un futuro ingeniero no le enseñan a resolver problemas sino a depender de librerias de terceros para ello mal vamos.
Lo dicho, que el tema va sobre aprender fundamentos esenciales de la programación y comprender su funcionamiento, no va sobre «aprende a usar las clases de Java para que te salven del apuro».
Se puede usar Java para enseñar, lo que no se puede es ir tirando de «ejercicios resueltos», estos jamás solucionan nada.
http://www.entremaqueros.com/bitacoras/urian/
Yo creo que el asunto tiene menos que ver con el lenguaje escogido para enseñar y más con la metodología del aprendizaje.
Si quieres que te salga un programador que sepa hacer buenos algoritmos, ya sea con librerías de terceros o desde cero, ese programador lo pones a escribir MUCHOS programas hasta hacerse experto.
Lo que no ocurre es que esto se está perdiendo. En su lugar el 80% de los «expertos» de hoy en realidad hacen fontanería de software y cada vez escriben menos código por su cuenta. Se pasan más tiempo navegando por internet en busca de ejemplos para copiar, pegar y modificar o buscando cual es el método o propiedad de la librería que necesitan. Así que cuando se enfrenten a un problema al que no se haya enfrentando nadie, no sabrán qué hacer.
Voy más allá, en el futuro podríamos llegar a un punto en que nadie sepa cómo funcionan las cosas. Que dependamos de sistemas que nadie es capaz de arreglar, modificar o reemplazar.
Yo he estado en un FP de grado superior y en la universidad (en informatica en los dos sitios) y puedo decir con conocimiento de causa que en la universidad no te enseñan una mierda, tienes que aprenderlo todo tu por tu cuenta. En los FP de grado superior en cambio, aprendes mucho mas porque los profesores no son unos estirados y unos gilipollas mentales como los de la universidad.
Se te nota un poco resentido con la universidad. Me parece que los estudios de la universidad igual se te quedaban un poco grandes.
Eso de decir que en la universidad no te enseñan nada, me parece fuera de lugar y sin fundamento. Yo he aprendido muchas cosas en la universidad, no voy a ponerme a enumerarlas porque no terminariamos hoy.