Hoy hemos tenido una interesante conversación telefónica, una mini-consultoría de una hora como toma de contacto para un proyecto muy interesante y ambicioso.  Me he visto a mi mismo en un Déjà vu, así que para no repetirme ¿que mejor que escribir en el blog?.

Cómo es habitual una de las preguntas ha sido ¿por qué Python y no PHP? La pregunta es tan habitual que ya escribí en su día un POST en mi blog personal explicándolo. Dado que es una pregunta tan recurrente y en APSL somos eminentemente una empresa Python, creo que es interesante hacer una revisión y traducción del post original. No se trata de menospreciar un lenguaje de programación, se trata de dar razones que desde nuestro punto de vista hacen que actualmente plantarse realizar un proyecto de futuro en Python sea mucho más recomendable que hacerlo en PHP. A la pregunta de PHP o Python , lo primero que tenemos que decir es que  no hay una respuesta única, siempre depende del proyecto. No hay una tecnología única que encaje a todos los proyectos y siempre se ha de evaluar.

Cuando el proyecto no tiene únicamente una vertiente web, las posibilidad de que Python encaje mejor son más altas, ya que para empezar, Python es un lenguaje de propósito general, que ha demostrado sus capacidades en ramas tan diferentes como la programación web o el cálculo numérico, pasando por la generación de gráficas científicas y el control de robots. La respuesta inicial que doy en estos casos es: por coste de desarrollo, velocidad de ejecución y facilidad de mantenimiento y evolución posterior Python y Django suelen ser una mejor elección. Seguramente saldrá tambén el tema de que "con PHP es más fácil encontrar gente".  Es verdad, pero también es más fácil encontrar gente que sepa Java o con PL/SQL.  El tema está en saber lo que queremos. Algunas empresas quieren tener gente, da estatus, otras quieren sacar adelante sus proyectos.

Por tanto, si lo que nos preocupa no es el estatus, sinó sacar adelante un proyecto, lo que necesitamos no es gente sinó buenos programadores y aquí la cosa ya se complica. El PHP es un lenguaje que tiene un nivel de entrada muy bajo. Es muy fácil empezar a hacer cosas, de ahí que mucha gente con pocos conocimientos de programación empieza con PHP y es capaz de desarrollar web. Además poner una web en producción también es muy sencillo. Un FTP y un acceso a una base de datos es suficiente para hacer la mayor parte de las webs, los CPanels están a la orden del día y con un poco de interés no hace falta mucho más. Esto nos da una gran cantidad de programador PHP aficionados,  pican código y las aplicaciones y salen, pero no hay una metodología detrás del proyecto y a menudo las aplicaciones no son mantenibles. 

En APSL hemos tenido que modificar algunos proyectos de terceros hechos en PHP, programados por este tipo de perfil. Proyectos que se hicieron sin pensar en el mantenimiento, sólo en sacar el proyecto, cobrar y desaparecer. Modificar un proyecto así es una pesadilla, nunca sabes lo que te puedes encontrar.

Una primera conclusión: es mucho más sencillo discernir los buenos programadores Python que los buenos programadores PHP.  Si alguien se ha acercado a Python para programar ya significa que tiene inquietud por hacer las cosas bien.  El nivel de exigencia inicial para hacer webs con Python también es más alto, necesitas aprender un framework,  saber configurar un servidor web optimizado para tu aplicación, ... En definitiva, no té puedes haber quedado con los conocimientos básicos "para que la cosa funcione lo suficiente", se ha de haber ido más allá, indica un nivel más alto de implicación y profesionalidad. No seré yo quien diga que en PHP no se puede programar bien.

Puedes reconocer a un buen programador PHP cuando te habla de separar lógica de contenidos, cuando habla de frameworks com Cake, Code Igniter o Symfony. Inlcuso se dará el caso que este programador ha trabajado con uno o varios de estos frameworks. Pero entonces tenemos que rechazar la hipótesis inicial de que era más fácil encontrar programador con PHP,  porqué además de ser bueno en PHP el programador debe ser bueno en el framework elegido.

Nuestro el ámbito de elección se reduce considerablemente.  Se podría argumentar que si uno sabe PHP hacerse con el framework sería sencillo, pero pasar de programar escribiendo la lógica de aplicación en la capa de presentación a un modelo MVC no es trivial, requiere un cambio de mentalidad importante y los frameworks PHP no son ni de lejos tan sencillos y bien documentados como Django, el framework web por excelencia para Python. Por otro lado, trabajar con un framework PHP significa que también hemos perdido uno de las "ventajas" del PHP: la capacidad de escribir código rápidamente y ponerlo en producción.

