Programa o sé programado

Aprender a programar no es difícil. La programación ayuda a que tu cerebro sea más analítico y tenga capacidad para descomponer problemas grandes en otros más pequeños que se pueden abordar por separado. No importa el lenguaje elegido. Da igual si decides irte a por la moda de Ruby on Rails, la facilidad para hacer cosas rápido del PHP o la robustez de Java.

Antes de decidirte por uno de esos lenguajes debes programar tu cerebro para que aprenda a pensar como un programador. Aparecerán entonces en tu mapa mental los bucles, los arrays, las variables, los condicionales, los métodos… y éstos son independientes del lenguaje. Posteriormente tendrás que aprender los vericuetos de cada uno de ellos, pero al principio solo importa saber pensar correctamente.

Un buen programador no sabe solo programar en un determinado lenguaje. Al contrario, sabe “programar” y posteriormente se adapta a lo que venga porque conoce los principios de la computación.

Esa amplitud mental hace que las personas sean más ricas. Y no se trata de dar de lado otros conocimientos y disciplinas, sino de comprender una nueva realidad: la programación estará presente en todas las áreas de la vida en un período inferior a 10 años.

Mattan Griffel, conocido por ser uno de los primeros en adueñarse del concepto ‘Growth Hacker’ pero también por crear “One Month Rails”, nos comentaba en Nueva York durante una presentación que la disyuntiva a la que se enfrenta el ser humano ahora es sencilla: programar o ser programado.

No se trata ahora de elegir si uno quiere estudiar Historia del Arte o Ingeniería Aeronáutica, sino de comprender que en ambos casos habrá que saber programación. Ignorar esa realidad solo nos llevará a retrasar lo inevitable, y mientras más años tardemos en adaptar nuestro cerebro a los métodos analíticos, más complicado será hacerlo.

Si tienes un hijo menor de 15 años, date prisa y apúntalo a clases de programación. ¡Pero ten cuidado! Debes buscar a un buen profesor porque hay pocas cosas más frustrantes que tener a un mal maestro para aprender código. Explicar algo que, en origen, es abstracto, solo puede hacerse con cariño y emocionando, aplicando esas cosas que flotan en el aire al mundo real y plasmando el conocimiento en cosas tangibles.

En 10 años no existirán muchas de las cosas que hoy damos por buenas. Los intermediarios irán desapareciendo en todos los sectores para conectar a productor y consumidor. Y para hacer realidad ese proceso harán falta millones de programadores.

Con 5 o 6 años recibí uno de los mensajes que más han influido en mi persona. “Los próximos analfabetos serán aquellos que no hablen inglés ni sepan informática”, me decía mi padre, muy serio, mientras mirábamos ordenadores en El Corte Inglés a mediados de los 80.

Ojalá hubieran existido en ese años iniciativas como code.org, Udemy o Coursera.

Hoy leía en Xataka que un Audi RS7 sin conductor estaba retando a un humano en una carrera a 250 km/h. Sin duda, un logro de la inteligencia artificial, la computación y los sensores. En la misma publicación se recoge que la UE ha iniciado el programa “All you need is code”, apoyado por Microsoft, Facebook, Rovio o SAP, empresas que ven como su futuro está vinculado a la existencia de nuevos programadores.

Mark Zuckerberg, cofundador y CEO de Facebook, quiere modificar las leyes de inmigración estadounidenses por un sencillo motivo: tiene que ser más sencillo incorporar a su país a nuevos jóvenes talentosos que sepan programar. El ingeniero es la nueva estrella en Silicon Valey y Nueva York, donde algunas de las estrellas del código de Facebook o Google tienen, incluso, representante e ingresan cada año más de 200.000$.

Pero no hay que ir tan lejos. Esta semana puse una oferta de trabajo en mi timeline:

Decenas de retuits y, ¿sabéis cuántos candidatos y/o peticiones he recibido? Cero.

¿No es extraño en un país con un 25% de paro que una oferta de empleo para un gran proyecto y con buena remuneración se quede desierta? ¿Ocurriría esto con periodistas, abogados o arquitectos?

Así que habrá que estudiar programación, si no es ya por convencimiento, sí por empleabilidad. El déficit de programadores para los próximos años será brutal. Son los arquitectos del futuro y, sin ellos, tardaremos más tiempo en hacer cosas maravillosas y necesarias para todos.

Por último, os dejo una infografía interesante de los compis de Who Is Hosting This sobre lenguajes de programación.

infographics about what code should you learn / Infografía sobre qué lenguaje de programación es más interesante para aprender

Quiero aprender a programar y/o diseñar. ¿Por dónde empiezo?

Con bastante frecuencia muchas personas me preguntan cuál es el mejor lenguaje para programar o, en otros casos, qué aplicaciones deben manejar para ser buenos diseñadores. En ambos casos mi respuesta es siempre la misma: “Para empezar, ninguno”.

Yo no soy ingeniero informático (soy licenciado en Periodismo). Así que os contaré el camino que yo he seguido y que, a buen seguro, es mejorable. Programo desde los 6 años y diseño desde los 14. Formación absolutamente autodidacta y por amor a la informática y el arte. Observación, ganas de aprender y muchas (¡¡¡muchas!!!) horas delante de un teclado.

El primer error antes de empezar a programar es elegir un lenguaje de antemano. Antes que nada hay que saber estructurar código de forma general. Es lo que se llama “pseudocódigo”. Más allá, es conveniente saber qué es una variable, por qué se almacena en memoria, qué es la memoria, etcétera.

Grosso modo, el pseudocódigo es un lenguaje a caballo entre lo humano y lo matemático donde se intenta resolver un problema.

