Este artículo es una traducción libre de un artículo de Peter Welch que puedes encontrar aquí. Por cierto, ha escrito un libro muy interesante. Había traducciones en casi todos los idiomas y faltaba el español, así que he dedicado un poco de tiempo a ello. La traducción es más o menos liberal y he tratado de suavizar el lenguaje para poder explicarle a mi hija de cinco años por qué su padre a veces se comporta de forma tan rara delante del ordenador. Cualquier sugerencia será bienvenida. ¡Disfruta del artículo!

code-horror

Cada amigo que tengo con un trabajo en el que tenga que levantar algo más pesado que un portátil un par de veces por semana acaba por hacerme tarde o temprano un comentario en la línea de: “Colega, tu trabajo no es duro. Acabo de hacer una semana de 4700 horas excavando un túnel bajo Mordor con un destornillador”.

Tienen algo de razón, Mordor es un asco, y seguramente canse más físicamente hacer un túnel que teclear, a menos que seas una hormiga. Pero, sólo por argumentar, ¿podríamos llegar al acuerdo de que el estrés y la insensatez son cosas malas? Genial. Bienvenido al mundo de la programación.

Todos los equipos de programación se crean por y están formados de chiflados

Imagínate que te unes a un equipo de ingenieros. Estás emocionado y lleno de ideas, probablemente acabas de terminar tus estudios y vives en un mundo de diseños limpios y bonitos, que te inspiran por su propósito, economía y fortalezas. Puedes empezar conociendo a María, la líder de proyecto en la construcción de un puente en un área metropolitana. Mary te presenta a Fred, después de que pases las quince medidas de seguridad instaladas por Dave porque a Dave le robaron una vez un suéter de su escritorio y no quiere que le pase nunca más. Fred trabaja solo con madera, así que preguntas qué es lo que hace porque este puente se supone que es para llevar el tráfico de coches en hora punta, llenos de humanos que quieren cruzar a una altura de unos sesenta metros sobre el río. “No te preocupes”, te dice María, “Fred se va a encargar de las pasarelas peatonales”. ¿Qué pasarelas peatonales? Te preguntas. “Fred argumentó muy bien el uso de pasarelas peatonales y estas le van a añadir atractivo visual al puente. Por supuesto, se van a tener que construir sin barandillas, porque hay una regla muy estricta creada por Phil, el cual no es ingeniero, que dice que no se pueden poner barandillas. Nadie está muy seguro de lo que hace Phil, pero está sin lugar a dudas lleno de sinergia y tiene algo que ver con la alta dirección de la empresa, con la que ningún ingeniero quiere tener nada que ver, así que simplemente dejan a Phil hacer lo que quiera. Sara, mientras tanto, ha encontrado unas técnicas de pavimentado que son lo último de lo último, y las ha introducido todas en el diseño del puente, así que hay que tener todas en cuenta mientras progresa la construcción, dado que cada una de ellas genera algunos problemas de soporte y seguridad. Tom y Harry han estado trabajando juntos durante años, pero tienen una continua batalla sobre si se usan medidas métricas o imperiales, y ha degenerado en “depende de quien haga esta parte del diseño primero”. Esto ha sido un problema continuo para la gente que realmente está uniendo las piezas del puzle, al final se han rendido y sencillamente fuerzan, martillean, o sueldan durante el día con cualquiera de las piezas que tengan a mano. Además, el puente se ha diseñado para ser un puente en suspensión, pero realmente nadie tiene claro cómo construir un puente en suspensión, así que hicieron la mitad del puente y entonces simplemente añadieron columnas de soporte para que se mantuviera en pie; también dejaron los cables de suspensión porque de alguna manera están sosteniendo partes del puente. Nadie sabe qué partes, pero todo el mundo está seguro de que son partes importantes. Después de que te presenten al equipo, te invitan a que aportes nuevas ideas, pero tú no tienes ninguna porque eres un ingeniero de motores a propulsión y no tienes ni idea sobre puentes.

