Morton 4 de agosto de 2014 a las 09.18
   Imprimir artículo
elWebmaster.com

La locura de trabajar en programación


freelancers-wideCada amigo cuyo trabajo involucra levantar algo más pesado que una laptop más de dos veces por semana, eventualmente llega a decir algo como esto en alguna conversación: “Hey, no sabes lo que es el trabajo duro, yo trabajo 1400 horas a la semana cavando un tunel por debajo de Mordor con un destornillador“.

Tienen algo de razón. Mordor apesta, y ciertamente implica más esfuerzo físico cavar ese tunel que golpear un teclado, excepto que seas una hormiga. ¿Pero podemos estar de acuerdo en que el stress y la locura son cosas malas? Genial. Entonces, bienvenido a la programación.

Hacer un puente

Imagínate pasar a integrar un equipo de ingeniería. Estás extasiado, lleno de ideas, probablemente acabas de salir de la escuela y esperas un mundo de diseños bellos y claros, inspiradores de asombro en su unidad estética de propósito, economía y fuerza. Empiezas conociendo a Mary, lider del proyecto de un puente para un area metropolitana importante. Mary te presenta a Fred, luego de que atraviesas las quince comprobaciones de seguridad instaladas por Dave dado que a Dave le han robado su sweater de su escritorio. Fred solo trabaja con madera, por lo que preguntas por qué él está involucrado en un proyecto que implica construir un puente que albergará el paso de miles de automóviles cargados de humanos mortales en horas pico de tránsito. Pero Mary te dice que no te preocupes, que Fred será capaz de encargarse de las pasarelas. ¿De qué pasarelas habla Mary? Bueno, Fred señaló que el puente necesita más atractivo y que las pasarelas van a ayudar a resolverlo.

Por supuesto, tendrán que construirlas sin barandales, dado que hay una regla estricta aplicada por Phil, que no es ingeniero, de que “nada de barandales”. Nadie está seguro de lo que Phil hace, pero está definitivamente lleno de sinergia y tiene que ver con una gestión superior, con la que ninguno de los ingenieros quiere lidiar, por lo que Phil hace lo que quiere. Sara, mientras tanto, ha encontrado técnicas de pavimentación al borde de la hemorragia, y las ha incorporado todas al diseño del puente, por lo que habrá que construir alrededor de cada una a medida que el puente progrese, dado que cada una significa un soporte subyacente y medidas de seguridad distintas. Tom y Harry han trabajado juntos por años, pero tienen un debate latente sobre cuando usar medidas métricas o imperiales, resolviéndolo siempre con que “lo elige quien primero llegue a esa parte del diseño.” Esto siempre fue un dolor de cabeza para la gente que se encarga de conectar todas las cosas, que ya se han rendido y solo fuerzan, martillan y sueldan a su manera durante el día en aquellas cosas en las que se den maña. Por si fuera poco, el puente ha sido diseñado como de suspensión, pero nadie sabe en realidad como construir uno de esos, por lo que en mitad de su desarrollo solo agregaron columnas de soporte extra para mantenerlo firme, pero dejaron los cables de suspensión porque aún faltan terminar partes del puente. Nadie sabe qué partes, pero todos saben que son partes importantes. Luego de que las presentaciones sean hechas, estás invitado a aportar nuevas ideas, pero no tendrás ninguna porque eres un ingeniero de propulsión y no sabes nada sobre puentes.

¿Manejarías a través de este puente? No. Si de alguna manera logra ser construido, todas las personas envueltas en su construcción serán ejecutadas. Sin embargo, esta es la manera en la que ha sido escrito cada programa que hayas utilizado alguna vez, el software del banco, los sitios web, y un programa usado de forma ubicua que se suponía iba a proteger la información en Internet, pero no lo hizo.

Todo código es malo

Cada programador ocasionalmente, cuando no hay nadie en casa, apaga las luces, se sirve un vaso de whisky, pone un poco de múusica electrónica alemana, y abre un archivo en su computadora. Es un archivo diferente para cada programador. A veces lo escriben, a veces lo encuentran y saben que deben guardarlo. Leen entre líneas, y derraman una lágrima ante su belleza, luego las lágrimas se vuelven amargas y recuerdan el resto de los archivos y el inevitable colapso de todo lo que es bueno y bello en este mundo.

Este archivo es el Buen Código. Es sensible y tiene nombres consistentes para sus funciones y variables. Es conciso. No hace nada obviamente estúpido. Hace exactamente una mundana, específica cosa, y la hace bien. Fue escrito por una sola persona, y nunca tocado por otra. Se lee como poesía escrita por alguien que ha pasado los treinta.

Cada programador empieza escribiendo algún copo de nieve perfecto como este. Luego, se les pide un viernes que tengan seiscientos copos de nieves escritos para el martes, por lo que hacen un poco de trampa aquí y allá y quizás copian algunos copos de nieve e intentan mantenerlos juntos, o en todo caso, pedirle a un compañero de trabajo que lo ayude con un copo que se está derritiendo, y entonces todos los copos de nieve de los programadores son lanzados juntos en una forma inescrutable y alguno hace un Picasso con todo, porque nadie quiere ver la orina de gato chorreando entre tus copos de nieve rotos, derritiéndose a la luz del día.

