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 ...
|
etiquetas: python , programación , desarrollo , developer , hacker , universidad , usa
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.
No soy experto, escucho opiniones interesado.
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.
#!/usr/bin/env perl
use 5.020;
say sub { my ($n) = @_; sub { $_[0] + $n; } }->(3)->(4)
Salida: 7 (como tiene que ser)
#!/usr/bin/env ruby
# encoding: utf-8
puts ->n { ->x { eval 'n+x' } }.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 <module>
(lambda n: lambda x: eval('n+x'))(3)(4)
File "SCRATCH.py", line 4, in <lambda>
(lambda n: lambda x: eval('n+x'))(3)(4)
File "<string>", line 1, in <module>
NameError: name 'n' is not defined
CAGADA!
#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
#!/usr/bin/env perl
use 5.020;
say sub { my ($n) = @_; eval 'sub { $n + $_[0] }' }->(3)->(4);
(FUNCIONA)
#!/usr/bin/env ruby
# encoding: utf-8
puts ->n { eval '->x { n+x }' }.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)
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.
Yo soy de lo que dice que Python esta muy presente en nuestras vidas, mas de lo que pensamos.
En USA, Alemania y Francia son mas abiertos con la enseñanza en este ámbito, en España no todo lo contrario.
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…
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
#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.
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.
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
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.
>>> def f(x):
... def g(n):
... return n + x
... return g
...
>>> print(f(3)(4))
7
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.
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?
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.
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.
PD. Python es muy potente y práctico. La verdad es que me sorprendió gratamente cuando empecé a trabajar en ese lenguaje.
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?
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.
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").
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....
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
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 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.
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.
.jeje.
Lo mismo pensaba yo de javascript hasta que le cogí el truco.
Javascript trata de clousures y funciones.
c++ > python > ruby >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> y ni con tu palo java y php
@FunctionalInterface
Interface{
int Oper(int num1,int num2);
}
...
int a = 3
int b =4
Oper sum = (int a, int b) -> { return a + 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)
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):
www.tecnoempleo.com/
como esta el patio..
>>> 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
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.
#!/usr/bin/python
print (lambda x: lambda y: x+y)(3)(4)
Edit: No habia visto #38 y #29...
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).
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.
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.
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.
El ecosistema Spring en general, Scala, Groovy, Gradle, Play, Camel, Maven, Jenkins para IC ... sigo?
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!
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.
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.
#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 )
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 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.
20 a=3; b=4
30 print (a+b)
RUN
7
Fácil y sencillo…
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.
Por cierto, si se quisiera crear una web con la funcionalidad que dan esas applets pero sin Java, ¿qué lenguaje sería preferible?
- 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.