Aprendiendo a programar

Hola,

Hoy toca reflexionar un poco como a mí me gusta, sin creerme un gurú de nada, para hablar de un tema bastante común que es el de aprender a programar (y en general) y daré mi punto de vista. Probablemente no vaya de acuerdo con la forma de trabajar de la gente en general porque me considero un tipo bastante rarito a la hora de enfocar mi aprendizaje y mi forma de trabajar, pero intentaré dar argumentos para que, aunque no estéis de acuerdo, tengáis la oportunidad de contrastarlos con vuestra forma de pensar. Os animo a comentar con vuestra opinión y formar un pequeño debate o un compendio de puntos de vista.

Bien. Comenzaré hablando de mi (corta) experiencia personal y de mi forma de enfocar las cosas y terminaré mencionando las cosas que a mí me parecen importantes a la hora de programar o que me las han pedido y me han dejado loco, y cómo he hecho (o haría) yo para conseguirlas.

En general no he exprimido ningún lenguaje que conozca al máximo, algunos ni siquiera mínimamente (sólo los he usado para hacer algún script corto de unas 20-30 líneas), pero he conseguido el control suficiente para poder jugar un poco. Llegados a un punto, es indiferente usar un lenguaje u otro.

De todas formas, (hoy, ahora) tengo muchas limitaciones en ciertas filosofías (programación estrictamente funcional, por ejemplo) porque no las he interiorizado suficiente y me cuesta bastante programar con un código válido para producción. Esto último ocurre por dos razones: no tengo un conocimiento muy profundo de algoritmia y no soy un experto con amplia experiencia, por lo que mi código generalmente no explota las herramientas al máximo. Tampoco me importa porque no me dedico a eso generalmente. Mi trabajo (y mi placer) es hacer cosas que funcionen y sean fáciles de leer e interpretar (cosa de la que el código de producción a veces carece un poco más) y cuando tengo que llegar a nivel de producción necesito profundizar mucho más tener más cuidado. A veces para que algo sea óptimo hay que exprimir el lenguaje o la herramienta hasta un nivel que se vuelve complicado de leer para gente no tan versada.

Sabiendo esto, casi se puede entrever cómo enfoco mi manera de aprender y utilizar los lenguajes de programación. Mi filosofía sigue los siguientes puntos:

  1. La sintaxis no importa. No pierdas el tiempo estudiándotela.
  2. Entender la filosofía del lenguaje lo es todo.
  3. En el mismo tipo de lenguaje los conceptos generales son parecidos siempre e incluso son extrapolables a otros campos.
  4. Si puedes leer código y documentación (internet) tienes todas las herramientas que necesitas.
  5. Haz bocetos y pruebas. Todo el rato.

Voy punto a punto:

El primer punto se refiere a que aprender la sintaxis concreta a modo de estudio es perder el tiempo porque siempre puede copiarse y se acaba aprendiendo sola mientras se va programando. Dedicarle tiempo es dedicarlo en vano. Siempre he pensado que estudiar cosas para aprenderlas de memoria es tiempo desperdiciado, porque esas cosas se olvidan. No quiero decir que no sea una cosa obligatoria de cumplir, porque es la única que lo es en realidad. Sólo quiero decir que una vez que puedes buscar en internet “Javascript object declaration” o “Python list comprehension” y copiar la forma en un minuto, pero es mucho más complejo buscar en internet “C++ pointers explanation” o “Functional programming for dummies”.

A parte, más importante que la propia sintaxis, en mi opinión, es el estilo. Programar bonito y claro es extremadamente importante para que podamos leer y enseñar nuestros programas sin problemas. Esto parece que choca un poco con el punto 5, pero que los bocetos no estén terminados no significa que no tengan que tener un trazo bonito y expresivo. 😉

El segundo punto me parece clave. Si conoces las razones por las que se creó un lenguaje, su contexto, puedes llegar a pensar como él. En cuanto lo haces todo se vuelve más sencillo. Si no lo consigues es muy complicado.

Recuerdo la primera vez que tuve que hacer algo en Bash en la universidad, yo lo enfocaba como C, que era lo que conocía, y trataba de recorrer archivos y hacer búsquedas usando for e if en lugar de hacer otro tipo de filtrados más propios de Bash (como hacer greps y cosas).

Una vez conoces cómo funciona un lenguaje te ahorras este tipo de cosas y enfocas los problemas mejor. Incluso te ayuda a elegir qué lenguaje usar para qué tarea, cosa que también ayuda bastante.

Fusionando este punto con el primero, es muy importante entender cómo funcionan las cosas, no sólo la filosofía del lenguaje si no también sus capacidades. Con esto me refiero también al tipado que tenga, si hace uso de referencias, punteros y esas cosas. Una vez sabido esto, tanto lo uno como lo otro, la sintaxis acabará entrando sola puesto que es un reflejo de eso. El resto son paréntesis y corchetes que no van a ninguna parte.

El punto 3 es muy simple. C y Perl son lenguajes de programación imperativa, son superdiferentes pero saber C ayuda a aprender Perl porque los conceptos principales son los mismos. Un bucle es “igual” en Perl que en C. Además, por ejemplo, al aprender Erlang tendremos que aprender qué es una función recursiva, cosa que nos podrá ayudar a enfocar problemas en C, aunque un lenguaje sea funcional y el otro imperativo. Con esto último quiero decir que existen metodologías y conceptos que no son dependientes del lenguaje, si no que son genéricos. Son formas de pensar, que incluso nos ayudarán en otros ámbitos de la vida.

Los puntos más importante, el cuarto y el quinto. ¿Si sólo sé la filosofía del lenguaje cómo programo? Muy sencillo, si sabes leer código tienes todo hecho. Para leer código tienes que conocer la filosofía del lenguaje y cómo se utiliza, la sintaxis no es necesaria (excepto para cosas concretas, que puedes buscar en google o en unos apuntes rápidos que te hagas) porque podrás verla en el código que lees. Para empezar a programar, prepárate un entorno de pruebas y haz bocetos de programas mientras te lees un libro del tema o miras tutoriales con ejemplos. Si no sabes hacer algo, lee la documentación, si sigues sin saber, busca en una página tipo GitHub o así un programa que funcione de forma similar y lee cómo lo hace él. Y copia. No inventes la rueda pero tampoco copies sin mirar. Entiende lo que estás copiando y haz pruebas encima.

Haz miles de bocetos y pruebas. No tengas miedo a romper todo, las pruebas son para eso. Tampoco tengas miedo a tener que reescribir.

Es más sencillo, en general, profundizar en el conocimiento y comprender porqués que perderte memorizando cómo se hacen las cosas paso a paso. Si has aprendido por qué se hace así, la vez que tengas que hacerlo el cómo se hace aparecerá sólo.

Eso es todo. Creo que queda claro lo que pienso y cómo enfoco mi proceso de aprendizaje. Espero vuestras opiniones.

Saludos.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s