Hace 6 años | Por orangutan a magnet.xataka.com
Publicado hace 6 años por orangutan a magnet.xataka.com

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

spop

#2 El problema es que antes la memoria en los equipos era muy cara, ahora no hay casi límite, entonces es más fácil duplicar código que pensar en la forma de ahorrar

c

#4 yo en el curro se lo digo a mis compañeros, si tardas más en optimizar eso que un mes más de gasto en RAM, no lo hagas, ahora es más barato el hierro que la hora de desarrollo, pensando siempre en el precio final, no en lo que tú cobras.

D

#96 Déjalo, debe ser programador de Java.

squanchy

#96 Exacto. Por mucha máquina que tengas, cuando crecen los datos, el rendimiento se va a pique. Es bastante normal usar tablas de histórico para poder volcar parte de la información de una tabla principal a otra secundaria, para poder mantener un rendimiento aceptable. Y hablamos de bases de datos, que están muy optimizadas en algoritmos de búsqueda. Imagina algoritmos hechos por profesionales poco experimentados, y de prisa y corriendo. Un simple bucle que concatena cadenas, si concatenas siempre sobre la misma variable string en lugar guardar en un array para luego unirlo todo, puede hacer que la aplicación sea inusable.

Zade

#96 Bueno, también hay que acordarse que la optimización prematura es un antipatrón, que se ve por ahí a cada “crack” que hacen truños de código que no los entienden ni ellos al día siguiente

D

#4 #34 Estáis en un nivel demasiado alto para lo que se comenta en la noticia, volved a aquel momento en que la RAM era lo que hacía que tus juegos tirasen o no en el 386 y entenderéis porque Java o similares no son buenos lenguajes de aprendizaje.

D

#34 Eso vale para el desarrollo web ligero y cuando puedes externalizar los costes al usuario (desarrollo de aplicaciones).

Pero el desarrollo web es cada vez más pesado y las aplicaciones que tragan memoria dan una mala experiencia.

barni

#34 Claro, y por actitudes como la tuya es como hasta el sistema más simple escala como el puto culo o sólo funciona medianamente bien en desarrollo/test con 4 datos y revienta en producción a las dos semanas de subirlo porque a nadie se le ocurrió agregar un índice a la DB o paginar un resultset.

Los errores cuestan más y más dinero arreglarlos cuanto más tiempo pasó desde el momento en que se cometieron/se introdujeron en el código. Que pienses que el coste de optimizar es comparable al coste de la RAM que te ahorras demuestra que no has tenido que pagar por errores en tiempo de desarrollo.

s

#4 como en este mundo sólo existen las aplicaciones de escritorio...

D

#41 en las de servidor pasa exactamente lo mismo, le dices al cliente te lo optimizo en 50h (50h x 50€) o le pones otros 16gb al server... Se echa rápido la cuenta.
Hay otros entornos en los que efectivamente los recursos están más limitados y no queda otra que optimizar.

R

#62 ¿Optimizar algo en un servidor 50€?
¿Qué eres la puta sin dientes?

D

#82 Jomio hay que explicarlo todo, 50h x 50€/h = 2500€, se me olvídó el "/h," cantidades al azar por decir algo al tuntún. Con la tecnología cliente/servidor que yo trabajo depende de la pieza pueden ser 8h o pueden ser 800h, era un simple ejemplo.

ahoraquelodices

#62 Y así a lo tonto llega un día en que no puedes meter más RAM y en vez de 50 horas son 2300

D

#85 Luego se quejan de que no se les reconoce y valora. Con esas soluciones de consultor chusquero que esperen bien cómodos las palmaditas

D

#85 Depende de la complejidad de la pieza a optimizar, con meterle la RAM te puede servir para siempre jamás, o acabar siendo 4600h, o 9200h o sabe dios. Pero eso se calcula y se le ofrecen las alternativas al que paga explicándole lo que hay.

D

#4 En los mobiles, la memoria sigue siendo limitada. No caigamos en el mismo error que Bill Gates, que el mismo se arrepintió.

S

#2 ¿Qué es eso de "borrar cores"? Por lo que recuerdo, para asignar memoria se usala "malloc" y para liberarla "free".

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.

T

#6 madreee... ¿Tan bueno eres programando que nunca tuviste un "core dumped" en ejecución? Qué cosas.

x

#6 si, pero si programas en C y haces el tonto con la memoria, tarde o temprano el programa casca y te escribe un fichero "core", al menos en *nix. En los lenguajes con GC te puedes olvidar de que la memoria existe y una mierda de programa teermina de ejecutarse igual que un programa optimizado porque de la memoria se encarga otro.

D

#8 bueno, una cosa es que un programa esté o no optimizado, y otro que tenga fugas de memoria.

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: https://matt.sh/howto-c (al que, menos mal, hay gente dispuesta a rebatirle: https://github.com/Keith-S-Thompson/how-to-c-response/blob/master/README.md).

