La hora pico del software

Un documental de la cadena pública estadounidense PBS filmado hace ya más de 10 años ha hecho su aparición como un proyecto creative commons, llamado Project Code Rush. El tema del documental muestra el stress emocional y físico al que fue sometido el equipo de desarrolladores de Netscape para liberar el código de su producto Netscape Comunicator, el 31 de marzo de 1998 y así dar origen al projecto Mozilla, considerado por muchos como el primer projecto del open source comercial.

Frases que quedan luego de ver el documental son por ejemplo "Dirigir programadores es como tratar de pastorear gatos" o "Vive rápido, muere jóven y deja muchos cadáveres en el camino". Yo viví esa época aunque desde otra geografía (el Perú) y recuerdo que de no haber sido por la existencia del proyecto Mozilla, no hubiera podido por ejemplo hacer viable el proyecto de tener cabinas de internet 100% basadas en Linux usando terminales ultra ligeros LTPS. La história sobre como implementé la primera cabina de internet con Linux en Chiclayo puede ser vista aquí.

El documental revela la ingenuidad romántica de la mayoría de los programadores que desesperadamente trataban de liberar el código de Mozilla, que luego sería la semilla del popular navegador Firefox, en su batalla perdida contra Microsoft en lo que se llamó la guerra de los navegadores (o browsers). La idea era ganar la suficiente ayuda de programadores externos que permitiera reestablecer el balance en la web, aunque como se puede ver al final del documental sólo sirvió de distracción para que los directores llegaran a un acuerdo con AOL que les permitiera hacer varios cientos de millones de dólares especulando con el valor de las acciones previo al momento de la fusión.

Aquí les dejo el documental, lamentablemente en inglés aunque como es creative commons, espero que pronto alguien pueda ofrecernos una versión traducida al español:

 

 

Midiendo la performance de un website

Hace tiempo que no escribía y ha sido principalmente más por falta de tiempo que por desánimo o carencia de temas. El mundo al parecer se vuelve más interesante cada día y resulta muy difícil aburrirse o pensar que un día se parece al siguiente. En parte por eso también no he escrito, por que cualquier cosa que comente a la vuelta de un par de días estaría completamente desactualizado.

Explicada ya la ausencia de posts de las últimas semanas entraré en materia sobre como poder evaluar, que tan bien o mal se comporta nuestro website. Existen dos tipos de herramientas que podemos usar, aquellas que debemos ejecutar desde nuestra PC o aquellas que están hosteadas como servicios en línea. Comencemos por las primeras.

Yahoo! YSlow plugin

Es un plugin de Firefox que extiende las funcionalidades de Firebug, que permite analizar las páginas web y recomienda formas de mejorar la perfomance basado en un conjunto de reglas propuestas por el mismo Yahoo! para acelerar la velocidad de carga de un website (detalles aquí). Lo he probado tanto en Linux como en Windows y funciona bastante bien.

Google PageSpeed

Éste es otro plugin de Firefox que extiende las funcionalidades de Firebug, forma parte de la familia "Page Speed" de Google que incluye un módulo para Apache 2 llamado mod_pagespeed que permite optimización al vuelo sin necesidad de modificar el código HTML de las páginas. El plugin de Firefox que he probado tanto en Windows como en Linux funciona muy bien y ofrece casi el mismo tipo de información que YSlow, por lo tanto bastaría con instalar uno. Ya depende de las preferencias personales.

HTTP Server Benchmarking Tool

Es una herramienta Open Source desarrollada por HP para medir la perfomance de servidores web. El enfoque de httperf no está en la aplicación de una medida de desempeño en particular, sino en proporcionar una herramienta robusta, de alto rendimiento que facilite la construcción de medidas de desempeño de micro y macro nivel. Las tres características distintivas de httperf son su robustez, que incluye la capacidad de generar y sostener la stress test del servidor, soporte para los protocolos SSL y HTTP/1.1, y su extensibilidad para poder ser integrado con los nuevos generadores de carga de trabajo y medidas de desempeño.

Finalmente para aquellos que están amarrados a la plataforma Internet Explorer y Windows, hay una herramienta llamada PageTest que corre como una extensión para IE6 e IE7, según la página del proyecto, desafortunadamente no lo he probado. Ahora veamos las herramientas ofrecidas como un servicio web.

Pingdom

