Hace 10 años | Por PythonMan8 a talyarkoni.org
Publicado hace 10 años por PythonMan8 a talyarkoni.org

Alreddor de 2010/2011, mis herramientas de trabajo eran algo así como: * Ruby para procesado de texto y scripts * Ruby on Rails/JavaScript para desarrollo web * Python/Numpy y MATLAB para computación numérica * MATLAB para análisis de neuroimagen * R para análisis estadístico * R para "plotting" y visualizacion ... hoy en día son algo del estilo: * Ruby on Rails excepto algo de Python Django * Python para procesado de texto y scripts, computación numérica, análisis de neuroimagen, máquinas de aprendizaje.

Comentarios

Nylo

#42 goto #15

delawen

#15 Estoy de acuerdo. En el ámbito de la computación científica, python es de lo mejorcito que hay. Igual que para otros ámbitos, son otros los lenguajes que se acomodan mejor. Por ejemplo cuando quieres hacer una buena interfaz gráfica, python empieza a cojear. No es que no se pueda, es que es más difícil que en otros lenguajes.

Lo bueno de python es que tiene una curva de aprendizaje bastante rápida, lo que ayuda a los que son científicos pero no han estudiado programación ni algoritmia. También es bastante intuitivo y tiene un sistema de importar paquetes muy potente. Creo que poca gente puede discutir eso.

Patxi_

#50 ¿difícil? ¿Has probado PyQt o PySide?

f

#15 Aunque en mi trabajo no lo uso, por lo que veo en el despacho, el crecimiento de Python es una realidad. Todo el desarrollo de tratamiento de imágenes se está migrando de Matlab a Python.
Y hace poco hablando con un compañero, pequeñas tareas que antes realizaba con otras aplicaciones (compilaciones de latex, ejecuciones programadas como compilaciones con cada commit etc) están siendo migradas.

M

#2 Pues viendo el curriculum por encima se trata de un psicologo que utiliza lenguajes de programación para un area de investigación muy determinada. No lo veo para nada como una opinión a nivel general o de un experto en ingenieria del software o lenguajes.

Yo pienso que hay que saber adaptarse a casi cualquier lenguaje segun la aplicación en función de muchos factores, y generalmente si a nivel profesional es algo que no decides tu, si no que viene impuesto por el tipo de proyecto, la empresa, los gustos de tu jefe...

Gilgamesh

#60 Pues viendo el curriculum por encima se trata de un psicologo que utiliza lenguajes de programación para un area de investigación muy determinada. No lo veo para nada como una opinión a nivel general o de un experto en ingenieria del software o lenguajes.

Exacto. Es un científico que necesita programar para investigar, no un programador al que pagan por programar. Es exactamente de lo que va el post.

D

#2 Es un académico, y psicólogo. Decir que Python se está comiendo los demás lenguajes... se mire com se mire es una exageración. Puede que por ser accesible - fácil de aprender, fácil de leer, cantidad de librerías disponibles, y está instalado en casi cualquier linux que pilles - tiene ese "atractivo" en la comunidad científica. Pero está lejos de comerse a todos los lenguajes. Esto es como todo: dependiendo del ámbito, hay una corriente u otra. Si hablas de tecnologías web, hoy en día se podría decir que Javascript se está comiendo a todos los demás lenguajes. Si hablas de estadística y machine learning, quizás R. En muchos ámbitos están también resucitando los lisp... y así puedes seguir.

PythonMan8

#4 Aunque yo he enviado el enlace, no estoy de acuerdo. La mejor opción no es Python, la mejor opción es PyPy

D

#4 No confundas al personal. A nadie se le ocurriría escribirn un algoritmo pesado de tratamento de datos con Python, porque uno de los problemas de Python es que es terriblemente ineficiente; no llega al QBasic, pero casi.

Python sirve para llamar a funciones que ya están programas en "verdaderos" lenguajes de programación C o Fortran. Si no existiera SWIG, hoy Python sería un lenguaje exótico que solo lo utiliarían los frikis.

Monsieur-J

#13 El mayor cuello de botella la E/S? Eso dependerá de lo que estés programando, no?

Y el acceso a DB o a la misma memoria?

Y si trabajo con millones de registros que involucran múltiples funciones?

"Lo lento no es el lenguaje sino la máquina virtual"

Claro, nos ha jodido. Es que el lenguaje es interpretado, siempre va a ser más lento que uno compilado.

lolofarisco

#13 Estas equivocado, pypy no es un interprete como Cpython o Jython, es un JIT.

d

#70 De hecho PyPy es ambos, un intérprete escrito en Rpython y un JIT

lolofarisco

#86 pypy proporciona un interprete escrito en R, pero puedes usar pypy en el interprete que quieras porque realmente pypy es un JIT, auqne realmente no se aconseja usar otro que no sea el propio.

v

#70 Pypy es un interprete al igual que Cpython. JIT es únicamente una técnica que acelera la ejecución en el propio interprete.

D

#7 Me parece que eestas metiendo la pata hasta el fondo. Python es uno de los lenguajes que mas se utiliza en algoritmos bio informaticos (creo que es el que mas se usa por encima de perl y java) los cuales tratan una cantidad de datos enorme que no se puede comparar con la cantidad de datos de ningun sistema de gestión. No estoy hablando de millones de datos, sino unas cantidades adsociadas a combinatioria que, por ejemplo, para una cadena de ADN de k aminoacidos (k>100000) tene asociadas mas de 4^k diferentes combinaciones posibles (intenta imaginar lo elevado que es este numero).

Es cierto que haciendo los programas en perl, java o c serian mas rapidos pero mucha gente de ste campo utiliza python porque aporta otras muchas cualidades que permiten optimizar la ejecución hasta niveles proximos a los otros lenguajes.

D

#4 En la mía seguimos con Pascal

D

#8 Pascal? en serio?

D

#9 Sí, y haciendo módulos, que es peor

D

#4: Pues yo prefiero C y no soy informático, sino de ingeniería técnica industrial.

A parte de que no me gusta que me digan cómo debo indentar el código... yo indento siguiendo mis necesidades, no las necesidades del autor del lenguaje. Hay veces que agrupo varios comandos en una misma línea, si tienen mucho que ver entre ellos.