Al-Khwarizmi

#22 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 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.

D

#60
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).

D

#80 Me parece que hablas de una realidad muy dura y es que la mayoría de trabajos de informática realmente no necesitan a un ingeniero informático, y por extensión, les da lo mismo a alguien que se haya sacado la carrera a duras penas.

D

#80 si programas en C++ y usas new y delete, seguramente estés haciendo algo mal. Busca el concepto RAII.

d

#60 Pues yo no acabo de ver bien que se aprenda que la memoria es limitada en un asignatura de sistemas operativos en lugar de "troncales" de programación.

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.

D

#22 Las fugas de memoria y el oom_killer también afectan a Java.

En Java también puedes tener problemas de memoria, solo que son mucho más oscuros y difíciles de resolver. Por ejemplo nunca pongas un new en un bucle.

barni

#8 Error. En un lenguaje con GC hay varias cosas que pueden salir mal y pueden agotar la memoria de la misma manera que te ocurriría en un lenguaje sin GC. Si en Java no usas los Soft/Weak References donde corresponde te puede ocurrir que te queden referencias duras a objetos que creías haber descartado. Esos objetos se acumulan y terminan por consumir todo el heap.

r

#6 speaker en meneame hay mucho self learned con nivel de inglés medio-bajo que usa expresiones como o. a c, borrar cores y Core dumped... El problema es que filtran de Menéame a la realidad y luego los tienes que aguantar en el mercado laboral.

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.

r

#53 Si no critico a los autodidactas en concreto sino en general los antipatrones de los desarrolladores de uno y otro tipo. Y eso de empezar a soltar palabras que no son las correctas es tan de autodidacta. Los ingenieros obviamente tienen tambien lo suyo, de hecho lo de ametrallar a acronimos estupidos es muy de ingeniero (bueno, más de jefe con estudios no técnicos).

dreierfahrer

#42 El sector es una mierda EXCLUSIVAMENTE porque esta lleno de mierdas que no mueven un dedo por sus derechos.

De nada.

Jokessoℝ

#42 He visto miles de "titulados" sin capacidad de hacer nada en ningun campo de los que se le supone conocimiento, y unos pocos de autodidactas que eran unos putos máquinas en su campo concreto. Esos son los que se buscan, como una aguja en un pajar.

J

#2 que funcional sea una mierda, es tu opinión, que no comparto. Que esté de "moda", llamarlo así lo dudo mucho.

D

#15 Venía a decir lo mismo. Los lenguajes funcionales son tan viejos como los imperativos, y si ahora están "de moda" es porque se está viendo que la programación funcional es útil. Si hasta C++11 tiene lambdas...

D

#48 #15 la ventaja de los lenguajes funcionales se ha hecho evidente con la llegada del big data, el modelado de datos y la programación basada en redes neuronales. Y tiene visos de explotar definitivamente en los próximos años gracias a la programación no lineal y la IA

dreierfahrer

#74 La verdad es que no...

Es la ultima moda. Sin mas. No tiene pinta de nada mas. El ultimo tren de hype que pasa por la estacion de las ilusiones.

Tiene su utilidad, es cierto, pero sacarlo de ahi es ridiculo...

Pensar que el codigo va a ser mejor por ser un lenguaje funcional es no tener memoria.

Lo util y lo correcto es mezclar ambos conceptos. A eso es a lo que se va a tender.

D

#48 el verdadero problema de C++11 (ahora ya C++17) es que nada te impide seguir programado "como siempre",
incluso con funciones en C puro y duro.
Pro lo demas, si te ciñes a los nuevos estándares, es una gozada

sauron34_1

#2 pues para mí no se ha sabido siempre, hoy en día tener que estar gestionando memoria (cuando hay básicamente de sobra) en vez de centrarte en la solución de lo que quieres arreglar es una perdida de tiempo y de recursos. Llámame loco.

s

#20 claro para que optimizar... más madera!

D

#44 exacto, luego salen engendros como windows vista

sauron34_1

#44 obviamente tampoco he querido decir eso. Pero que Java es perfectamente usable para la mayoría de entornos, pese a no ser el lenguaje mas optimizado, es un hecho (por eso se usa en todas partes) . Eso no quiere decir que tengamos que programar sin tener en cuenta el rendimiento, eso nunca, claro.

D

#20 No sobra. ¿Has escuchado hablar del concepto "deuda técnica"? El sector de la informática se está endeudando de forma masiva. De momento los intereses ya los paga la ley de Moore pero se le va viendo ya el cansancio.

sauron34_1

#299 del comentario #20

frankiegth

Para #2. Si buscas programadores que resuelvan problemas en empresas en general, Java es la opción natural en muchos casos.

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.

