Una profundidad vertiginosa, pero invisible — Jean-Baptiste Queru

Ni siquiera recuerdo cómo me topé con este artículo de Jean-Baptiste Queru, pero me pareció muy bueno por la simpleza con que está escrito y por las reflexiones sobre Steve Jobs y Dennis Ritchie. Además, es un lindo artículo para hacer pensar al “usuario común” sobre la complejidad que hay en cada acción que se lleva a cabo en su computadora: desde abrir un sitio web, hasta presionar una tecla.

Como otras veces: lo vi, me gustó y decidí traducirlo al castellano. Jean fue muy amable en darme permiso (1, 2), así que me gustaría que si ven algún error de traducción, me lo hagan saber para que lo corrija. Sin más preámbulos, se los dejo:

Una profundidad vertiginosa, pero invisible

Acabas de entrar en la página principal de Google.

Sencillo, ¿no?

¿Qué es lo que sucedió realmente?

Bueno, cuando sabes un poco sobre cómo funcionan los navegadores, no es tan sencillo como parece. Has puesto en acción HTTP, HTML, CSS, ECMAscript, y más. Estas son tecnologías tan increíblemente complejas que harían que cualquier ingeniero se maree si piensa demasiado en ellas, y tal es así que ninguna compañía puede ocuparse de toda su complejidad.

Vamos a simplificarlo.

Acabas de conectar tu computadora a www.google.com.ar.

Sencillo, ¿no?

¿Qué es lo que sucedió realmente?

Bueno, cuando sabes un poco sobre cómo funcionan las redes, no es tan sencillo como parece. Acabas de poner en acción DNS, TCP, UDP, IP, Wi-Fi, Ethernet, DOCSIS, OC, SONET, y más. Estas son tecnologías tan increíblemente complejas que harían que cualquier ingeniero se maree si piensa demasiado en ellas, y tal es así que ninguna compañía puede ocuparse de toda su complejidad.

Vamos a simplificarlo.

Acabas de tipear www.google.com.ar en la barra de direcciones de tu navegador.

Sencillo, ¿no?

¿Qué es lo que sucedió realmente?

Bueno, cuando sabes un poco sobre cómo funcionan los sistemas operativos, no es tan sencillo como parece. Acabas de poner en acción un kernel, un controlador de puertos USB, un distribuidor de entrada, un controlador de eventos, un suavizador de tipografías, un entramador de píxeles, un sistema de ventanas, un controlador de gráficos, y más, todo escrito en lenguajes de alto nivel que son procesados por compiladores, enlazadores, optimizadores, intérpretes, y más. Estas son tecnologías tan increíblemente complejas que harían que cualquier ingeniero se maree si piensa demasiado en ellas, y tal es así que ninguna compañía puede ocuparse de toda su complejidad.

Vamos a simplificarlo.

Acabas de presionar una tecla de tu teclado.

Sencillo, ¿no?

¿Qué es lo que sucedió realmente?

Bueno, cuando sabes un poco sobre cómo funcionan los dispositivos de entrada, no es tan sencillo como parece. Acabas de poner en acción un regulador de energía, un debouncer, una entrada de multiplexor, un stack de USB, un hub de stacks USB. Todo implementado en un mismo chip. Este chip está construido sobre láminas muy delgadas de silicio monocristalino altamente purificado, dopado con cantidades diminutas de otros átomos que son añadidos a la estructura de cristal, interconectados con múltiples capas de aluminio o cobre, que son depositadas de acuerdo a ciertos patrones de luz ultravielota de alta energía, que son enfocados con una precisión de una fracción de micrón, conectados al mundo exterior a través de delgados cables de oro, todo dentro de un empaquetado hecho con una resina dimensional y térmicamente estable. Los patrones de dopaje e interconexión implementan transistores, los cuales son agrupados para crear puertas lógicas. En algunas partes del chip, las puertas lógicas son combinadas para crear funciones aritméticas y a nivel de bits, que a su vez son combinadas para crear unidades aritmético lógicas (ALU). En otra parte del chip, las puertas lógicas son combinadas para crear bucles biestables, que se alinean en filas, las cuales son combinadas con los selectores para crear un registro en blanco. En otra parte del chip, las puertas lógicas son combinadas en controladores de bus y decodificadores de instrucciones y microcódigo para crear un programador de ejecución. En otra parte del chip, son combinados en multiplexores de direcciones y datos, y circuitos temporales para crear controladores de memoria. Aún hay más. Estas son tecnologías tan increíblemente complejas que harían que cualquier ingeniero se maree si piensa demasiado en ellas, y tal es así que ninguna compañía puede ocuparse de toda su complejidad.