¿Tú conducirías sobre este puente? No. Si se termina de construir, todo el mundo involucrado en el proyecto sería ejecutado. Ciertamente, cada programa que has usado en tu vida se ha escrito con una versión parecida a esta descripción, ya sea programas de banca, páginas web, o programas que se usan en todas partes y que se supone que están para proteger la información en la red pero que no lo hacen.

Todo el código es malo

Cada programador, en ocasiones cuando está solo en casa, apaga las luces, se sirve un vaso de whisky escocés, pone algo de música electrónica alemana ligera, y abre un fichero en su ordenador. Es un fichero diferente para cada programador. A veces lo han escrito ellos, a veces lo encontraron y sabían que tenían que guardarlo. Leen las líneas de código, y sollozan ante su belleza, y a continuación las lágrimas se tornan amargas mientras recuerdan el resto de ficheros y el inevitable colapso de todo lo que es cierto y bueno en el mundo.

Este fichero es “código de dios”. Tiene nombres consistentes y razonables para las funciones y variables. Es conciso. No hace nada que parezca obviamente estúpido. No ha tenido que vivir nunca en el mundo real, o responder a un equipo de ventas. Hace exactamente una cosa mundana y específica, y la hace bien. Fue escrito por una sola persona, y nunca lo tocó otra. Leerlo es como poesía escrita por alguien de más de treinta años.

Cada programador comienza escribiendo un pequeño, frágil y perfecto copo de nieve como este. Entonces les dicen el viernes que para el martes tienen que tener terminados seiscientos copos de nieve, así que hacen un poco de trampas aquí y allí y a lo mejor copian unos cuantos copos de nieve y los tratan de poner todos juntos, o tienen que hablar con un compañero para que trabaje en uno que se está derritiendo y entonces todos los copos de nieve del programador se aglutinan de una forma inescrutable y alguien pone un Picasso encima porque nadie quiere ver el pis de gato goteando dentro de todos tus copos de nieve mientras se derriten a la luz del sol. La semana siguiente, todo el mundo tirará más nieve por debajo para que el Picasso no se caiga.

Existe la teoría de que puedes solucionar esto siguiendo estándares, salvo porque haz más “estándares” que cosas que un ordenador puede hacer, y cada uno de esos estándares han sido mejorados malignamente por las preferencias personales de sus implementadores, así que no hay ni un grupo de programas en el mundo que se haya escrito sin hacer docenas de cosas iguales en docenas de formas radicalmente diferentes. Las primeras semanas en cualquier trabajo se pasan tratando de averiguar cómo funciona un programa incluso si estás familiarizado con cada uno de los lenguajes, frameworks y estándares implicados, porque los estándares son como los unicornios.

Siempre va a haber oscuridad

Durante unos años, cuando era pequeño, crecí con un vestidor en mi dormitorio que tenía un diseño extraño. A primera vista, parecía normal, al entrar descubrías que el muro a su derecha tenía un hueco que lo convertía en una pequeña y práctica estantería. Si mirabas para arriba, el muro al final del hueco tenía otro hueco, una especie de buhardilla que no llevaba a ninguna parte, donde  no llegaba la luz y que se podía identificar inmediatamente como el refugio nocturno de monstruos voraces que mantenías a raya con una linterna y un muñeco de peluche. Eso es aprender a programar. Uno aprende un montón de herramientas útiles, entonces mira a su alrededor, y hay nuevas herramientas alrededor que te enseñan el horroroso pozo sin fondo que estaba siempre al lado de tu cama.

Por ejemplo, digamos que eres un programador web corriente. Estás familiarizado con una docena de lenguajes de programación, toneladas de librerías útiles, estándares, protocolos, vamos, de todo. Aun así, aún tienes que aprender más, a un ritmo de uno por semana, y recordar echar un vistazo a los cientos de cosas que ya sabes para ver si se han actualizado, o vuelto obsoletas, o no funcionan, y asegurarse de que todas las cosas todavía funcionan de forma coordinada y de que nadie arregló el pequeño error en una de ellas que utilizaste como método alternativo para hacer algo que pensaste que fue muy inteligente un fin de semana mientras estabas borracho. Lo tienes todo actualizado, todo listo para revista, todo es “cool”, y entonces es cuando todo falla.