Rima

#38 Ya sé que no tiene nada que ver con el tema pero siempre he tenido curiosidad, ¿Se dice c más más, c plus plus...?

frankiegth

#70. Se dice 'C Plus Plus'. Ante la duda usa siempre la palabra en inglés. Es lo que tiene que los desarrollos de esos lenguajes sean en esa lengua.

'... En C++, la expresión "C++" significa "incremento de C" y se refiere a que C++ es una extensión de C...'
https://es.wikipedia.org/wiki/C%2B%2B

EsePibe

#116 #70 #72 #89 Podéis decirlo en ingles o en castellano, siempre y cuando no mezcléis lenguajes.

Mucha gente dice "Ce plus plus" en lugar de "Si plus plus" y queda raro.

Aunque supongo que quedaría peor decir "si mas mas"

D

#70 "C plas plas" y los de rrhh de la entrevista te hacen la ola...

D

#70 yo he dicho toda mi vida C plus plus (algunos dirían Si plas plas), pero actualmente a veces digo C más más porque aunque no quiera se acaba uno siendo influido por los "modernos" Ademas de que mucha chavalada les dices C plus plus y seguramente ni saben de que les hablas

C

#70 /Si plas plas/ en inglés, en español he oído "ce más más".

E

#70 Siempre lo he conocido, en español, como C más más. No recuerdo a nadie llamarlo C plus plus en la carrera.

x

#38 #45 #47 estamos hablando de aprender a programar, no de poner un programa en produccion, de meterle en la cabeza a los novatos conceptos y que los usen para ordenar sus ideas y escribir un programa bien. Ya tendran tiempo de malearse con objetos, funcionales, singletons y las gilipolleces que esten de moda en los blogs en ese momento como las lambdas o los "final" de las declaraciones de los metodos en lenguajes que pasan parametros por valor. De lo que se trata es de enseñar a programar.

#47 pues yo creo que para aprender que sea estricto es una ventaja. Que puedes usar variables globales, desbordar arrays y cosas asi, pues tambien me parece bien. Saber cuando es mejor declarar como global ese enorme array para no pasrlo a los procedimientos es perjudicial porque te desborda la pila y cuando hay que hacer las cosas bien me parece un buen aprendizaje, igual que saber que tienes que controlar los finales de los bucles. De python me gusta que te obliga a sangrar bien, pero para aprender nada mas, precisamente porque te da mucha libertad. Yo sigo hablando de un lenguaje para aprender a programar...

D

#2 Pascal es una mierda pinchada en un palo, no lo usa nadie ni nadie ha programado nada jamás con eso
puestos a aprender a programar podemos volver al lenguaje ensambador o quizá al cobol

n

#45 Pues con el lenguaje ensamblador se aprende bastante bien cómo funciona un ordenador.

D

#45 para Pascal tienes Delphi/Lazarus, y se usa muchísimo más de lo que mucha gente piensa. Mucho software popular está hecho con esos compiladores.

j

#45 Hasta no hace mucho en la facultad de Coruña se enseñaba a programar en Pascal, y Delphi (que es prácticamente lo mismo) se utiliza aún bastante. Para aprender es un lenguaje que está muy bien, muchísimo mejor que C.

Mejor eso que engendros como el "C+-" que usan en la UNED...

D

#45 Delphi fue el lenguaje que use en el trabajo que mas me ha durado y era una brutalidad que tenia unos controles visuales a años luz de cualquier otra cosa.. anda que no he echado de menos esa facilidad muchas veces a lo largo de mi carrera.
Tambien me las he tenido que ver con el COBOL ... por suerte solo fueron 8 meses y conservo el uso de las falanges.
Ensamblador en mis años mozos , era divertido pero no te enseña a manejar proyectos realmente complejos.
Lo que no entiendo es para que tipo de tarea puede ser ideal el Java... para mi combina lo peor del COBOL y del C, pero bueno , para gustos , lenguajes.

D

#47 A mi no me agrada pascal para empezar, pero también diré que muchas cosas de las que mencionas si son muy didácticas, muchos de los problemas que mencionas son principalmente porque el que tiene que mantener las "reglas" del juego es el programador. No hay que olvidar que hablar de público o privado no deja de ser una forma de organización en la que estableces un contrato sobre como vas a acceder a ciertas variables y eso tiene que entenderlo el alumno.

Por ejemplo en java, no puedes acceder a algo privado porque no te deja, no porque tu sepas que no deberías.

i

#47 Es go (golang) una opción?

jorgemf

#2 > ...mierda de funcional...

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.

x

#54 a ver, la tendencia no es la programacion funcional. La tendencia (academica, no real) es la programacion imperativa de toda la vida metiendo funciones declaradas inline de vez en cuando. Aunque no lo creas, una lambda no convierte tu programa en "programacion funcional".