MrBorji

#27 No pienses en cómo lo lees hoy, piensa en si lo entenderás de aquí a un par de años. Que lo mismo sí, pero a veces con códigos de hace una semana ya te pierdes, imagínate un par de años... lol

D

#28 Nadie entiende un código que no ha mirado ni una sola vez durante 2 años, y menos si tú código no es de calidad.

D

#32

Mala carta de presentación, cualquier programador debería saber tirar del hilo de una funcón yy saber en mayor o menor medida lo que hace

Seta_roja

#32 yo no soy programador al uso, con muchas taras, osea apenas hago comentarios, documentación cero y los indentados suelen ir según tenga el día... lol

...pero si mi ex-jefe me pregunta por teléfono por alguna cosa, casi puedo indicárselo de memoria!

D

#41: El problema es que cada persona tiene sus ojos. Mis ojos no son los mismos que los del creador de Phyton, y lo que para el pueda ser fácil de leer, para mi podría ser difícil de leer.

Yo prefiero los códigos que visualmente son compactos, en cambio hay gente que ahí se perdería porque lo verían todo muy apelotonado.
En cambio si yo leo un código suyo (que para ellos es normal), a lo mejor me parece demasiado disperso y por eso me costaría leerlo.

#28: Mientras esté claro para ti, el código estará bien.

El problema de Phyton es que tienes que escribirlo como le gusta al autor de ese lenguaje, no como te gusta a ti.

En cambio en C te apañas como quieres.

d

#90 El problema de Phyton es que tienes que escribirlo como le gusta al autor de ese lenguaje, no como te gusta a ti.
Eres el ejemplo vivo de que eso no es así

D

#27 Aparte no va a partes.

drone

#27 En python también se pueden agrupar varios comandos en una línea, usando «;» igual que en C. Lo de la indentación como regla al lenguaje creo que es una buena idea, por legibilidad y por la ventaja que conlleva para proyectos con más de un programador.

D

#41 La indentación forzada es uno de los grandes defectos de Python.

f

#4 Python tiene muchas virtudes, pero no ser el primer lenguaje que un informático debe aprender. Prefiero lenguajes fuertemente tipados que tienen errores de compilación, de linkado y de ejecución...

a

#4 Creo que lo has resumido muy bien. Depurar un programa en Python me resulta muy fácil. Es un lenguaje muy legible. Por el contrario los punteros de C son diabólicos. Cuando el programa no va y tienes que depurarlo los punteros te obligan a pensar en como se está generando el código y en la estructuración de la memoria para el código y para los distintos tipos de variables. Lo ideal es tener en la cabeza solo cosas relativas al problema que quieres resolver. La ventaja de C es que al ser muy cercano a la máquina genera un código muy rápido, pero con los procesadores actuales sobra velocidad para todo lo que no sea manejo de hardware a bajo nivel. Se trata de un nicho muy especializado.

tranki

Vamos a ver #10 escríbeme en python una función que retorne un entero como la suma de dos enteros pasados como argumentos a dicha función. Y después me dices si es muy diferente a escribir esa misma función en c o en basic, por ejemplo.
¿Comprendes donde quiero ir?

ktzar

#11 perfectamente. Lo que describes es el equivalente a que exista la palabra "agua" en un idioma. Mejor aún, la palabra "mamá" (que se dice casi igual en todos los idiomas)

tranki

#16 Ok, te he pillado y entiendo tu punto de vista.
Pero al final, es todo parecido. Funciones complejas que derivan de otras funciones más simples.
Quizás yo no he sabido expresarme bien, cuando he dicho que todos los lenguajes de programación son lo mismo...
Me refería a la gramática, no a la potencia de cálculo (que por otra parte ha de estar programada)
Mi pregunta entonces sería:
¿Que entendemos por lenguaje de programación?
¿A que nivel nos situamos?

Luther_Harkon

#c-16" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/2063449/order/16">#16 Depende del campo de la ciencia del que estemos hablando, no generalicemos tan rápido. En física de partículas, comsología y física teórica en general aún se usa bastante Fortran y, en su defecto, C++ o C#.

D

#20 Ya me imagino que cada área de conocimiento es distinta, pero por lo general para prototipar se usan lenguajes más productivos. Luego si el mismo programa va a estar rulando años pues se cambiará a lenguajes más eficientes como C/C++.

DeepBlue

#20 Y añade Mecánica de Fluidos computacional (aerodinámica, combustión, climatología), simulación de los mecanismos de plegado de proteínas, etc...

Los que realizan supercomputación suelen ser C/C++/FORTRAN edulcorado con MPI/OpenMP y CUDA/OpenCL. Evidentemente Python es una herramienta muy útil, pero por cuestiones de rendimiento en las simulaciones muy costosas se emplean esos otros.

E

#16 En telecomunicaciones también se utiliza C

D

#69 Yo me refiero a computación científica desde el punto de vista de hacer ciencia, a investigar. C se usará sobre todo para ingeniería.

s

#1 Más allá de lo que cuenta el artículo, que se centra sobretodo en el uso que da al lenguaje, el tema, tal como lo veo, no es ese, es la "expresividad" del lenguaje.

Yo no tengo ninguna práctica desarrollando cosas a bajo nivel; conozco poco C o C++ en el sentido de estar habituado a ellos. Conozco la sintaxis, los paradigmas de programación imperativa y orientación a objetos, y algo de su librería estándar. Creo que es innegable que lenguajes de muy alto nivel como ruby y, sobretodo, python, son mucho más "expresivos". Java o PHP, los otros lenguajes que "conozco", son feos, más expresivos, pero feos.

Por expresivo entiendo que su sentido es autoexplicativo. C y C++, si no los conoces, no los "entiendes". Una persona puede no conocer python pero, si sabe programar, es muy probable que entienda lo que diga el lenguaje. Python es expresivo, elegante, sobretodo... hermoso!

Rembrandt_Harmenszoon

#1 Decir que Java y C se parecen es como decir que Hitler es clavado a Marx. De programar con orientación a objetos como Java a programar en C hay un mundo. Da la sensación que, aun siendo verdad que programas en assambler, en la vida has programado nada con orientación a objetos, si no no me lo explico.

