Tú probablemente hayas escuchado la frase anteriormente. Esta hace referencia a la gran inventiva exhibida por los Estados Unidos de América desde mediados del siglo XIX hasta nuestros días. Inventos que crearon verdaderas revoluciones tecnológicas como el telégrafo, el teléfono, el avión, la producción en serie y un largo etcétera que transformaron completamente a las sociedades occidentales. En nuestros días este "ingenio americano", está representado por Microsoft, Apple, Yahoo, Google, Facebook o Twitter, todas compañías de software que es la última frontera en lo que a innovación se refiere. Igualmente hay voces que anuncian el final de esa era y profetizan el advenimiento de un nuevo polo de innovación desde donde saldrán las nuevas tecnologías que redefiniran el siglo XXI, algunos están señalando a China o los países de la región Asia-Pacífico como el siguiente motor del desarrollo, pero si el futuro está atado al software probablemente sea otra la región del mundo a la que debamos mirar con más atención.
Categoría: Software
De LAMP a LEMP
Ud. probablemente ya sabe lo que es LAMP (Linux Apache MySQL PHP) el stack sobre el que corren los más populares CMS Open Source como Drupal, Joomla o WordPress, pero probablemente aún no haya escuchado de LEMP (Linux Nginx MySQL PHP), ya que incluso en Wikipedia el término aún no está definido. La diferencia es pues el servidor web. La idea detras de LEMP es muy simple reemplazar el muy flexible y casi omnipresente servidor Apache por el más liviano y ágil Nginx. Si esa fuera la única diferencia, pues no valdría la pena el cambio. Pero que pensaría si le dijera que hacer ese cambio puede transformar radicalmente la performance de su página web y permitir que por ejemplo con un pequeño VPS se pueda atender decenas de miles de visitas diarias. Pues bien en este post les contaré la historia destras de la migración de LAMP a LEMP y como este blog pudo reducir increíblemente su tiempo de carga.
Diez hipótesis para invertir en tecnología
Roger McNamee, un músico y empresario, fundador y director de Elevation Partners (una firma de capital de riesgo), dio una conferencia titulada igual que este post, hace ya casi un mes (28 de Junio 2011), ante una audiencia conformada por ejecutivos de la industria televisiva americana y que se puede ver completa en FORA.tv. En ella, ofrece algunas ideas interesantes sobre el futuro de la web, por ejemplo asegura que Microsoft está fuera del negocio, que es el final de Google, que Apple es la mayor empresa en innovación en este momento, que el iPad es la mayor revolución de la industria desde de la creación del PC y que las redes sociales se han vuelto un commodity más y Facebook ha decidido ser un Twitter con esteroides y no tiene sentido tratar de competir contra Facebook. Además de dedicar casi la mitad de su presentación ha hablar sobre HTML5 y como Adobe Flash no puede competir contra HTML5.
Apple obtiene victoria contra HTC ¿Es el final de la innovación?
En un reciente artícupa aparecido en Los Angeles Times, se informa que un juez le ha dado la razón a Apple en un juicio contra el fabricante de celulares chinos por infringir 2 patentes de la compañía de la manzana, una la 6,343,263 obtenida en 1994 y que fue otorgada para garantizar los derechos de Apple en "Real-time signal processing system for serially transmitted data" (Procesamiento de señales en sistemas de tiempo real para transmisión serial de datos), es decir esta patente dice que cualquiera que envie y reciba señales en tiempo real por un canal serial debe pagarle royalties a Apple. Ojo cuando se le dio esta patente a Apple fue para computadoras, no para smartphones que aún no se inventaban en aquel entonces (el Blackberry recien aparece en agosto de 1998). En teoría cada vez que Ud. ve un video de youtube, hace una video-conferencia o recibe un tweet, ya sea en su computadora de escritorio o en su celular está haciendo justamento procesamiento de señales en sistemas de tiempo real para transmisión serial de datos.
La otra patente 5,946,647, es de 1997 y le fue otorgada para "System and method for performing an action on a structure in computer-generated data" (Sistemas y métodos para efectuar acciones en una estructura de datos generada por computadora), y que abarca eso. Pues la interface gráfica de un cliente de correo en cualquier celular está cubierta por esta patente, incluso si lee sus correos a través de una interface web, se esta interactuando con una estructura de datos genrada por una computadora, la misma GUI es en sí una estructura de datos generada por computadora.
¿Por qué Juanito no programa?
Es indudable que en los tiempos que corren donde el hardware se ha vuelto un commodity al igual que la mayor de servicios de infraestructura de red, el saber programar (entendido como un proceso creativo), ha pasado a ser un activo importante en las empresas y los grandes gigantes de la industria como Google o Facebook se disputan los mejores desarrolladores. Es más se ha creado algo llamado acqhiring, que es un proceso a través del cual las compañías con suficientes fondos compran otras más pequeñas para poder tener acceso a sus desarrolladores.
Exitosos semilleros de empresas como Y Combinator, están enfocadas a dar los conocimientos de emprendimiento necesario a los desarrolladores que desean inciar su propia empresa, pero para iniciar una empresa en el sector de las TIC se necesita ser un programador, alguien que puede traducir una idea de negocio en un lenguaje que las computadoras pueden entender.
Para variar las universidades latinoamericanas y las peruanas en particular no están interesadas en la parte "dura" de la carrera de computer science (programación) sino en la parte "blanda" orientada más a metodologías y mejores prácticas, que tienen un valor pero que no son el motor de progreso en este momento. Lo que es evidente es que incluso con los recursos necesarios, no todos pueden aprender a programar, según algunos estudios realizados en universidades americanas apenas la décima parte del uno por ciento de los alumnos interesados en aprender a programar pueden hacerlo, es decir los llamados programadores naturales.
Hay varios factores que han conspirado contra la creación de una mayor masa de buenos programadores en nuestras sociedades, indudablemente los entornos gráficos y la ilusión de que usar una computadora es sencillo es uno de los principales problemas. El programar en la forma como se ve en nuestras sociedades incluso se ha vuelto equivalente a crear GUIs y llenar simples rutinas de callbacks para llenar bases de datos u obtener reportes de las mismas, lo lamentable es que la gran mayoría de personas que terminan una carrera del área así lo cree.
Otro de los grandes problemas para enseñar a programar es en muchos casos el exceso de testosterona y el comportamiento tipo macho alfa que la gran mayoría de programadores exhibe. Profesores y alumnos muchas veces entran en competencia sobre cuál es el código más criptico que resuelve un sencillo problema, en lugar de hacer exactamente lo contrario, como crear el código más simple y claro posible que resuelve un problema complejo. La sencilles es una de las condiciones de la elegancia y más de doscientos años de desarrollos matemáticos nos han probado que incluso manteniendo una metodología que favorece la simplicidad, la claridad y la lógica, no siempre se puede llegar a un desarrollo que todos pueden entender.
Un problema que resulta evidente ahora cuando se intenta enseñar a programar en las universidades o institutos, es que las escuelas están más enfocadas en enseñar como usar la computadora como una herramienta de oficina, en lugar de intentar enseñar el uso de la misma como una herramienta que potencia el desarrollo de nuevas ideas. En los ochenta y principios de los noventa, la introducción de computadoras en las aulas implicaba enseñar a programar en algún lenguaje de alto nivel como BASIC o LOGO, ya que el hardware de aquellas primeras microcomputadoras era bastante limitado como para acomodar muchos programas que ahora consideramos como estándar en los PCs. Este abaratamiento del hardware y la masificación del uso de las computadoras personales incluso ha llevado a la desaparición de los entornos de desarrollo (programación) en las computadoras de nuestros días. Todos aceptamos como normal que en una instalación por defecto de cualquier sistema operativo moderno como Windows, Mac OS X o incluso Linux, no se incluya por defecto un entorno de desarrollo. Esta realidad lo único que está haciendo es hacer la brecha de aprender a programar más grande para las nuevas generaciones que no han sido expuestas a la programación desde una edad temprana. Lo cual hace que la gran mayoría de recien ingresados a las universidades e institutos se enfrenten a una misión casi imposible, aprender a programar en tan sólo 2 o 3 semestres y luego de eso ser lo suficientemente hábilies como para resolver problemas reales.
No creo que como en un extenso artículo de David Brin aparecido en Solon.com, titulado Why Johnny can't code, toda la culpa sea la desaparción de la línea de comando de las computadoras modernas, existen muy buenos entornos para enseñar a programar de manera gráfica como Squeak. Además en nuestros días es basntante sencillo y gratis, el descargar alguno de los múltiples lenguages de script como Perl, Python o Ruby en nuestro PC, independientemente del sistema operativo que usemos que nos permite volver a la línea de comandos si lo deseamos así. El problema va más alla de la no existencia de una lingua franca (como lo fue el BASIC en los primeros años de la revolución de las microcomputadoras) o de que las computadoras sean mucho más complejas hoy que hace 20 años. Estamos como sociedad buscando una solución rápida a los problemas y olvidando que el progreso es un proceso de naturaleza compleja y larga, que se contradice con nuestra visión de querer saltar en el siguiente tren que nos ofresca una salida mágica a nuestras carencias estructurales.
En teoría con un millones de OLPC repartidas hacia finales de este año, es de esperar que en pocos años veamos jóvenes y entusiastas programadores peruanos revolucionando el mercado global de la tecnología, pero eso no ocurrirá. No porque sea un pesimista o porque odie toda iniciativa del gobierno que está por terminar, simplemente no ocurrirá porque si en una escuela no hay baños, agua corriente o un suministro de energía apropiado, donde los alumnos no reciben la ración calórica diaria mínima para ayudar a que sus cerebros en formación se desarrollen normalmente, un pedazo de plástico verde no hará el milagro.
Con tantas facultades de Ingeniería de Sistemas, Ingenierían Informática, Ingeniería de la Computación y tantos otros nombres diseñados más como herramientas de marketing, deberíamos estar en estos momentos produciendo gran cantidad de contenido (papers, blogs, libros, proyectos de software libre, etc.), sin embargo eso no está ocurriendo, ¿por qué?. Una vez más, no existen atajos para el desarrollo y entregarle un diploma de ingeniero a alguien que asiste 5 años a una universidad o 3 años a un instituto no lo convierte en un ingeniero o un técnico versado en el tema. Mientras se tengan profesores universitarios, que ven la cátedra sólo como una fuente de ingresos y deben de tener más de un trabajo para poder cubrir su presupuesto familiar, mientras se tengan profesores universitarios que sólo hablan español a pesar de que la ley universitaria les exige que dominen al menos un idioma extranjero, mientas existan profesores universitarios que jamas hayan tenido una experiencia laboral y toda su vida se haya desarrollado dentro de las aulas (primero como alumno y luego como profesor), estaremos condenados a que el progreso nos sea esquivo.
¿Cómo es posible que teniendo ahora a nuestra disposición tecnología mucho más barata y potente de la que se disponía en los 70s, 80s o 90s, cada vez nuestros resultados sean peores? No puedo estar seguro porque no existe un estudio que lo corrobore, pero me arriesgaría a decir de que ahora es mucho más difícil conseguir hoy un buen programador de lo que lo era hacerlo una o dos descenios atras. Y eso que el número de universidades e institutos hoy en día es muy superior al que existía entonces. Aún sigue existiendo la misma proporción de programadores natos (1 en 1000), la única diferencia es que el sistema educativo está mutilando mentalmente a aquellos que no son programadores natos, de las aptitudes necesarias para poder aprender programación y eso es algo que debemos de cambiar si es que desamos tener alguna oportunidad de competir a nivel internacional.