Programar es una mierda.

Peter Welch es un escritor y programador.

Autor del libro “And Then I Thought I Was a Fish” (sobre problemas mentales) y del siguiente blog http://stilldrinking.org/

Es interesante y aquí he hecho un esfuerzo por lograr una traducción del artículo a continuación.

Todo amigo que tengo con un trabajo que involucra levantar algo más pesado que una laptop más de 2 veces a la semana encuentra la manera de incluir algo como esto en la conversación: “Hermano, tu no trabajas duro. He trabajado una semana de 4700 horas cavando un túnel debajo de Mordor (Señor de los anillos) con un destornillador”.

Nota: Siempre empieza con “hermano” (dependiendo la traducción puede ser “amigo”, “mano”, “camarada”, “carnal”).

Ellos están en lo cierto en un punto, Mordor es una mierda (apesta) y ciertamente es físicamente más exigente cavar un túnel que presionar una tecla, a menos que seas una hormiga. Pero en vista del argumento ¿podemos estar de acuerdo que el estrés y la locura son cosas malas? Excelente. Bienvenido a la programación.

Todos los equipos de programación están conformados por… y de… gente loca.

Imagínate unirte a un equipo de ingeniería. Estás emocionado y lleno de ideas, probablemente acabas de terminar la universidad y un mundo de diseños puros, bellos, que inspiran y sorprenden en su unidad estética de propósito, economía y fuerza.

Comienzas conociendo a Mary, líder de proyecto para un puente en una importante área metropolitana. Mary te presenta a Fred, luego de pasar a través de 15 chequeos de seguridad instalados por Dave porque Dave perdió su chaqueta que fue robada de su escritorio una vez y NUNCA ha sucedido de nuevo. Fred sólo trabaja con madera, si preguntas por qué él está involucrado cuando este puente supuestamente debe permitir tráfico en hora pico lleno de autos llenos de seres humanos para cruzar una caída de 200 pies sobre los rápidos. No te preocupes, dice Mary, Fred se va a encargar de las veredas. ¿Qué veredas? Bien Fred hizo una buena presentación de las veredas y las van a agregar para mejorar la apariencia del puente. De seguro, las veredas tendrán que ser construídas sin barandas porque hay una regla estricta de “no barandas” de Phil, quien no es ingeniero. Nadie está seguro de lo que hace Phil pero está definitivamente lleno de energía y tiene que ver con los gerentes de alto nivel, con quien ninguno de los ingenieros quiere tratar, por lo que le permiten a Phil hacer lo que él quiera. Sara, mientras tanto, ha encontrado muchas increíbles tecnologías de punta para pavimentar y las está usando todas en el diseño del puente, por eso tendrás que construir alrededor de cada una conforme el puente progrese, desde que cada una significa un soporte diferente por debajo y preocupaciones de seguridad. Tom y Harry han estado trabajando juntos por años pero tienen una disputa sobre si usar el sistema métrico o el imperial para las medidas, y se ha convertido en un tema de “quien sea que llegue a esa parte del diseño primero”. Esto ha sido tal dolor de cabeza para la gente que realmente están uniendo las piezas, que simplemente han tirado la toalla (rendirse) y han forzado, martillado, o soldado todo el día con cualquier pieza que han tenido a la mano. Además el puente fue diseñado como un puente suspendido pero nadie realmente conocía cómo construir un puente suspendido, ellos avanzaron hasta la mitad y luego simplemente agregaron columnas adicionales para un soporte extra y mantener la cosa sin que se caiga pero dejaron los cables de suspensión porque de alguna manera sostienen algunas partes del puente. Nadie sabe cuáles son esas partes pero todos concuerdan con que son importantes. Luego que las presentaciones se llevan a cabo, estás invitado a presentar nuevas ideas pero tú no tienes ninguna porque eres un ingeniero de propulsión y no sabes nada sobre puentes.

¿Conducirías a través de este puente? ¡No! Si de alguna manera lo logran construir, todos los involucrados deberían ser ejecutados. Aún así alguna versión de esta dinámica escribió cada uno de los programas que alguna vez hayas usado, software para la banca (bancos), sitios web, y todo programa que es usado en todos lados para supuestamente proteger la información en Internet pero que no lo hace.

Todo código es malo.