Existe una teoría de que puedes curar esto siguiendo los estándares, escepto que allí afuera hay más “estándares” que cosas que las computadoras pueden hacer, y esos estándares son a veces mejorados, a veces corrompidos por las preferencias personales de la gente que los desarrolla, por lo que no hay colección de código en el mundo real que haya sido hecha sin hacer idénticas una docena de cosas de docenas de maneras ni remotamente parecidas. Las primeras semanas de cualquier trabajo se invierten en entender cómo funciona un programa, sin importar si el lenguaje, framework, o los estándares envueltos te resultan familiares, porque ¿Estándares? Los estándares son unicornios.

Siempre habrá oscuridad

Pasé algunos años creciendo con un closet en mi habtación. El closet tiene un diseño extraño. Se ve normal al principio, pero cuando intentas utilizarlo como se debe, descubres que la pared de tu derecha da lugar a una alcoba, creando un práctico estante pequeño. Entonces miras para arriba, y ves que la pared de atrás de la alcoba da lugar de nuevo, hacía un recoveco de utilidad nula donde la luz no llega, un perfecto escondite para monstruos que escapan de la luz del día.

Eso es lo que significa aprender programación. Comienzas a conocer las herramientas más útiles, luego miras alrededor, y ves nuevas herramientas que pueden ser prácticas
también, hasta que esas herramientas te muestran el horror sin fondo que yace como siempre lo hizo, justo junto a tu cama.

Imagina que tú haces todo bien, y un día te toca revisar un código en el que todo se rompe. Empiezas a buscar el problema, y descubres que algún idiota decidió que, dado que otro idiota anterior a él decidió que 1 dividido cero debía dar como resultado “infinito”, podía entonces usar esto como un atajo para “infinito”, simplificando así su código. Luego alguien decidió que esto era estúpido (lo que el idiota original debería haber decidido en primer lugar) pero como el idiota original no lo hizo en su momento, el no idiota decide ser un mal tipo y lo convierte en un failing error en su nuevo compilador. Además, decide no decirle a nadie que esto era un error, porque es un mal tipo, y ahora todos tus copos de nieve son orina y ni siquiera puedes encontrar al gato.

Tú eres un experto en estas tecnologías, y eso es lo que hace que te pases sólo seis horas deduciendo qué fue lo que salió mal, en lugar de perder tu trabajo. Un hecho más entre los miles que debes memorizar por culpa de que los programas de los que dependes fueron escritos por idiotas y malos tipos.

Y eso es sólo en nuestro campo de elección, que representa una pequeña fracción de todas las cosas que pueden saberse en computación y de las que nunca aprenderemos nada. Ninguna persona sabe todo acerca de cómo funciona tu MacBook de cinco años de antiguedad. ¿Por qué te pedimos que la apagues y la prendas de nuevo? Porque no tenemos ni la menor idea de qué anda mal, y es más fácil inducirla a un coma para que ejercito automático de doctores ya incluídos lo resuelvan por su cuenta.

Internet es su propio infierno

Sitios que no son más que carritos de compra glorificados con apenas tres páginas dinámicas son mantenidos por equipos de gente que trabaja con el tiempo justo, porque la verdad es que todo se rompe, al mismo tiempo, en todas partes. En este momento alguien que trabaja para Facebook está recibiendo cientos de mensajes de error e intentando frenéticamente encontrar el problema antes de que toda la charada colapse. Hay un equipo en las oficinas de Google que no ha dormido en tres días. En alguna parte hay una programadora de bases de datos rodeados por latas vacías de energizantes, cuyo esposo cree que ha muerto. Y si esta gente se detiene, el mundo arderá. La mayoría de la gente no sabe ni siquiera qué hace un sysadmin, y si todos se tomaran el almuerzo a la misma hora, no llegarían a la tienda sin recibir un llamado de emergencia.

No se puede reiniciar Internet. Trillones de dólares dependen de un complejo entramado de improvisaciones y acuerdos no oficiales del tipo “así está bien por ahora” con comentarios en el código tales como “NOTA: REPARAR A FUTURO ESTE HACK, ES REALMENTE PELIGROSO PERO NO LOGRABA ENCONTRAR EL ERROR” que fueron escritos hace diez años. Ni siquiera he mencionado las legiones de personas atacando varias partes de la red por espionaje o beneficio, o tan sólo porque están aburridas. ¿Alguna vez escuchaste de 4chan? Oh, puede destruir tu vida y tu negocio sólo porque una tarde decidieron que no les gustas, y no nos preocupamos mucho por 4chan porque otra bomba atómica no hará mucho la diferencia en un invierno nuclear.