¿Podemos seguir simplificando?

De hecho, muy tenebrosamente, no, no podemos. Apenas podemos comprender la complejidad de un chip de un teclado, y aún así no hay un nivel más simple. El siguiente paso nos llevaría al software usado para diseñar la lógica de los chips, el cual en sí mismo tiene un nivel de complejidad que nos haría volver al comienzo del bucle.

Las computadoras de hoy son tan complejas que solo pueden ser diseñadas y fabricadas usando computadoras apenas un poco menos complejas. A su vez las mismas computadoras usadas para diseño y fabricación son tan complejas que ellas mismas deben ser diseñadas y fabricadas por computadoras apenas un poco menos complejas. Deberíamos retroceder por muchos bucles hasta llegar a un nivel en el que se construyan desde cero.

Una vez que comienzas a comprender cómo funcionan y son creados nuestros dispositivos modernos, es imposible no marearse en la profundidad de todo lo que entra en juego, y no sorprenderse por el solo hecho de que funcionen, cuando la ley de Murphy dice que esto simplemente no debería ser posible.

Para quienes no son “tecnológicos”, todo esto es una caja negra. Eso es un gran éxito de la tecnología: todas estas capas de complejidad están completamente ocultas y la gente puede usarlas sin siquiera saber que existen. Esa es la razón por la que mucha gente puede encontrar tan frustrante usar una computadora: hay tantas cosas que pueden salir mal que algunas de ellas inevitablemente lo harán, pero la complejidad es tan profunda que es imposible para la mayoría de los usuarios hacer algo al respecto.

Por eso es tan difícil para los tecnológicos y no tecnológicos comunicarse: los tecnológicos saben mucho sobre muchas capas y los no tecnológicos saben muy poco sobre muy pocas capas, y se dificulta establecer una comunicación directa y efectiva. La brecha es tan grande que ya ni siquiera es posible que una persona medie entre los dos grupos, y es por eso que, por ejemplo, existen esos centros de soporte técnico telefónico tan complicados y sus distintos niveles. Sin estas grandes estructuras de soporte técnico, terminas en la frustrante situación que vemos cuando los usuarios finales tienen acceso a una base de datos de errores que es usada directamente por ingenieros: ni unos ni otros obtienen la información que necesitan para cumplir su objetivo.

Es por eso que la prensa masiva y la población general ha hablado tanto sobre la muerte de Steve Jobs y relativamente tan poco sobre la muerte de Dennis Ritchie: la influencia de Steve está en una capa que la mayoría de la gente puede ver, mientras que la de Dennis es mucho más profunda. Por un lado, puedo imaginar dónde estaría el mundo de la informática sin el trabajo que realizó Steve Jobs ni la gente que inspiró: probablemente sería un poco menos brillante, un poco más beige y cuadrado. A grandes rasgos, sin embargo, nuestros dispositivos todavía funcionarían del mismo modo y harían las mismas cosas. Por otro lado, literalmente no puedo imaginar dónde estaría el mundo de la informática sin el trabajo que realizó Ritchie ni la gente a la que inspiró. A mediados de los 80, la influencia de Ritchie ya se había hecho dominante, e incluso en ese entonces muy poco quedaba de la era pre-Ritchie.