Todo programador ocasionalmente, cuando no hay nadie en casa, apaga las luces, se sirve un vaso de whisky, pone música electrónica ligera y abre un archivo en su computadora. Es un archivo diferente por cada programador. A veces ellos lo escribieron, a veces lo encontraron y sabían que tenían que guardarlo. Leyeron todas sus líneas y lloraron con su belleza luego las lágrimas se volvieron amargas cuando recordaron el resto de los archivos y el colapso inevitable de todo lo que es bueno y verdadero en el mundo.
Este archivo es el “Código bueno”. Tiene nombres sensibles y consistentes para las funciones y variables. Es conciso. No hace nada obviamente estúpido. Nunca ha tenido que vivir en el exterior o responder al equipo de ventas. Hace exactamente una cosa, mundana y específica, y la hace bien. Fue escrito por una sola persona y nunca fue tocado por otra. Se lee como poesía escrita por alguien de más de 30.

Todo programador comienza escribiendo un perfecto copo de nieve como éste. Luego, les dicen el viernes que necesitan tener 600 copos de nieve escritos para el martes, ellos tienen que hacer trampa un poco aquí un poco más allá y quizás copiar unos cuantos copos de nieve y tratar de pegarlos juntos o pedirle a un compañero que trabaje en uno que se derrite y luego todos los copos de nieve son depositados juntos en alguna forma inescrutable y alguien inclina un Picaso encima porque nadie quiere ver la orina de gato remojando todos tus copos de nieve destrozados derritiéndose en la luz del día. La siguiente semana, le echan más nieve con una pala para evitar que el Picaso se caiga.

Hay una teoría que dice que puedes arreglar esto siguiendo estándares, excepto que hay más estándares que cosas que las computadoras pueden finalmente hacer, y estos estándares son todos mejorados y difamados de varias formas por las preferencias personales de la gente que los está codificando, no hay ninguna colección de código ha llegado al mundo real sin hacer unas cuantas docenas de cosas idénticas de unas cuantas docenas de maneras ni remotamente similares. Las primeras semanas de cualquier trabajo son solamente tratar de darse cuenta como funciona un programa aún si estás familiarizado con cada uno de lo lenguajes, estándares y marcos de trabajo involucrados porque los estándares son unicornios (mitología, se creen que existen pero nadie ha visto uno).

Siempre habrá oscuridad.

Cuando era niño tenía un ropero en mi habitación. El ropero tenía un diseño extraño. Parecía normal al principio, luego caminaba en su interior para hacer cosas de roperos y descubría una pared a la derecha que dejaba espacio para un pequeño estante. Luego miraba hacia arriba y la pared a la espalda de la alcoba daba lugar otra vez a un espacio en donde se podía gatear y no habia nada ni la luz podía caer ahí y que podría ser el lugar de retiro para un monstruo que mantenía a raya con linternas y animales de peluche cada noche.

Esto es de lo que se trata aprender a programar. Llegas a conocer tus herramientas, luego miras a tu alrededor y hay nuevas herramientas útiles cerca y esas herramientas te muestran el horror sin fondo que estuvo siempre al costado de tu cama.

Por ejemplo, digamos que eres un desarrollador web promedio. Te son familiares una docena de lenguajes de programación, toneladas de bibliotecas útiles, estándares, protocolos. Tienes todavía que aprender uno más por semana y recordar revisar los cientos de cosas que conoces para ver si han sido actualizadas o ya no funcionan y asegurarte que todavía funcione todo junto y que nadie ha corregido un error en uno de ellos que has explotado para hacer algo que pensaste que era muy inteligente un fin de semana en el que estuviste bebiendo demasiado. Estás todo al día y eso es muy bueno luego todo deja de funcionar.

Empiezas a cazar el problema. Descubres que un día, algún idiota decidió que desde que otro idiota decidió que 1/0 debería ser igual a infinito, ellos podía utilizar el atajo “Infinito” para simplificar el código. Luego una persona “no idiota” correctamente decidió que este era algo idiota, lo cual el idiota original debió haber decidido pero desde que no lo hizo el “no idiota” decidió ser una mierda (malo) y hacer que esto sea un error en su nuevo compilador. Luego decidió que no le iba a contar a nadie que esto era un error porque él es una mierda, y ahora todos tus copos de nieve son orina y no puedes ni siquiera encontrar al gato.

Eres un experto en todas estas tecnologías y eso es una cosa buena porque esa experiencia te permitió desperdiciar solo 6 horas para darte cuenta de lo que estaba mal, muy opuesto a perder el trabajo. Tú ahora tiene un pequeño dato extra para esconder en los millones de pequeños datos que tienes que memorizar porque muchos de los programas de los que dependes son escritos por idiotas.

