Un estudio realizado entre los departamentos de ciencias de la computación de las principales universidades de Estados Unidos, muestra que Python se ha convertido en el lenguaje más popular a la hora de realizar cursos de iniciación a la programación, por delante de otros como Java, MATLAB, C, C++, Scheme o Scratch. En el análisis realizado por Philip Guo, en el que se incluyen centros tan prestigiosos como la Universidad de Berkeley, Stanford, Carnegie Mellon o el MIT de Massachusetts, muestra que en 8 del Top10 de departamentos de ...
Comentarios
Me encantan estas noticias sobre Java porque sus comentarios sirven para identificar a los que se las dan de entendidos y no tienen ni puta idea. Normalmente te hablan de applets, Swing/AWT, o de lo "lento que es y la memoria que consume". No saben que el 99,99% de aplicaciones escritas en de Java son aplicaciones web, sobre todo empresariales, donde Java es dominador absoluto desde hace años. Me doy cuenta de que estos comentarios vienen en muchas ocasiones de estudiantes de informática que van de hackers por la vida.
Incluso a los que no les guste la sintaxis o paradigma orientado a objetos de Java, la máquina virtual sigue siendo una plataforma excelente y se pueden aprovechar todas sus ventajas con otros lenguajes como Scala, Clojure o Groovy, sobre todo ahora que la programación funcional vuelve a estar en boga.
PD: lo del tipado estático es más bien un tema de gustos personales, no es objetivamente peor ni mejor.
PD2: sí, Java en escritorio fracasó, pero de eso hace ya 15 años, ¿podemos mirar hacia adelante?
#31 Existe mucho odio irracional contra Java, normalmente nadie explica los argumentos. Creo que la gente simplemente repite lo que oye. ¿Tienes alguna fuente relacionada con el dominio de java en el ámbito que comentas?
PD. Python es muy potente y práctico. La verdad es que me sorprendió gratamente cuando empecé a trabajar en ese lenguaje.
#35 De este mismo Julio, estudio del IEEE:
http://spectrum.ieee.org/static/interactive-the-top-programming-languages
Algo más local, busca abajo 'Tecnologías más demandadas' (de la lista, relacionadas con Java son J2EE, Struts, Eclipse, JBoss):
http://www.tecnoempleo.com/
#48 Que sea el más usado no quiere decir nada. Yo personalmente lo detesto, detesto Eclipse y detesto Swing. Igual con JavaFX cambiaría mi percepción, pero el caso es que tengo que mantener un aplicación hecha en Swing y es una puta pesadilla, come memoria como si no hubiera un mañana, el mero cambio de color de un puto label o columna de una tabla es una odisea. Lo odio.
#18 ¿Y no te da qué pensar el hecho de que las empresas empiezan con los lenguajes de moda y cuando ya están establecidas acaben usando Java?
#90 Si realmente tienes curiosidad por saber qué tiene de bueno Javascript, te recomiendo leer a Crockford y a John Resig. Javascript es uno de los lenguajes más incomprendidos: por el nombre y la sintaxis la gente lo asocia con Java, pero como dice Resig: "Javascript is to Java as hamburguer is to ham". Y sí hay buenos IDE: WebStorm, the IDEA, tiene un autocompletado y un parseo en tiempo real que rivaliza con el de otros lenguajes menos dinámicos. Por cierto, no es orientado a objetos, es más bien funcional. Por cierto, sí hay una librería estándar, otra cosa es que sea pequeña y el estándar de facto en navegadores sea jQuery (y ahora Angular).
#26 No has trabajado mucho con Java, verdad? Todo el API de Java 1.0 funciona en Java 7. Cuando marca algo como "Deprecated" es porque desaconsejan usarlo, no porque no puedas hacerlo. Precisamente una lacra que Oracle está pensando en reducir es la retrocompatibilidad, están pensando en reducirla para la versión 9 y dejar de soportar Java 1.4 y anteriores (ya toca, por cierto). Y la verborrea de Tomcat, Jboss o cualquier otro "container" se corta configurando el log.
#78 Vamos, que te has encontrado una aplicación hecha con el culo y antigua y por eso detestas el lenguaje con la que está hecha. Swing no es lo más bonito de Java, pero es que en general la interfaz gráfica suele ser la parte más fea de implementar. JavaFX mejora lo existente, pero no es la panacea.
#81 Apenas lo he tocado, pero Go es más cercano a C que a Java (no es orientado a objetos, es puramente imperativo). De hecho, la idea de sus creadores (trabajadores de Google ) era dejar de usar C y usar Go por su sintaxis más intuitiva y cómoda, sobre todo cuando trabajas con multithreading.
#34 #76 #91 #106
Trabajo en un proyecto en Ruby con 144183 LOC, y ninguno de los programadores sacrificaría comodidad y velocidad a la hora de escribir código por tipado estático, si acaso el tipado de Go o Scala… pero nada obtrusivo como Java. Dame facilidad a la hora de escribir tests y no hacer el trabajo al compilador.
Tipado dinámico no implica que la gente haga barbaridades a=10 y luego a='string' , hay code reviews y al programador se le supone profesional.
O vds. programan sin code reviews?
Lo siento no me ayuda a escribir código más robusto un Map h = new HashMap; frente a h =
He trabajado en proyectos java para la administración, con CERO líneas de tests, pero eso sí, sus generics perfectamente declarados. Perdonen, pero eso no es un código robusto.
No entiendo por qué se insiste que java es bueno para aprender porque es orientado a objetos: Python también lo es, y permite empezar desde ya en la REPL, sin tener que compilar NADA. A alguien que empieza en la programación no le necesitas complicar la vida desde el primer día. No me imagino un taller de programación de barrio como los que hay en USA/UK con java: se usa algo no compilado por un motivo.
En la universidad? Perfecto: cuando uno estudia formalismos debe estudiar la base. Para alguien que quiere hacer su app web o mobile no necesita demasiados formalismos. Recuerden el BASIC de los 80s… Sin ir mas lejos, Swift versus ObjectiveC
Reconozco que la JVM es rápida pero es innegable que consume demasiada memoria. Tus procesos han de ser thread safe también.
En ciertos entornos como la programación web los ciclos de desarrollador son más caros que los de CPU. Es probable que en España no lo sean y por eso hay tanto javero.
Cuando tu producto está constantemente iterando, como es en una startup, lo que hay que favorecer es al desarrollador, no a la maquina.
En fin, para opinar hay que trabajar en ambos mundos. No vale con hacer un blog en django/rails y decir "hmmm no me gusta", eso no es comparar manzanas con manzanas. Yo me he formado mi opinión, he estado "en el otro lado", háganlo ustedes también.
#91 Menos mal que parece que alguien sí se ha enterado de qué va Javascript y ha leído a gente que también sabe de qué va.
#31 #35 Cuando consigan implementar una máquina virtual que pueda trabajar con OpenGL 4, entonces empezaré a considerarlo como lenguaje de programación
#31 Estoy contigo. Se nota la gente que está estudiando, porque son los que conocen un lenguaje o dos como mucho, no tienen mucha idea en realidad, y son super radicales con ellos, lo mejor de la muerte. Escuchan dos o tres estereotipos por ahí (normalmente sobre punteros y memoria y lo hacker que es manejarlos, que es una pijada para quien sabe, la verdad, y no tiene ningún mérito especial) y los repiten sin cesar.
Los que tienen experiencia conocen muchas cosas distintas y te dirán lo obvio (o no tanto): que para cada circunstancia hay una cosa que se adapta mejor.
#64 Gracias por aportar sensatez.
#31 Completamente de acuerdo contigo, pero esto es igual en cualquier campo. Aquí en menéame gusta mucho eso de ir de gafapasta y entendido y no tener ni idea de lo que se está hablando. Leyendo los comentarios de aquí, o la mayoría son estudiantes de informática, o han hecho alguna chapucilla en algún lenguaje y se han frustrado cuando han cambiado a otro y vieron que no era todo igual. Ese es el nivel (muchos creo que no distinguen entre máquina virtual y lenguaje, y creo que no saben que existen más paradigmas que OOP y procedimental).
30 comentarios despues, por fin algo con sentido. Bravo #31
El ecosistema Spring en general, Scala, Groovy, Gradle, Play, Camel, Maven, Jenkins para IC ... sigo?
#2 ¿Applets? ¿Navegas con netscape? Casi nadie hace applets.
#12 http://eyeasme.com/Shayne/HTML5_APPLETS/
Casi nadie, casi, pero ese casi te puede dar por culo.
#12 Casi nadie menos la administración para la puta firma electrónica. Y sí, jode mucho.
#12 ¿Applets? Las usa el Gobierno de España en esta web educativa sobre matemáticas: http://recursostic.educacion.es/descartes/web/
Por cierto, si se quisiera crear una web con la funcionalidad que dan esas applets pero sin Java, ¿qué lenguaje sería preferible?
#98 Puedes usar Flash(no, por favor).
Hablamos de las animaciones: sin plugins es solo posible estás dispuesto a sacrificar la compatibilidad con internet Explorer 8 y anteriores, y solo funcionar en Firefox y Chrome de los últimos 3 años. Sigues usando java en el servidor y utilizas HTML Canvas para dibujar. http://www.w3schools.com/html/html5_canvas.asp
#98 Usarías Javascript + HTML5 (Canvas o SVG) De hecho es lo que se usa en casi todos los sitios hoy día para este tipo de cosas. Hay que tener en cuenta que hoy día se puede usar incluso OpenGL ES en el navegador y hay librerías especializadas.
Aunque Java es el lenguaje más usado (web, móviles, empresas, etc...) he de decir que para comenzar con él es un poco lioso por cuestiones de herencia y poca flexibilidad en algunas ocasiones.
No soy experto, escucho opiniones interesado.
#1 Java será el más usado, pero yo no uso Java. Yo no quiero que alguien haga un applet para que se ejecute en mi ordenador, que se ejecute en el suyo en todo caso. Java es más peligroso que un subnormal en una poltrona.
#2 Yo lo uso obligado, aunque tampoco me quejo mucho porque al menos da experiencia útil. Me explico, me encantaría usar otros pero me da miedo que la experiencia caiga "en saco roto", aunque en el fondo si sabes programar bien en un lenguaje dominar otros es luego tarea mucho más fácil.
#1 ay, si fuera solo la herencia… en python también tienes herencia. el problema de java es compilar, tipado estático, demasiado verborreico…
#4 aprender otro lenguaje nunca cae en saco roto
#6 hay veces que los ciclos de cpu del desarrollador son más caros que los del ordenador y por eso es preferible programar rápido en un lenguaje de script.
de todos modos un tipado estático no es la panacea y no te va a salvar de incómodos null pointer exception en producción. un buen testing unitario/funcional sí, y eso también lo puedes hacer en python
FDO: ex-javero, rubista desde hace 4 años
#8 el problema de java es compilar, tipado estático, demasiado verborreico…
Precisamente por eso es un buen lenguaje para la docencia. Al compilar descubres errores fácilmente que de otra forma sólo detectarías en ejecución. El tipado estático también permite detectar errores tontos muy fácil. El ser verborreico puede ser un rollo cuando tienes mucha práctica, pero cuando estás empezando es algo que se agradece.
#15 lo único positivo que veo en java para docencia es que fuerza a emplear formalismos muy estrictos. Por eso sirve para las enseñanzas superiores.
Esto mismo es lo que destruye la productividad: no verás java en startups californianas sino en entornos empresariales muy establecidos.
Y más bien al contrario: cuando empiezas en un nivel básico es preferible obtener resultados inmediatos como lo podrías lograr con una REPL en lugar de "bien niños ahora vamos a escribir main, que devuelve void, que usa un objeto, que está en el classpath, que vamos a compilar y luego ejecutar y a la media hora vais a ver un hello world". Lo siento sigo sin verlo…
#18 Yo aprendía a programar en Pascal y C. Cada vez que podía hacer una práctica en Pascal y no en C daba gracias al cielo.
C puede que fuera mejor lenguaje pero para el que está aprendiendo y no para de dejar punteros locos por ahí es un dolor de muelas. Un lenguaje más estructurado, sencillo y riguroso como Pascal era una bendición.
Con Java pasa algo parecido, es un lenguaje ideal para la enseñanza (aunque obviamente hay que enseñar más y no solo ese). Luego a la hora de trabajar pues hay nichos para todos los lenguajes, y no creo que Java "destruya la productividad". Android se programa en Java (o pseudo-Java) y creo que el desarrollo de apps es un entorno bastante dinámico.
Lo que sí mata la productividad es programar con metodologías del siglo pasado
#19 y Ada es usado en las aplicaciones más criticas. Por algo sera.
#80 Ada fue diseñado para ser usado sobre todo en sistemas militares.
http://www.zona-militar.com/foros/threads/lenguaje-de-programacion.17150/
#18 Ya no puedo editar, pero mira este ejemplo: Twitter estaba hecho en Ruby y se está pasando a Java: http://www.infoq.com/articles/twitter-java-use
#1 Java es mucho mas estricto q python con lo cual se ve mejor el tema de herencias y tal.
Python es mas dinamico, se hace mucho mas con muchas menos lineas y esas lineas son mas cercanas al lenguaje natural.
Yo de poder elegir tambien enseñaria en python*....
Pero claro, de poder elegir haria todo en python: es una delicia.
#8 Que tiene de malo el tipado estatico? Java apesta por cosas como android y la mierda de innerclases o que no puedes tener variables que sean funciones; porque es POO muchisimo mas pura que python y al final el mestizaje siempre es mejor que la pureza.
* MENTIRA, realmente utilizaria C o C++ que ayudan mas a comprender como funciona un ordenador, una vez sabes hacer algo en C++ pasar a python es trivial... Pero es que python mola tanto... Dicho lo cual afirmo que java tiene muy mala prensa y no se porque: es un lenguaje muy claro, muy logico y muy estructurado. Ademas es rapido.
#6 #8 Java es un buen lenguaje para empezar. Recordad que la noticia va sobre lenguajes para aprender a programar, por lo tanto el tipado estático, que tengas que escribir demasiado, etc son ventajas, porque te ayuda a entender mejor la orientación a objetos, a programar estructuradamente, a poner cada funcionalidad en su propio sitio, etc.
El problema de Java en el mundo real es, aparte de lo de escribir demasiado, la máquina virtual. Todo lo que ganas en portabilidad lo pierdes por triplicado en eficiencia.
#76 Lo mejor de java es la maquina virtual, es la verdadera obra de arte. Lo de la eficiencia es un mito, mirate los benchmarks.. De hecho yo no defenderia java tanto como la maquina virtual. Hoy por hoy hay muy buenos lenguajes basados en la maquina virtual
#8 Para mí el tipado estático es precisamente una razón por la que preferir Java a Python. Que luego cada uno tiene otras ventajas e inconvenientes, pero después de haber trabajado dos años exclusivamente con lenguajes sin tipado estático, en general prefiero los que lo tienen, con mucha diferencia.
#21 Por experiencia propia: el tipado estático en proyectos pequeños o medianos es más o menos cuestión de preferencia, pero a poco que el código crezca y tengas un sistema grande, es una maravilla. He trabajado con proyectos medianos o grandes en (por orden cronológico) C++, PHP, Python y Java, y la diferencia entre C++ y Java por un lado, y PHP por otro, es abismal (aunque en Python trabajaba con cosas más bien tirando a pequeñas, 50 ó 100 KLOC más o menos). Hay refactors que en lenguajes con tipado estático son triviales y en lenguajes sin él son un puto infierno.
#39 Lo que yo creo que pasa con javascript es que, al ser el lenguaje de las páginas web, mucha gente aprendió con él y le tiene cariño (léase "están acostumbrados a la cantidad inmensa de cosas raras y WTFs varios"). Personalmente, para mí javascript es la razón nº 1 por la que no quiero volver a ser programador web . A cada cual sus gustos, supongo.
#62 Para duck typing prefiero C++ con plantillas, viene a ser lo mismo (un método acepta cualquier tipo que cumpla la interfaz que se espera de él) pero sin perder el millón de ventajas que te da el tipado estático.
#76 Lo de la eficiencia de Java es más mito que otra cosa. No llega a los niveles de C ó C++ pero se le acerca bastante y la VM ha mejorado muchísimo. Y aquí Python no es precisamente un duro contendiente . Antes sí era un lenguaje muy lento, pero de eso hace mucho, ahora lo que tiene es un tiempo algo largo de arranque (que también va mejorando) y ya.
#104 +100 a lo de eval. Es la puta peste.
Y en serio, Java no es tan malo. Puede ser feo, puede que resulte aburrido, pero para trabajar con él, es cómodo y tiene un millón de ventajas. Cuanto más grande es el proyecto, más claras se ven las ventajas de Java sobre otros lenguajes, y el tipado estático es uno de los casos más claros. Aunque personalmente C++ me gusta más. Para cosas pequeñas uso Matlab y a veces Haskell.
#2 Hace décadas que no veo un applet java en el mundo real. Java se utiliza hoy en día para muchas otras cosas, sobre todo programación en servidores, pero casi nada a nivel de cliente.
#22 Yo no me fio ni de mi propia sombra.
#22 Bufff, pues a la que trabajes con diversas aplicaciones empresariales ahí que te cascan un applet de Java para poder utilizar el producto:
- Sitescope (HP monitorización)
- WorkplaceXT (IBM para Filenet)
- Algunas tarjetas de administración remota de servidores (DRAC de Dell, ILO de HP)
- Detica (BAE Systems, prevención de fraude)
De donde han casi desaparecido es de sitios web públicos.
#2 No ha hecho nadie un applet en 10 años.
Y sí que usas Java, alma cándida, lo que pasa es que no te das cuenta. Miles y miles de webs y aplicaciones empresariales lo utilizan en el servidor, lo que pasa es que tú no lo ves. Android funciona básicamente sobre Java. Coño, hasta tu lavadora es muy probable que use Java.
#2 Are you from the past?
Nadie hace applets java a día de hoy, de hecho muchas personas tenemos Java desactivado de los navegadores. Pero java se usa para muchísimas cosas!!
La gran mayoría de Apps para Android están escritas en Java. Muchísimas aplicaciones de escritorio están escritas en Java. Millones de aplicaciones empresariales están escritas total o parcialmente en Java, y ya no hablamos de Webs que están hechas con JSP...
Es prácticamente imposible que no uses al menos un par de cosas que estén hechas en Java.
#2 Para tu información. Java es tan seguro como c++ o python o viceversa. La seguridad proviene de la propia concepción de la máquina. De como funcionan los ordenadores a bajo nivel. Y después por culpa de los sistemas operativos.
En Windows por ejemplo es realmente sencillo crear puertas traseras en menos de 100 lineas de código. En menos de 10 lineas de código también se puede.
Es decir, se tarda 5 minutos en vulnerar la seguridad de windows independientemente del lenguaje. Y me refiero a controlar remotamente el ordenador.
#1 cada uno tiene sus cosas. Pero es cierto que python se esta imponiendo cada vez más y, para según que utilidades, como administración de sistemas o aplicacione sportables, esta muy muy bien
#1 Java es a la programación lo que la Cruz Campo es a la cerveza.
Python está muy bien para empezar. Yo he dado clases de prácticas en Python por 5 semestres a alumnos de biología, matemáticas, geología, etc... Sin embargo es un lenguaje script. Te puedes tirar de los pelos para encontrar errores. Básicamente hasta que no pases por la parte de código que tiene un error no te vas a dar cuenta. Por ejemplo, si haces algo como nombre = 0.0 te puedes quedar tan ancho que no pasa nada. Para mi gusto eso debería darte un error antes de la ejecución y que te salga, como poco un warning, diciendo que estás cambiando lo que antes era un string a un float; cosa que no pasa. Por ejemplo si pones objeto.lenth() no te va a avisar de que esa instrucción no existe hasta que no te salte el error en ejecución. Una especie de "precompilador" de Python que te avise de fallos tontos sería la repolla. O que por ejemplo en Python 4 puedas hacer declaración de tipos de variable de forma voluntaria y que si haces String nombre = 0.0 no te deje correr la aplicación.
Por otra parte si haces cositas rápidas es muy bueno. Puedes programar más rápido que en C a cambio de una perdida de eficiencia. Para hacer experimentos está muy bien. Pero si tienes que manejar cantidades de datos increíbles o tienes una cantidad limitada de memoria, las triquiñuelas que puedes hacer en C para reservar y acceder a memoria como te de la gana no te las ofrece nadie.
#6 Puedes compilar el script antes de ejecutarlo perfectamente: http://effbot.org/zone/python-compile.htm
#6 Java es a la programación lo que la Cruz Campo es a la cerveza.
Java es el lenguaje de programacion masivo que mas estrictamente sigue el paradigma de POO.
Es a la programacion lo que la coca-cola a los refrescos: el que popularizo todo y el que mas vende.
Es un lenguaje muy respetable y tiene su belleza. Ademas de una mala fama absurda.
#7 Eso es que no puedes usar las variables antes de crearlas... Que tiene eso de malo?
#29 #36 La explicación de que mi ejemplo no funcione en Python está aquí: http://stackoverflow.com/questions/2749655/why-are-closures-broken-within-exec
Pero el objetivo de mi comentario no era preguntar por qué no funciona mi ejemplo (ya lo averigüé en su momento). Lo explico en #38.
#36 Hombre que más estrictamente sigue OOP lo pongo en duda, no es puramente orientado a objetos. Un lenguaje mucho más puro en este sentido es Smalltalk.
#55 estoy deacuerdo contigo, pero yo he dicho 'masivo'
#36 la mala fama siempre viene de los gafapasters que no han salido de la academia: hay que criticar lo mainstream.
Pero así es la vida, siempre habrá un Pablo Iglesias informático que te diga "para manejar cantidades de datos increíbles lo mejor es C" ( #6 )... Sus programas deben tener más "leaks" que el festival del orgullo gay
#6 yo lo he estado usando para programar modulos de openerp y algo me decia que no me convencia, ahora ya veo que cosas son.
.jeje.
#6 No sé que Python usarás, pero si declaras previamente una variable como string y luego la usas en un contexto incorrecto el programa debería cascar (y casca). Si tú mismo redeclaras una variable con el mismo nombre es que has tenido un fallo garrafal, sea el lenguaje que sea. El que tiene que pensar lo que hace es el que está programando.
Python es dinámico pero de tipado fuerte o estricto, cosa que mucha gente confunde y no son conceptos equivalentes. Sin embargo PHP o Javascript te permiten usar cualquier tipo en cualquier expresión intentando conversiones automáticas. Una vez más, con un poco de sentido común no tiene por qué haber un problema (y usando los operadores === y !== que están para algo).
El tipado dinámico y el "duck typing" permiten patrones de diseño que en otros lenguajes lleva mucho tiempo y trabajo hacer y están en este tipo de lenguajes por que el uso que se le va a dar es diferente. O como en LISP, permiten directamente hacer cosas que en otros lenguajes es imposible.
Ahora que viendo el estilo de mucha gente que es tirar lineas sin pensar a toda hostia y luego quejarse cuando las cosas no funcionan, no me extraña.
#62 lisp dicen que permite programarse o modificarse a si mismo en tiempo de ejecución. Entre otras muchas cosas.
#82 ¿Dicen?
Cualquier estudiante de informática y/o programador que se precie debería saber al menos lo que puede hacer Lisp y de qué forma lo hace. Por cultura y porque aprendemos nuevas posibilidades y formas de hacer las cosas, que en este tipo de discusiones salta a la vista quién sabe de verdad y quién no.
#6 que tal Go en lugar de C o java?
#c-6" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/2214533/order/6">#6 Java es a la programación lo que la Cruz Campo es a la cerveza.
La de tonterías que se tienen que leer ... me da a mí que tú has estado en pocos proyectos de envergadura.
Es verdad que Java es un lenguaje que ya está algo abuelete (a pesar de las contínuas novedades que se le introducen), pero comparar Java con Python o Ruby es como comparar un traje para trabajar en una fábrica con un traje para pasear por la calle: cada uno es para lo que es. Java se podría comparar con C# (el cual me gusta mucho más) y Python se podría comparar con Ruby o Perl (y si me apuras, Javascript).
Y no sé por qué el tipado estático debería ser un problema. Que el lenguaje incluya restricciones de ese tipo evita problemas cuando la complejidad del software es muy alta. Es como poner una barandilla al borde un barranco: si no la pones, vendrá algún idiota y se caerá.
Este tema me recuerda a las estúpidas discusiones "C vs Ensamblador" de los 90.
#6 Me sangran los ojos al leer tu comentario y los votos positivos. Los errores se arreglan con test automatizados, no con míseras ayudas del compilador para saber si una variable es de un tipo o de otro.
En java puedes hacer:
int millimetros = 1000; int metros = millimetros;
Y el compilador se queda tan pancho. Un int igual a otro int. (Un error de este tipo le hizo perder un satélite a la NASA, al mezclar metros y pies sin que el compilador se quejase).
También puedes hacer burradas como:
Boolean accesoProhibidoAMiCuentaBancaria = null;
if (!accesoProhibidoAMiCuentaBancaria)
O el típico caso de:
float divisor = 0;
print 1000./divisor;
El 99,99999% de los errores no se curan con tipados estáticos. Sólo los test automatizados (que deben crearse antes de empezar a programar) pueden detectar errores.
Por cierto, desde hace muchos, muchos años todos los lenguages tienen su variante de Lint para ayudar en los errores símples que comentas. Python está entre ellos: http://www.pylint.org/
Ah, respecto a "cosas simples". El motor de búsqueda de Google está implementado en sus tripas en Python. Me gustaría saber las "cosas complejas" que haces con tus lenguajes compilados.
"Para hacer experimentos está muy bien. Pero si tienes que manejar cantidades de datos increíbles o tienes una cantidad limitada de memoria, las triquiñuelas que puedes hacer en C para reservar y acceder a memoria como te de la gana no te las ofrece nadie"
Numpy o ScientificPython se utilizan a diario para esas "grandes cantidades de datos", y lo hacen mucho mejor que programando en C a pelo, aunque la implementación de base sea C, hoy en día casi no tiene sentido programar en C "a pelo". Es mejor utilizar lenguages como Python y recurrir al C sólo para zonas críticas de código (que son las menos). Incluso si programamos con redes o I/O un programa en python bien organizado con corutinas funcionará mucho mejor que un programa en C y threads (basta ver la diferencia entre Apache y NodeJS. Entre 100 y 1000 veces más rápida la versión javascript que la versión C).
Es un error pensar que algo es mejor porque es más complejo o difícil de usar. Normalmente eso sólo significa que es más complejo o difícil de usar.
Dicho lo cual, Java 8 está muy bien. Representa un gran avance respecto a las anteriores versiones.
Como un mensaje es destacado con no se cuanto Karma y no se cuantos votos un mensaje similar a el numero #6 ?????
Amigo Python no es un lenguaje "Script", de donde saco esto ? Con Python usted puede, hacer lo que sea !!.
De donde usted saco que no es eficiente ? (En terminos de velocidad). Vamos a ver, estamos en la era de PRODUCTIVIDAD, y si necesita eficiencia agrega C o si es "Hombre" Assembler.
Los 45 años que usted necesita para hacer "algo" seria en Java, en Python lo hara en semanas con una diferencia casi inexistente de performance. Repito: necesita eficiencia ? (Ponga C o C ++ o Assembler), ahora bien, como va el "tema" y los microprocesadores, no entiendo eso de eficiencia (Salvo juegos), supongo que usted no conoce las librerias numericas y cientificas para Python, hechas en C (creo) donde la eficiencia es importante.
Por lo que veo esta demasiado "preocupado" por los errores "logicos" de programacion esos detalles ocultos que a veces suceden, mire amigo, es verdad que es mejor que el mismo "software" me lo detecte, pero si usted se remonta a la era dorada, quien "debugueaba", esas lineas escritas en Assembler de Jhon Socha, Peter Norton, Jhon Carmack ??.....ellos eran (o son) buenos de verdad, o quizas yo sea muyyy meticuloso con el codigo y revise todo, antes durante y despues, y conozco mi codigo como la palma de mi mano.....(puedo estar equivocado, claro).
Me "molesto" un poco en su comentario eso de hacer "cositas simples en Python", o para hacer algo "rapido", porque demuestra que usted NO ESTA INFORMADO, y la INFORMACION DA PODER.
Cuando usted habla de "mineria de datos", o da la idea que Python NO ESTA PREPARADO PARA ESO, es mas que ofensivo.
La NASA lo usa.
YOUTUBE tiene su "core" y algunos millones de lineas de codigo en Python.
FACEBOOK migra poco a poco hacia Pyhton.
PINTEREST "aussi"
GOOGLE APP ENGINE tambien
BitBucket junto al mejor framework de la historia tambien
El proyecto QUORA.
El Washington Post
La mensajeria instantanea, y la gestion de mensajes de FACEBOOK estan en Python aqui usted tiene las referencias (https://developers.facebook.com/blog/post/301), (https://github.com/tornadoweb/tornado)
Hasta el editor que usted usa SUBLIME-TEXT esta escrito en Python
IBM migra a Python.
Mi preguna es, estimados "Meneadores", como carajo es relevante un comentario como el numero #6, con ese karma y esos votos EN TAN PRESTIGIOSO SITE COMO ESTE ???????
#6 tienes razon, pero una forma de evitar al menos los errores de sintaxis es usar modulos en tu IDE (vim tiene multip les, simplemente con pylint ya te ahorras un monton de fallos idiotas).
#7 yo evitaria el uso de eval() como la peste en cualquier lenguaje. Abre demasiadas puertas.
#1 Python esta siendo muy utilizado y mas por grandes empresas como Google, etc etc, sin olvidar que en GNU/linux python es una parte importante, también en el desarrollo de servicios en algunas web. Aunque todavía se depende de Java, sobre todo para añadir nuevas funciones o actualizar un Software o una App por ejemplo.
Yo soy de lo que dice que Python esta muy presente en nuestras vidas, mas de lo que pensamos.
#1 Java es demasiado académico y rígido para que alguien empiece.
Python me parece una introducción excelente, siempre dejando claro al alumno que no es todo lo que hay y que hay otros lenguajes más complicados a cambio de mayor potencia (otra cosa es que para la inmensa mayoría de casos de uso, el python sea más que suficiente).
Python está bien para lo que es: un lenguaje script. Pero aprender a programar con él es como aprender a programar con las macros del Excel. Si luego no les enseñas C, nunca sabrán hacer un código en condiciones
Personalmente prefiero la flexibilidad de código que permite C. No me gusta que me digan cómo debo indentar mi código.
#14: Es que como lenguaje par guiones nada mejor que JavaScript bajo mi punto de vista, porque es parecido a C, aunque empeora en algunas cosas.
Yo creo que el más sencillo para aprender los fundamentos de la programación es Pascal. Python puede llegar a ser una locura para la gente que empieza.
#10 al contrario, el paso de pseudocódigo a python es más natural. ¿Quién tiene tipado fuerte en pseudocódigo?
#10 Yo me introduje en la programación con Pascal (si excluimos mis primeros experimentos en Basic)... Que tiempos...
Yo opino lo siguiente. Supuestamente los lenguages no tipados son así para permitirte mas libertad y no estar tan entretenido en errores de sintaxis.
Mi experiencia con java y javascript (nodejs + coffeescript) me dice que cuando hay un error de sintaxis es mas doloroso hacerlo en un lenguage no tipado porque los mensajes de error (si los hay) suelen ser mas confusos.
Es decir, creo que lo que te ahorran por un lado, te lo quitan por otro cuando tienes que solucionar algo en proyectos largos al menos.
#9 La cagada es tuya, por eso no funciona. ¿Para qué quieres un eval ahí en medio?
>>> def f(x):
... def g(n):
... return n + x
... return g
...
>>> print(f(3)(4))
7
#29 No es una cagada, es un caso de estudio. Por eso he cambiado mi primer ejemplo ya que el de Perl estaba hecho sin el eval. Pero entonces me he acordado que en su momento no lo probé así (ya que así tampoco funciona con Perl) sino creando la función entera con un eval/exec (eval en Perl y Ruby; exec en Python).
Total, que el único lenguaje, de entre los tres, en el que funcionan ambos ejemplos es Ruby y creo que no es por casualidad. Creo que con Ruby se aprende mejor y más rápido porque las cosas funcionan más como se intuye que tienen que funcionar. Mientras lo estás aprendiendo pruebas cosas, haciendo hipótesis sobre cual debería ser la salida del mini-programa que estás probando y con Ruby casi siempre aciertas.
Creo que el creador de Ruby se refiere a esto cuando habla del "principio de la menor sorpresa" ("the principle of least surprise").
#c-7" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/2214533/order/7">#7 En python se ejecuta correctamente:
#!/usr/bin/python
print (lambda x: lambda y: x+y)(3)(4)
Python es un lenguaje estupendo para pequeños desarrollos, pero yo le veo unos problemas para el desarrollo de aplicaciones grandes:
1- Como es de tipos dinámicos, si se siguen buenas normas de documentación, hay que poner el tipo de cada variable/campo y en cada parámetro de cada método (incluidos tipos de retorno). Esto, con lenguajes de tipos estáticos no es necesario al quedar explícito en la declaración del campo/método.
Puedes omitir este tipo de información en los comentarios, pero luego lo pagas a los pocos meses de desarrollo (invirtiendo más tiempo).
2- El Intellisense de los IDEs no funcionan demasiado bien (por no decir nada bien) en lenguajes de tipos dinámicos. Una vez empiezas a usar intellisense en un IDE, es difícil aceptar un lenguaje que por su diseño no te admite aprovechar al 100% dicha funcionalidad.
3- El hecho de que en Python los bloques (closures) se definan por indentación tabular hace que a veces puedas cometer un error humano que es difícil percibir e invertir horas por confundir o no darte cuenta de errores de tabulación.
4- El GIL (global interpreter lock) usado por Python lo incapacita para aprovechar como toca la totalidad de los núcleos del procesador utilizando múltiples hilos. Esto, hoy en día, es una gran desventaja para cualquier intérprete.
5- Existen otros lenguajes diseñados para el "confort del programador" como Scala, Groovy, Dart o TypeScript que eliminan gran parte de los problemas de Python.
Llevo 25 años programando. Un lenguaje que rompe la compatibilidad entre su version 3 y su version 2.6 es la misma puta mierda por la que dejé de programar usando las API de Microsoft.
Y si encima le añadimos las dificultades para tener funcionando simultáneamente ambas versiones y que algunos script requieran una version y otras otro...
Pero está claro que las nuevas generaciones están acostumbradas a cambiarlo todo cada dos años.
#37 Es que el problema de python son los pajilleros...
Y ya no por python 3 vs 2.7, que tambien, pero lo puedes tratar como 'lenguajes diferentes' o al menos dar esa excusa, pero es que eso de que una version 1.5 no sea compatible con la 1.6 pasa a menudo...
A mi me paso con Django (Django!!!!!) pq habian cambiado, de la x.n a la x.n+1 la estructura de paquetes... es decir, llego un pajillero al que no le gustaba como estaban los paquetes estructurados y los cambio de sitio, con dos cojones, como un perrillo: a echar su meadita en el codigo.
Buffff que mala ostia ese dia
#37 Python es un lenguaje genial para desarrollar el pensamiento computacional. Por eso se usa tanto en primero.
También está bien para hacer scripting y aplicaciones de complejidad media.
Para lo demás: Lenguajes de mayores
#109 La POO prototípica tiene la ventaja de poder extender los objetos en tiempo de ejecución de manera sencilla y eso tiene sus ventajas.
Eso se puede hacer en python y python es POO clasica.
#97 reddit, youtube, washintong post, nytimes, the guardian, dropbox...
#100 Claro, porque para hacer youtube puede valer python, pero para hacer una pagina de un departamento de un gobierno autonomico se necesitan cosas de mayores... pañales para las perdidas....
Antes prefiero que me claven astillas de bambú bajo las uñas mientras me pisotean los huevos con tacones de acero que volver a usar Java.
Y me cago en Google por joder Android de esa forma.
Pero es una opinión, claro, porque lo he sufrido en el "desarrollo empresarial" durante años. Qué asco.
Aparte de eso... soy de la opinión de que hay que usar la herramienta adecuada para cada trabajo. No me pondría yo a hacer una web con C, ni una aplicación que requiera mucho rendimiento con Perl...
Curiosamente con Python sí me atrevería con casi todo
#25 Java nació con prisas, había que conquistar el mercado y mostrarse ante el mundo que Java era el lenguaje de Internet, un argumento para vender pero de poca calidad.
Fue una completa decepción trabajar con Java al inicio: muy lento, pésima API, AWT daba asco, sin un IDE oficial bueno, verborreico, funcionaba bien en una plataforma pero fallaba en otra, la dificultad de instalar el JRE y el JDK (que requería configuración manual para el JAVA_HOME, CLASSPATH, etc..), la continua depreciación de APIs, los inentendibles mensajes de error para los usuarios que usaban Applets, la explosión verborreica del Tomcat y su fuck CATALINA ante un mísero error, las Java Server Pages fueron el puntillazo para enviar a Java a la p**a m****a.
#32 Pues amigo mio, javascript, a mi personalmente, si me APESTA.
Y uno de los porques es que, 30 años despues de que se creara, aun no hay NI UN PUTO IDE decente para programar javascript. Fijate que lenguaje de programacion tan cojonudo que nadie es capaz de hacerlo.
Su prototipado, esa manera arcaica de acercarse a la POO es tan lamentable que ni dios la usa...
No entiendo la moda de hacer cosas en javascript cuando no hay porque hacerlas en javascript....
#26 Veo que no has tocado java en los ultimos 20 años, al menos, algo ha cambiado, hazme caso.... Pero decir que fue un lenguaje hecho deprisa y corriendo....
Que lleva una maquina virtual detras, tio....
#39
Lo mismo pensaba yo de javascript hasta que le cogí el truco.
Javascript trata de clousures y funciones.
#26 #39 Java un lenguaje hecho a las prisas y hecho para internet? Creo que te confundes con JavaScript, que fue diseñado en 10 días (si, 10 días! http://www.computer.org/csdl/mags/co/2012/02/mco2012020007.html). Java para nada fue diseñado con poco tiempo y menos para internet (originalmente era para "sistemas empotrados"). Una de las maravillas resultantes del lenguaje Java no ha sido propiamente Java, ha sido la JVM (la máquina virtual). La evolución en cuanto a rendimiento de la JVM ha sido brutal, aunque hay gente que sigue anclada en el pasado hace 20 años. Tan buena es que muchos lenguajes modernos que se han creado son para JVM, como Clojure, Scala o JRuby.
#39 Javascript es como es por muy buenas razones, entre otras el tiempo de carga de una página o el consumo de recursos por parte del navegador, y el prototipado me parece una de sus mejores características. Y te lo digo yo que casi ni lo uso, pues me dedico más al C++.
#63 se nota q no lo usas...
Es mas, nadie usa el prototipado en js pq es una basura. Todo lo q tenga q ver con POO no tiene cabida en JS....
Encapsulacion? Para que? Reutilizacion? De noobs! Herencia? Si no hay dios q use un objeto, como para heredarlo!
Yo creo que hay que diferenciar mucho entre docencia y ámbito laboral. Para enseñar a alguien en primero lo ideal para mi es C, porque te obliga a aprender a la vez cómo funciona un ordenador (sobre todo el manejo de la memoria volátil). Después, cuando das el salto a POO, puedes usar C++ o Java dependiendo de el estrés que pueda causar el cambio, aunque personalmente creo que tampoco es tan traumático pasar de C a Java con una buena docencia. Las desventajas de Java en el ámbito laboral las conocemos todos, pero para la docencia es un lenguaje ideal porque obliga al alumno a escribir códigos escrupulosamente correctos en sintáxis, lo que mejorará su quehacer en el futuro cuando manejen otros lenguajes más dinámicos y menos estrictos.
#72 Mi lenguaje principal en el trabajo es JS (Node.js) y me he enamorado totalmente. Y yo era un defensor acérrimo de Java por su manejo de objetos tan purista. Es verdad que el manejo de Objetos en JS es muy distinto, pero no por ello peor. Simplemente es adaptarse, y el prototipado me parece una herramienta muy útil (lo de poder añadir funcionalidad a librerías ajenas con una facilidad tan amplia es genial )
#83 python es el equilibrio, POO de verdad con el dinamismo de javascript...
Sin tener las feature de javascript, a saber:
1- no POO. Y lo que existe -arcaico e incompleto- ni dios sabe como va.
2- sin libreria standar. La libreria estandar es copiar y pegar de foros.
3- documentacion apestosa. En gran parte por 1.
4- sintasix peor q la de java.
Javascript apesta, pero esta tan extendido q no hay nada q hacer... Como mucho usar cosas q compilen a js como coffescript
Y esto es lo q pienso
#90 Eso de que no hay librerías estándar para javascript es una quimera. Al menos para Node.js tienes el sistema NPM y un webo de contenido publicado en github (con sus manuales, ejemplos y tests unitarios). No se que manía tiene todo el mundo con burocratizar todo.
#72 Sí lo uso, solo que menos, y evidentemente sí uso el prototipado porque es una de las mejores cosas que tiene javascript para hacer código corto y rápido. Cuesta cogerle el tranquillo al principio pero en mi opinión merece la pena. Yo creo que trasladadar la POO clásica a javascript es un error. Mucho se ha escrito además sobre este tema, tanto a favor como en contra.
La POO prototípica tiene la ventaja de poder extender los objetos en tiempo de ejecución de manera sencilla y eso tiene sus ventajas. Como todo en esta vida, tiene también sus incovenientes, pero como lenguage para hacer scripts que se ejecuten del lado del cliente creo que es una muy buena opción.
Por si a alguien le interesa indagar un poco más en la materia:
http://en.wikipedia.org/wiki/Prototype-based_programming
http://en.wikipedia.org/wiki/Differential_inheritance
http://www.crockford.com/javascript/inheritance.html
http://aaditmshah.github.io/why-prototypal-inheritance-matters/
#c-25" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/2214533/order/25">#25 Uff, yo he tenido que ponerme con Java (y Swing) en Eclipse tras años usando C# con VS. Es como haber retrocedido en el tiempo.
#c-69" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/2214533/order/69">#69 a ti sí te doy la razón: C# es un "Java corregido", mucho más cómodo y rápido. Pero ese comentario puede reportarte una importante pérdida de Karma aquí: C# y VS son armas de Microsoft, y usándolos estás apoyando los bombardeos de Israel, además de poner nuestras libertades al nivel de Guantánamo.
#69 Hoy en día no se debería usar JavaFX 8 ?
Me gusta python pero hay cosas que me tocan los huevos. Por ejemplo esto:
#!/usr/bin/env perl
use 5.020;
say sub }->(3)->(4)
Salida: 7 (como tiene que ser)
#!/usr/bin/env ruby
# encoding: utf-8
puts ->n }.call(3).call(4)
Salida: 7 (como tiene que ser)
#!/usr/bin/env python3
# encoding: utf-8
print((lambda n: lambda x: eval('n+x'))(3)(4))
Salida:
Traceback (most recent call last):
File "SCRATCH.py", line 4, in
(lambda n: lambda x: eval('n+x'))(3)(4)
File "SCRATCH.py", line 4, in
(lambda n: lambda x: eval('n+x'))(3)(4)
File "", line 1, in
NameError: name 'n' is not defined
CAGADA!
#c-7" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/2214533/order/7">#7 Perdón, el ejemplo que quería poner no era así, sino así:
#!/usr/bin/env perl
use 5.020;
say sub ' }->(3)->(4);
(FUNCIONA)
#!/usr/bin/env ruby
# encoding: utf-8
puts ->n ' }.call(3).call(4)
(FUNCIONA)
#!/usr/bin/env python3
# encoding: utf-8
def f(n):
....exec('''
def g(x):
....return n +x
''')
....return g
print(f(3)(4))
(NO FUNCIONA)
yo me sé de una facultad de informática que empiezan enseñando programación básica y, lo peor, orientada a objetos con ada. Tocate los huevos mariloli
Yo enseñaría a desarrollar en PHP, JS, Python y Swift (por ejemplo). Si enseñas a la gente lo mismo nunca evolucionan o lo rápido que deberían, si le enseñamos lenguajes para seguir parcheando y seguir teniendo errores pues pasa lo que pasa.
En USA, Alemania y Francia son mas abiertos con la enseñanza en este ámbito, en España no todo lo contrario.
En java no debería hacerse "hola mundo" debería hacerse "adios mundo cruel"
Desde que descubrí python no he vuelto a tocar java ni con un palo.
Ahora en cambio no suelto javascript ni aunque me maten.
Ruby me decepciono. El poetry mode me parece aberrante y muy confuso.
No olvidemos también Go que es interesante también.
Eres hipster? Python o Ruby. Para el resto: Java, PHP, C/C++ etc...
#56 Ja ja ja, es cierto, este hilo me está recordando a las conversaciones sobre música de muchos gafapastas, donde se dedican a lanzar nombres de grupos desconocidos para demostrar que saben más que nadie.
A riesgo de leer tonterías he entrado a leer los comentarios. Y efectivamente, cuanta tontería se dice. De un lado y de otro. Haters, haters everywhere.
En cuanto a los dramas de pasar de 2.7 a 3. Son dramas artificiales q rozan el sindrome de diogenes.
#58 ¿Dramas artificiales? ¿A qué te refieres? No hace mucho, leí que el 98% de los usuarios de Python siguen usando python2.
#74 ¿y donde esta el problema de usar 2.7 o la 2.x o la 3x? ?
Me encantaria saber donde esta el problema, si tiene sun proyecto desplegado para 2.7 pues usas esa version . El "problema" sq no hay ningun porblema.
#75 Siendo así, python3 fue una cagada que solo sirve para hacer perder el tiempo a los programadores de librerías.
Python, eh? Jejejejeje ya sabéis en qué estoy pensando... "nudge, nudge"...
yo metería BennuGD/DIV ... ... es inventado por españoles ...
Dentro de 10 años: Go es el lenguaje de introducción a la programación más popular en las universidades de USA.
Fomenta un código limpio, es rápido (y compila muy rápido), más cercano a C (y con una integración sencilla), etc. Python va a ser comido por los gophers http://golang.org
PD: he programado en Python y Ruby durante años y, salvo por alguna librería, no echo en falta nada en Go.
10 REM programita
20 a=3; b=4
30 print (a+b)
RUN
7
Fácil y sencillo…
puede alguien decirme algun software creado con python o django que sea usado a nivel mundial por miles de millones de usuarios potencialmente a la vez? por curiosidad
#97 Pues básicamente la búsqueda de Google, que tiene muchas partes hechas en python hasta donde yo sé.
Para no extenderme ya q aqui hay mucho trauma y traumatizado, mis preferencias por experiencia.
c++ > python > ruby >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> y ni con tu palo java y php
Para empezar mucho mejor actionscript u otro lenguaje emacs es mucho más visual, pero si te la quieres dar se machote usa un lenguaje de verdad, yo empecé en su día con Pascal, cobol y ensamblador.
#50 "lenguaje de verdad" para los Onvres!
como esta el patio..
#51 Con lenguaje de verdad me refiero a un lenguaje linkado y compilado, no interpretado y sin máquina virtual.
#47
>>> def lol(a,b):
c =int(a + b)
return c
>>> print lol(5,6)
*por supuesto se puede adornar mucho mas
#51 claro claro por eso en google no lo usan. Xq no es de verdad
#53
Se que tengo las de perder pero....
IntBinaryOperator sum= ((num1,num2) -> num1+num2);
System.out.println(sum(3,4));
Y antes de que nadie salte con Java 8 el "boxing" de los int es automático!
Por cierto java debe y tiene q morir.
He leído por algún comentario que Java es el lenguaje más usado pero no lo es, es C, seguido de Java.
Se que estoy en el mundo académico y que no todo el mundo puede elegir el JDK en el cual desarrollar pero....
@FunctionalInterface
Interface
...
int a = 3
int b =4
Oper sum = (int a, int b) ->
int result= sum(a,b);
Para mi, después de haber echo un par de cursos de Scala en los cuales me ha costado acostumbrarme.... Creo que Java 8, es una aproximación que esta empezando pero que cambia muchas cosas respecto a que el lenguaje es viejo y usando los Streams se pueden hacer cosas bastante curiosas (básicamente ahorrar código y ganar eficiencia)
Python es un lenguaje infernal y debería considerarse delito el usarlo
que dificil es programar, nunca he podido