Por último, pero no menos importante, es por eso que nuestro sistema de patentes está quebrado: la tecnología ha hecho un trabajo tan sorprendente en esconder su complejidad, que la gente que regula y administra el sistema de patentes está apenas consciente de la complejidad de lo que está regulando y administrando. Este es el problema fundamental: tal como las discusiones proverbiales en los senados sobre una planta nuclear terminan siendo acerca del color con que deberían pintarla, las discusiones sobre patentes de sistemas modernos de computación terminan siendo sobre el tamaño de las pantallas y el orden de los iconos, porque en ambos casos esos son los únicos aspectos que la gente involucrada en la discusión es capaz de discutir, aunque sean irrelevantes para la verdadera función del sistema en cuestión.

Enlace: Artículo original

Jean-Baptiste Queru es un ingeniero que trabaja en Google, en el proyecto Android Open-Source. Pueden revisar sus perfiles de Twitter, LinkedIn y Google+.

Java, PHP, Python, .NET: ¿Hacia dónde migrar?

Algunos de nuestros equipos IBM + Ubuntu

En mi trabajo usamos mucha tecnología obsoleta. Necesitamos migrar hacia nuevas plataformas, mejores, más modernas. Las dos opciones que se están considerando son Java o .NET. Claro que yo hubiera preferido que vayamos hacia PHP (+ Symfony) porque es el lenguaje con el que más familiarizado estoy, o bien Python, con el que no tengo tanta experiencia pero admiro mucho porque se que es una genialidad.

También se consideró GeneXus. GeneXus permite crear todo un sistema sin preocuparse por el código, solo pensando en la lógica. De este modo, se puede compilar para cualquier plataforma sin tener que tocar ni una línea de código. De hecho nos reunimos con gente que está usándolo extensivamente para desarrollar aplicaciones bancarias y casi que nos convencieron.

Las alternativas de IBM también son muy buenas. Por un lado el paquete WebSphere y por otro el lenguaje EGL. Tenemos un equipo IBM Power7 como servidor, así que la integración sería óptima, pero creo no nos terminamos de animar a embarcarnos en una plataforma que pertenece a otro, y lo mismo sucede con GeneXus. Si la empresa decide discontinuar el producto, siamo fuori. Por su parte EGL es abierto, pero aún está bastante verde como para migrar hacia allí.

Creo que vamos a terminar yendo hacia .NET. No es una decisión que me guste, pero creo que eso va a suceder y explico porqué: Microsoft hizo que algunas cosas sean realmente muy fáciles de lograr, para bien o para mal. Por ejemplo, el diseño de interfaces es mucho más fácil de lograr con la IDE de Visual Studio que con Eclipse usando el paquete AWT, y eso en un lugar donde se necesita ser rápido para sacar versiones a producción cuenta mucho.

Es una decisión difícil porque es en esa plataforma, la que elijamos, en la que estaremos trabajando durante los próximos años y seguramente será esa plataforma la que usen los que vengan después de nosotros.

Comentaré como se resuelve (o no) el asunto.

Programador y traductor: dos profesiones no tan distintas

Hay dos áreas entre las que me encuentro dividido hoy en día: la traducción y la programación. En una de ellas llevo ya algunos años trabajando, y en la otra soy solo un estudiante. Aún así, algo que me resultó interesante fue descubrir que las dos profesiones tienen sus similitudes.

Lo primero que noté fue que programar es también traducir. Digo esto porque al programar uno debe interpretar un problema de la vida real para luego poder convertirlo en un sistema, lo cual se puede considerar como una suerte de traducción.

Pero también se los puede comparar por algo más básico: tanto el traductor como el programador trabajan con lenguajes. Claro que no del mismo tipo, ya que un lenguaje de programación es mucho más primitivo que cualquier idioma humano. Pero aún así, programar conlleva el aprendizaje de ciertas reglas sintácticas y semánticas. La gran diferencia está en que los lenguajes de programación son para comunicarse con un dispositivo y no con otra persona.