Y todo esto es sólo el campo que elegiste, lo cual representa una pequeña fracción de todas las cosas que hay que saber en la ciencia de la computación tanto que podría ser que ni siquiera has aprendido nada. No hay un sólo ser humano vivo que sepa todo lo que hay que saber de tu MacBook de hace 5 años que todavía funciona. ¿Por qué te decimos que la apagues y la prendas de nuevo? Porque no tenemos la más mínima idea de lo que está mal con ella y es realmente fácil inducir el coma en computadoras y que sus doctores automáticos incorporados traten de resolverlo por nosotros. La única razón por la que las computadoras de los programadores funcionan mejor que las computadoras de la demás gente es que los programadores saben que las computadoras son pequeños niños esquizofrénicos con enfermedades auto inmunes y no les pegamos cuando se portan mal.

Mucho trabajo se hace en Internet e Internet es un infierno muy especial.

¿Recuerdan esas cosas sobre gente loca y mal código? Internet es eso excepto que es literalmente un billón de veces peor. Los sitios web que son carritos de compra glorificados con quizás 3 páginas dinámicas son mantenidos por equipos de gente durante todo el día porque la verdad es que todo se está rompiendo todo el tiempo, en todo lugar, para todo el mundo. Justo ahorita alguien que trabaja para Facebook está obteniendo decenas de miles de mensajes de error y de manera frenética está tratando de encontrar el problema antes de que la charada completa colapse. Hay un equipo en una oficina de Google que no ha dormido en 3 días. En algún lugar hay una programadora de bases de datos rodeada de envases de gaseosa vacías quien su esposo piensa que está muerta. Y si estás personas se detienen, el mundo arderá. La mayor parte de la gente no sabe lo que hacen los administradores de sistemas (sysadmins) pero créanme, si todos ellos hacen un break para almorzar al mismo tiempo, no llegarían a la cafetería antes de que se nos acaben las balas protegiendo nuestra comida enlatada de bandas de mutantes ambulantes.

No puedes re-iniciar Internet. Trillones de dólares dependen de una débil telaraña de acuerdos no oficiales y código “suficientemente bueno por ahora” con comentarios como “Para hacer: Corrijan esto, es una implementación realmente peligrosa pero no sé que está mal” que fue escrito hace 10 años. Yo no he mencionado las legiones de personas atacando varias partes de Internet por espionaje y beneficios económicos o simplemente porque están aburridos. ¿Has escuchado de 4chan? 4chan podría destruir tu vida y negocio porque decidieron que no les gustas para la tarde y nosotros ni siquiera nos preocupamos de 4chan porque otro misil nuclear no hace diferencia en un invierno nuclear.

En Internet está bien decir, “sabes, esto funciona más o menos algunas veces si usas la tecnología correcta” y de repente, es parte de Internet ahora. Incluso los bueno programadores no se molestan en comprender las oscuras especificaciones creadas por organizaciones que la gente establece para implementar algunos unicornios, todos gastan la mitad de su tiempo afrontando el hecho de que nada encaja con nada o tiene sentido y que podría romperse en cualquier momento y sólo tratamos de cubrirlo y esperar que nadie lo note.

Aquí están las reglas secretas de internet: 5 minutes luego de haber abierto tu navegador de Internet por primera vez, un niño en Rusia tiene tu identificación (número de seguridad social). ¿Te registraste para algo? Una computadora en la NSA (National Security Agency) ahora automáticamente sigue la pista de tu ubicación física por el resto de tu vida. ¿Enviaste un correo electrónico? Tu dirección de correo electrónico a ido a parar a una cartelera en Nigeria.

Estas cosas no son verdad porque no nos importa y no tratamos de detenerlas, son verdad porque todo está roto porque no hay código bueno y todos están tratando de mantenerlo funcionando. Ese es tu trabajo si trabajas con Internet: esperar que la última cosa que escribiste sea suficientemente buena para sobrevivir unas cuantas horas para que puedas ir a almorzar y con suerte tomar una siesta.

No empezamos locos, nos están volviendo locos.

Error: Se intentó leer HTML con una expresión regular; el sistema devolvió Cthulhu.

Divertido, ¿no? Qué les parece esto:

“¿Eso se llama arregloInverso?”
“s/camello/_/”
“Bien gracias”.

