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 opinionated— PHP 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:
- 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().
- 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].
- 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.
- No soporta los namespaces independientes para evitar evitan la polución del espacio de nombres global.
- 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.
- 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.
Ese blogger lleva una larga trayectoria de aprovechar la mínima excusa para echar mierda sobre todo lo que huela a software libre, así que no hacia falta ni replicarle.
Yo tambien desarrollo en PHP y estoy contento con la evolucion del lenguaje, estoy deseando que salga la 5.3 🙂
> estoy deseando que salga la 5.3
Mejor esperar por la 6, ¿no? 🙂
Vaya, en realidad mas que ignorantes son personas que leen y entienden todo mal.
Efectivamente el sentido de lo que dice Atwod está en la linea de lo que tú dices Ricardo, y usarlo como excusa para apoyar ASP,o ASP.NET no sé si es ignorancia, o FUD, porque toma fragmentos del artículo de Coding Horror y los saca de contexto.
Pero a propósito de escopetas, ¿qué opinas de la crítica que le hace Rankine a Jef Atwood en su apunte Blogging Horrors http://girtby.net/archives/2008/5/22/blogging-horror?
Sobretodo el hecho de que desmerezca a Atwood por no saber programar en C.
Me recuerda a los comentarios que un profesor de la UIB realizo sobre el diseño de las ethernet.
Dijo que a su estrategia a la hora de afrontar problemas de colisión le faltaba tal elegancia, que hacía imposible que su diseño proveniese de una universidad. Otro ejemplo de como una exquisitez a nivel teorico no es requisito para un éxito práctico.
(ademas, leo en la wikipedia que su origen sí está relacionado con la universidad)
#3
Eduardo, sí, lo había leído porque contesta a ella en el primer enlace que pongo. Estoy de acuerdo en que no debe ser muy buen programador, no sólo por no saber C, sino porque en su crítica a PHP se quedó en lo superficial (la lista de funciones) y no en temas de fondo como la falta de polimorfismo o de frameworks y patrones básicos de cualquier lenguaje dinámico moderno.
Aún así no le quita razón, o «provocación positiva» a su artículo. De hecho demuestra que sabe del tema –o que tiene más neuronas– más que otros que se autodenominan consultores o directores de IT 🙂
🙂 gracias por tu respuesta.
>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
Todo el artículo me ha parecido excelente, pero estas dos líneas es que me han llegado al alma…
Pingback: Opiniones firmes « Bitácora de Javier Cancela
Toda una obra maestra con un apoteósico final jajaja.
Además, eso de que el PHP sea malo es muy relativo: cuando los errores con ASP.NET surgen de forma aleatoria por razones internas del framework, la mecánica suiza del PHP es muy de agradecer, aunque no sea el lenguaje más «elegante».
Es curioso como coincidimos absolutamente y previa lectura de tu post en las opiniones de ambos artículos. Yo también los leí y pensé igual. Así que he sentido un deja vu al leer tu post.
«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)»
Ey, que MySpace no está en ASP, está programado en ColdFusion (ese gran desconocido).
#11 Ernesto, no lo decía por el ASP –en realidad ni se qué usan– sino porque es uno de los pocos «sitios 2.0» grandes que usan servidores Windows.
Conozco tanto PHP como Perl e incluso he hecho mis pinitos en Ruby. Conozco esos lenguajes y hasta donde llegan. Y nunca me ha temblado la mano al escoger Perl en vez de PHP para hacer cualquier cosa. A mi con PHP me pasa como con Java, que de mal hecho me resabía.
Desde que descubrí ASP.NET (me da igual el lenguaje, aunque prefiero C#, que duda cabe) ya no he vuelto a tocar Perl más que puntualmente. No es que sea mejor, simplemente realizar cualquier tarea de un determinado nivel es mucho más sencillo, rápido y eficaz.
Ahora nos podemos poner a discutir que a mi me mola más, a ti te mola más, pero al final la conclusión es que cada uno usa lo que le parece mejor. Al final me he decantado por ASP.NET después de años con Perl y PHP, y tengo mis razones. No creo que vuelva a usar esos lenguajes en web nunca más mientras exista .NET, tengo que hablar con sinceridad.
Los comentarios de Jomaweb con respecto a todo lo relativo al software libre son siempre de la misma guisa, bastante trolls y absurdos en su mayoría. Yo estoy ya por dos posibilidades, o realmente el chaval no tiene muchas luces o lo hace a propósito. Me decanto más por la segunda.
El salto que debería dar PHP 7 (asumo, ya que PHP 6 no se habla nada de esto) es:
– reorganizar (o por lo menos crear «wrappers») todas las funciones en clases, así ser más POO y alejarse de la programación estructurada (o por lo menos estar más preparados para una buena POO).
– permitir opcionalmente la compilación de php para obtener más optimización, o quién sabe, algo como los jars de Java que nos permiten tener paquetes compilados.
– y que todo (funciones y clases) devuelvan nativamente un excepción siempre (no como ahora que para que funcione un try / catch tienes que retornar a mano la excepción).
Creo que por ahí estaría bastante contento 😉
#12, disculpas por el fallo (y el casi off-topic), he rebuscado un poco, y en efecto, parece ser que MySpace usa ASP .Net
«Ya ha llovido mucho, pero no deja de soprenderme el nivel de disfunción metacognitiva de los supuestos profesionales –mis colegas–,»
A mí no me sorprende, lo que no deja es de indignarme.
«¿cómo se puede ser consultar con tanta ignorancia de lo que “hay allí fuera”?»
Porque para venderte como consultor no hace falta saber nada, solo -que no es poco- tener habilidades sociales para convencer a otro de que sí sabes. Ser consultor es como administrar windows. Cualquiera puede administrarlo mal y que tire por un breve tiempo, y es increiblemente dificil administrarlo bien.
«¿cómo este tipo de profesionales pueden llegar a ser responsables informáticos de una empresa?
¿Cómo pueden tener las empresas semejantes responsables?»
Personalmente tengo mis dudas acerca del verdadero origen, y el verdadero destino de las supuestas inversiones en TIC de muchas empresas. Creo que es pura y simplemente, corrupción. Y este tipo de profesionales son los ideales para gestionarla.
«¿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?»
Efectivamente es una contradicción, pero que alguien diga algo, no significa necesariamente que lo piense, tan solo que le sirve el decirlo, casi siempre para eludir responsabilidades, ganar tiempo o alimentar el verdadero negocio. ¿Nadie se ha parado nunca a pensar quienes son los verdaderos clientes de una consultora?
¿Los que pagan por el producto o los que pagan por trabajar?
«¿No saben aplicar filtros para sus directivos? ¿O valoran más otras capacidades y luego se quejan de la carencia de las que ignoran?»
Está claro que capacidades valoran. Lo que no está tan claro que realmente se estén quejando.
> «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)»
Esto es muy relativo y depende del programa (http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=php&lang2=python#about).
«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.»
Ricardo, perdona la vuelta de tuerca, pero me podrías decir como hicisteis la prueba y en que entorno.. estoy interesado, por que en mis pruebas es python2.5 el que gana sin problemas a php5..
En varias ocasiones, diria muchas encuentro en los foros de desarrollo o algunos blogs frases como «Elegir el lenguaje de programacion que mas te guste». Será cuestion de gustos??
#20, No siempre es cuestión de gustos, claro, pero sí, yo sí creo que es muchas veces algo relacionado con lo que te gusta o lo que quieres. Está claro que hay lenguajes superiores a otros para realizar determinados tipos de tareas, y sin embargo nos emperramos en usar otros, bien por desconocimiento (deseado o no), bien por orgullo. Esto de la informática (disculpad el autobombo, pero viene al caso) es muchas veces un vicio que se convierte en sectarismo en ocasiones. Eso ha pasado, por ejemplo, en el caso de PHP vs. Perl. Todos sabemos que PHP proviene de un conjunto de funciones Perl que el señor Lerdorf se montó para hacer mejor su páginas web. La gente acérrima del PHP siempre ha tenido (al menos hasta hace no demasiado tiempo), en mi opinión innecesariamente, una espina clavada en su relación con Perl. Es sólo un ejemplo de que al final, en programación, al cuestión tira más por lo que te mola que por lo realmente necesario. Luego, la gente que sabemos un poco de esto elegimos lo más conveniente en cada caso, pero obviamente, para eso también tienes que tener unos conocimientos que si te has limitado a uno o dos lenguajes, no es posible. De ahí el tema del gusto.
Jajaj no puedo creer que un post de alguien como jomaweb ha llegado hasta el blog de Ricardo Galli. Debe de ser un error.
Ya que estamos voy a dejar aquí un poco de comida para el troll en forma de mi humilde opinión:
El PHP apesta sobre todo para los hypekids que todavía se maravillan ante el RoR, hablan de «spaghetti code», «POO inexistente» y otras frases que han encontrado en webs ya caducadas del 1997. Ay! Hay que fijarse en la fecha de lo que se lee…
Normalmente esta gente no hecho nada en PHP ni en ningún otro lenguaje. Con «algo» no me refiero al blog de su abuela hecho en RoR en 20 minutos, ni a modificar un wordpress etc. me refiero a una web que tenga más de 20 usuarios (venga, no hace falta que sean 20 concurrentes).
El PHP sucks! Si ya lo sabemos. Nada es perfecto pero nos gusta como funciona y por eso sufrimos sus imperfecciones.
Creo que el lenguaje sí importa, pero más importa el programador y en un proyecto con varios programadores el jefe de equipo. Cualquiera que diga que el PHP es «amateur» o idioteces semejantes o que como en un comentario de ese blog troll en sí mismo decían: «solo sirve para las chorradas de Internet y no para la empresa» XDDD (yo es que me parto con esto- es tan lamentable que ni se puede comentar)… Esta gente, a pesar de ser un deseo terrible… esta gente se merece morir programando en ASP y que el display de su lapida electrónica sea controlado por Windows 7.