Inicio > programación > Lenguajes dinámicos, programadores y FUD

Lenguajes dinámicos, programadores y FUD

mayo 24, 2008

Esta semana estuve en SICARM. El miércoles por la noche nos invitaron a una cena de gala. Donde todas las mujeres estaban muy guapas, de largo y con tacones. Los hombres todos de trajes, salvo yo, con mis vaqueros y mis zapatos todo terreno. No me avisaron que era fiesta de gala, aunque de haberlo sabido tampoco hubiese mejorado demasiado.

El tema es que sí había bastantes frikis camuflados. En una de las frikiconversaciones hablábamos de Python y Java. Uno programador de Java me dice:

Es que no me fio nada de los lenguajes dinámicos, no me fio de los lenguajes que no se pueden compilar.

Ya había ingerido par de cervezas y jamones, así que me lo tomé de buen humor y hasta me reí del típico FUD. Pero hoy leí Dynamic Languajes Strike Back (vídeo, puaj, yo lo puedo ver), una buena y humorística presentación en la Universidad de Stanford sobre los mitos que hay con los lenguajes dinámicos (la “cultura informática” en Stanford parece ser muy  fanática C y C++).

La siguiente transparencia contestaría al planteamiento de la noche en Murcia de forma muy breve y expeditiva:

DUD y programadores necios

Dice más o menos:

