¿Por qué el chico nuevo no puede programar?

El día de ayer en TechCrunch apareció un post de similar título, que describe la frustación de muchos gerentes de proyecto que tienen que lidiar con la realidad de programadores que sencillamente son incapaces de generar código y sólo complican la culminación del proyecto. El autor de dicho post Jon Evans, señala como responsable del caos al proceso de selección de programadores realizado por el departamento de recursos humanos que dice sólo seleccionar al top 1% de los candidatos, pero si eso es cierto entonces por que estos desarrolladores élite no pueden llevar a término la más simple de las tareas.

Los cuestionamientos de Evans al proceso de selección de programadores no son nuevos, ya en el 2007 Jett Atwood de Coding Horror, se preguntaba "¿Por qué los programadores no pueden programar?" y sobre el mismo tema tres años depués hacía otro post titulado "Los programadores que no programan". Pero como dice Evans claramente en su post es un problema con el proceso básico de selección, el parrafo que considera resume toda la problemática es este:

"Entonces, ¿en qué debe consistir realmente una entrevista [de trabajo]? Permítanme ofrecer una propuesta humilde: no entrevistar a nadie que no haya logrado algo. Jamas. Los certificados y los títulos no son logros, me refiero a proyectos del mundo real con usuarios del mundo real. No hay excusa para que los desarrolladores de software no tegan un sitio web, una aplicación o un servicio que puedan mostrar y decir: "Yo lo hice, ¡todo con mis propias manos!" en un mundo en el que Google App Engine y Amazon Web Services tienen servicios de nivel básico gratuitos, y todo el costo de registro como desarrollador Android para poder publicar una aplicación en el Android Market es de $ 25"

El problema es que la mayoría de departamentos de recursos humanos asumen que si alguién tiene un título o certificado, automáticamente significa que dicha persona es capaz de programar y como en todos los blogs que he mencionado líneas arriba la constante es que la gran mayoría de personas que se presentan a una plaza de programador y tienen un título de ingeniero, master o incluso PhD, son incapaces de escribir el programa más sencillo.

En lo personal, me parece que no solamente es el proceso de selección el que falla en este caso, sino también el proceso de educación de los programadores, la educación como he dicho antes se ha convertido en un negocio y por lo tanto busca como todo negocio del siglo XXI, satisfacer las necesidades de sus clientes, en este caso los alumnos que pagan sus pensiones para recibir un título, ojo no he dicho pagan sus pensiones para ser educados. El problema básicamente es que muchos de los profesionales que actualmente existen en el mercado creen que su educación los ha capacitado para desarrollar un rol determinado, cuando en realidad sólo han recibido un conjunto de conocimientos que sirven a lo mucho para pasar exámenes, pero no para crear riqueza.

El único consuelo para todos los graduados peruanos de las numerosas escuelas de ingeniería informática, sistemas o computación, como deseen llamarlas, es que al igual que ellos los graduados de otras universidades alrededor del mundo tampoco saben programar. Pero como dice aquel viejo refran: "Mal de muchos, consuelo de tontos".

El ocaso y caída del System Administrator

En un artículo aparecido el pasado lunes (28 de febrero) en InfoWorld, Paul Venezia  se pregunta si la era del administrador de sistemas (Linux/Unix o Windows) ha llegado a su fin gracias a la comoditización de la tecnología de virtualización que permite desplegar un nuevo servidor con una configuración limpia en cuestion de minutos. El punto clave es que si se disponen de imagenes de servidores básicos (web, db, mail) bien configurados por expertos y listos para usar en cuanto sea necesario, cual es el punto de tener un administrador de sistemas dentro de la empresa, si cuando algo falla todo lo que se debe hacer en copiar los datos a otro servidor listo para reemplazar al original en cuestion de minutos.

Como muchos de los que siguen este blog saben, yo soy un administrador de sistemas Linux y he ejercido el oficio desde mediados de los años 90. Obviamente mi opinion sobre el artículo puede ser tomada por muchos como parcializada, pero mientras se hagan las advertencias del caso creo que toda opinion puede ser expresada.

Bueno como finaliza el mismo artículo de Paul Venezia, "todos pueden manejar un automóvil, pero si este no enciende, uno no tiene más alternativas. Lo cual es muy malo si a uno le pagan por reparar autos". La virtualización y sobre todo los productos de fácil uso como VMware Workstation o VirtualBox dan la ilusión a los desarrolladores que ellos pueden ser un administrador de sistemas. Pero, de la misma forma que un Sysadmin no puede ser un desarrollador, lo contrario también aplica, sino revisen este antiguo post "Vampiros vs. Hombres Lobo". El problema viene cuando los que toman las decisiones (gerentes, directores, empresarios) creen que pueden ahorrarse el sueldo de los administradores de sistemas, haciendo que sus programadores desempeñen el doble papel, algo que en muchas ocaciones puede ser la receta para el desastre.

La tecnología de virtualización es poderoza y yo la uso desde hace buen tiempo, pero es tan solo una más de las herramientas en el cajón de todo administrador de sistemas. Hay servidores que por su rol o tipo de carga no es buena idea virtualizar (después de todo no interesa que tan eficiente sea la virtualización, siempre agrega latencia), ejemplos típicos son servidores de archivo de alto tráfico o servidores de base de datos (en este caso se requiere lo contrario a la virtualización, se necesita "clusters"). Pero como dice el refran si la única herramienta que se conoce es un martillo, todo problema se ve como un clavo.