Éste es un servicio que nos permite medir el tiempo de carga de una página web, además de indicarnos que parte de la página demora más de lo usual en cargar. El resultado que muestra es un diagrama que nos indica una escala de tiempo contra cada uno de los elementos de una página web (imagenes, CSS, JavaScript, Flash, iFrames, etc.), al simular como éstos son cargados por un navegador. He encontrado que esta herramienta es bastante útil en lo personal, ya que me ha ayudado a indentificar y resolver algunos de los puntos débiles de este blog.

Load Impact

Éste es un servicio que nos permite medir el impacto de la carga (número de visitas) sobre la forma cómo reacciona nuestro website, en el caso ideal el tiempo de carga apenas debe de cambiar con la carga, aunque es aceptable incluso que haya una leve pendiente entre el tiempo de carga y el número de conexiones. Sin embargo este servicio sigue el modelo freemium, es decir la funcionalidad básica (prueba el website contra 10, 20, 30, 40 y 50 conexiones simultáneas) es gratuito, pero si se desea acceso a más detalle en los reportes y sobre todo a muchas más conexiones simultáneas para probar la resistencia del website a un repentino pico en el número de visitas, se debe de pagar. Los precios oscilan entre los $9 diarios por el servicio llamado BASIC a los $99 diarios por el servicio llamado ADVANCED.

El caótico proceso de creación de código en Facebook

He encontrado un interesante post en el blog FrameThink, en el cuál su autor que usa un pseudónimo "yeeguy", dice que ha tenido contacto directo con los ingenieros de Facebook por más de seis meses y ha logrado compilar unas notas sobre la metodología de desarrollo de software dentro del gigante de las redes sociales. Dado que el autor del post no puede ser claramente identificado y sus colaboradores "epriest" y "fryfrog" tampoco, debemos tomar todo esto pon pinzas. Pero hay cosas que me han llamado la atención y por ello las he incluído en este post.

He aquí algunas notas interesantes sobre el proceso de desarrollo de software en Facebook:

  • Los dos departamentos más grandes de la compañía son Ingeniería (desarrollo de software) y Operaciones (administración de sistemas), con 400 a 500 empleados cada uno. Justos estos departamentos suman más de la mitad de los empleados de Facebook.
  • La relación entre gerentes de producto e ingenieros está entre 7 a 1 y 10 a 1.
  • Todos los ingenieros que se unen a Facebook pasan por un "campamento de entrenamiento" que dura entre 4 a 6 semanas, en donde son entrenados sobre las peculiaridades del sistema corriendo errores y atendiendo clases y charlas de ingenieros seniors. Se estima que el 10% de los participantes de estos campamentos no los aprueban y por lo tanto no son admitidos en la compañía.
  • Después del campamento de entrenamiento, "todos" los ingenieros ganan acceso a la base de datos de Facebook. Según Facebook hay políticas internas muy estrictas que definen que es causal de despido. Ciertamente si esto es así, es una razón más para no poner información personal en Facebook, ya que por la famosa "cultura del encubrimiento" en las grandes organizaciones, nunca se sabrá de los malos manejos hasta que hayan causado un gran daño.
  • Cualquier ingeniero puede editar cualquier parte del código de Facebook a voluntad. ¡Uy!, si eso es cierto para mi es un milagro inexplicable todo el servicio no ha colapsado completamento.
  • Es una cultura basada en la ingeniería, según uno de los ingenieros entrevistados: "Los gerentes de son básicamente inútiles aquí". Como ideal me parece bueno, pero en la práctica, poner a un grupo de seres humanos a trabajar juntos, sin ningún tipo de supervisión y coordinación es simplemente imposible.
  • Durante las reuniones interdepartamentales de cada mes, son los ingenieros quienes llevan el hilo conductor, los que presentan los reportes de progreso de productos. Si alguién de marketing o de gerencia de productos hace muchas preguntas, entonces recibe sus gerentes reciben un feedback de que esa persona ha hablado demasiado en la reunion. Otra vez, esto parecen los sueños de algún desarrollador, pero no es la forma como operan grandes compañías, es más ni Google que es una empresa mucho más posicionada en el mercado y con una larga tradición de gerencia orientada a la ingeniería, opera de esta manera.
  • Las disputas de si una nueva idea vale la pena ser implementada, es usualmente resuelta invirtiendo una semana en desarrollarla y luego probandola en un pequeño grupo de usuarios, por ejemplo implementar esta nueva característica en el 1% de los usuarios de Nevada.
  • Los ingenieros están interesados en resolver los problemas relacionados a la infraestructura como la escalabilidad. Debido a que son problemas más "difíciles", estos generan más prestigio entre los compañeros. Esto me parece el clásico "macho men" en versión geek, donde las cosas no se hacen pensando en su necesidad, sino en el prestigio que se obtendrá.
  • Es mandatorio que el código implementado sea revisado por varios ingenieros antes de ser puesto en funcionamiento. Rumores de que Zuckerberg personalmente revisa todo cambio asociado con los feed news.
  • Por defecto todo cambio en el código es aplicado semanalmente (los martes).
  • Facebook tienen 60,000 servidores. Existen 9 niveles para implementar nuevo código. El nivel de implementación más pequeño sólo afecta a 6 servidores. Si se detecta algún error durante la implementación del nuevo código se detiene inmediatamente el proceso se repara el error y se incia otra vez desde el primer nivel de implementación.