Una vez que terminemos de resolver los problemas de rendimiento y herramientas (IDEs), ¿qué nos quedaría?

  • Programadores necios, ignorancia, FUD.
  • “Mantenibilidad”, la herramienta de FUD más moderna.
  • La única solución: toneladas de marketing.
  1. mayo 24, 2008 en 3:08 pm

    Juas… conozco a varios. En el fondo creo que pasa lo siguiente:

    - Lo que más saben es Java.
    - Lo que les da de comer es Java.
    - Les da pereza / miedo cambiar.
    - Les da vergüenza reconocerlo.
    - Se inventan razones técnicas para intentar quedar bien.

    En fin, muy humano, y seguro que parte de eso lo hacen inconscientemente… pero eso no les da la razón, para nada. Normalmente paso de discutir con ellos porque a me da vergüenza destaparles el pastel, y seguramente se lo tomarian a mal. Muchos en el fondo no son malas personas, simplemente tienen una gran afición a su viejo sofá, con el culo marcado tras muchas horas de ver la tele. Con no parecerme a ellos me doy por satisfecho :-P

  2. mayo 24, 2008 en 3:49 pm

    A mi personalmente lo que me cansa es tanta discusión de que si Java es mejor o si Ruby se va a adueñar del mundo o si C++ no está muerto. Lo que debe saber un ingeniero es escoger la herramienta que mejor le convenga para lo que esté desarrollando, creo.

    Y sí #1, mucha gente pasa de cambiar (véase la mayoría de empresas de Baleares, Java+Oracle), pero cuando salga una competencia a la que le de igual cambiar de lenguaje cuando sea y que ese cambio se haga en base a lo que mejor se ajuste al proyecto que desarrolla, ya se empezarán a poner las pilas.

  3. mayo 24, 2008 en 4:59 pm

    En parte lo que entiendo de la gente que huye de lenguajes no compilables es que en algunos lenguajes como C++ se pueden detectar errores en el uso de una interfaz en tiempo de compilación. En Python es mucho más complicado. Por ejemplo, leyendo código en Python a veces no me queda nada claro si el tipo del argumento de una función debe ser una cadena o una lista de cadenas. A no ser que dicha función esté perfectamente documentada, al final te toca leer el código. Esa son las cosas de Python que más me cabrean, junto con la estupidez del indentado.

  4. mayo 24, 2008 en 5:27 pm

    Llamosí debería haber estado entre el público de la charla, lo hubiera puesto de vuelta y media :D

    #3 Felipe, el indentado es una de las pequeñas cosas que me gustan de Python, supongo que es cuestión de gustos.

  5. emilio
    mayo 24, 2008 en 5:31 pm

    Alguien podría subirlo youtube? El link no me anda ni en konqueror ni en firefox, gracias.

  6. mayo 24, 2008 en 8:17 pm

    Respuestas para #3 (y donde digo Python prácticamente podria poner Ruby :-)

    - IMO, la documentación es un parche para los lenguajes poco claros, o una apología del código cerrado, o ambos :-D
    - Programar en Python como si fuera otro lenguaje, por ejemplo C++, puede confundir bastante las cosas incluyendo el paso de parámetros. Pero eso no es un defecto de Python sino del usuario ;-)
    - Indentar clarifica el código. Si lo haces obligatorio te puedes cargar llaves, begin/end, o similares, con lo cual la clarificación es doble. Total, luego los que usan lenguajes sin indentado obligatorio acaban usando IDEs tipo Eclipse que lo simulan… y se creen que han puesto un huevo de dos yemas :-P

  7. maeghith
    mayo 24, 2008 en 9:11 pm

    #5 emilio, si sabes inglés, pasa del video. El propio Steve Yegge transcribió la charla completa y algunas preguntas en el enlace que ha puesto Ricardo justo antes del enlace al video.

  8. mayo 24, 2008 en 10:29 pm

    En estos momentos programo un 40% en Java y un 60% en Python, y lo que tengo muy claro es que lo que no puedes hacer es programar en Python como si lo hicieras en Java ni viceversa. Los lenguajes dinámicos tienen también la ventaja que es mucho más fácil probar lo que haces ya que los ciclos de desarrollo-prueba se hacen mucho más cortos frente a los ciclos desarrollo-compilación-despliegue-prueba de entornos tipo Java/Asp, etc, por lo que la “desventaja” de no tener un compilador que te vaya detectando los errores se ve de sobras compensada por la facilidad de corregirlos cuando aparecen. Al escribir muchas menos líneas de código, y ser el número de errores directamente proporcional al número de líneas que se escriben, podemos concluir que más que una ventaja de los lenguajes compilados es una necesidad.

    Los lenguajes dinámicos actualmente son lo suficientemente rápidos (y no digo más rápidos, ojo, sólo lo suficientemente rápidos) y potentes, como para poder competir con los lenguajes tradicionales. En el ámbito de la web son altamente competitivos, hasta el punto que en estos momentos no me planteo desarrollar aplicaciones web que no estén desarrolladas en un lenguaje dinámico (para mi Python), y eso no quita que parte de la aplicación,en forma de servicio web, pueda estar desarrollada en otro sistema, depende siempre del proyecto.

    Del identado qué decir, es como si yo me quejase de los puntos y coma de otros lenguajes de programación, es parte de la sintaxis del lenguaje y que, a diferencia de otras convenciones además ayuda a que el código sea legible.

  9. mayo 25, 2008 en 12:29 am

    Yo soy de esos que se sienten cómodos con el compilador bajo el brazo.
    No tengo grandes conocimientos de Python todavía, un poco sí de PHP, por ejemplo y algún otro sin importancia.

    Si tengo un modelo de clases donde una estantería tiene estantes y decido que la estantería tiene un método que llama a otro del estante para saber cuántos libros tiene… ¿Qué pasa si elimino el método del estane? ¿En qué punto del código me va a dar el error? Cuando se ejecute… si pero, ¿En cuántos puntos del código se ejecuta?

    grep -R contarLibros(.*) * (sí… si tenemos grep)

    En general, este problema lo resuelve el compilador. Es decir, el compilador me da una mínima garantía de que el código es sintácticamente correcto y me avisará inmediatamente de en cuántos sitios hace falta el método recién eliminado.

    Hay una implementación de ruby, JRuby, que se usa a menudo para implementar las acciones de un modelo MVC en Java. Se usa código ruby para llevar a cabo una secuencia de instrucciones que hace un número limitado de cosas.

    Probablemente por desconocimiento, me siento más “tranquilo” con el compilador de Java bajo el brazo que con 200 ficheros .py aunque el blogger de trespams me dijo que hay unas test suites cojonudas en django que hacen casi innecesario el compilador… y yo me fío de lo que dice ese de trespams :-)

  10. joe di castro
    mayo 25, 2008 en 11:17 am

    Paco Ros, buena parte de esos problemas que comentas se resuelven con la herramienta Pylint, que intengrandolo con Eclipse y PyDev tienes un IDE integrado que te resuelve practicamente todas esas situaciones:

    -Si declaras una variable, un metodo, una clase, etc.. y no lo usas, pues te avisa con un warning.
    -Si intentas utilizar una variable, clase, método, función, … que no has declarado (o que has borrado o renombrado sin hacer un refactoring como dios manda) pues tambien te avisa con un warning y esto antes de ejecutarlo, simplemente al grabar el fichero (pues realiza un build)
    - Y por supuesto también comprueba la sintaxis, el identado, que se respeten las convenciones y las guias de estilo del lenguaje, etc…
    -Eclipse también te permite hacer búsquedas en todos los ficheros que componen un proyecto, lo que elimina la necesidad de hacer un grep desde la linea de comandos. No es inmediato como en un compilador, pero te permite averiguar de forma muy sencilla donde se encuentra algo en todos los ficheros implicados.
    -Y bueno, la herramienta para refactorizar código es un lujazo y super útil…

    Y todo eso sin necesidad de compilarlo. Y cuando haces un debugging o una ejecución, tienes un salida de todas las incidencias y errores por la línea de comandos, y que hay que decir que muy clarificadora, con un detalle de la pila de llamadas que originan el error.

    Y bueno, no solo con Eclipse, hay otros IDE para Python también muy buenos y completos como puden ser Eric, Komodo y WingIDE, aunque yo personalmente, después de haberlos probado todos, me sigo quedando con Eclipse + PyDedv + Pylint + PyUnit.

    Quizá donde aún Python esté un poco cojo sea en el tema de un buen RAD para wxWidgets, el GUI por excelencia para Python. Aunque se puede suplir sin demasiadas dificultades con herramientas básicas como wxGlade y desarrollar lo restante en el código a pelo.

  11. mayo 25, 2008 en 1:39 pm

    Iba a poner un comentario que iba a decir exactamente lo que #1, así que escribir para na, es tontería.

  12. mayo 25, 2008 en 3:08 pm

    Yo he pasado toda mi vida (laboral) trabajando con java, me sentía muy cómodo. Sin embargo, empecé a probar los lenguajes dinámicos, primero Ruby on Rails, ahora Django, y he descubierto que trabajar con ellos (para hacer webs) es infinitamente más fácil y productivo, y con total solvencia.
    Finalmente he empezado a construir un gran proyecto con Django, junto a otro compañero. Pero ahí me he dado la primera fostia, aunque nada que ver con la tecnología. No consigo encontrar otros programadores Django/Python para ayudarnos en el proyecto. Es demasiado pronto para Django? Es el monopolio de .Net y Java perjudicial para la industria?

  13. mayo 25, 2008 en 3:46 pm

    No tiene mucho que ver, pero lo he encontrado buscando lenguajes… que bonito: http://isaacproject.u-strasbg.fr/

  14. mayo 25, 2008 en 7:24 pm

    #10 Me lo suponía, pero, fíjate en que lo que me estás diciendo es que llevas un compilador de python integrado en el IDE. El hecho de que el código objeto se genere y se linke o no es secundario.

    Realmente lo que quiere el programador es un analizador léxico, sintáctico y semántico. Si genera código objeto o el lenguaje es interpretado poco importa.

    De todos modos, gracias por la explicación, seguro que me será muy útil cuando termine de implementar… mi compilador 0:-)

  15. paurullan
    mayo 27, 2008 en 6:47 am
  16. junio 2, 2008 en 6:16 am

    Pues no he comprendido bien que querías decir con tu texto Ricardo porque me ha dado la impresión de que preferías lenguajes compilados y me extraña que digas eso… sobretodo porque todo el mundo ha comentado lo contrario. Supongo qu enolo habre entendido bien.

    Yo estoy dándole mil vueltas al tema de la elección del mejor lenguaje para lo que quiero hacer (una aplicación multiplataforma válida tanto para sobremesa como para móviles) y me esta resultando muy complicada la elección. Java siempre le he tenido manía y se la sigo teniendo, no me parece una opción valida. Python no esta en iPhone por ejemplo y lo que parecen aceptar todos los sistemas son variantes de C pero no me queda claro si podría hacer una misma estructura válida para todas las plataformas y luego crear funciones especificas para cada una… Estoy hecho un lío… Tanto que Flash me empieza a parecer una opción viable…

  17. junio 2, 2008 en 10:15 am

    > Pues no he comprendido bien que querías decir con tu texto Ricardo porque me ha dado la impresión de que preferías lenguajes compilados y me extraña que digas eso

    Estás equivocado, hace años que programo en Smalltalk, Perl, PHP o Python (además de C o C++). No tengo nada contra los lenguajes dinámicos, todo lo contrario.

  18. junio 7, 2008 en 7:38 pm

    Disculpen la ignorancia en el tema, pero ¿qué es FUD?

  19. GuERo
    junio 8, 2008 en 11:22 am

    Llego tarde (porque escribes mucho) pero investigando un tema encontré unas frases de Alan Kay:

    “Yo inventé el término “Orientado a Objetos”, y te puedo asegurar que C++ no era en lo que estaba pensando.”
    “Java es lo más penoso que le ha ocurrido a la informática desde MS-DOS”

    En cuanto lo he visto, me acordé de este post :D

  1. No trackbacks yet.
Los comentarios están cerrados.
Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 460 seguidores

%d personas les gusta esto: