Etiquetas

, , ,

En inglés se suele decir que una persona -especialmente un blogger- es opinionated cuando opina frecuente y públicamente, además es obstinado en esas opiniones. Quizás en castellano la palabra sea terco, obstinado, aunque me parecen que son demasiada peyorativas. De todas formas seguro que yo entro en ese conjunto de personas opinionated🙂

Salvando las distancias en calidad y éxito, suelo hacer lo mismo que Jeff Atwood de The Coding Horror –que por cierto hace poco habló bien del WP-Cache, a pesar que está “abandonado” hace más de un año por falta de tiempo y motivación😦 –. Hoy  explica su estilo en Strong Opinions, Weakly Held.

Lo saco a colación a raíz de su artículo –con el típico titular de un opinionatedPHP Sucks, But It Doesn’t Matter. Yo llevo programando PHP desde hace años, pero su titular y estilo no me molestó, al contrario, me gustó bastante. Primero porque entiendo muy bien –y lo comparto– ese estilo de escribir. También porque sé que el PHP como “diseño de lenguaje” es muy malo. Luego porque el apunte es divertido, pero fundamentalmente porque invita a una reflexión sobre la paradoja y contradicciones del tema.

Lo realmente importante está en la segunda parte del título y en la última del apunte:

But I’m also here to tell you that doesn’t matter.

The TIOBE community index I linked above? It’s written in PHP. Wikipedia, which is likely to be on the first page of anything you search for these days? Written in PHP. Digg, the social bookmarking service so wildly popular that a front page link can crush the beefiest of webservers? Written in PHP. WordPress, arguably the most popular blogging solution available at the moment? Written in PHP. YouTube, the most widely known video sharing site on the internet? Written in PHP. Facebook, the current billion-dollar zombie-poking social networking darling of venture capitalists everywhere? Written in PHP. (Update: While YouTube was originally written in PHP, it migrated to Python fairly early on, per Matt Cutts and Guido van Rossum.)

Notice a pattern here?

Some of the largest sites on the internet — sites you probably interact with on a daily basis — are written in PHP. If PHP sucks so profoundly, why is it powering so much of the internet?

Coincido con él en muchas cosas, aunque describiría de otra forma a los problemas fundamentales del PHP:

  1. No fue diseñado desde el principio como un lenguaje basado en objetos y polimorfismo, que es uno de los problemas que genera la superpoblación de funciones. Así en vez de tener un $array.shift() o $array.pop() existen funciones como array_shift() o array_pop().
  2. Tampoco tiene las facilidades de tratamiento de listas que tiene cualquier lenguaje dinámico desde hace dos décadas como mínimo, como por ejemplo slices nativos, por lo que se necesita otra función como array_slice() a substr() en vez de poder usar $array[i:j] o $string[i:j].
  3. No hay soporte nativo uniforme de módulos que permita tratar de forma transparente –como el use de Perl,  import de Python o include en Ruby–, a módulos desarrollados en PHP y a los llamados “módulos PHP” que se cargan dinámicamente por el interprete.
  4. No soporta los namespaces independientes para evitar evitan la polución del espacio de nombres global.
  5. No tiene soporte nativo para frameworks o abstracciones tan básicas como las de acceso a bases de datos como DBI en Perl, PyDB en Python, DBI o ActiveRecord en Ruby. Así cada sistema gestor de base de datos tiene sus propias funciones, con sus propios nombres y métodos de acceso.
  6. Otros et cetera.

Pero unas críticas de este tipo son incompletas, hay que analizar también el porqué tuvo tanto éxito, su contexto histórico y qué tipo de problemas fue capaz de resolver.

El contexto histórico es que el PHP surgió como un hack rápido para poder generar páginas HTML dinámicas en un momento –1995, antes que existiese ASP o VB Script de Microsoft– en que no había demasiadas opciones y que la Internet comercial y ommipresente estaba todavía en sus inicios.

El lenguaje, por su sencillez, podía ser compilado e interpretado muy eficientemente. Hoy en día, en un programa “pequeño” el PHP sin precompilar (o sin cachear, lo que hace el eaccelerator) sigue siendo más rápido que un Python precompilado (que a su vez es mucho más eficiente que Ruby). En unas pruebas que hicimos en clase de AdmSO, un “hola mundo” en PHP generaba casi 6000 páginas por segundo en mi portátil. En el mismo ordenador, Python no llegaba a 4000. Esta velocidad y eficiencia tiene su coste, por ejemplo la falta de polimorfismo, la diversidad de funciones, la falta de namespaces, etc.

PHP también supo resolver los problemas de su época, aunque hoy todos estemos convencidos que un modelo MVC (o MTV) como el Django, Rails, PHP Cake o Struts sean la “bala de plata”, no es ni ha sido siempre así. En el desarrollo web se usó y sigue siendo útil el modelo de desarrollo “basado en la vista” sin “efectos colaterales” en las otras vistas que permiten un prototipado poco ordenado y quizás caótico, pero extremadamente rápido. Es decir, se pueden definir las páginas que serán visibles al usuario –lo que suelen hacer con el “árbol de navegación”– y programarlas de forma independiente sin que la modificación de una implique u obligue a cambios en las otras vistas.

Esto último no es lo habitual en el desarrollo de aplicaciones web MVC, a menos que tengas perfectamente diseñado y resuelto  de antemano cuál será el uso final y la arquitectura del sistema (algo bastante raro en proyectos novedosos o en startups, véase por ejemplo el caso paradigmático de Twitter). A diferencia del PHP “plano”, en un modelo MVC como Rails o Django (supongo que en Struts debe ser similar, no lo conozco) hay que mantener sincronizados el controlador, las vistas y las plantillas. Se puede “forzar” a tener un fichero independiente para cada vista y plantilla, pero eso exige duplicación de trabajo y se pierden algunas de las ventajas del MVC (aunque la  DRY —Dont Repeat Yourself— sigue prevaleciendo como fundamental).

Además de los puntos mencionados anteriormente –eficiencia y velocidad del intérprete, prototipado rápido– tiene otras ventajas que han tenido mucho que ver con el éxito del PHP: es libre, multitud de código y ejemplos en Internet, las librerías de PEARL, facilidad para implementar frameworks adaptados a las necesidades de una aplicación –como el EZ DB simplificado y optimizado del Menéame–, una curva de aprendizaje muy suave y quizás la fundamental, la calidad de la documentación en línea de PHP.net.

En resumen. No existen las soluciones mágicas, diseñar buenos lenguajes es muy difícil, incluso los lenguajes a priori muy malos tienen sus ventajas y no hay que descartarlos sobre todo si han tenido el éxito que tuvo el PHP, uno de los primeros lenguajes dinámicos usado de forma masiva en Internet (después de Perl –cuyo equivalente “empotrado” en el servidor web, el mod_perl– es bastante duro para programar).

Además PHP no ha dejado de evolucionar, así en la versión 4 (liberada en mayo del 2000) se incluyó  programación orientada a objetos, muy mejorada en la versión 5 (2004) que incluyó también construcciones importantes como las excepciones.

Todo esta reflexión fue generada por un artículo en principio “troll” pero en el fondo provocador, de esos que me gustan mucho. Un ejemplo de todo lo contrario se puede leer en este otro artículo que usa de excusa a PHP Sucks, But It Doesn’t Matter para demostrar públicamente la ignorancia sobre el tema. Así dice:

Siempre me ha parecido la “versión amateur” del ASP. Sin orientación a objetos hasta hace poco, Testeo unitario, manejo de excepciones y con una serie de aspectos que me han tirado siempre de espaldas cada vez que he intentado hacer algo con él.

En este apunte ya desgrané parte de la respuesta, además ya respondí brevemente y punto por punto.

Si este apunte hubiese sido de un jovencillo que empieza su andadura en el desarrollo o estudios de informática no me hubiese extrañado nada esa divulgación de mentiras, la ignorancia del tema del que habla, la falta de un mínimo de contraste –tan fácil que es recurrir a Google, la Wikipedia o PHP.net– y la defensa cerrada y numantina de una tecnología –ASP y VB Script– propietaria de una empresa y que prácticamente no tiene “mercado web” más allá de las empresas cautivas de Microsoft (módulo MySpace).

Tampoco me hubiese molestado si un “profesional” afirmase desconocer completamente el PHP, nadie está obligado, ni siquiera es posible, conocer todas las tecnologías que existen en informática. De hecho es un acto de honestidad enorme y poco frecuente que un blogger reconozca que no sabe de un tema.

Pero en este caso se hacen afirmaciones contundentes de un profesional que afirma tiene un máster, fue consultor y ahora responsable de tecnologías de la información de una empresa.

Ya ha llovido mucho, pero no deja de soprenderme el nivel de disfunción metacognitiva de los supuestos profesionales –mis colegas–, ¿cómo se puede ser consultar con tanta ignorancia de lo que “hay allí fuera”? ¿cómo este tipo de profesionales pueden llegar a ser responsables informáticos de una empresa?

¿Cómo pueden tener las empresas semejantes responsables? ¿No es una contradicción que sean las mismas que se quejan de la capacidad de los técnicos o de la formación universitaria? ¿No saben aplicar filtros para sus directivos? ¿O valoran más otras capacidades y luego se quejan de la carencia de las que ignoran?

Aunque hace años que se lleva la moda new age de pensar erróneamente que todas las opiniones son respetables.  Lo único respetable son las personas, en cambio hay opiniones que no se merecen nada de respeto. Si además se trata de obviar o mentir sobre temas técnicos objetivos de un profesional, deberían ser consideradas basura absoluta.

Deberíamos aprender de una vez a opinar como verdaderos profesionales, conocedores de lo que hablamos y/o contrastar mínimamente antes de hacer afirmaciones tan gruesas. No se trata de usar las “provocaciones inteligentes” de otros para manipularlas y usarlas de excusa para “salvar el culo”.

Porque al final me parece que este tipo de FUDs son [mala] excusa para justificar años  de decisiones incompetentes que han dejado a su empresa totalmente cautiva de lo que pueda hacer o dejar de hacer Microsoft.

I’m really pissed at Microsoft. Why?… Amazon doesn’t offer EC2 for Windows, just Linux… And I’m stuck with two Windows boxes at my hosting company, hosting a dead fucking end. My bet on Microsoft in the late 90s just ran out of gas. — Dave Winer en  Early notes on GoogleApps.

Vale. Salvad vuestros culos como podáis, pero no echéis mierda alrededor, que nos pringamos y cabreamos todos.