PHP controla casi el 40% de la red pero está construido sobre el caos y la rapidez, igual que la red social de Zuckerberg
Cuando el informático japonés Yukihiro Matsumoto decidió crear Ruby, un lenguaje de programación que ha servido para construir Twitter, Hulu y gran parte de la web moderna, seguía una idea que halló en una novela de ciencia ficción de 1966 llamada Babel-17 de Samuel R. Delany. El corazón del libro es un lenguaje inventado que lleva ese mismo nombre y que mejora, actualiza y promueve la mente de todos los que lo hablan. "Babel-17 es un lenguaje analítico tan preciso que casi te asegura un dominio técnico de cualquier situación a la que te enfrentes", afirma el protagonista en un momento dado. Con Ruby, Matsumoto quería lo mismo: reprogramar y mejorar cómo piensan los programadores.
Puede sonar grandilocuente, pero la visión de Matsumoto no es una excepción. Los desarrolladores de software como especie tienden a estar convencidos de que los lenguajes de programación ejercen un poder sobre la mente lo suficientemente grande para cambiar tu forma de enfocar los problemas, incluso para cambiar qué problemas piensas resolver. Es el rasero que usan para medir a empresas, productos y compañeros: "¿Qué lenguaje utilizas?"
Esta idea puede ayudar a los que no pertenecen a este mundo a comprender a esas empresas de software que se han convertido en algo con tanto poder y tan valioso, y los productos y servicios que forman parte de nuestras vidas. La decisión de crear algo nuevo usanbo Ruby o PHP o C parece íntima pero puede llegar a afectarnos a todos. Si quieres saber por qué Facebook tiene el aspecto que tiene y funciona como funciona y qué cosas podrá hacer por nosotros a continuación, tienes que saber algo sobre PHP, el lenguaje de programación con el que lo construyó Mark Zuckerberg.
Es posible que el PHP sea el lenguaje de programación menos respetado entre los programadores. Una entrada de blog que ya es un canon sobre sus fallos, lo describe como “un fractal de mal diseño”, y afirma que solo lo usan aficionados. "Existe un mito de la ingeniería genial que se usó para crear Facebook", afirma el cocreador del popular sitio de preguntas y respuestas relacionadas con la programación, Stack Overflow, Jeff Atwood. "Pero usaron código PHP en Windows XP. Eran hackers casi en el sentido peyorativo de la palabra". En el espacio de 10 minutos Atwood define el PHP como "un monstruo desastroso", "una pandemia" y una casa encantada cuyos residentes han llegado al punto de amar a los fantasmas.
La mayoría de los lenguajes de programación que tienen éxito se basan en una filosofía general o una serie de directrices que organizan su vocabulario y su gramática (la serie de instrucciones posibles que ponen a disposición del programador) para formar un todo lógico. PHP no lo tiene. Su creador, Rasmus Lerdorf, admite sin problemas que fue algo que compuso sobre la marcha. "No sé cómo pararlo", afirmó en una entrevista en 2003. "No tengo ni idea de cómo se escribe un lenguaje de programación, me limité a ir añadiendo el siguiente paso lógico según avanzaba".
El ejemplo preferido de los programadores es una función de PHP llamada “mysql_escape_string”, que libera a una pregunta de input malicioso antes de enviarla a una base de datos. (Como ejemplo de input malicioso, piensa en un formulario de un sitio web que te pide tu dirección de correo electrónico; un hacker puede introducir código en esa casilla para obligar al sitio a soltar las contraseñas). Cuando se descubrió un fallo en esta función, se añadió una nueva versión llamada “mysql_real_escape_string”, pero no se sustituyó la original. El resultado es como tener dos botones parecidos el uno junto al otro en una cabina de avión: uno que baja el tren de aterrizaje y otro que baja el tren de aterrizaje de forma segura. No es sólo una afrenta al sentido común, es una receta para el desastre.
Sin embargo, y a pesar del desprecio generalizado hacia PHP, gran parte de la web está construida sobre sus cimientos. PHP está detrás del 39% de los dominios, según un cálculo. Facebook, Wikipedia, y la principal plataforma de publicación, Wordpress, son todos proyectos en PHP. Eso es porque a pesar de todos sus fallos, PHP es perfecto para empezar. El nombre son las siglas en inglés de la frase "página de inicio personal". Servía para añadir contenido dinámico como la fecha o el nombre de usuario a páginas HTML que de otra forma serían estáticas. PHP permitía el salto de enredar con un sitio web a escribir una aplicación web tan pequeña que es casi imperceptible. No hacía falta ser un profesional.
La inmediatez de PHP fue clave para el éxito de Wikipedia, explica uno de los ingenieros principales de software de la Fundación Wikimedia, Ori Livneh, que gestiona el proyecto. "Siempre he detestado el PHP", me cuenta. Wikipedia sufre de fallos de diseño a gran escala como consecuencia de su dependencia de este lenguaje. (Culpables en parte de que la fundación no tuviera sus páginas disponibles para dispositivos móviles hasta 2008 y de que el sitio no tuviera una interfaz de usuario fácil de usar hasta 2013). Pero el PHP permitió a personas que no eran ingenieros de software o que lo eran apenas, a contribuir nuevas funciones. Gracias a eso, las páginas de Wikipedia pueden mostrar jeroglíficos en las entradas sobre egiptología, por ejemplo, o gestionar partituras.
No se podría haber construido Google en PHP porque Google, para convertirse en Google, necesitaba hacer exactamente una cosa muy bien, necesitaba que la búsqueda fuera sobria y rápida y con una ingeniería meticulosa. Se construyó con lenguajes más refinados y potentes, como Java y C++. Facebook, por el contrario, es un bazar de pequeños experimentos, un bufet libre de botones, feeds, y cosas que intentan llamar la atención. PHP está hecho para hacer, para inventar funciones rápidamente.
Casi te puedes imaginar a Zuckerberg en su habitación del colegio mayor en Harvard (EEUU) el fatídico día que nació Facebook, haciendo lo mínimo posible para subir su sitio a la web. La web se mueve tan rápido y los usuarios son tan caprichosos que la única forma de capturar el momento es ser el primero. Daba igual que lo que crease fuera una pelota de barro, o un plato de espagueti, o un espantoso armario de manguera (tomando prestados términos del rico léxico de los programadores para describir código mal hecho). Lo hizo y ya está. La gente podía usarlo. No estaba pensando en usar un código bonito, estaba pensando en sus amigos entrando en “Thefacebook” para ver fotos de chicas que conocían.
Hoy Facebook vale más de 200.000 millones de dólares (unos 186.000 millones de euros) y los eslóganes decoran todas las paredes de sus oficinas: "Hecho es mejor que perfecto"; "Muévete rápido y rompe cosas". Se supone que estos atrevidos mensajes tienen que mantener a los empleados en sintonía con la cultura 'hacker' de la empresa. Pero eso son precisamente los valores de PHP. De hecho, moverse rápido y romper cosas es tanto su esencia que cualquiera que "hable" el lenguaje inevitablemente piensa de esa manera. Se podría decir que el propio lenguaje creó y mantiene la cultura de Facebook.
El arma secreta
Para encontrar lo opuesto a PHP, una especie de experimento natural para ver cómo es el otro extremo, no hay mejor sitio que la seria sede en Manhattan (EEUU) de la empresa financiera Jane Street Capital. La empresa, que tiene 400 empleados, afirma que es responsable de aproximadamente el 2% del volumen de transacciones bursátiles en Estados Unidos.
Cuando me reúno con el director tecnológico de Jane Street, Yaron Minsky, está sentado en una mesa en la que hay una máquina Enigma funcional, uno de los pocos dispositivos creados para descifrar el código de los alemanes en la Segunda Guerra Mundial que aún existen. Creo que sería el claro ganador del concurso a Mejor Arma Secreta en la Sala, si no fuera por cómo me habla Minsky de un desconocido lenguaje de programación llamado OCaml.
Minsky, que es doctor en informática, convenció a su jefe hace diez años de que reescribieran todo el sistema de transacciones de la empresa en OCalm. Antes de eso, casi nadie usaba el lenguaje para trabajar. Lo habían desarrollado académicos de un instituto de investigación francés intentando mejorar un sistema informático que sirve para demostrar automáticamente teoremas matemáticos. Pero Minsky pensó que Ocaml, un lenguaje que había aprendido en la universidad, podría sustituir a las complejas hojas Excel que formaban la base de los sistemas de transacciones de Jane Street.
El gancho de OCaml es su "sistema de tipos", que es algo como el corrector ortográfico de Microsoft, pero que en vez de subrayar el código que cree que está mal con una línea verde, no te deja ejecutarlo. Los programas escritos con un sistema de tipos, tienden a ser mucho más fiables que los que no, algo útil cuando un programa puede tener que hacer transacciones por valor de 30.000 millones de dólares (unos 28.000 millones de euros) en un día de mucho negocio.
Minsky explica que, gracias a que detecta los fallos, el sistema de tipos de OCaml permite a los codificadores de Jane Street centrarse en problemas más elevados. Cabe preguntarse si ya han interiorizado los constantes avisos del sistema y OCaml se ha convertido en una especie de Neolengua que hace que sea imposible tener pensamientos malos.
El problema es que para conseguir todos los beneficios del corrector de tipos, los programadores tienen que añadir complejas anotaciones a su código. Es como si el corrector ortográfico de Word exigiera que hicieras diagramas de todas tus frases. Escribir código con la constricción de los tipos puede ser una lata, desmoralizador incluso. Para empeorar las cosas, OCaml, más que la mayoría de los lenguajes de programación, se mueve en una matemática profunda y abstracta que no alcanza a la mayoría de los codificadores. Pero es precisamente el rigor de este lenguaje lo que resulta atractivo a algunos, algo que da a Jane Street una ventaja inusual en el competitivo mercado de la contratación de programadores. Los desarrolladores de software se unen a Facebook y Wikipedia a pesar del PHP.
Minsky explica que OCaml, junto con su libro Real World OCaml, ayuda a atraer a un flujo continuo de candidatos de calidad. Se sienten atraídos no sólo por el lenguaje, sino por la clase de gente que lo usa. Jane Street es una empresa en la que se juega al ajedrez a cuatro bandas en la sala de descanso. Parece que la cultura de la competitividad intelectual y el uso de un sofisticado lenguaje de programación van de la mano.
Google parece estar intentando lograr algo parecido con Go, un lenguaje de programación de alto rendimiento desarrollado por la empresa. Creado con la intención de hacer que el funcionamiento de la web sea más elegante y eficiente, sirve para desarrollar el software de alta gama necesario para gestionar las colecciones de servidores que sostienen los grandes servicios web. También funciona como una especie de silbato para perros para codificadores a los que les interesa lo nuevo y lo difícil.
Madurando
A finales de 2010, Facebook estaba en crisis. El PHP no se creó para conseguir un gran rendimiento, pero era lo que se le estaba exigiendo. El sitio estaba creciendo tan rápido que parecía que si no había un cambio drástico, empezaría a descomponerse.
Cambiar de lenguaje no era una opción. Facebook tenía millones de líneas de código PHP, miles de ingenieros expertos en escribirlo y más de 500 millones de usuarios. Lo que se hizo fue dedicar un pequeño equipo de ingenieros sénior a un proyecto especial para inventar una forma de que Facebook pudiese seguir funcionando sin renunciar a su torpe lengua materna.
Parte de la solución fue crear un software, un compilador, que tradujera el código PHP de Facebook a código C++, que es mucho más rápido. La otra parte era una hazaña de la ingeniería informática que permitiera a los programadores de Facebook mantener su cultura PHP, pero a la vez escribir código más fiable.
El equipo de rescate lo logró inventando un dialecto de PHP llamado Hack. Hack es PHP con un sistema de tipos optativo. Es decir, te permite escribir PHP sencillo y rápido o, si lo prefieres, puedes atarte a la silla, añadiendo anotaciones que permitan al sistema de tipos comprobar si tu código es correcto. No es casualidad que este tipo de corrector de tipos esté hecho completamente en OCaml. Facebook quería que sus codificadores se siguieran moviendo rápido instalados en la comodidad de usar su lengua materna, pero no quería que rompiesen cosas haciéndolo. (El año pasado Zuckerberg anunció un nuevo lema para la ingeniería: "Muévete rápido con infra estable", usando la abreviación de los hackers para la infraestructura que mantiene el sitio en marcha).
Más o menos por la misma época Twitter sufrió una transformación parecida. El servicio se construyó originalmente con Ruby on Rails, un popular marco de programación web creado usando Ruby de Matsumoto e inspirado en gran medida en PHP. Entonces llegó el aluvión de usuarios. Cuando alguien con cientos de miles de seguidores escribía un tuit, había que actualizar automáticamente el timeline de cientos de miles de personas. Los tuits grandes como estos solían abrumar al sistema y obligar a los ingenieros a cerrar el sitio para permitir que se pusiera al día. Lo hacían tan a menudo que la ballena que anunciaba el fallo del sistema en la página de mantenimiento de la empresa se hizo famosa por derecho propio. Twitter detuvo la hemorragia sustituyendo grandes trozos de la fontanería del servicio por un lenguaje llamado Scala. No debería sorprendernos que Scala lo haya desarrollado, al igual que OCaml, un equipo de académicos, tiene un potente sistema de tipos y premia la corrección y el rendimiento incluso a costa de la libertad de los programadores individuales y el disfrute de su trabajo.
Igual que las start-ups "maduran" cuando finalmente saben de dónde saldrán sus ingresos, pueden usar el poder de los lenguajes de programación para manipular su psicología organizativa. El diseñador de lenguajes de programación Guido van Rossum, que pasó siete años en Google y ahora trabaja en Dropbox, afirma que cuando una empresa de software llega a tener determinado tamaño, la única forma de contener el caos es usar un lenguaje que exija más al programador de entrada. "Parece que te ralentiza, porque tienes que repetirlo todo tres veces", explica Van Rossum.
Por eso muchas start-ups esperan todo lo que pueden antes de hacer el cambio. Al hacerlo pierden a algunos de los hackers fanfarrones que les sirvieron para empezar, y la posibilidad de que pequeños equipos puedan sacar nuevas funciones rápidamente. Pero un lenguaje más exacto ayuda a la gente de toda la empresa a entender el código de los demás y da al producto la estabilidad necesaria para formar parte de la vida cotidiana.
El hecho de que las start-ups de software puedan hacer este tipo de maniobras también sirve para explicar por qué pueden llegar a ser tan poderosas. El alcance cada vez mayor de la computación es una parte de la explicación. Pero estas empresas tienen además una habilidad única para reinventarse. Cuando van cambiando y creciendo pueden hacer algo más que redibujar el organigrama. Como están construidas en código, pueden hacer algo mucho más drástico. Pueden volver a cablearse a sí mismas, su cultura, cómo piensan.
James Somers es escritor y programador en Nueva York. Trabaja en Genius.com.