¿No fue ese amigo de gran ayuda? ¿Con el camello? ¿No parece una respuesta apropiada? ¿No? Bien. Todavía puedes encontrar a Jesús. No tienes que pasar mucho tiempo de tu vida leyendo código para empezar a hablar en código. El cerebro humano no es particularmente bueno con lógica básica y ahora hay una carrera entera en hacer nada más que lógica realmente compleja. Cadenas inmensas de condiciones abstractas y requerimientos tienen que ser revisados para descubrir cosas como comas (,) que faltan. Hacer esto todo el día te deja en un estado de afasia leve, donde miras los rostros de las personas mientras te están hablando y no sabes si han terminado de hablar porque no ves el punto y coma (;). Te sumerges en un mundo de total falta de significado donde todo lo que importa son una serie de números yendo hacia un laberinto gigante de símbolos y una serie diferente de números o la foto de un gatito sale por el otro lado.

El impacto destructivo en el cerebro está demostrado por los lenguajes de programación que la gente escribe.
Este es el programa:

#include <iostream>

int main( int argc, char** argv ) {
    std::cout << "Hello World!" << std::endl;
    return 0;
}

Ese programa hace exactamente lo mismo que este programa:

`r```````````.H.e.l.l.o. .w.o.r.l.di

Y este programa:

>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.[-]
>++++++++[<++++>-] <.>+++++++++++[<++++++++>-]<-.--------.+++
.------.--------.[-]>++++++++[<++++>- ]<+.[-]++++++++++.

Y este otro:

Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook.
Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook?
Ook! Ook! Ook? Ook! Ook? Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook.
Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.
Ook? Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook. Ook! Ook. Ook! Ook? Ook! Ook! Ook? Ook!
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook.

Y una vez alguien escribió un lenguaje de programación que le permite a alguien más escribir algo como esto:

#:: ::-| ::-| .-. :||-:: 0-| .-| ::||-| .:|-. :||
open(Q,$0);while(){if(/^#(.*)$/){for(split('-',$1)){$q=0;for(split){s/|
/:.:/xg;s/:/../g;$Q=$_?length:$_;$q+=$q?$Q:$Q*20;}print chr($q);}}}print"n";
#.: ::||-| .||-| :|||-| ::||-| ||-:: :|||-| .:|
"

De acuerdo a su autor, ese programa es “2 líneas de código que leen 2 líneas de comentarios incrustados en el código para leer los números Mayas que representan los caracteres ASCII que forman el título de la revista, lo muestra como arte ASCII rotado en un ángulo de 90 grados”.

El programa ganó un premio porque de seguro lo hizo. ¿Quieres vivir en un mundo como este? No. Este es un mundo donde te puedes fumar una cajetilla de cigarrillos al día y nadie lo cuestionará. “De seguro él fuma una cajetilla al día, ¿quién no lo haría?”. Eventualmente todo programador se despierta y antes que esté del todo consciente ellos ven su mundo entero y toda relación en él como pedazos de código e intercambian historias sobre si la somnolencia dispara viajes con LSD es una cosa normal que le sucede a la gente. Este es un mundo donde la gente evita el sexo para escribir un lenguaje de programación para orangutanes. Todos los programadores fuerzan sus cerebros para hacer cosas para las que los cerebros nunca fueron creados en una situación donde nunca pueden hacerlo mejor, 10 a 15 horas al día, 5 a 7 días a la semana y cada uno de ellos está lentamente volviéndose loco.

En conclusión, no, no tengo que levantar objetos que pesan 50 libras. Intercambié eso por la oportunidad de recortar el vello púbico de Satanás mientras se almuerza mi cráneo abierto con el objeto de que unos cuantos pedazos de internet continúen funcionando por unos cuantos días más.

Escrito por Peter Welch

¿ Por qué programar es una m…?

En Yahoo! Answers hay esta pregunta: ¿Por qué programar es una mierda? Me hace llorar. https://answers.yahoo.com/question/index?qid=20120127224312AAtInPK

Y ésta es la mejor respuesta que publicaron:

Programar no es para todos. De igual manera que algunos pueden cantar, otros no pueden. Algunos son buenos en matemáticas, otros no. Algunos son buenos en pensar de manera lógica y tienen la habilidad de desmenuzar problemas, traducir una solución y convertirla en código.

Mucha gente no puede hacerlo rápidamente ni de manera eficiente porque los seres humanos no fuimos hechos para pensar de esa forma.

Quizás debas tratar de encontrar una carrera que encaje mejor con tu talento. Conocer tus fortalezas y debilidades es importante para tomar la decisión correcta. Si te gusta la tecnología hay muchos campos en los que no está involucrada la programación.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s