Aquí están las reglas secretas de internet: cinco minutos después de que abres el navegador por primera vez, un niño en Rusia tiene tu número de obra social. ¿Te anotaste para algo? Una computadora en la NSA ahora rastrea tu ubicación geográfica por el resto de tu vida. ¿Enviaste un e-mail? Tu dirección de correo ya está en un tablero en Nigeria.

Estas cosas son ciertas no porque no nos importe y no tratemos de detenerlas, sino porque todo está roto y no hay tal cosa como un buen código: todo el mundo sólo intenta mantenerlo funcionando. Ese es tu rol si trabajas con Internet, con la esperanza de que el código que has escrito logre sobrevivir al menos unas horas para que puedas cenar y tomar una siesta.

Un pequeño empujón

El cerebro humano no es particularmente bueno en lógica básica y ahora hay una carrera entera basa en no hacer otra cosa más que lógica realmente compleja. Vastas cadenas de condiciones abstractas y requerimientos deben ser utilizadas para descubrir cosas como una coma faltante. Hacer esto todo el día te deja en un estado de ligera afasia, en el que miras el rostro de la gente mientras hablan y no sabés si han terminado aún de hacerlo porque allí no hay ningún punto y coma. Te sumerges a ti mismo en mundo totalmente nulo de significado donde todo lo que importa es una pequeña serie de números que se convierten en un laberinto de símbolos, y otra diferente serie de números o la foto de un gatito salen del otro lado.

El impacto destructivo en nuestro cerebro lo demuestran los lenguajes de programación que la gente escribe. Esto es un programa:

#include

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

…que hace lo mismo que este otro programa:

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

…que hace lo mismo que este otro 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 alguna vez, alguien escribió un lenguaje de programación que deja a alguien 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 con el autor, ese programa es “dos líneas de código que parsean dos líneas de comentarios embebidos en el código que lee los números mayas representando los caracteres individuales ASCII que arman el título de la revista, rendereados en arte ASCII rotado 90 grados”.

Este programa ganó un concurso, porque claramente lo habría de ganar. ¿Quieres vivir en un mundo como este? No. Este es un mundo donde alguien puede fumar un paquete de cigarrilos por día y nadie lo cuestionaría. “Por supuesto que fuma un paquete por día ¿Por qué no lo haría?” Eventualmente todo programador despierta y antes de que sean completamente conscientes, ven el mudno entero y cada relación en él como partes de código, e intercambian historia de cómo su entresueño disparó viajes ácidos como una cosa normal que le pasa a la gente. Este es un mundo donde la gente deja de tener sexo para escribir lenguajes de programación que puedan usar orangutanes. Todos los programadores están esforzando sus cebreros para hacer cosas para las que sus cerebros no fueron pensados, en una situación que no pueden mejorar, diez a quince horas por día, cinco a siete días a la semana, y cada uno de ellos se está volviendo lentamente loco.

Así que no, a un programador no se le pide que levante objetos pesados. Han cambiado esa oportunidad por la de recortar el pelo púbico de Satanás mientras el cena de sus cráneos abiertos, sólo para que algunas partes de Internet sigan funcionando por algunos días más.

Fuente original del artículo: Still Drinking
Traducción realizada por
elWebmaster.com


Enviar a Del.icio.us Enviar a Meneame Enviar a Digg Enviar a Fresqui Enviar a Enchilame

Comentarios (5)

  1. Saúl Quirós Pacheco dice:

    Luego de leer y releer este artículo, no le veo pie, ni cabeza. Para el programador puede haber quebraderos de cabeza, pero, no hay nada más gratificanate que aprender a partir de un error que se puede cometer cuando se programa.

    Además hoy día la mayoría de los lenguajes de programación, orientados a objetos, ofrecen la ventaja de señalar la línea y los errores; de manera que e si el programador maneja el lenguaje no le será difícil dar con el problema.

    Si quieres ser programador debes conocer y estudiar mucha lógica de programación, tener claridad del algoritmo, y ver muchos ejemplos de programas, y que conste que no digo que la programación notenga sus complejidades y enormes.

    Pero no la podemos ver como una tortura. Si es así no sigamos en ello, porque nadie debería hacer cosas que lo que le trae es sufrimiento. Si es así a otra cosa.

  2. Ariel dice:

    muy bueno!

  3. Diseño web dice:

    Los comprendo, como le digo a un amigo programador “a buscar un trabajo más fácil, donde no haya que estar viendo algo nuevo todos los días”

  4. cdlw dice:

    El texto es alusivo a algunos momentos de la programación. Realmente Genial.

    Los estándares son unicornios.

    Si no entendiste el articulo, tal vez si deberías cambiar de profesión, esta lleno de
    paradojas realistas.
    Es Genial.

  5. Satanas dice:

    while(1) printf(“+1\n”);

    NOOOO!!! Bastaaaaaaa!!!!

Deja tu opinión

© 2007 - 2008 elWebmaster.com | Powered by Wordpress | Diseño CSS y XHTML válido. | Algunos íconos basados en FamFamFam Mini
Acceder