Bueno, el artículo es bastante largo y ofrece algunas ideas que pueden parecer buenas, pero suenan utópicas en el mundo real. Pero al menos para lo que sirve todo esto, es para cuestionarnos si la forma como desarrollamos software dentro de nuestras empresas es la correcta. Cuantas veces no hemos querido enviar al de marketing bien lejos porque propone cosas absurdas o imposibles de implementar, pero en el mundo real es la gente de marketing la que tiene la sartén por el mango y no el departamento de ingeniería.

2011 un año de cambios

Este 2011 inicia con un CES (Consumer Electronics Show) lleno de novedades, primero Microsoft ha dejado luego de mucho tiempo de actuar a la defensiva (ha reconocido que el monopolio que ejercía sobre el mercado ha terminado) y ha pasado a la ofensiva para recuperar todo el terreno perdido, un buen ejemplo ha sido Kinect, pero por otro lado tenemos el anuncio oficial de que la próxima versión de Windows correrá sobre procesadores ARM, con lo cual acepta que la era PC está llegando a su fin y la nueva forma que tomarán las computadoras será la de una tablet o un teléfono celular. Pero las novedades no termina alli, Facebook romperá la barrerá de los 500 accionistas este año 2011 y a más tardar el 1 de mayo del 2012 tendrá que presentar de manera pública su balance contable, todo esto independientemente de que el trato realizado con Goldman Sachs sea observado por la SEC (Securities and Exchange Commission) o no, según me he enterado por Business Insiders. Ojo, el que tenga que presentar sus balances contables de manera pública no significa que tendrá que inciar una oferta pública de acciones en la bolsa de valores, de forma que cualquier pequeño inversionista pueda comprarlas, sólo significa que por fin sabremos realmente cuánto es el monto de dinero que le reporta a Mark Zuckerberg el colectar y vender a anunciantes nuestra información privada.

En el mismo CES, Google nos ha presentado a Honeycomb (aka Android 3.0), el primer sistema operativo orientado a tables y Motorola aprovechando la atención generada nos ha mostrado el primer supertablet con procesador de dos núcleos y la nueva versión de Android llamado Xoom. Amazon prepara el lanzamiento de su propio App Store, y ya está invitando a los desarrolladores a que se unan al mismo a través de una suscripción de $99 anuales (el primer año es gratis). Me pregunto por qué tendría que pagar $99 al año para que mis aplicaciones aparezcan en el Amazon App Store, si pagando $35 por única vez, se pueden publicar aplicaciones en el Android Market de Google y mis aplicaciones aparecerían tambien en Amazon, además no tendrían que pasar por el proceso de aprobación de Amazon, sino que inmediatamente estarían disponibles. En fin veamos que se les ocurre a los marketeros de Amazon para convencernos que que compartir nuestra ganacias con ellos es mejor.

Lo único malo de este 2011 para mi por lo menos, es que aún los usuarios de Nexus One no tenemos el Android 2.3 en nuestros celulares, parce que Google está prestando más atención a quitarle el mercado de las tablets a Apple que a seguir actualizando su propio celular introducido hace apenas 1 año.

Aquí les dejo un videito que encontré sobre como luce Gmail en Android 3.0, realmente sorprendente:

 

 

Informáticos: Obsoletos al graduarse