Pero ser un administrador de sistemas es algo más que sólo instalar el sistema operativo, hacer los back-up y aplicar los parches de seguridad necesarios, el trabajo también incluye planeación de los recursos en base a la carga existente y su proyección a futuro, analizar los problemas de red, reducir el consumo de energía y mantener a raya el casi siempre pobremente diseñado software que los desarrolladores insisten en usar y que por lo general suele ser ineficiente y en muchos casos incluso infeficaz.

De la misma forma que Windows le da la ilusión a un usuario de que es una persona del área técnica sólo porque puede cambiar el fondo de pantalla, o instalar un programa de chat, el software de virtualización le da a los desarrolladores y el público en general la ilusión de que ellos pueden ser administradores de sistemas.

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.

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.

Interesante modo de monetizar dominios vencidos

Una de las formas de generar inteligencia colectiva en la lucha contra el omnipresente spam, es usar blacklist (listas de IP de los que alguien ha reportado recibir spam). Hay infinidad de servicios de blacklist como SpamCop o SPAMHAUS, ambos muy populares. También hay servicios más pequeños e incluso mantenidos por usuarios independientes. La forma de implementarlos no es muy complicado ya que se usa el protocolo DNS para validar IPs, de alli deriva el nombre DNSBL (DNS Black List).

Básicamente la persona o institución que desea hacer público su blacklist debe levantar un servidor DNS que acepte peticiones regulares de resolución y retorne un valor válido si el IP está listado, dando la opción questionar a través de una solicitud "TXT" la razón de la inclusión en la lista. En principio todo muy sencillo, pero aclaremos la cosa con un ejemplo.

Supongamos que deseamos saber si el IP "100.110.120.130"  está listado en la base de datos de fuentes de spam en SPAMHAUS, para ello debemos hacer una solicitud de resolución DNS al servidor sbl.spamhaus.org. La única particularidad es que debemos hacerlo poniendo el IP en orden inverso y añadirlo al nombre de host al cual estamos haciendo la solicitud de esta manera:

$ nslookup -q=A 130.120.110.100.sbl.spamhaus.org

** server can’t find 130.120.110.100.sbl.spamhaus.org: NXDOMAIN

Si el IP no está listado deberíamos obtener un listado como el anterior. Pero a que viene todo esto, pues simplemente a que yo uso una gran colección de blacklist para proteger a mis servidores de correo del spam, y siempre estoy vigilando que ninguno de mis servidores esté listado en ellas, para tal fin tengo un script que corre cada hora y verifica que ninguno de mis servidores está listado, de estarlo inmediatamente me notifica con un mensaje SMS a mi celular. Entonces resulta que el día de hoy recibí la alerta de que uno de mis servidores estaba listado en "bl.csma.biz", inmediatamente me puse manos a la obra para delistar mi IP del blacklist, pero grande fue mi sorpresa cuando encontré esto:

CSMA.BIZ Expired

Si adivinaron el dominio expiro y a los chicos de Network Solutions no se les ocurrió mejor idea para monetizar el tráfico que crear una respuesta válida a toda consulta DNS sobre dicho dominio, resultado ha sido para los que usamos la solución DNSBL, toda internet está incluída como fuente de spam en la lista administrada por el servidor bl.csma.biz.

Para demostrarlo hagamos un experimento. Por ejemplo hay IPs que nunca deben estar en un blacklist, este es el caso específico de todas las IPs privadas como 10.0.0.0/8, 172.16.0.0/12,  192.168.0.0/16, demás del localhost 127.0.0.0/8. Preguntado sobre esos valores el DNSBL del servicio bl.csma.biz simpre responde afirmativamente apuntando a la página que ofrece el dominio en venta.

$ nslookup 1.0.0.127.bl.csma.biz
Non-authoritative answer:
Name:   1.0.0.127.bl.csma.biz
Address: 209.62.105.19

$ nslookup 1.0.0.10.bl.csma.biz
Non-authoritative answer:
Name:   1.0.0.10.bl.csma.biz
Address: 209.62.105.19

$ nslookup 1.0.16.172.bl.csma.biz
Non-authoritative answer:
Name:   1.0.16.172.bl.csma.biz
Address: 209.62.105.19

$ nslookup 1.0.168.192.bl.csma.biz
Non-authoritative answer:
Name:   1.0.168.192.bl.csma.biz
Address: 209.62.105.19

No interesa que pongan delante del nombre bl.csma.biz, el DNS atumáticamente apunta a la página de la publicidad. Esto me parece sorprendente de una compañía que tuvo la exclusividad de la venta de dominios .com, .net y .org durante muchos años. Acaso no hay nadie que sepa que hacer esto puede tener efectos colaterales como el hecho de generar rechazo de correos o el que muchos correos terminen en el "Junk Folder" de muchos servicios de correo, o simplemente no interesa la usabilidad y solo desean más tráfico para monetizar la publicidad en los dominios.

Espero que el propietario del dominio csma.biz lo habilite, por lo menos yo como contra medida lo ha retirado de la lista de servicios DNSBL que utilizo.