Y por cierto, si usaras funcional pura te darias cuenta de que se llena la pila por la recursividad. Y eso tambien te deja un core.

D

#2 cada lenguaje responde a una necesidad, y del mismo modo que Pascal tenia como objetivo la educación en programación imperativa, los lenguajes funcionales responden otras necesidades académicas y prácticas.

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.

x

#58 Si yo no digo que no se enseñe, ojo. De la universidad deberias salir habiendo estudiado un lenguaje imperativo, uno de objetos, uno funcional, uno de script, etc. Por lo menos. Y despues, un par de lenguajes que se usen en ese momento en el mundo real. Y muchas otras cosas mas, claro.

Yo lo que digo es que no se debe enseñar a programar usando funcional. Ni objetos. Aprender a programar deberia ser ordenar las ideas, hacer las cosas en orden, cerrar lo que has abierto, liberar lo que has reservado, entender que pasa para que tu elegante linea funcione... O sea, saber programar y ser ordenado. Y para eso el pascal viene muy bien. Lo acompañaria con un ensamblador para que asociaran lo que escriben con un lenguaje de alto nivel con lo que pasa en realidad, pero esto creo que es una batalla perdida.

Primero, aprender a comer. Despues, probar todos los sabores.

D

#2 la mierda del funcional. ¿Cuánto rencor no? Precisamente muchísimos de los problemas existentes en la programación hoy en día son debidos a la no utilización de conceptos funcionales: poca reutilización y composición, baja escalabilidad, y bugs por todos sitios debido a la dificultad de razonar en software concurrente por la mutabilidad, así como la falta de un sistema de tipos medianamente cuerdo.

"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

D

#2 Que usen PHP, se enseña a gente en diseño web y se aprende fácil. Luego de ahí puedes interesarte por lenguajes de nivel más alto y especializarte, o ganarte la vida con él, que se usa mucho en ecommerce y otros.

D

#2 Justo venia a decir lo mismo: Pascal. Y utilizando el libro "Algoritmo +estructura de datos = programa"

D

#2 Sí, yo creo que van a repetir el error pero con otro lenguaje.

KimDeal

#2 y no hace falta volver a Pascal o C. El Python es una excelente opción para iniciarse y mucho más molona para la gente joven. E incluso php.
Empezar con php estructurado, pasar a php orientado a objetos y luego ya si eso a Java. Pero nunca nunca empezar por Java.

orangutan

#66 Javascript FTW

Dovlado

#76 lol

LaInsistencia

#76 Oye, pues poca broma. Javascript bien aprendido es un puntazo, y desde que Node.js esta dando la chapa hay un ecosistema bastante majo. Pero claro, lo de usar prototipos en vez de herencia es un mindfuck como te pille con el pie cambiado...

D

#76 cuanta maldad lol

asfaltaplayas

#5 Es lo malo de vivir en una época en la que el esfuerzo personal está mal visto, y hacer estudiar a de verdad es casi maltrato infantil.
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...

https://www.elconfidencial.com/alma-corazon-vida/2013-10-08/solo-uno-de-cada-tres-espanoles-sabe-leer-un-texto-largo-o-comparar-ofertas_38387/

D

#27 Algo que no me agrada es cuando parece que toda la motivación tiene que venir por parte del profesor. Así lo que consigues es un burro que solo se mueve si le pones una zanahoria delante. No me parece mal que los profesores se esfuercen en motivar a los alumnos o hacer contenidos atractivos, pero no todo puede ser motivar al alumno, su principal motivación debe ser interna y tiene que buscarla él.

D

#5 amen

D

#5 A mi personalmente me parece que Java es una buena opción, sobretodo para darse cuenta si te gusta la programación o no. Yo empecé con C y todo bien, cuando pasé a Java vi que no me iba ese rollo, demasiado léxico, así que me pasé a robótica con Siemens y todo guay. ^_^

orangutan

#68 Java es una buena opción para odiar la programación.

D

#81 Si es un problema realizar algoritmos con POO seguramente esa persona no debería programar. No va a ser feliz.

D

#5 Scheme es del MIT. Intenta acabarte el SICP. Qué narices, ni en un finde haces dos lecciones.
Ojo, el SICP es DURO.

neo1999

#5 Perdón por el negativo. Te compenso en otro.

D

#5 El mundo se va a la mierda. Si la gente pudiese ver las chapuzas montadas de cualquier forma que manejan sus datos...

La conbinación de titulitis + demanda de programadores lleva a esto. Hay que repartir papelitos a toda costa y pasa lo que pasa.

Vensier

#5 pues hay otros de programación por bloques muy potentes, app inventor.del MIT bloky de google, Snap! De Berkeley... Para empezar a programar los veo bien

orangutan

