@
Dr. LeChuck , @
abogado alcoholico
Antes de poneros a aprender nada preguntaos para qué quereis aprender eso. Programar es un medio. Una herramienta. Aprender a programar sólo por saber programar es como comprar un martillo para tenerlo colgado en la pared del garaje o metido en la caja de herramientas. Asi que lo primero que debeis preguntaros es que es lo que quereis programar. Y de ahí habrá un lenguaje mas indicado u otro. Se pueden programar muchas cosas y no todos los lenguajes valen o son buenos para todo.
No podría estar más en desacuerdo, consejos así son los que hacen echar para atrás a la inmensa mayoría de la gente que quiere aprender por curiosidad. La eficiencia o especificidad de los lenguajes es algo que a quien empieza le importa tres cojones, permitidme que haga un flashback.
Yo aprendí a programar en el instituto, así que llamadme puto. Lo cogí como asignatura variable. La mayoría de mis compañeros iban animados por pasarse un par de horas a la semana rascándose los huevos en horario lectivo, esas eran las tremendas expectativas de la clase. Dimos BASIC, el genuino, el de IF THEN GOTO, y más adelante vimos por encima Visual Basic, el auténtico, el anterior a .NET. Enseguida le cogí afición a programar putas mierdas de una calidad pésima que me hacían sentir muy orgulloso y el temario de clase se quedó muy limitado, en unos meses ya estaba trasteando la API de Windows. El culmen fue una aplicación que creé, que era una réplica exacta del inicio de sesión del messenger y que luego mandaba la contraseña encriptada secuestrando el internet explorer para que no saltara el antivirus, robé docenas de cuentas de mis hamigos de esta manera y cayeron abundantes pajas a la crema. A nivel interno la aplicación era horrible, pero lo que aprendí a programar haciendo esa idiotez no lo he aprendido más adelante en ningún otro sitio, porque todo lo que iba aprendiendo era para dar solución inmediata a problemas reales que me iban saliendo. Recuerdo que consultaba mucho una web de un tipo llamada
www.elguille.info, paso a paso iba añadiendo pequeñas funcionalidades según iba viendo que eran necesarias, así aprendí qué eran las matrices y las funciones de cadenas, cómo funcionan los controles de windows, cómo leer ficheros, etc. El desarrollo era caótico y como no podía ser de otra manera el bicho era como un aborto al que le iban saliendo espontáneamente multitud de tumores en forma de errores. Primero parcheaba sobre la marcha, hasta que la cosa no daba más de sí y evidentemente tenía que replantear las cosas de cero. Para mí, la necesidad de aprender a programar bien no nació porque me enseñaran unas reglas de estilo monolíticas sino porque cuando tienes 1000 líneas de código espagueti lineal ininteligible no te queda otra que entender para qué sirven las funciones. Cuando quise hacer que la aplicación se inyectara dentro del msn.exe real aprendí a gestionar dinámicamente la memoria, pero entonces me di cuenta de que era un canteo que el messenger aumentara 10 veces su tamaño, así aprendí a programar eficientemente y tonterías tan básicas como que no debes usar coma flotante si te basta con un entero (hasta entonces ni siquiera sabía que había vida más allá de number o string). Cuando me cansé de tener 40 variables globales gestionando datos entre módulos tuve que aprender por narices a encapsular, qué eran las clases y a usar objetos. Al final la aplicación acabó siendo una verdadera obra maestra, a la que no pasaba semana sin que le añadiera alguna tontería más, y lo seguiría haciendo si no fuera porque al final me aburrí. Con el auge de las pantallas planas tuve que prever que los usuarios pudieran tener distintas resoluciones y al final acabé abandonando porque encontraba todo el tema del diseño de la ventana anzuelo francamente aburrido.
Lo que quiero decir con esto es que lo más importante para alguien que empieza no es que lo que haga sea correcto, o formal, o lo haga bien todo desde el principio para cimentar bien los conocimientos, eso es una parida porque a eso se aprende luego, programando. Lo fundamental al principio es que cualquier tontería que hagas tenga un resultado inmediato, en la pantalla, que se pueda empezar desde cero rápidamente, sin dependencia de librerías ni compiladores ni entornos sofisticados. El 90% de lo que se puede llamar "habilidad" para programar debe salir de uno mismo aprendiendo sobre la marcha y no leyendo un tostón incommensurable por la internec o, como en mis tiempos de la facultad, con apuntes mastodónticos de Pascal o C++ que a la práctica no sirven para una puta mierda fuera de círculos académicos. Evidentemente cuando yo ya "sabía", o me creía que sabía, programar, me di una hostia en toda la cara porque tuve que aprender algoritmia y orientación a objetos seria desde cero para poder llegar a alguna parte y tuve la gran suerte de tener un profesor, en primero, que era un crack enseñando a los alumnos a pensar en cómo atacar la implementación de algoritmos, y todo lo que aprendí luego fue a partir de ahí. Lo que es código aprendí poco, y absolutamente todo lo demás que hice en la carrera no me sirvió absolutamente para nada. Aprendí mucho más por mi cuenta con el ladrón de contraseñas de messenger.