Cuando utilizas un framework PHP las velocidades de ejecución son ridículas si las comparamos con las de Python y Django. Quizás suficientes para lo que queremos, pero para nada comparables. De todos modos, la velocidad de ejecución no es lo más importante, lo más importante es la velocidad de desarrollo, y utilizando un framework PHP también perdemos esto. Resulta que  PHP ya no es tan directo como pensábamos, ni hay tanta gente que conozca el framework que hemos elegido cómo habríamos supuesto.

Segunda conclusión: Si utilizamos un framework PHP para programar no tendremos tantos programadores donde elegir y perderemos mucha velocidad de la velocidad dedesarrollo y ejecución que prometía el PHP. Pero además resulta que el proyecto es grande y se debe mantener a lo largo del tiempo. ¿Qué elegimos entonces PHP o Python? Para un proyecto grande no importa tanto que los programadores conozcan el lenguaje o el framework, ya que la duración del proyectos puede ser suficiente para poder dedicar unos cuantos meses a la formación. Basta que haya unos cuantos expertos que sean capaces hacer el mentoring y la formación y dejar que la gente se vaya familiarizando con el lenguaje.

Lo que sí necesitamos son buenos programadores, gente que sepa programar bien y no tenga miedo de aprender cosas nuevas. En este caso Python también saldrá muy favorecido. Estamos hablado de comparar PHP+Framework PHP con Python + Django. En Python hay una cosa que se tiene siempre presente: el código debe ser claro y mantenible, si no lo es no es pitónico. El PHP sigue otra filosofía... Si debemos mantener en el tiempo un proyecto grande Python es una de las mejor elecciones que se pueden hacer: es mucho más difícil escribir código ilegible y una vez el programador se ha impregnado de la filosofía que hay dentro el lenguaje el código sale solo.

Es lo más parecido que hay en programación a escribir pseudocódigo. Es divertido escribir y mantener código, porque es fácil leerlo. Pensemos que cuando se trata de mantener código nos pasaremos mucho más tiempo leyendo código que otros han escrito que creando nuevo código. Tener un depurador en Python, poder hacer  tests unitarios con facilidad (recordemos que la librería de test unitarios forma parte de la propia distribución de Python), tener un servidor web integrado en Django ... Todo esto hace que el trabajo de mantenimiento correctivo y evolutivo sea más sencillo. La gente que ha/hemos tenido que mantener código PHP y que ha pasado a Python y Django seguro que está asintiendo con la cabeza mientras lee esto.

Tercera conclusión: Python hace que el código que se debe estar en producción durante mucho tiempo sea mucho más mantenible. Dedicaremos menos tiempo a la depuración. Si además lo complementamos con la política de Django de estabilidad de versiones y compatiblidad hacia atrás la cosa ya es de nota. Podemos entrar también en las interioridades del lenguaje. Python es un lenguaje maduro, con librerías muy bien establecidas, bien documentado, bien pensado.

PHP hasta  hace poco no tenía orientación a objetos y todavía hoy escribir un objeto y utilizarlo en PHP muy farragoso si lo comparamos con Python. Todo en Python es un objeto. Si no fijamos en la cantidad de código que se necesita para hacer la misma tarea PHP tampoco no sale muy favorecido. Mucho mejor que Java cierto, pero en  programas grandes, el código Python es entre dos y 5 veces más corto que el código PHP. Esto quiere decir menos código que depurar, menos código que leer, menos errores. En definitiva código más mantenible. Menor coste para la empresa.

Pero una de las razonas más importantes para elegir Python se base en la experiencia que he tenido con programadores de PHP que se han reciclado y han pasado a conocer bien Python y Django.  Se han divertido en el proceso y se siguen divirtiendo programando con Python. Para mí es un factor importante, casi definitivo, puesto que un programador que se divierte es un programador motivado,  crea mejor y es un factor decisivo en el éxito de cualquier proyecto.

Así que aquí va mi cuarta conclusión: porqué Python es un lenguaje jodidamente tremendamente divertido para programar o en la versión en inglés: it's a hell of a lot of fun to code again! Para más referencias hay un artículo bastante extenso que compara PHP y Python a la wiki de Python y como no el post original.

blog comments powered by Disqus