#19 Sí, alguien que no conoce Python le pones un FOR contraido y lo va a entender por los cojones...

s

#51 Cualquier persona con conocimiento de matemáticas a un nivel de bachillerato, primero de ingeniería, puede entender una comprensión de listas:

i para todo i que pertenece a conjunto A -> [i for i in listaA]

La comprensión de listas es un ejemplo de expresividad del lenguaje.

#61 Eso es una iteración con listas, yo no me he referido a eso, así que creo que te estás respondiendo solo.

Esto es super intuitivo:
list(data[i] for i in range(len(data)-1,-1,-1))

y solo he puesto un ejemplo tonto, se puede complicar bastante más.

Neochange

#1 Prueba prolog o lisp y verás que iguales son. En cuanto al artículo no creo que haya un lenguaje de propósito general como bien dices porque siempre habrá lenguajes más específicos donde sea mas fácil hacer según que cosas pero eso provoque que otras sean menos intuitivas

D

#1 Aparte de eso, todos los lenguajes de cierto nivel son iguales (variables, arrays, control de bucles, tomas de decisión, etc.) con su sintaxis y sus peculiaridades, pero en el fondo son lo mismo. Vistos un par de ellos, puedes entender un tercero sin demasiados problemas.

Pues no puedo estar más en desacuerdo.

llorencs

#47 ¿por qué estás desacuerdo con esa afirmación?

borteixo

#1 Todos iguales??? ja!

Sofrito

Python es un lenguaje que viene de perlas para escribir archivos de comandos en linux:

#!/usr/bin/env python
print 'Este es mi primer programa escrito en Python'

Ya sé que a nadie le importa, pero como comentar es gratis...

sorrillo

#24 Tu programa sería más rápido, más eficiente y ocuparía menos memoria si usaras esta otra fórmula:

print "¡Hola mundo!"

jbko

#49 Pues usas la libería de multiprocessing y asunto arreglado. Los threads lo usas en python cuando estan limitados por E/S o similar. http://docs.python.org/2/library/multiprocessing.html

Además normalmente si necesitas más rendimiento puedes cambiar a cython partes del script. Luego le unes una interfaz atractiva para ir haciendo los apuntes estilo ipython notebook y a nivel científico se convierte en una herramienta de análisis prototipeado muy adecuada.

D

#49 lo estoy haciendo Básicamente porque me interesa montar un servicio web en Play (http://www.playframework.com/), usando MongoDB para la persistencia con el plugin ReactiveMongo (http://reactivemongo.org/).

¿Y qué tal te va el curso? Yo hice el anterior de PF y me encantó, así que me apunté a este también. Es una maravilla poder tener a esa gente dando clases de gratis (mira lo que vale el training de Typesafe).

D

No tengo ni puta idea de lo que estáis hablando.

lol

D

El mérito de Python es que está programado en C.

f

la abstracción tiene un coste en rendimiento y en perdida de control mientras mas alto programes menos control tiene sobre la maquina y menos rendimiento puedes sacar de ella, ejemplo

una linea en XML --> J lineas en java --> J*M lineas en la maquina de java --> J*M*C lineas en C ---> J*M*C*Ma caracteres en código maquina .... donde aveces cada multiplicador puede llegar mucho mas que 20

sino mirad a los móviles que esta apunto de salir equipos de 8 núcleos, si el software final estuviera en C los móviles serian otro mundo, eso si no habría tantos programadores

ya que este abstracción existe por que con lenguajes mas alto nivel se ahorra tiempo y el tiempo es dinero, de echo en menos de una hora de programación haces en el móvil una brújula, o un nivel, o incluso haces que conecta el google maps con el GPS y te indica los lugares interesante de la zona, cual puedes monetizar

C

Y yo que siento es que nos estamos homogenizando a JavaScript (inclusive en el servidor con el node.js)

D

#23 node.js es un cáncer que habría que erradicar de la faz de la tierra. JavaScript debe quedarse en el lado del cliente, que ahí funciona muy bien.

El futuro en el lado de servidor está en Scala y la programación reactiva, sin ninguna duda: muy fuertemente tipado, oo (no orientado a prototipos como js), funcional, concurrente de serie... Visto el empuje que está teniendo el compilador, cada vez veo más probable que fagocite un buen trozo del pastel de Java.

Gilgamesh

#63 ¿No sería lo suyo que alguien hiciera una herramienta visual para ese tipo de tareas, en el lenguaje X, en vez de que vosotros tengáis que picar cuando no tenéis preparación alguna del tema?

Si alguien se decide a hacerlo, con distribución gratuita y continuamente puesto al día... Lo cubriré de besos y ofreceré la mitad de mis riquezas.

En serio: esas herramientas existen en algunos ámbitos, por ejemplo en el análisis de datos tenemos programas estadísticos tipo SPSS, para programar experimentos tienes E-Prime (donde hay que picar muy poco código)... Pero en cuanto aprendes R, por ejemplo, te das cuenta de que con esos programas te estás metiendo tú solito en una jaula, pierdes flexibilidad y capacidad de hacer lo que tú necesitas y te limitas a unas pocas opciones a golpe de clic. Eso por no hablar de que es software de pago, y que si mañana me cambio de universidad y allí no tienen licencia de E-Prime probablemente estoy vendido

Si alguien hiciera una herramienta como la que describes, pero potente y con mucha flexibilidad... ¡Tendría exitazo! Nosotros sólo queremos que nuestro trabajo sea fácil.

AaLiYaH

#71 Si al final ese es el problema, que hace falta yo creo una herramienta libre potente que os facilite las tareas, pero es que yo lo que vengo un poco a decir es que soltar la perla de que "X se come al resto de lenguajes" es muy atrevido, porque dependerá mucho del contexto y necesidades.

Mordisquitos

#63 #74 Es imposible crear una herramienta visual lo bastante flexible como para analizar los datos de cualquier experimento que le pongan por delante, para crear cualquier simulación a medida, o para programar cualquier pipeline bioinformático.