Otro punto en común es que las dos profesiones requieren de un factor creativo, casi artístico. Hay que admitir, sin embargo, que la que más se acerca al arte es la traducción. El traductor es como el músico que interpreta la obra de un compositor: ¿dirías que no es un artista solo porque no compuso lo que toca? De todos modos programar también roza lo artístico: es difícil de comprender para quien no ha programado nunca, pero el diseño de software puede ser algo muy hermoso y apasionante. Si sólo se pudieran plasmar emociones en el código… :)

Pero definitivamente, una de las características en común que más me gustan es que las dos profesiones permiten trabajar desde cualquier punto del planeta. Sólo se necesita tener a mano una computadora con acceso a internet y un lugar cómodo donde sentarse (y los conocimientos, claramente). No conozco muchas otras profesiones que permitan esta flexibilidad.

Creo que no es casualidad que me haya interesado en dos áreas que tienen en común puntos como el lenguaje, el factor creativo, o la flexibilidad horaria —que es tan importante para mi, que tengo horarios algo raros—. Se dice que la carrera es el síntoma, por lo que ver estas características como algo positivo también define un poco el tipo de persona que soy. A vos, ¿te define tu carrera? :-)

Cambiando WordPress de dominio y directorio

Hoy por fín me digné a cambiar la URL de este humilde blog. Ya no nos encontramos en natancalzolari.com.ar/blog, sino que ahora estamos en blog.natancalzolari.com.ar. Es decir que no solo cambié el dominio del blog, sino que además cambié el directorio de la instalación de WordPress.

Esto es algo que hice otras veces, así que quisiera comentarle a aquellos bloggers propensos a los cambios cuál es el procedimiento a seguir. Continue reading

Proyectos web que espero concretar

Tengo un par de proyectos web en mente. No se si tendrán aceptación, quizás no, pero van a tener que creerme cuando digo que los voy a encarar más por placer que por otra cosa.

Uno es local, para la ciudad de Villa Constitución, y no pienso dar muchos detalles sobre la idea (aunque no es muy dificil de imaginar). Pero puedo decir que se podrá acceder desde Villense.com.ar.

El segundo proyecto se apareció hace unas horas, y momentos atrás comencé a bosquejar algo del diseño:

SomeNews.com.ar

SomeNews.com.ar será un sitio para publicar noticias y artículos solo en inglés. No voy a necesitar periodistas, voy a necesitar traductores, ya que la idea sería tomar noticias en castellano de otros medios, traducirlas al inglés, y publicarlas acá (y sí, voy a tener que pedir bastantes permisos para esto).

¿Por qué? Porque si. No son ideas originales, novedosas, ni nada por el estilo. Y si es útil para algo o no, se verá después. De momento, tenía ganas de encarar algún proyecto web en mi tiempo libre no tan libre.

En definitiva, este post es solo una forma de obligarme a mi mismo a no abandonar a medias estas ideas. Ya veremos en un tiempo qué sucede.

Actualización 22 agosto de 2010 00:00 Hs: Es una lástima que no tenga tiempo libre como para encarar mejor estos proyectos. Sobre Villense.com.ar todavía no hice nada mas que hablar y sobre SomeNews llegué a la conclusión de que probablemente no le deje ese nombre, pero no sé igualmente cuál usar. ¿Alguna sugerencia? (si la elijo el autor será mencionado en el “about” del sitio). Y adelanté un poco del diseño, como se ve en la imagen:

SomeNews.com.ar

Algo del diseño de SomeNews.com.ar con contenido de prueba robado de Guardian.co.uk

Actualización 27 julio de 2011 05:48 Hs: Reviendo algunas publicaciones viejas me encontré con este post. Debo comentar que no voy a crear SomeNews (o como sea que fuera a llamarse) porque ya estoy participando en una comunidad de bloggers y traductores llamada Global Voices, donde traduzco noticias del inglés al castellano.