La idea de una educación superior es proveer a las personas con un conjunto de conocimientos necesarios y específicos para desarrollar una actividad profesional, así por ejemplo los que desean ejercer la profesión médica deben acudir a una escuela de medicina en donde reciben el entrenamiento mínimo necesario para poder comenzar a desarrollar dicha actividad. De más está hablar que luego de haber terminado los estudios superiores es necesario continuar actualizando los conocimientos adquiridos en la universidad, caso contrario estaremos en peligro de volvernos obsoletos profesionalmente hablando, ya que tendremos un conjunto de conocimientos desactualizado.

Pero en el campo de la informática está ocurriendo un fenómeno que me intriga, la gran mayoría de centros de enseñanza superior están formando un gran número de profesionales con un conjunto de conocimientos y perfil profesional muy bueno para finales de los noventa, pero estamos casi 2011 y el conjunto de conocimientos necesarios es radicalmente diferente. Además en el caso particular del Perú donde la carrera profesional de informática suele recibir el nombre de "Ingeniería de Sistemas", una proliferación de universidades privadas e institutos de enseñanza superior que ofrecen dicha carrera dentro de su abanico de ofertas educativas, han reclutado como profesores a la primera generación de profesionales salidos de las universidades nacionales y que en la mayoría de los casos jamas han desarrollado la actividad profesional que enseñan, lo cual pude parecer algo ilógico pero tiene su explicación en la motivación del actual sistema educativo superior peruano, la busqueda del lucro.

En este post no deseo hacer de voz que clama en el desierto, en primer lugar porque deseo seguir conservando la cabeza encima de mis hombros y en segundo lugar porque nada de lo yo diga o deje de decir cambiará un milímetro la realidad de los recien graduados en "Ingeniería de Sistemas" en el Perú. El objetivo de este post es señalar algunos de los problemas y comentar algunas ideas que pueden ayudar a reparar en algo el daño causado por una educación superior divorciada de la realidad.

Primero debo decir que el mercado peruano para los profesionales en informática está saturado, a menos que se poseean excelente contactos en el gobierno, en cuyo caso como dijera el actual presidente Alan García "La plata llega sola", declaración recogida y comentada por el periodista Jaime Bayly en su columna semanal en Perú 21. Si esta leyendo este post es porque justamente está tan desilucionado con la carrera que eligió y con el suficiente tiempo libre para buscar en Google algo que le consuele, es decir está dentro del grupo de aquellos que no tienen excelentes contactos con el gobierno, bueno al menos tenemos el consuelo de que somos honrados y que vivimos de nuestro trabajo.

A diferencia de los doctores que cuando ejercen la profesión independientemente pueden cobrar por sus consultas y nadie los cuestiona por tal hecho, al parecer los informáticos debemos de diagnosticar, aconsejar y muchas veces solucionar problemas sin cobrar por nuestro trabajo. La explicación de este hecho no es tan sencilla como parece, ya que es un fenómeno muy extendido incluso en los países desarrollados, pero el objetivo de este post no es encontrar la respuesta a dicha paradoja, así que aceptemoslo como una regla simple.

En cierta forma la informática es como la profesión de músico, no se precisa haber pasado por un conservatorio para ejercerla y en muchos casos se tiene más éxito si es que no se ha pasado por un conservatorio. Pero la analogía la veo desde este punto de vista, crear una melodía original y agradable puede tomar tiempo y requerir un gran esfuerzo intelectual, pero una vez que está lista y grabada, cualquiera puede copiarla sin el consentimiento del autor y usarla de muy diversas maneras. Es más pueden aparecer imitadores que reproducen la composición o hasta quienes le cambién de género, lo cual muchas veces debería ser considerado un acto criminal (recuerdo una vez haber oido Yesterday en clave de salsa, aún tengo las secuelas psicológicas de la traumática experiencia ).

Igual como pasa con la industria musical, donde la parte difícil está en monetizar la habilidad creativa, en informática se presenta un problema similar, ¿como monetizar nuestros conocimientos?, la publicidad parece ser la única forma que funciona por el momento, ya que el desarrollo de programas o aplicaciones a medida y su venta al detalle, parece ser la forma menos rentable y más pirateable.