#79 https://es.wikipedia.org/wiki/Python : Sistema de tipos  Fuertemente tipado, dinámico
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.

jorgemf

#87 Python tiene tipado dinámico, que es todo un coladero de bugs con programas de mediano tamaño. Para un script genial pero pasando de eso es un dolor de muelas. Y el IDE poco puede hacer para ayudarte porque puedes pasar cualquier tipo de datos a cualquier funcion y solo falla cuando se ejecuta.

A mi personalmente no me gusta para proyectos que pasen de las mil lineas de código. Me ha dado muchos dolores de cabeza.

No se puede forzar a alguien que esta aprendiendo a que los tabuladores o espacios tiene significado en un programa, es un poco locura. Sobre todo porque no se ven. Y no vas a poner a alguien que empieza a usar un IDE, asi poco va a aprender.

llorencs

#79 #63 #173 Python es de tipado fuerte, tipado dinámico

Si yo por ejemplo defino una variable como
a= 8

Y luego intento guardar en esa variable
a= "b"

Me va a dar un error de type mismatch, porque espera que esa variable a sea un entero, en vez de una cadena de texto.

Confundis tipado dinámico/estático con débil/fuerte. Python es de dinámico fuerte. Dinámico, en el sentido que no necesitas declarar las variables que vas a usar, pero las necesitas inicializar, y si no has declarado una variable de alguna manera, te va a petar el programa.

por ejemplo, intenta usar:
a=8
c=a*b
Te va a dar un error, porque b no ha sido definida en ningún lado.

Shotokax

De los lenguajes que conozco, Python me parece el más adecuado para aprender.

orangutan

#57 Python no es antiguo y tiene tipado fuerte.

s

#63 tiene tipado wtf!

D

#63 Algo que por cierto no me agrada nada, es como que, bueno, programa y no te preocupes por los tipos, pero TENGO tipos y te los voy a escupir a la cara en cuanto pueda.

jorgemf

#63 Python es del 91, java del 95. Ahí te lo dejo. Python no tiene tipado, ni javascript tampoco.

Shotokax

#57 #71 no estoy de acuerdo.

Para empezar, coincido con #97 y #157: creo que obligar a tabular correcta y coherentemente es bueno para el que aprende.

Por otro lado, creo que el que está empezando no necesita aprender a programar "cosas serias", sino cosas sencillas y centrarse en lo básico en lugar de perderse en detalles como el tipado, acerca del cual se puede profundizar más adelante con otros lenguajes.

D

#97 Pregunto desde la ignorancia ¿Es necesario tabular, no se pueden omitir las tabulaciones?

neotobarra2

#97 Pues yo le tengo que dar la razón a #171. No se me olvidará nunca la primera vez que escribí algo en Python, para modificar a mi gusto un mod del Civilization IV (que hace uso de ese lenguaje, entre otros). No tenía IDE, así que usé el Notepad++ para hacer los cambios. Era bastante sencillo: desencadenar una declaración de guerra en varios turnos concretos. No tenía ni que inventar nada, sólo copiar el código de otros eventos similares ya existentes y modificarlo pertinentemente. Bueno, pues no funcionaba, y el motivo era precisamente ése: yo uso el tabulador para las indentaciones, y el código original usaba espacios en blanco. Parece ser que cuatro espacios en blanco no son interpretados de la misma forma que un tabulador por Python, aunque a simple vista parezcan lo mismo. Pero yo no tenía ni idea de eso. Encima el error me saltaba en tiempo de ejecución (mi única forma de probar el código era abrir el juego y ver qué pasaba), menos mal que entre el log del juego que me avisaba de un "error de sintaxis" y el observar que podía modificar cualquiera de las líneas existentes ya que sólo petaba al añadir una nueva, me dio por caer en la cuenta. Pero recuerdo estar mucho tiempo repasando el código como loco y haciendo pruebas por culpa de esa tontada.

Puede que lo de forzar al desarrollador a indentar bien el código (porque supongo que es por eso por lo que Python implementó eso) sea una buena idea. No lo voy a discutir. Pero si no lo sabes, y no tienes esa costumbre, puede ser un problema; y es un problema aún mayor si resulta que no hay una equivalencia entre espacios y tabulaciones aunque visualmente no haya diferencia.

D

#11 Si vas a enseñar a progranar, que aprendan a programar con un lenguaje de programación, que luego ves en las empresas barbaridades infumables hechas con Python.

BodyOfCrime

#71 Como el buscador de Google!

D

#73 Dudo que el buscador de Google esté hecho en Python, como mucho lo habrán utilizado para algún módulo suelto.

D

#11 Go.

dreierfahrer

#11 Para nada:

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.

llorencs

#95 Pascal es mejor para aprender y se parece mas a pseudocódigo.