Con respecto al otro sitio: usé el dominio Villense.com.ar para alojar un blog sobre mi ciudad. Quizás con el tiempo se convierta en otra cosa, mientras tanto, disfruto cada cosa que publico allí :)

#thesiswp y la licencia GPL

Vale la pena mantenerse al tanto del debate que se levantó estos días acerca de si el Theme pago Thesis para WordPress debería o no adoptar la licencia GPL (el hashtag para seguir las opiniones en Twitter es #thesiswp).

Todo el asunto se resume a la siguiente pregunta: ¿Son los plugins y themes para WordPress obras derivadas o piezas de software independiente? Cualquier persona con un poco de conocimiento sobre programación va a estar de acuerdo en que son definitivamente obras derivadas, y por lo tanto, deberían ser publicadas bajo la GPL.

  • El mejor análisis lo redactó Mark Jaquith en su blog (entendible hasta por quienes no sepan sobre programación).
  • También se grabó un Podcast en el que Matt Mullenweg (creador de WordPress) y Chris Pearson debaten sobre el asunto (nótese la actitud arrogante de Chris Pearson).
  • Y por último, varios programadores (1, 2, 3, 4, 5, etc) han demostrado específicamente las violaciones a la licencia GPL. Algunos de ellos son programadores de WordPress, otros programadores independientes, pero también lo hizo un ex programador de Thesis (2).

El asunto se puso más que interesante, y puede servirle a más de un developer para saber qué licencia debe adoptar en cada ocasión.

WordPress como Portal Municipal

Feria del Libro

Presentación del Sitio Web Municipal en la Feria del Libro Local

Cuando entré a trabajar en la Municipalidad de mi ciudad, mi trabajo era mejorar el diseño de su sitio web para poder presentarlo en la Feria del Libro local.

En un principio estaba completamente convencido de que la mejor opción era programar un CMS propio, desde cero, y reemplazar el anterior. Y aunque en el momento por cuestiones de tiempo no se aprobó la idea, comencé igualmente a desarrollarlo por mi cuenta en PHP/MySQL. Mas adelante, al fin, tuve la oportunidad de reemplazar el viejo sistema por el que había estado desarrollando yo durante algunas madrugadas extraoficialmente.

Fue toda una muy buena experiencia, pero en un punto comencé a pensar mas en la practicidad que en mis ganas de tipear código. Así me di cuenta de que todas las funcionalidades en las que estaba invirtiendo tiempo y esfuerzo en desarrollar ya estaban incluidas en cualquier CMS Open Source popular. Es decir; ¿para qué reinventar la rueda?

Pensé en reemplazar mi CMS por WordPress, sin dudas una de las mejores opciones; yo mismo lo he usado para múltiples tipos de sitios y, hablando mal y pronto, se la banca.

Lamentablemente, WordPress no trae incluida la administración de ordenanzas aprobadas por el Honorable Concejo Municipal de una ciudad (sarcásticamente hablando), pero todas estas funcionalidades específicas de un portal municipal pueden ser agregadas como extensiones.

En este sentido WordPress es muy flexible, en nuestro sitio web Municipal se han instalado alrededor de 15 plugins de los cuales 7 fueron programados por mi. Estas porciones de código permiten a los usuarios ejecutar consultas sobre las deudas de sus impuestos, estados de trámites, requisitos para la habilitación de locales, etc. asi como también consultar la legislación aprobada por el Concejo Municipal, boletines legislativos, etc.

Por otro lado, una gran ventaja es la mantención del proyecto. En una oficina de desarrollo, no es lindo comenzar a trabajar y tener que mantener software mal escrito, con loops incomprensibles, y minados de bugs. Por eso, si yo se que no voy a estar siempre en la Municipalidad, me gustaría que cuando me vaya le deje algo prolijo al que venga después de mi. WordPress va a seguir siendo mantenido por miles de personas alrededor del mundo, asi que no hay de qué preocuparse.

Solo algunas entre tantas cosas lindas que tiene el mundo del Software Libre.