Etiquetas

, , , , , ,

Hoy un viejo conocido me hizo esta pregunta:

Estuve a punto de contestar pero me di cuenta que soy incapaz, y que tampoco debería. Lo haré al final, como una cuestión muy personal y después de un rant de matizaciones.

Hace cinco años habría respondido sin dudar (de hecho varias veces lo hice) Python con Django. No es que me hayan dejado de gustar pero el mundo cambió bastante. Hay nuevas tecnologías como Javascript sobre node.js (y sus versiones multihilos) y Go por citar un par. Además Django se volvió un framework muy grande que quizás sea un overkill para muchos proyectos.

Pero tampoco es lo más importante, creo que la edad y la experiencia me hace ser mucho más escéptico de los lenguajes metodologías toolkits y frameworks que “solucionan todos los problemas”. Fui testigo de los problemas de cada silver bullet y hype de los últimos años. Luego están los problemas derivados de usar herramientas cada vez más complejas, llegamos a tal punto de complejidad e interdependencia de los diferentes frameworks y toolkits que hacer una actualización de versión de algunos de ellos ya es considerado un gran peligro, por lo que tienen que desarrollarse herramientas para congelar proyectos (por ejemplo los dockers).

Cuando comencé a programar Menéame (ya se cumplirán 10 años) dominaba y estaba actualizado en C, C++, Perl y PHP. A Python lo usé académicamente (hay muchas librerías matemáticas y de grafos) pero no lo controlaba. C y C++ estaban descartados para desarrollo web, Perl también porque ya estaba decayendo mucho y en aquellos años ya se había comenzado a discutir el cambio radical al Perl 6 (un lenguaje diferente y sin comunidad ni herramientas maduras). Comencé a programar en Python, pero no había frameworks, había que hacer casi todo, me pasaba más tiempo leyendo que escribiendo. Creo que a las pocas horas lo dejé, no acabaría nunca y sólo había pensado dedicarle dos semanas (que es lo que me tomó publicar la primera versión) y empecé con PHP (aunque luego hice cosas más complejas en Python para web y me encantó).

Como lenguaje PHP es muy malo, tiene montón de inconsistencias y era bastante peor hace diez años que ahora (el soporte de clases era más que rudimentario y lento -no había ni constructores-, no había funciones lambda, anónimas ni clausuras, todavía pasa objetos por referencias pero arrays por copia, etc.), ahora hay muy buenos frameworks (en aquellos años sólo había Smarty), el sistema de caché por defecto (OPCache) es excelente y hay herramientas para verificación y desarrollo de test de unidades. Ha cambiado mucho, pero sigue con sus problemas de que no ha tenido un diseño elegante y coherente desde el principio. No sigo, aquí tenéis un artículo de todos los problemas de PHP como lenguaje.

Lo anterior significó que en ese momento tuvimos que implementar desde cero módulos que hoy los incluye cualquier framework básico: autentificación de usuarios, capa de acceso a la base de datos de bajo nivel, una abstracción mínima de active record (es el patrón que se usaba), sistemas de plantillas eficientes edición de tablas de la base de datos, url router, etc. Pero no ha sido tan malo, de hecho fue una experiencia muy enriquecedora, me forzó a aprender cada una de esas técnicas y al final tiene una gran ventaja: no hay casi dependencias con módulos externos (sólo el mysqli, memcache y GD del propio PHP). Dado que siempre me limité a los “estándares” del lenguaje y que refactorizo continuamente para solucionar mis propias (e inmensas) deudas tecnológicas no tuve problemas en hacer funcionar el código en las últimas versiones disponibles de PHP (hoy la 5.5.9 de la Ubuntu 14.04 LTS).

Es decir, reconozco todas las carencias de PHP y las mías propias, pero no ha sido una mala experiencia. En lo que toca al lenguaje no me limitó nada a la hora de solucionar ningún problema (aunque en la parte de scripts del backend enseguida empecé a usar Perl y desde hace varios años exclusivamente Python).

¿Es válido sacar conclusiones de mi experiencia y aplicarlas a la mayoría de proyectos de desarrollo? Por supuesto que no.

¿Recomendaría PHP? Lo dudo, pero con las herramientas que hay hoy y la evolución de PHP (además de su excelente documentación) es una apuesta segura. Ningún proyecto va a fracasar por culpa de PHP, y hay muchos programadores disponibles.

¿Qué elegiría como cuestión personal? Todavía no, ya lo diré al final😉 pero como norma general diría que un lenguaje y las tecnologías asociadas deben cumplir las siguientes características básicas:

  • Gustos e intereses personales o del grupo: Es lo más importante, si personalmente te apetece hacerlo en un lenguaje en particular y tienes el tiempo para dominarlo, adelante. Si tu grupo de desarrollo tiene mucha experiencia en uno y no tienen motivaciones importantes para cambiar, que sigan con el mismo.
  • Libres: A estas alturas no puedo comprender que un particular o empresa desarrolle sobre herramientas tan básicas como el lenguaje en uno que no sea libre. No tiene sentido, he visto como todas han terminado pagando el error.
  • Disponibilidad de frameworks o toolkits: Ambos son ya herramientas básicas que permiten desarrollar tanto para web como para backend de aplicaciones móviles. Con la madurez y variedad que hay es impensable comenzar desde cero como hice yo. Eso sí, buscaría lo más sencillo y ligero que se adecue al proyecto.
  • Con comunidad: Así estarás seguro que las herramientas que uses evolucionarán, estarán disponibles y mantenidas muchos años y que encontrarás alguien que tuvo antes los mismos problemas y te ayudará con la solución.
  • Lenguajes que ayuden sin burocracia exagerada: No hace falta que añada nada a lo que explica Rob Pike en el siguiente vídeo. Sólo recalcar que un lenguaje que tiene libros con 71 patrones diferentes que debes usar y que además cada conjunto de ellos tiene detractores y teólogos no es un lenguaje divertido. Si además es un lenguaje con el que no puedes desarrollar cómodamente desde cualquier editor de texto sino que requiere de un complejo IDE para hacerlo tampoco es un lenguaje que permita soluciones simples a problemas complejos y menos aún soluciones simples a problemas sencillos.

Me juego

  • Python, Ruby, PHP (y sus respectivos frameworks) son apuestas seguras, maduras y divertidas.
  • Java es lo mismo quitada la diversión y con demasiada burocracia, pero Scala y Clojure le agregan diversión y te quitan de encima tantos teólogos y promotores de ritos y patrones.
  • Javascript (sobre node.js o sus versiones multi hilos) es una apuesta segura y prometedora.
  • Go es muy prometedor, me encanta, la sencillez y potencia de un C del siglo XXI.

¿Qué elegiría hoy para un proyecto desde cero? Go. Aunque no sé qué framework usaría, hay mucho debate.