Para analizar unos pocos datos que no necesiten mucho tratamiento puedes usar SPSS o incluso Excel, para algunas simulaciones vale el SimuLink de Matlab, y para análisis bioinformáticos/genómicos quizá te baste con Galaxy si tus requisitos son lo bastante sencillos. Sin embargo, la ciencia experimental por definición está siempre empujando los límites y encontrándose con problemas nuevos que no se habían considerado antes, o se quiere analizar los datos mediante un proceso totalmente nuevo. También se puede necesitar integrar datos de múltiples aparatos en formatos distintos, o se quiere que los resultados se presenten en un formato gráfico totalmente personalizado.

Por eso muchos biólogos y otros científicos experimentales necesitan programar en el día a día, en R, Python, Perl o incluso Java. La programación no es sólo cosa de informáticos.

AaLiYaH

#95 ¿No es mejor tener a un experto en ciencias de la computación en tu equipo para que haga esas labores?

A mí no se me ocurriría construir casas por mucho que sepa utilizar el Autocad...

Mordisquitos

#96 En ciertas ocasiones puede ser útil usar un experto en computación, como por ejemplo para implantar un sistema de gestión de datos que vaya a utilizarse durante largo tiempo, o para desarrollar un programa estable pensado para distribuirse abiertamente.

Sin embargo, casi siempre se trata de crear pequeños (y no tan pequeños) scripts y programas ad hoc a medida para distintas situaciones que te vas encontrando. No hay versiones discretas, porque el programa va cambiando a medida que lo necesitas. No sigues criterios de usabilidad, porque los únicos que lo vais a utilizar sois tú mismo y como mucho tus compañeros del grupo de investigación. No te molestas en crear una versión estable y bonita, porque has creado el programa para analizar esos datos en concreto y puede que nunca vuelvas a utilizar el mismo programa.

En muchas ocasiones la programación y el análisis de los datos están tan integrados y tan poco separados que utilizar a un experto en programación sería demasiado engorroso, ya que para nuestras necesidades se tarda menos en enseñar a un biólogo a programar lo suficiente que en enseñar a un programador suficiente biología.

BeCor

#56 Yo me dedico a programar simulaciones para calibrar tests. Por ejemplo! Pero también tenemos análisis de datos, programación de experimentos, simulaciones de otro tipo, psicometria avanzada....

#71 Totalmente de acuerdo contigo! En mi uni se enseña SPSS y yo hice bien en querer aprender R por mi cuenta : ) ¿Qué usas para programar experimentos en Python? ¿OpenSesame?

D

Acaba de celebrarse la PyConES en Madrid el cual disponía de un track científico. Para el que esté interesado puede empezar por estas diapostivas de la mano@pybonacci que hacen un resumen fabuloso sobre este asunto.

Python + Ciencia =

strider

#81, y por cierto ha sido un congreso excelente.

D

#91 ¡Espectacular!

#100 Hay veces que la velocidad y eficiencia "humana" es más interesante que la de código. Es decir, Python es un lenguaje diseñado para humanos y C para máquinas. Siempre pudes escribir en un lenguaje de bajo nivel (como C) las partes críticas de tu código para quitarte cuellos de botella. En programación científica esta muy claro si se compara Fortran vs. Python http://www.cacheme.org/ventajas-python-fortran-c/

R

Resumen rápido (e igual inexacto) de lo que dice el tío (que no habla de que un lenguaje sea mejor que otro):
- Antes tenia que usar varios lenguajes dependiendo de lo que quisiera hacer (el tipo de problema)
- Era un rollo, hay que aprender y/o recordar cosas cada vez.
- No soy ingeniero informático, ni siquiera ingeniero, y solo habla de computación cientifica.
- Ahora Python tiene casi todas las librerias/wrappers necesarias para hacer gran cantidad de trabajo.
- El 95%-100% de lo que hacía lo puedo hacer con Python
- Ya no tengo que recordar/reaprender varios lenguajes diferentes, gano en productividad y en paz mental
- Hey, ¿no sería buena cada vez que tengo un nuevo problema ver si lo puedo hacer en Python y así no perder tiempo reaprendiendo cosas, haciendo wrappers para juntar varios lenguajes, etc.?
- Sé que hay a veces en las que no es conveniente (problemas particulares, necesidades especiales de eficiencia, etc.) ¡Pero sí ME sirve para el 95%-100% de mi trabajo!
- FIN

S

python está bien para hacer tus primeras aproximaciones a un problema, como calculadora avanzada digamos. Algo como matlab.

Pero para programas serios es una locura. Yo lo sufro dia a día. Donde esté C++...
Cada lenguaje está hecho para una cosa. Python empieza a englobar muchas cosas por su facilidad y comodidad pero nunca hay que olvidar que es para eso, para cosas sencillas.

D

Un dejavú más, lo he !
visto tantas veces, desde la tecnología Rushmore de Foxpro, hasta la explosión de Java o Sap, todos en su campo iban a ser los lenguajes definitivos. Todos los programadores cometen el mismo error de percepción, creen haber encontrado el lenguaje definitivo. Al final, es la evolución tecnológica y sus mil facetas la que marca el camino.

Por debajo de todo, c lol

AaLiYaH

Un titular como "X se come al resto de lenguajes" sólo podía venir de los Pythonitas...por qué no me sorprende roll

¿Alguien me explica que hacen biólogos o psicólogos picando código?

d

#56 Si me diesen un céntimo por cada vez que alguien me ha dicho que un lenguaje determinado es mejor que otro, seguramente ahora estaría en alguna isla paradisiaca, quemando dinero a tope, y pasando del tema. Como podrás deducir de mi comentario en #57, soy un firme creyente de que no hay un lenguaje que sea mejor en términos absolutos.
Y por cierto, vaya por delante que aunque en mi trayectoria profesional sobretodo he programado con PHP, soy un fan de Python. Y aún así reconozco que antes de decantarme por un lenguaje de programación, tengo saber en qué contexto se va a utilizar.

AaLiYaH

#62 No hacía falta un comentario tan largo, de verdad, pero gracias.

¿No sería lo suyo que alguien hiciera una herramienta visual para ese tipo de tareas, en el lenguaje X, en vez de que vosotros tengáis que picar cuando no tenéis preparación alguna del tema?