¿Pero, y lo de la obsolecencia?. Otro problema que enfrentan los informáticos, además de un mercado en donde todos esperan un almuerzo gratis (free lunch), es el hecho de que la formación profesional (al menos en el Perú) está orientada a desarrollar un juego de conocimiento (skill set) PC-céntricos, en un entorno en el cual la PC está cayendo rápidamente en desuso de la misma forma como lo están los mainframes. El acceso a Internet a través de múltiples dispositivos, celulares, tablets, televisores, etc., y la revolución de las redes sociales que ha creado un mercado de 500 millones de consumidores de servicios online, está cambiando radicalmente el paradigam de los últimos 20 años. Nunca antes como ahora la frase "la computadora es la red", ha tenido tanto sentido y nunca antes como ahora el skill set de nuestros informáticos ha estado tan desfasado. Lo cual no deja de ser una paradoja, ya que hay muchas más instituciones educativas que antes dictando cursos de informática y cada vez el acceso a Internet es mucho más barato y rápido. Y no estoy queriendo ser sarcastico, comparen el promedio de la velocidad de acceso a Internet y el precio por Kbps en nuestros días con el de hace 10 años.

Como enfrentar estos problemas, bueno mi primera recomendación a aquellos que recien inician su formación profesional es que reconsideren sus opciones, si tienen la suficiente vocación (y esto no es broma) una primera recomendación es estudiar en una universidad nacional, duele menos ser desempleado o subempleado cuando no se pagó por los estudios (esto si es un sarcasmo). Si ya está por terminar o terminó la carrera profesional, son necesarios desarrollar este juego de conocimientos lo más pronto posible:

  • Dominio del idioma inglés (hablado y escrito).
  • Programación en Java, PHP, Python, Perl y JavaScript (en un mundo donde el browser es el nuevo OS, el JavaScript es el nuevo lenguaje de máquina).
  • Tecnologías de virtualización y cloud computing.
  • Tecnología móviles (smartphones/tablets).
  • Aprender la mayor cantidad de APIs posibles, a más mejor (en principio es algo sencillo, pero la gracia está en el número).
  • Aprender a relacionarse socialmente a través de Internet y formar parte de comunidades de desarrolladores activas.

Si ya tiene un tiempo fuera de la universidad o instituto y no puede conseguir un trabajo de acuerdo a sus expectativas, no cometa el error de volver a las aulas, no aprenderá nada nuevo que le sirva y le costará más dinero. En este punto es necesario una autocrítica, desde que hay una discrepancia entre que es lo que se espera como una recompensa por nuestras habilidades y las habilidades mismas hay sólo dos posibilidades, o estoy en un mercado que no demanda mis habilidades, la solución es entonces emigrar a otro donde haya demanda. La otra es que simple y llanamente las espectativas monetarias son irreales.

Tocando el punto de la emigración, es una solución pero no todos pueden aplicarla por una u otra razón. Pero ya que existe Internet y se ha inventado el outsourcing, si no se puede emigrar físicamente, la otra alternativa es importar nuesto trabajo desde otros mercados, un requisito escencial para intentar esto es el dominio del idioma inglés, si no cuenta con dicha habilidad no se desanime, aún hay otras formas de conseguir un trabajo.

Finalmente, si nada de lo que aparece líneas arriba se ajusta a su actual situación, siempre queda la posibilidad de desarrollar aplicaciones de manera indepenciente, pero en lugar de venderlas al parecer la mejor forma de monetizar esto es regalar una versión que muestra anuncios publicitarios y vender una versión que no tiene los anuncios, este tipo de solución es conocida como freemium y he escrito un post anterior con la experiencia de un desarrollador polaco de aplicaciones para Android. Si en este punto su principal limitación para vivir de la informática, es que no sabe programar, ya que le dijeron en la universidad que lo suyo era el análisis, pues intente alguno de los muchos cursos online y aprende a programar solo, nadie le podrá enseñar. Al final programar es como andar en bicileta, una vez que se aprende nunca se olvida y con esos conocimientos es muy sencillo aprender otros como "analisis de proyectos", luego de que aprenda a programar de verdad muchas otras cosas comenzaran a tener sentido.

Me gustaría leer sus opiniones sobre este tema, ya que me parece que hay mucho pan por rebanar. Además he dado sólo algunos consejos desde el punto de vista de mi experiencia personal, tras haber trabajado en el área los últimos 14 años, aunque vengo usando computadoras desde los 9 años (de eso ya hace 33 años, que tiempos aquellos). Todo comentario no hará más que enriquecer el post y permitirá que todos aprendamos algo nuevo.