Python por sintaxis tampoco me parece malo, pero luego tiene el problema del tipado, ya que si, creo que debes tener unas bases y el tipo estático es el mejor. Lo que nos lleva a Pascal o Ada, que es el lenguaje que se usaba en la UIB.

Shotokax

#95 C es demasiado enrevesado para el que está aprendiendo. En mi opinión es un lenguaje mucho más adecuado para gente que ya tiene nociones. Y te lo digo porque yo aprendí con C.

D

Me encantan esas comparativas de lenguajes y framework que se basan en comparar hello worlds.

Pues ale, a crear empresas de hello world.

ElPerroDeLosCinco

#31 Lo del "hello world" aquí es pertinente porque no se trata del uso empresarial de la programación, sino de cómo empezar a aprender a programar.

frankiegth

Tonterias.

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.

D

#26 No confundas miedo con el asco. Y sí, una de las peores decisiones que se tomarón en Android fue elegir Java.

frankiegth

#83. Android dispone de un SDK de Java y de un NDK de C y C++ para aplicaciones nativas :

'...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
NDK : https://developer.android.com/ndk/index.html
SDK : https://en.wikipedia.org/wiki/Software_development_kit

D

#86 Por mucho NDK que uses Android sigue siendo Java y todo la interacción con la interfaz, etc, es en Java.

frankiegth