Por ejemplo, pocos informáticos conozco que tengan el atrevimiento de soltar la perla de que "X se come al resto de lenguajes".

Gilgamesh

#63 No hacía falta un comentario tan largo, de verdad, pero gracias.

Es que además de contestarte me he ido por las ramas. Sorry.

Find

Pues yo programo en Monty

f

#55 Y yo en Picky

f2105

Creo que va siendo hora de dejar de programar con tarjetas perforadas...

Nylo

#0 Me ha gustado el artículo, muchas gracias. Llevo tiempo rumiando la idea de empezar a aprender a programar en Python en mi tiempo libre (no lo necesito para mi trabajo, pero me gusta programar, y nunca se sabe cuándo tu trabajo puede cambiar ni qué podría ser considerado un plus para conseguir un nuevo empleo). Este artículo creo que me ha dado el empujón definitivo. Gracias.

P

Yo creo que una persona que no utiliza ningún lenguaje compilado en ningún contexto es una persona que en realidad "no sabe programar". En mi opinión, y esto va a sonar exagerado para muchos de vosotros, el boom de los lenguajes interpretados ha funcionado en los círculos de personas ignorantes los lenguajes compilados (total o parcialmente), entre los que se incluyen los profesores de universidades que se decantan por Python o Java: puedo decir que hay una gran mayoría de profesores que tienen un conocimiento superficial de C++, que ni siquiera dominan plantillas con cierta completitud, y lo digo por experiencia y observación.

Y es que hay una gran ventaja que no se puede obviar de lenguajes clásicos compilados, y es que los programas resultantes son más rápidos, siempre, sin excepción. Los lenguajes que proporcionan características extra como compilado al vuelo (Java, en bytecode), estrategias especiales de paso de parámetros (como Python) o los lenguajes funcionales puros con sus estrategias de evaluación pasivas y demás (como Haskell) pueden realizar decisivas en su competición con "otros lenguajes interpretados".

En el artículo que se cita, todos los lenguajes a los que Python está sustituyendo son otros lenguajes interpretados, aunque me sorprende su preferencia sobre MATLAB: la sintáxis de éste último para tratar con señales digitales (las imágenes también lo son), es mucho mejor. Y si se trata de coste/libertad, que se utilize GNU Octave, que es gratis y libre.

La única desventaja de los lenguajes compilados es la sintáxis, pero C++ (es mi ejemplo de referencia) está haciendo importantes esfuerzos en ésta dirección, en los últimos estándares.

Se mire como se mire, en cualquier aplicación científica la eficiencia es importante, y a C/C++ nadie los gana en eficiencia en tiempo de ejecución.

El problema viene cuando cualquiera que conozca un lenguaje de programación se cree que sabe programar, hasta tal punto con esos estas comunidades de programadores no informáticos (ingenieros industriales de diferentes áreas, matemáticos, telecos, psicólogos como en el ejemplo, y otros tipos de científicos), son las que empiezan a dominar ciertas áreas y son sus costumbres y preferencias las que dirigen "el mercado".

Y luego pasa lo que pasa: lo que empiezan siendo pequeñas aplicaciones para análisis de datos o "scripts recurrentes" acaban conviertiéndose con el tiempo en aplicaciones completas, con diseños horribles (aunque funcionen), imposibles de mantener, y no todo lo eficientes que podrían haber sido. Todo dirigido por la flojera y el desconocimiento.

Lo que debería ocurrir es que los no informáticos deleguen un poco más su trabajo a los informáticos programadores, y que sean ellos los que decidan cuando viene bien Python, cuando viene bien Octave o cuando viene bien C/C++.

R

