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.