#162 Y aunque así fuera en parte, ¿cual es el problema? ¿es qué funciona mal? ¿es desesperadamente lento? ¿no vende?
(CC #86)

frankiegth

#169. Android es un compromiso entre coste por hardware y coste por software que cumple su propósito. A mi tampoco me parece perfecto ni la panacea, pero desarrollar al nivel que pides sin duda encarecería el producto y no cambiaría sustancialmente la experiencia de uso al usuario profano en materias de computación.

Para todo lo demás un portatil o un PC de sobremesa.
(CC #164 #86)

s

#86 Algo extremadamente difícil de hacer con Android es programar módulos con el ndk y el resto con el sdk.
Cualquier aprendiz abandona el día uno si le metes en semejante berenjenal.
iOS lo resuelve mucho mejor... Tienes una librería compilada en C y Objective-c o swift te la leen al añadir los headers.

Cuando programas para una plataforma móvil el lenguaje es secundario. Lo relevante es manejarse con el entorno de desarrollo/ide... Conocer el sdk, los widgets, las interacciones etc. Ahí el primer lenguaje que aprendas da igual.

Con C aprendes a programar desde el cimiento. Y tardas mucho en hacer algo que mínimamente sirva para algo.

Con python o javascript muy rápidamente haces algo que sirva para algo pero te saltas toda la complejidad.

Personalmente no usaría un lenguaje para aprender a programar. Usaría dos: uno compilado, fuertemente tipado, y otro interpretado y dinámico.

D

#83 ¿Qué hubieses elegido para Android?

T

#12 lol

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.

sauron34_1

" Por eso es un error enseñar con Java porque los programadores no tienen idea de lo que están haciendo" WTF. Si el profesor sabe explicar bien los conceptos de programación, porque los programadores no van a tener ni idea de lo que están haciendo? Por no tener punteros? Venga va, a otro con la monserga del abuelo cebolleta.

katinka_aäå

#18 La única piedra es que en el Hola Mundo ya tocas las clases, los atributos, los modificadores de acceso, los métodos, sus argumentos y retornos y los métodos estáticos. Si salvas eso o pasas de puntillas, no sé dónde está el problema. Se les supone un nivel a los universitarios.

sauron34_1

#25 claro, eso se explica diciendo: esto lo volveremos a ver más adelante. Y luego, cuando se enseña cada uno de esos conceptos, se vuelve al Hola Mundo, que encima será un sitio ya conocido. En mi opinión, si empiezas con un lenguaje que tiene punteros, vas a marear más que otra cosa.

s

#18 Python no tiene punteros, no es verbose, los conceptos de estructuras son más rápidos y sencillos de implementar, se puede crear aplicaciones interesantes con más facilidad y menos líneas de código,etc.

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.

D

#56 En general estoy de acuerdo, pero también pienso que python tiene mucha magia entre medias, y eso también puede ser contraproducente. No te olvides que al final lo que se intenta es educar a un profesional, si es por escribir líneas de código y hacer cosas, pues igual no necesitas ir a una universidad para aprender python...

sauron34_1

#56 el problema es que en el mundo laboral, al final tendrás que aprender Java. Porque no aprenderlo desde el principio?

orangutan

#84 Ya sabes, soy programador

D

#91 Sí, creo que lo que escribe es klingon.

T

#24 yo con BASIC, como un campeón y a pesar de lo que dijese el impresentable de Dijsktra

D

Lo de Standford además de antiguo es mentira, no va a sustituir su curso, simplemente ahora da la posibilidad de hacer el curso de introducción en Javascript o Python además de en Java. Lo que al final sigue siendo irrelevante porque el resto de cursos se dan en C++. Siendo una noticia de inicios de Año en Xataka ya se podrían haber informado un poco más.

avalancha971

Yo aprendí Java, luego C y luego C++. Creo que es un buen orden, pero no habría estado mal empezar con algún lenguaje de script más sencillo antes de Java.

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.

D

#c-51" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/2880527/order/51">#51 Aquí lo clásico era :

1.-Llegar a clase
2.-Ver llegar el profesor 30 minutos tarde con un café y un diario
3.-Encender el proyector y colocar un pdf.
4.-Leer el pdf.
5.-Decir que "aprender a programar se tarda una tarde, aprender a dominar el código se tarda toda una vida" al final de clase.
6.-Recordarnos que miremos el moodle para las practicas y adiós.

Desde entonces, universidad online, la mejor decisión de mi vida. Por suerte, pasé antes por un CFGS, y allí nos enseñaron pseudocódigo en papel seguido de C, Java, HTML, PHP, CSS, JavaScript, C#, algo de Python y otros "códigos" que ya ni recuerdo el nombre.

s

Java tiene una API gigante que para cualquier cosa que quieras hacer, ya existe una función y si encima lo usas con IDEs modernos que te autocompletan todo... ya ni te hace falta saber como funciona una lista.

Pero bueno, creo que cada punto de vista tiene su lógica.

orangutan

@blacar@nemeameangelitoMagnoangelitoMagno He tenido que autodescartar la anterior noticia Las universidades de EEUU al fin lo han reconocido: empezar a programar por Java es una mala idea

Hace 6 años | Por orangutan a magnet.xataka.com
porque el enlace no se abría bien desde PC, y esperar 30 minutos para volver a publicarla con el enlace corregido porque según menéame:
"Ya has enviado un enlace al mismo sitio hace poco tiempo - Debes esperar 30 minutos entre envíos al mismo sitio."
CC ur_quan_masterur_quan_master@apple3

Findeton

Mi primer lenguaje fue Visual Basic. Me lo enseñó mi padre a los 11-12 años. A los 14 o así me compré un libro de C++ (mi padre no le daba a eso) y ese fue mi segundo lenguaje.

Trom_petas

¿No es es php la foto de portada del artículo?

D

#28 Sí, el artículo trata sobre Java, así que lo mejor es poner una foto de código PHP para ilustrarlo.

J

Que aprendan programación funcional. Haskell, por ejemplo. Luego no lo van a usar, pero los conceptos los pueden usar en casi cualquier lenguaje y seguro que les cunde.

Al-Khwarizmi

#14 Yo creo que alguien que se tome la informática en serio tiene que aprender programación funcional en algún momento, pero no al principio. Simplemente porque el modelo imperativo ("yo le voy dando instrucciones a la máquina, le digo haz esto, y ahora lo otro...") es mucho más sencillo conceptualmente que definir funciones matemáticas que te devuelvan lo que quieres.

barni

#67 El funcional es una muy buena introducción a la programación para alguien que ya viene con cierta base de matemática. Haskell en particular tiene una sintaxis muy cercana a la manera en que se expresan funciones matemáticas, lo que trae aparejado que puedes explicar conceptos de algoritmos usando conceptos matemáticos como ejemplos.

El problema de hacer algo funcional PURO a la hora de empezar a aprender a programar es que si quieres hacer algo medianamente serio y bien tienes que meterte en conceptos bastante complejos como monoides, mónadas (que son una puta pasada y tienen paralelos directos con otros conceptos matemáticos como la teoría de grupos), functores y demás pijerías.

Lo que sí es cierto es que casi cualquier introducción a la programación debería centrarse en enseñar los rudimentos del pensamiento lógico, arquitectura de ordenadores, algorítmica, estructuras de datos, etc, y dejar las características "especiales" de los lenguajes para mas adelante.

Mannu

"Las universidades de EEUU al fin lo han reconocido: empezar en matemáticas por las derivadas es una mala idea."

D

#32 Y la solución que proponen es enseñar a usar wolfram alpha...

raistlinM

Yo creo que el problema de fondo es que ha terminado "ganando" la teoría de que la Universidad debe preparar para el mundo laboral y no debería ser así.
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.

orangutan

#64 Pues la teoría de que la Universidad debe preparar para el mundo laboral parece que aún no ha ganado si las universidades de EEUU dicen que java no es adecuado para aprender a programar.

D

A mi no me parece algo tan simple, por ejemplo en python te encuentras de repente con que hay mucha magia de fondo por otra parte javascript es de lo más cerdo por todas las barbaridades que te permite hacer, y si empiezas por C también tienes que dar cierto salto de fe a la hora de escribir tu código.

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...

D

#93
Como si no hubiera magia en Java lol lol lol, más que en Python.

D

Que prueben con javascript, que el ecosistema ahora es facilito jajajajaja

raistlinM

Lo que se ve en los comentarios es que hay mucha gente programando que no debería estar currando en ello, madre mía que cantidad de despropósitos.

v

Ada FTW!

Lochi

#33 Ufff, nunca comprendi el amor por ADA. Tuve asignaturas de Sistemas Operativos en la Universidad con ADA y esas enormes cadenas para pasar entre Bounded y Unbounded String me parecia de todo menos una forma optima de programar.

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.

C

#33 En mi universidad enseñaban con Ada. De estudiante no entendía por qué, si es un lenguaje que no se utiliza apenas, pero después vi que para aprender es un lenguaje muy adecuado. Tiene de todo y se puede aprender de manera escalonada: tipado fuerte, punteros, orientación a objetos (que no utilizas si no quieres) y concurrencia a alto nivel (barreras, monitores), así que yo recuerde.

Zeioth

Mis primeros lenguajes fueron C# y Python y no podría recomendarlos mas.

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.

D

#c-40" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/2880527/order/40">#40 El C# uno piensa que es un buen lenguaje, porque en principio te permite crear codigos más robustos, hasta que te das de narices con el problema de los stuttering.
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.

Zeioth

#c-94" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/2880527/order/94">#94 En medida de lo posible C# protege al programador de si mismo. Es un lenguaje que evita al programador amateur cometer muchos errores comunes, y eso es bueno para adquirir buenos habitos.

En cuanto a lo de aplicaciones en tiempo real... El rendimiento de C# es muy alto. Hay pocos casos en los cuales hay que realmente necesites recurrir a lenguajes de bajo nivel. Ya depende de la finalidad del programa.

BodyOfCrime

Se lo dije hace uans semanas a una profesora mia del master y se puso en modo egocentrica sabelotodo.

T

#3 yo hace lustros que lo digo. El día que me enteré que habían cambiado de Pascal a Java lo flipé. Si es aprender el objetivo, como si es pseudocódigo, aunque tiene que después traducirse a algo compilable.

BodyOfCrime

#10 Hay gente que se ha quedado anclada en Java y de ahi no los sacas. De programacion no tengo mucha idea pero algo con lo que se hizo el Minecraft no puede ser bueno

Cyrus_

#10 Yo empecé con Pseudocódigo -> Pascal -> C++ -> Java

M

es cierto, lo mejor es hacer como yo, que empecé programando en html y css

D

#17 Querrás decir "programando"

katinka_aäå

#19 #17 En el currículum luce mucho lo de programación en html. Excepto si es para un trabajo de programador, claro.

L

#17 Yo empecé programando un despertador

keylogger

#23 Yo un vídeo VHS

v

#30 yo una calculadora Casio.

v

#30 yo haciendo unos programas Beta...

f

#17 Yo empecé con un software que facilitaba mucho la creación de aplicaciones: NeoBook. Luego en mi afán de aprender a crear plugins para NeoBook que amplían enormemente las funciones de las aplicaciones que creas, me metí a aprender Pascal con Delphi, imagínate chiquita transición cuando el lenguaje de NeoBook era un poco a lo Python, las variables no tenían nunca tipo y en Delphi había que definirlo todo, y los plugins usaban mucho los PChar para comunicarse con NeoBook lol los plugins en esencia eran librerías DLL.
Actualmente no trabajo de programador ni tengo título, pero a veces cuando lo necesito creo aplicaciones para uso personal con Lazarus, también he aprendido algo de Python y scripting bash.

PD: Bueno, y antes de NeoBook, aprendí un poquito de cracking de programas jaja, assembler puro. Cambiar JE por JNE y viceversa, CALLs a NOPs, y poco más lol

Ñbrevu

Lo que mola es empezar con Div2 .

Sí, soy un abuelo cebolleta, lo admito.

D

#36 PDP7 ftw

habitante5079

Esto ya lo decía Niklaus Wirth hace 40 años... por eso diseñó Pascal y luego Modula-2 para enseñar a programar a sus estudiantes.

s

#16 hace 40 años existía Java? Jaja

Idiocrata

Se introduce a la idea de que es mala práctica enseñar Java con el argumento de que con pocas instrucciones haces mucho. Pero luego promueven Python como lenguaje alternativo. WTF?

D

#92 En este artículo no he visto lo que dices, se dice esto:

"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"

Algo que en mi opinión también es un problema de python también, en cuanto quieres hacer cualquier cosa con un mínimo de utilidad estarás usando instrucciones con mucha magia por debajo.

Idiocrata

Pdp11 y así fijo que sabes lo que estar haciendo lol

Cristina_Conti

#99 echale un ojo a hackmem

1 2 3 4