“¿Qué carallo pasa?” te dices a ti mismo, y empiezas a buscar el problema. Descubres que, un día, algún idiota decidió que dado que otro idiota decidió que uno dividido por cero es igual a infinito, lo pueden utilizar como una forma corta de decir “infinito” para simplificar su código. Entonces un no-idiota decidió correctamente que eso era idiota, lo cual es lo que el idiota inicial tendría que haber decidido, pero como no lo decidió, el no-idiota decidió ser un capullo y hacer que eso fallara en su nuevo compilador. Entonces decidió que no le iba a decir a nadie que eso era un error, porque es un capullo, y ahora todos tus copos de nieve son pis y no eres capaz de encontrar al gato.

Tú eres un experto en todas esas tecnologías, y eso es algo bueno, porque toda esa experiencia te ha llevado a emplear tan solo seis horas tratando de encontrar qué era lo que ha fallado, en lugar de perder tu trabajo. Ahora tienes un poco más de información para bucear en los millones de pequeños trozos de información que tienes que memorizar porque muchos de los programas de los que dependes están escritos por capullos e idiotas.

Y eso tan sólo en tu campo de trabajo, que representa una pequeña fracción de todas las cosas que hay que saber en informática, así que es como si no hubieras aprendido nada. No existe una sóla persona viviente que sepa cómo funciona todo en tu MacBook de hace cinco años. ¿Por qué te decimos que lo apagues y lo enciendas de nuevo? Porque no tenemos ni la más remota idea de qué problema tiene, y es muy fácil inducir el coma en un ordenador y dejar que su equipo interno de doctores automáticos trate de descubrir el problema por nosotros. La única razón por la que los ordenadores de los programadores funcionan mejor que el de los no programadores es que los programadores saben que los ordenadores son pequeños niños esquizofrénicos con enfermedades autoinmunes y que no hay que pegarles cuando se comportan mal.

 

En internet se hace un montón de trabajo y la internet es un paisaje especialmente desolador

¿Recuerdas aquello acerca de la gente chiflada y el mal código? La internet es eso, solo que literalmente mil millones de veces peor. Páginas web que son carros de la compra con pretensiones, con quizás tres páginas dinámicas, son mantenidas por equipos de gente que trabaja las veinticuatro horas, porque la verdad es que todo se está rompiendo todo el tiempo, en cualquier parte, por culpa de cualquiera. Ahora mismo alguien que trabaja para Faceboo está recibiendo decenas de miles de mensajes de error ye intenta frenéticamente encontrar el problema antes de que toda la farsa se venga abajo. Hay un equipo en las oficinas de Google que no ha dormido en tres días. En algún lugar hay una programadora de bases de datos rodeada por montañas de una bebida de cola cuyo marido piensa que está muerta. Y si esas personas paran, el mundo arde. La mayoría de la gente no tiene ni idea de lo que hace un administrador de sistemas, pero créeme, si todos hicieran una pausa para comer a la vez, se te habrían acabado las balas tratando de protegerte de mutantes nómadas antes de que llegaran al restaurante de la esquina.

No puedes apagar y encender internet. Billones de dólares dependen de una telaraña desvencijada compuesta de acuerdos extraoficiales y código que “de momento va bien” con comentarios como: “PENDIENTE: ARREGLAR ESTO, ES UN APAÑO REALMENTE PELIGROSO PERO ES QUE NO SABÍA LO QUE FALLABA” que se escribieron hace diez años. Y eso que ni siquiera he mencionado las legiones de gente que están atacando varias partes de internet para hacer espionaje o para sacar beneficio o porque están aburridas. ¿Alguna vez escuchaste lo que es 4chan? 4chan puede destruir tu vida y tu negocio simplemente porque una tarde decidan que no les gustas, y el mundo de internet ni siquiera está preocupado por 4chan porque otra bomba no provoca ninguna diferencia en un invierno nuclear.