Imaginemos que queremos imprimir en un dispositivo (el que sea), diez veces la frase “Quiero aprender a programar”. Al margen de las sintaxis específicas de cada lenguaje, se puede decir que queremos hacer algo así:

-Iniciar programa
-Iniciar variable “Frase”
-Meter en la variable “Frase” el contenido “Quiero aprender a programar”
-Crear un bucle que imprima 10 veces el contenido de la variable “Frase”
-Salir del programa

Si lo hiciéramos en PHP (un lenguaje asequible cuya sintaxis bebe, en cierto modo, del C), quedaría así:

<?php

$frase=”Quiero aprender a programar”;

for($i=0;$i<10;$i++) {
       echo $frase.”<br />”;

?>

Lo segundo, el bloque de código, es algo relativamente fácil de elaborar cuando se tiene claro lo primero. Hay que saber lo que es un bucle, un array, un condicional, etcétera. Con estos conceptos y un cerebro “programático” se construyen aplicaciones cada vez mayores.

¿Hay que saber matemáticas? Sí. Pero no a un nivel muy alto mientras no desees entrar en el mundo de los algoritmos más complejos o, por ejemplo, los lenguajes gráficos que utilizan álgebra de forma intensiva. 

Lo bueno de orientar tu cerebro hacia la programación es que las mentes programáticas tienen, de forma demostrada, mayor capacidad a la hora de descomponer problemas grandes en subproblemas de menor entidad. Eso les convierte en personas más resolutivas. ¡En eso se basa frecuentemente la programación! Ya sea mediante la filosofía “procedural” o utilizando la “orientación a objetos”, al final casi todo se reduce en modular los problemas para hacer pequeños bloques de código que cumplen funciones cuando reciben mensajes. 

De hecho, los buenos programadores (como es el caso de mi amigo y socio @xelagc) despedazan las grandes aplicaciones -como es el caso de Moodyo– en cientos de pequeños bloques que, de una forma que podríamos definir como “temática”, incluyen métodos para realizar acciones relacionadas. Esos pequeños bloques se suelen denominar “clases” (moldes que explican cómo son los objetos que nacen de ellas) y las acciones que se incluyen en ellos son “métodos”. Puede haber una clase orientada a realizar las operaciones de gestión de usuarios en una red social: alta de usuario, baja de usuario, modificación de usuario…

Por lo tanto, al igual que ocurre en otras disciplinas informáticas -o muy vinculadas a ella- como la animación 3D, es muy importante saber descomponer la realidad en figuras “primitivas”. Esas figuras son bloques de código. Y, a menudo, estos son reutilizables con ciertas modificaciones.

¿Un punto de inicio? Por ejemplo, éste http://www.freewebs.com/jojaqui/tads.pdf

Pero hay mil en Internet. Por suerte, hoy en día los recursos para programar son casi infinitos. No nos engañemos, hay que dedicar muchas horas, aprender la terminología, qué es una CPU, la RAM, los hilos de proceso…y, ¿por qué no? Estudiar un poco de historia que es bastante bonita.

Una vez que entendemos lo básico, debemos elegir un lenguaje con el que hacer prácticas olvidándonos de las interfaces gráficas. No queremos pintar nada bonito, solo comprobar que sabemos manejar variables y funciones con soltura. Mi elección personal es el lenguaje C porque considero que, una vez se entiende éste, es fácil portar los conocimientos a otros. 

Sin profundizar demasiado en él, aunque controlándolo lo suficiente, puede ser adecuado elegir un lenguaje como PHP, Java o Python. Huid de las batallas sobre cuál es mejor. Cada uno tiene sus virtudes, sus pros y sus contras. No hay un lenguaje perfecto. Todos son mejorables y para ello trabaja la comunidad que suele estar detrás de ellos.

Facebook está construido en PHP; eBay en Java y Google suele trabajar en Python. Las tres compañías son fuertes así que, con cabeza, con ellos se puede hacer de todo. 

Después tendréis que elegir un sistema de bases de datos (donde se guardan las “cosas” que genera vuestra aplicación y que tienen que ser recuperadas más adelante). Lo mejor es comenzar con MySQL. Y en el caso de los sistemas operativos, Ubuntu es un buen inicio para adentrarse en los sistemas Linux antes de saltar a otros más orientados a entornos de servidor como puede ser CentOS (la versión “gratis” de Red Hat).

Este procedimiento sirve para todo. Ocurre igual con el diseño gráfico. Nadie es diseñador por manejar Photoshop o Illustrator. Ese es un grandísimo error. Antes hay que estudiar proporciones, colores, historia, dibujar MUCHO a mano y observar las 24 horas.

Desde mi punto de vista, y por mi experiencia en el mundo de la empresa, existen programadores y diseñadores que no son ni ingenieros ni licenciados en Bellas Artes. De la misma forma que existen grandísimos periodistas que no se licenciaron en su momento. En Silicon Valley están comenzando a buscar a mentes brillantes. Cerebros con capacidad para ser formados y que ni han pasado ni, probablemente, pasarán por las aulas de Stanford o Harvard. 

Con una actitud de aprendizaje, superación y esfuerzo continuo construyeron sus empresas Steve Jobs, Bill Gates, Mark Zuckerberg y otros tantos. Ninguno finalizó carrera alguna. ¡Y los dos primeros ni siquiera tenían Internet para aprender a cualquier hora de forma gratuita!

Finalmente, para los puristas: que nadie interprete que yo animo a nadie a dejar la universidad. Ser ingeniero es algo maravilloso y te da una capacidad increíble. Lo que yo quiero decir es que esa capacidad, sin “contenido” y actitud, no sirve de nada.

Alex Guerra’s Tumblr: Moodyo: Behind the code

Alex Guerra’s Tumblr: Moodyo: Behind the code