No sé cuántas veces habré oído/leído eso de que los técnicos no sabemos vendernos (al menos los de por estas latitudes – ya conocéis el rollo ese de que los americanos son grandes comerciales de sí mismos y fuck yeah amazingly awesome). Pero el hecho es que basta con sumergirse ligeramente en la comunidad techie vía Twitter, conferencias o blogs, y resulta que no, que somos (con perdón) los putos amos. Toda esa incapacidad para ponernos un lazo de cara al extraño se torna en confianza ilimitada de puertas adentro. Seguro que habéis leído mucho sobre “cracks” y “talento” en los últimos años: pues eso.
Ahora bien, ¿y todo ese orgullo? ¿Tan interesante, importante es lo que hacemos? Pues en un principio sí. La informática ha revolucionado nuestro concepto de sociedad. Las comunicaciones, el comercio, el trabajo, todo depende ahora de un modo u otro del software, y siendo nosotros los responsables de crearlo y mantenerlo, que menos que sacar pecho, ¿no? Pues francamente creo que no. Hoy vengo a defender que el desarrollo de software está hecho unos zorros, y que sobra autocomplacencia.
Worse is all you get forever
Me ha encantado la expresión, sacada de este curioso post de Mike Hoye (sobre cómo acabó triunfado el 0-indexing de los arrays), para quejarse del estado actual del software con un guiño al clásico worse-is-better (todos habéis leído ya The Rise of Worse is Better, qué duda cabe, pero si no fuese el caso ya estáis tardando). La aproximación worse-is-better al diseño de software viene a postular que empezar con algo sencillo de implementar aunque no sea del todo correcto conceptualmente aumenta las posibilidades de éxito frente al acercamiento teóricamente correcto pero difícil de concretar en código. Explica cómo Unix y C triunfaron sobre Lisp, vamos. El guiño, y la queja, están en que worse-is-better se supone una manera práctica de iniciar algo, pero es una chapuza a largo plazo, cuando habría de ser reemplazado por una solución correcta, completa y robusta. Pero ese reemplazo nunca se ha dado.
Echemos la mirada atrás en el tiempo, allá por los 70. El inicio de la computación moderna. Aparecen el microprocesador, los primeros ordenadores personales, C. Los primeros y muy rudimentarios videojuegos (te miro a ti, Pong). Interfaces de texto en fósforo verde, frecuencias de reloj por debajo del megaherzio, herramientas muy básicas. En fin, el año cero de todo este tinglado (nunca mejor dicho, el 1/1/1970 marca epoch). Visto desde nuestro prisma actual, con interfaces táctiles, en 3D y a todo color, móviles ultra-potentes, videojuegos que simulan el mundo real con un nivel de detalle ridículo, y redes de velocidades absurdas, es la prehistoria. Todo ha mejorado de manera radical, irreconocible, le parecería magia a un fulano de los 70. ¿Todo? Bueno, todo no. Las principales herramientas de desarrollo de software son las mismas. C sigue dominando el panorama de sistemas, Unix está en el corazón de nuestros móviles de última generación, y Lisp sigue siendo un ideal al que todos aspiran. ¡Es el día de la marmota!
No deja de ser frustrante. Sí, ahora tenemos mejores IDEs, frameworks de la leche, buenas herramientas, pero el núcleo del desarrollo de software, los lenguajes, apenas han cambiado desde los 70. Más de 40 añitos ya. C lleva ahí desde siempre, y sigue partiendo buena parte del bacalao. Lisp es la principal fuente de inspiración de los lenguajes de alto nivel. Y de ahí no salimos. De hecho hemos entrado en una suerte de barrena de ideas, y todo nuevo lenguaje es una mezcla o refrito de los de siempre, con poca o ninguna voluntad de ir un poco más allá. ¿La nueva técnica molona y reveladora del momento? Se inventó en los 60, no falla. Clausuras, continuaciones, corrutinas, trampolines, TCO, todo inventado desde hace medio siglo. Otra cosa es que la gente no las conozca y las descubran por primera vez con el lenguaje cool del semestre, pero a eso ya iremos luego.
Estancados. Y si dijeras “bueno, es que lo tenemos ya es casi perfecto”, pues nada que objetar. Pero es que hemos llegado al punto en que la gente asume que el software siempre va a estar trufado de errores. Evidentes unos, sutiles otros, pero a cientos. ¿Os imagináis edificios o material quirúrgico de esa endeblez? Los lenguajes y sus entornos de ejecución deberían ofrecer garantías mucho mayores tras tantas décadas de refinamiento, pero en fin…
Problem Exists Between Keyboard And Chair
Los picos y palas andan algo oxidados, qué le vamos a hacer, pero todo se arregla si vamos sobrados de materia prima, de diamantes. Técnicos bien preparados, que conozcan a fondo los pros y contras de las herramientas disponibles. Con experiencia y criterio: una sólida base teórica y unos cuantos balazos en el campo de batalla, expuestos a tantas tecnologías como haya sido posible. El famoso talento del que todo el mundo habla y que tan extendido está, supongo. Y el tema es que yo no veo tantos perfiles de esos, la verdad sea dicha. De hecho creo que cojeamos en la preparación técnica, y que no se me enfade nadie.
No es que sea un experto en selección de personal, cierto, pero me he garbeado por unos cuantos eventos de diversa índole, aquí y en esa tierra prometida que es el Bay Area de San Francisco, y la imagen que me he hecho del desarrollador medio no es precisamente halagüeña. Charlas para entendidos en Javascript que nunca antes habían visto encadenamiento de funciones, grupos de amantes de HTML5 dónde es un misterio el funcionamiento del tag de script, eventos de la flor y nata del desarrollo web dónde no más del 1% de los asistentes se ha leído la especificación de HTTP, siendo optimistas. En definitiva, no la más sólida de las bases teóricas. Eso sí, los portátiles trufados de pegatinas de GitHub y otras hipsteradas molonas.
En fin, la experiencia es un grado, y supongo que se pueden hacer cosas decentes a base de prueba y error y muchas horas para compensar un conocimiento no tan vasto. Seguro que la gente ha probado cantidad de tecnologías, y a base de solventar problemas con unas y otras tienen ahora una buena base para escoger con qué afrontar cada tipo de problema. Pero de nuevo te paseas por eventos donde los técnicos explican y justifican las elecciones tecnológicas en sus proyectos. En mi experiencia no haría falta organizar más ediciones de esas reuniones: si es web, todo el mundo tira por PHP y MySQL por estos lares. ¿Por qué? Pues, y aquí son sinceros respondiendo, porque no conocen nada más. De vez en cuando un valiente reconoce haber echado un ojo a Ruby, o Python, o Node, o qué sé yo, pero el esfuerzo de aprender algo nuevo es grande, y el mercado para todos esos productos es pequeño, así que renuncia. En algunos casos alguno ha cambiado MySQL por MongoDB, porque ha leído en un blog que es más rápido (así, en general), y hasta ahí.
Se me antoja terrible. No por la elección de PHP (por mucha broma que haga, cada cual es muy libre de preferir una u otra herramienta), sino por el planteamiento. El mercado pide x, y sin plantear si hay opciones mejores, se escoge x cada vez. El mercado no lo pide porque lo considere mejor o peor, lo hace porque hay más oferta de técnicos, y hay más oferta de técnicos porque es lo que pide el mercado. Exacto, tenemos un pez que se muerde la cola, un idiota bucle acrítico. Me quejaba antes de que las herramientas más básicas en el desarrollo de software no avanzan, y me temo que el inmovilismo de los profesionales tiene mucho que ver. Aprender un nuevo lenguaje es relativamente rápido, dominarlo es un trabajo costoso. Y somos muy cómodos.
Back to the future
Hay un futuro por recuperar. Hemos rebajado el nivel de la profesión al mínimo común a todo hijo de vecino, en vez de elevar la barrera de entrada para obligarnos a seguir la estela de los mejores. Hemos vulgarizado el desarrollo de software. Lo prioritario es que todo el mundo pueda hacerlo, no que se haga bien. Los cirujanos se pasan la vida poniéndose al día porque de lo contrario se quedan fuera de juego, un ingeniero automovilístico estancado en la tecnología del 2000 está en el paro. Pero nosotros perpetuamos herramientas ya superadas en una industria que se mueve a velocidad de vértigo en todo lo demás. Paradójico.
Los 70 marcaron el inicio de una revolución, lo que necesitamos ahora es una demasiado postergada evolución.
![](http://stats.wordpress.com/b.gif?host=blog.aitorciki.net&blog=29643429&post=853&subd=aitorciki&ref=&feed=1)