En internet, está bien decir “¿Sabes?, parece que funciona de vez en cuando si estás utilizando la tecnología adecuada”, y ¡BAM! Ahora es parte de internet. Cualquiera que tenga un par de cientos de euros y un ordenador puede coger un pequeño trozo de internet y poner cualquier código o hack que quiera y unir este pequeño trozo con otros trozos más grandes y todo queda un poquito peor. Ni siquiera los buenos programadores se molestan en aprender las arcanas especificaciones marcadas por las organizaciones que fueron creadas para implementar algunos unicornios, así que todo el mundo se pasa la mitad del tiempo lidiando con el hecho de que nada encaja con nada ni tiene ningún sentido y se puede romper en cualquier momento, con lo que sólo tratamos de encubrirlo con la esperanza de que nadie se de cuenta.

A continuación las reglas secretas de internet: cinco minutos después de que abras un navegador web por primera vez, un niño tiene ya en Rusia tu número de la seguridad social. ¿Te registraste en alguna página? A partir de ahora y durante el resto de tu vida, un ordenador de la NSA monitoriza tu localización física. ¿Has enviado un correo electrónico? Tu dirección de e-mail acaba de aparecer en un boletín de noticias en Nigeria.

Estas cosas no son ciertas porque nos de igual y no tratemos de evitarlas, son ciertas porque todo está roto, porque no hay ningún código decente y todo el mundo se limita a tratar de mantenerlo todo funcionando. Ese es tu trabajo si programas en internet: tener la esperanza de que lo último que codificaste sea lo suficientemente bueno para sobrevivir unas cuantas horas para que te de tiempo a cenar y dormir un poco.

No estábamos locos desde el principio, nos volvieron locos

 

Divertido, ¿no crees? ¿Y qué piensas de esta conversación?

“¿Eso se llama arrayReverse?”

“s/camel/_/”

“Ah, guay, gracias

¿A que el que responde fue de gran ayuda?¿Con el camello?¿No te parece una respuesta de lo más apropiada?¿No? Bien, aún tienes salvación. Aún no has pasado tanto tiempo de tu vida leyendo código para empezar a hablar usándolo. El cerebro humano no es particularmente bueno con la lógica y ahora hay una profesión que consiste en no hacer nada mas que lógica muy muy complicada. Vastas cadenas de condiciones abstractas y requerimientos que tienen que ser seleccionados para descubrir cosas como que falte un punto y coma. Hacer esto durante todo el día deja tu cerebro en un estado de leve afasia mientras miras a la cara de la gente mientras hablas y no sabes si han terminado porque no hay un punto y coma. Te ves inmerso en un mundo carente de todo significado donde todo lo que importa es un pequeña serie de números que van en un laberinto gigante de símbolos y al final lo que sale es otra serie de números o una foto de un gatito.
El efecto destructivo en el cerebro se puede demostrar a través de los lenguajes de programación que escribe la gente. Esto es un programa:

Este programa hace exactamente lo mismo que este otro:

Y que este otro:

Y una vez alguien escribió un lenguaje de programación que deja escribir algo como esto:

En palabras de su autor, este programa consiste en “dos líneas de código que analizan dos líneas de comentarios embebidos en el código para leer los números Mazas representando los caracteres ASCII que forman el título de la revista, representados en un ASCII-art rotado 90 grados.
Este programa ganó un concurso, porque hacía justo lo que acabamos de describir. ¿De verdad queremos vivir en un mundo como éste? No. Este es un mundo en el que puedes fumar un paquete diario y nadie te va a cuestionar. “Por supuesto que fuma un paquete diario, ¿quién no lo haría?” Con el tiempo cada programador se despierta, y antes de estar totalmente consciente ven su mundo y cualquier interacción en el como trozos de código, y comparten historias sobre ello como si tomar ácido fuera una cosa normal que le pasa a la gente. Este es un mundo donde la gente rehuye relaciones íntimas para escribir un lenguaje de programación para los orangutanes. Todos los programadores están obligando a sus cerebros a hacer cosas para las que no fueron diseñados y en un contexto en el que nunca va a mejorar, diez o quince horas al día, de cinco a siete días a la semana, y cada una de esas horas les desequilibra poco a poco.

Así que no, realmente no tengo que levantar objetos que pesan hasta quince libras. Lo cambié por la oportunidad de recortar el pelo púbico del diablo mientras come encima de mi calavera para que unos pocos trozos de internet puedan funcionar unos pocos días más.

Programar es un asco.