#c-84" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/2063449/order/84">#84 En general estoy totalmente de acuerdo con tu post.
Pero algo que quería comentar (y paso de empezar a poner # a muchísimos comentarios, aunque se que aquí ya apenas se leera) es que Java NO ES TAN LENTO. Para el que no lo sepa aunque tenga maquina virtual, bytecode y etc. lo normal es que no se ejecute como código interpretado, sino que se usa el compilador JiT que compila directamente a código nativo (no me meto si hay optimizaciones para cada procesador, por familias o demás), otra cosa es que la compilación tarde más o menos.
El primer post que leí buscando en google: ¿Es java lento? http://codigocomestible.com/2010/03/29/java-es-lento/ (es del 2010) y lleva a comparativas como:
http://shootout.alioth.debian.org/u32/benchmark.php?test=all&lang=java

P

#89 #93 #97 Sí, quizás me he sobrepasado un poco. Analizando mi comentario más detenidamente parece que estoy condenando a los no-informáticos y a Python, y no es eso lo que quería decir. Haré una comparativa separándolo por aspectos. En algunos comparo lenguajes interpretados (con Python como estandarte), con compilados (C++); en otros, informáticos vs no-informáticos.

Primero, sobre comodidad (lenguajes):

Una cosa que me preocupa es el hecho de que el éxito de Python lo esté convirtiendo en el lenguaje del siglo XXI, despreciando a las ventajas de los demás. La gente parece que busca un único lenguaje en el que aferrarse para huir de los que no comprenden. También comprendo que es más cómodo utilizar solo un lenguaje, en vez de tener tu programa dividido en varios lenguajes diferentes que se comunican entre sí como procesos independientes. El problema es que de esta forma lo que parece comodidad acaba siendo contraproducente: Octave/MATLAb sigue siendo de lejos mucho más cómodo para tratar con matrices que Python. Si estás haciendo una aplicación en donde el 40% (por ejemplo) sea tratamiento de señales o imágenes, una mejor alternativa a escribir un programa en MATLAB o Python, es escribirlo en MATLAB Y Python, y que cada uno se encargue de lo que mejor sabe hacer. Y este tipo de cosas no las hace un no-informático.

Ahora, contra los lenguajes compilados, las críticas suelen ir en general en la dirección de que la sintáxis es engorrosa, pero por ejemplo en C++ (es mi ejemplo predilecto), esta sintáxis va simplificándose y la distancia será menor con el tiempo. Ya han añadido con el nuevo estándar C++11 bucles al estilo Python/Octave "for (i : contenedor)", funciones lambda, variadic templates (buenísimos), operadores sufijos, auto detección de tipos e incluso para el tipo de retorno (para el estándar C++14), aunque su trato con cadenas, algunos tipos de tratos con tipos, y su manejo de estructuras estilo diccionario siguen siendo de la vieja escuela.

El problema de un lenguaje como C++ es que es un lenguaje estandarizado, y por lo tanto, su evolución es más lenta, de ahí que las novedades sintácticas lleguen tarde. Lo que quiero decir es que la facilidad sintáctica no es inherente a los lenguajes interpretados: a todos los lenguajes se les puede poner más azucar.


Segundo, eficiencia (lenguajes):

Aquí no diré mucho. Evidentemente, la principal ventaja de los programas compilados es la eficiencia en ejecución, sobre todo si tu compilador también lo es optimizando. Sé que Python también se puede compilar, y que la gran desventaja de los lenguajes interpretados son sobre todo los bucles. Como dice "Pybonnaci", en computación numérica normalmente lo que tenemos es una lista de operaciones de cálculo y no tantos bucles, por lo que quizás la diferencia sea menor.

Habría que hacer benchmarks específicos, de aplicaciones específicas, en entornos específicos, para ver en qué situaciones uno gana al otro y cuándo merece la pena irse a lenguajes más duros como C/C++ y cuando quedarse con más sencillos como Python.

Pero la rapidez en cálculo tampoco es lo único que importa al hablar de eficiencia. El uso de memoria también es importante. Los lenguajes interpretados incitan a que el programador no se preocupe de cómo utilices la memoria, ya que él lenguaje se encarga de todo. Y nuevamente, depende de la aplicación que necesites. Normalmente, como todo proceso automático, hay situaciones en las que el recolector de basura, que no es perfecto, no optimice la memoria de la mejor forma posible, y haya que hacerlo de forma manual, pero resulta que los lenguajes interpretados no ofrecen mucho control en este aspecto. Pero C++ por ejemplo sí que lo ofrece, y tiene ciertos mecanismos que, utilizados bien, hacen innecesario incluso la existencia del recolector de basura (siempre se puede conseguir hacer innecesarios objetos dinámicos de corta vida, que son los que más ineficiencia en memoria generan, y el primer objetivo de los recolectores).

Nuevamente, un "no-informático" no suele pensar en este segundo aspecto de la optimización.

También podría hablar de las optimizaciones que hacen los interpretes contra los compiladores. No domino el tema así que no diré mucho, pero hay una diferencia fundamental: creo que un lenguaje como C++ siempre puede optimizar el código mucho mejor que un interprete, porque un compilador de C++ tiene muchísima más información estática que uno interpretado. En los lenguajes interpretados, los programas deben "vigilarse" en tiempo de ejecución para poder ser optimizados, con las posibles limitaciones que esto puede conllevar, y en C++ (la verdad, no he utilizado nunca otros lenguajes compilados modernos, como D, así que no puedo compararlos con ellos, y nunca he utilizado tampoco lenguajes compilados más antiguos, como FORTRAN), la optimización se hace en una pasada ya que se tiene una información más completa y profunda.

Tercero, mantenimiento (informáticos):

Muchas veces, el factor determinante para que un "no-informático" contrate a uno que sí lo es, suele ser únicamente el "tamaño" de la aplicación. Si requiere muchas líneas de código: llamo al informático, y si no, lo hago yo. Es lo que definen como "complejo". ¿Y qué hay de la legibilidad del código, qué hay del diseño, qué hay del entorno de desarrollo, qué hay de la extensibilidad, qué hay de la documentación, qué hay del control de versiones, qué hay de lo demás? Yo no digo que los informáticos hagan falta para todo, el problema es que un no-informático (la parte contratante) no sabe cuándo un informático puede ser necesario o no. Y yo digo lo siguiente: si el software va a tener vida corta, puedes hacerlo tú si sabes, si va a tener una larga vida (si crees o ves que el programa lo vas a necesitar durante mucho tiempo), contrata a un informático: saldrás ganando. Asístelo en lo que creas que sabes más que el (optimización de cálculo fundamentalmente, que los científicos saben más de matemáticas que los informáticos). El tamaño importa, pero no es el criterio determinante. El tiempo de vida está relacionado con un posible "incremento del software". Contra más tiempo utilices un mismo programa, más probable es que necesites añadirle nueva funcionalidad. Es muy raro que construyas un software que sea útil durante mucho tiempo sin cambios.

El criterio determinante es la vida del programa que estés haciendo, ya que la única habilidad verdaderamente irremplazable de un informático es a la hora de programar "correctamente", más que "óptimamente". Los informáticos también pueden llegar a optimizar muy bien el código en muchas direcciones, también los entrenan para ello, pero no-informáticos también lo pueden hacer relativamente bien en ciertas cosas. Sin embargo, en programar "bien" desde un punto de vista genérico, de modo que el programa tenga muchas propiedades deseables para que sea estable, debuggeable, documentable, comprensible... a eso, nadie gana a los informáticos (a los informáticos buenos).

La relación entre programas "grandes" y programas "duraderos" es que lo primero implica lo segundo: nadie va a requerir un programa de 10.000 líneas de código para utilizarlo solamente unas semanas. Pero el criterio determinante, como ya digo, es el segundo.

Cuarto, influencia (lenguajes):

Python es un lenguaje muy versátil: vale para prácticamente todo. Eso lo hace un poco omnipresente, además de ser más sencillo que su alternativa predilecta: C++. Eso está haciendo que, debido a su comodidad, incluso las universidades delegen la enseñanza y utilización de Python en contra de C++, por su comodidad. Normalmente, los profesores que más tiran en esta dirección son los más cercanos a las ciencias de la computación o informática aplicada, que a los que están más cerca de la pura programación. Y si ni en la universidades se enseña C++, mucho hemos perdido en el camino, ya que C++ es un lenguaje super potente e irremplazable para las situaciones donde mejor funciona. Bajo mi punto de vista, si la tendencia sigue así, los informáticos perderán competitividad.

Es preferible que un informático se pegue de ostias contra C++ y aprenda Python por su cuenta, o se utilice en asignaturas más específicas, a que aprenda Python por su cuenta, ya que debido a su complejidad, nadie va a aprender a programar en C++ a no ser que tenga que realizar aplicaciones en donde la eficiencia sea tan tan tan determinante, como en un juego; porque incluso para software de simulación, muchas veces se programan en MATLAB o Python solo porque los supercomputadores de las universidades "se lo tragan todo" (caso real).

Además, se disminuye el conocimiento general en programación. Aprender programación lógica o funcional es una experiencia positiva: conoces nuevas realidades, nuevas formas de programar, y nuevas ideas que pueden ser utilizadas en otros contextos. El problema es que, como estos lenguajes suelen tener poca aplicabilidad práctica, asignaturas específicas de programación lógica o funcional cada vez son menos comunes. ¿Dónde se podían seguir aprendiendo estos lenguajes? Pues por ejemplo en asignaturas específicas que los utilicen por su naturaleza, como la inteligencia artificial, y sus derivados, pero las universidades también están empezando a enseñarlas usando Python u otros lenguajes.

Por ejemplo, en mi universidad (UCA), donde se enseña procesamiento de imágenes e inteligencia artificial, debido a que el departamento de donde salen todos esos profesores están especializadas en reconocimiento de patrones, y usan MATLAB casi exclusivamente (para tratar imágenes), en vez de enseñar inteligencia artificial usando por ejemplo lenguajes funcionales (como históricamente solía ser), lo enseñan con MATLAB (he de decir que también aprendí CLISP). Otras universidades hacen lo mismo pero con Python.

El caso es que los criterios de personas no relacionadas con la programación pura obligan, solo por una cuestión de número, a desplazar otros lenguajes que deberían ser n

d

#84 Yo creo que una persona que no utiliza ningún lenguaje compilado en ningún contexto es una persona que en realidad "no sabe programar".
Que no haya encontrado el contexto en el cual la eficiencia de un lenguaje compilado sea un factor tan clave como el de obtener un resultado más rápidamente gracias a las facilidades de los interpretados lo descartamos entonces ¿no?

La única desventaja de los lenguajes compilados es la sintáxis...
Pues una de las sintaxis más "copiada" es la de C precisamente. Tengo la impresión de que te referirás a otra cosa

Se mire como se mire, en cualquier aplicación científica la eficiencia es importante, y a C/C++ nadie los gana en eficiencia en tiempo de ejecución.
¿Te suena de algo Ensamblador?

Lo que debería ocurrir es que los no informáticos deleguen un poco más su trabajo a los informáticos programadores...
Porque claro, en las universidades (por el caso que nos ocupa), los "informáticos" están siempre disponibles, al servicio de lo que requieran el resto de los departamentos, en su quehacer diario.

A ver si nos aclaramos. La gente que, no siendo propiamente informáticos, se ponen a programar, es porque lo necesitan para facilitar su trabajo diario. En ese sentido, prefieren lenguajes más "flexibles" en la forma de hacer las cosas, aunque pierdan en rendimiento. Cuando el rendimiento sea un requisito, tarde o temprano acabarán yendo a C o a Ensamblador, no te preocupes.
Pero no siendo ese el caso, intentarán ir a un lenguaje que les haga ser rápidos, y que sea fácil de entender. Y eso Python lo cumple.

D

#84 Creo que tu comentario es injusto. Existen muchas situaciones: Supongo que la más general es para la cual se utiliza el lenguaje meramente como una herramienta; vamos que se usa python porque es un poco más general y flexible que una hoja de cálculo. Otra situación es en la que aparecen los programadores "no informáticos" es cuando se tienen que solucionar problemas muy específicos y complejos; o sea, si yo quiero realizar un modelo de relatividad numérica, apenas existen algunas herramientas generales que me puedan ayudar. El trabajo y dinero que me cuesta contratar al informático que dices y sobre todo hacerle entender la naturaleza del problema que me traigo entre manos (el informático en este caso no es un físico teórico, ni lo tiene que ser) a lo mejor no merece y prefiero escribir mi programa en lo que conozco o medio aprendo, aunque no sea la mejor programación posible (normalmente en estos casos se va a C/C++/Fortran por velocidad)

Otro caso es si soy un observacional o experimentador y tengo cientos de miles de datos o medidas que tengo que catalogar y ofrecer a la comunidad mediante una interfaz provechosa; en este caso si que merece esa contratación, ya que en este caso el informático que sabe de bases de datos, php y similares lo va a hacer mucho mejor que yo. Lo mismo se puede decir de hacer un buen diseño interactivo con ventanitas bajo, digamos, qt o lo que sea.

python es una buena herramienta y por eso se utiliza mucho en el mundillo científico, tiene una sintaxis OO clara, un montonazo de software ya hecho y disponible libremente y tiene la virtud de que enchufarle módulos escritos en C/C++/Fortran es relativamente sencillo. Es por eso que se usa; yo creo que es sólo una razón práctica. Finalmente, tengo que decir que a la mayoría de los informáticos con los que me ha tocado trabajar, programar en python les gusta.

alexwing

Yo lo que estoy un poco harto es de esa gente que te quiere vender su lenguaje preferido por cojones, antes eran los de Java y ahora son los de Python.

sumiciu

#52 Aún me pregunto como puede ser que una colectivo como el de los desarrolladores que se supone tan preparado nos dejemos llevar tanto por modas. Supongo que porque la industria del software se rige por más criterios que los técnicos.

También me llama la atención esa ley no escrita de la gente que se dedica a la programación que obliga a intentar demostrar todo lo que se sabe en cada comentario.

Dicho esto, en mi opinion (xD) lo que demuestra esta afirmación es que al final lo que hace imponerse un lenguaje es su ecosistema, y al facilidad para dar soluciones a los problemas con la misma herramienta extensiones mediante (también esto puede llevarnos a pensar que todo son clavos para el mismo martilo, pero vaya). De hecho casi se valora más desde un plano humano el utilizar un solo lenguaje.

El flame (necesitaba meter un anglicismo, estaba en el guión) sobre que lenguaje es mejor ya lo dejo para harina de otro costal, porque creo que es un tema aparte, que una tecnología se imponga en el uso no necesariamente implica que sea mejor, ni que no lo sea. Yo creo que aquí lo que habría que examinar es si X (Python en este caso) resuelte eficazmente los problemas que se presentan (hay veces en las que nos interesa valorar el procesamiento en paralelo, otras la escalaabilidad, otras las dos cosas, otras ninguna sino que se eficiente en sistemas embebidos, otras simplemente que sea fácil de usar... ) y de ser así si existe otra herramienta que lo haga de forma más eficiente.

miguelpedregosa

Y Ruby on Rails sólo lo usan los programadores hipster lol Por cierto, es un framework no un lenguaje de programación como creen muchos

habitante5079

Al final todos los lenguajes son muy similares, personalmente prefiero ver más entornos con un compilador potente, para programación científica los lenguajes manejados tipo Java o .Net Framework son lo peor en rendimiento y manejo de memoria (especialmente Java), y los interpretados tipo Python o Basic tampoco por el mismo motivo. Delphi tenía un compilador impresionante (pena que Borland ya no exista), con resultados cercanos a C. En programación científica tienes que ir a C, Objetive C o C++, para que los cálculos no tarden horas, a no ser que la tarea sea poco intensiva. R, Python sirven para cálculos pequeños, de andar por casa, cuando tienes que manejar millones de datos y cálculos es dónde se nota la potencia de C, Objetive C y C++.

d

Este de los lenguajes de programación, es uno de los flamewars más viejos y estériles que existen. Y con el tiempo lo es más (más viejo y más estéril).

En realidad hay pocas preguntar que hacerse a la hora de elegir un lenguaje de programación. A saber:

- ¿Es el rendimiento un tema importante? Atención con esta pregunta, que ahora con los procesadores con muchi-cores la pregunta es cada vez más difícil de responder. Si eliges bien las estructuras de datos y los algoritmos en tu programación, la diferencia de rendimiento entre un lenguaje u otro, es mínima. De hecho, en el caso de que se perciba, seguramente se llegue a la conclusión que es más barato invertir en hardware, que en reescribir tu programa en otro lenguaje.
Si aún con todo esto, sigues pensando que el rendimiento es importante, la mejor opción será aquel lenguaje que esté más próximo al lenguaje máquina. Y no, no es C: es el ensamblador del propio procesador.

- ¿Están las herramientas que vas a utilizar en tu programación disponibles en la distribución estándar de tu lenguaje, o mediante librerías? Si no es así, deberías pensar seriamente el considerar aprender otro lenguaje que si que lo tenga. Y si integrado en la distribución básica de tu lenguaje, mejor aún. Más integrado suele traducirse en más óptimo en varios sentidos.
Por ejemplo, cuando he intentado usar Python para temas de programación web, siempre me he encontrado con la pega de que no tiene soporte nativo para sesiones, como PHP. También se que tiene librerías que te permiten hacer uso de ellas. Pero eso, son librerías. No están integradas en el lenguaje. En ese sentido y en ese contexto, considero PHP mejor que Python.

- ¿Te sientes cómodo trabajando con él? Parece una tontería, pero cuando estamos hablando de productividad, es muy importante que nos sintamos cómodos con él. Es decir, que no perdamos demasiado tiempo en pensar como se hacen las cosas con el lenguaje de programación en cuestión. En estas cosas, los lenguajes de más alto nivel (más distancia entre ellos y el código máquina), suelen dar muchas facilidades en el sentido de ayudar a hacer las cosas abstrayéndonos del hardware que hay por detrás.
En este caso Python es muy interesante, porque es un lenguaje de programación multiparadigma: te permite resolver un problema desde diferentes perspectivas. Y cada una de ellas puede ser más interesante que otra en función del problema.

Resumiendo: esto de decir qué lenguaje es mejor o peor muchas veces es un intento vano de justificar una elección personal, que nadie ha pedido que sea justificada. Se puede hacer cualquier cosa con cualquier lenguaje de programación. Simplemente hay que elegir el conjunto de lenguaje y librerías que te haga ser más productivo. Lo demás, es filosofar porque tienes demasiado tiempo libre.

fral

Serious business!

D

El mejor lenguaje es que el más comunidad tiene... ¡HeDicho!

D

Si el uso de Python se está extendiendo es gracias a Adria Richards y su lucha incansable por la justicia social.

b

Esto con Franco no pasaba.

mainichi

Claaaro, Java, html5, css... esos lenguajes que no sirven para nada... vamos a programar todo en Python lol, creo que el autor esta demasiado "excitado" y que su lenguaje favorito es el Python, pero dime como programar un juego OpenGL con Phyton lol

Gilgamesh

#42 El título dice "computación científica". Imagínate a qué tipo de gente se refiere: médicos, biólogos, o psicólogos como el autor.

D

El que sabe programar, sabe programar en cualquier lenguaje.

D

Es impresionante cuanto FRIKI hay por aqui. Yo soy un IGNORANTE EN LA MATERIA, y necesito respuestas de vosotros los expertos ok?.
Porque google decidio "fabricar" Youtube en PYTHON ?
Porque la NASA decidio irse tras PYTHON ?
Porque New York Times, o Washington Post o Le Figaro o La Liberation confiaron en la "dupla" Pyhton + Django

Hay algo que no me cierra, si como dicen aqui es mas lento que un caracol desgarrado, como la NASA se arriesga a usar PYTHON ? ...

Existe algun site mas solicitado, donde mas interaccion existe, usuarios concurrentes, y un larguisimo etc...que Youtube ?

Y Facebook no ha puesto a descansar sus "espaldas" con Tornado ?....

Por favor, ustedes que son entendidos en la materia, me arrojarian luz a estas dudas "existenciales"?

Gracias

D

#100 No le des tantas vueltas. Python se utiliza para hacer scripts, enlazar procesos y funciones programadas en diferentes lenguajes. Pero no es que se lancen ahora; llevan haciéndolo desde hace décadas.

Tao-Pai-Pai

Si tengo que usar Python para mis programas prefiero contar con los dedos de la mano porque acabaré antes. Python es más lento que el caballo del malo.

En tema de lenguajes de programación está C para profesionales y después todo lo demás que usáis los amateurs.

malespuces

#12

1 2