Friday, September 20, 2013

Para aprender a programar


Con relativa frecuencia algunos lectores me preguntan qué pasos deben seguir para aprender a programar una computadora. Muchos de ellos están indecisos sobre qué lenguaje es el adecuado, C++, por ejemplo, o bien, si deben usar Python. Me piden información sobre algún lenguaje de programación en particular y además, en muchas ocasiones casi se me obliga a que les dé títulos de libros que puedan descargar de algún sitio web.

Responder a las inquietudes de quienes me han escrito me hace pensar que hay más interés en este tema de la programación del que al menos yo esperaría. Digamos que hoy en día no es mala idea aprender a programar, como tampoco es mala idea aprender algo de mecánica, por si se descompone el coche. Pero el mundo moderno nos ha hecho en algún sentido "analfabetas funcionales", y evidentemente podemos ir por la vida sin necesidad de crear código, aunque no estaría de más saber un poco cómo programar algunas acciones que los programas normales no hacen por uno.

Mi elección de lenguaje a desarrollar se inclinaría por Java, C o Pascal. Olvidemos el Visual Basic que -aunque ha mejorado considerablemente con el tiempo- no es estándar con nadie más. Pero abundemos un poco en las razones: me es claro que se necesita un lenguaje que contenga cierta expresividad, es decir, que con él podamos decir cosas en programación. Para ello requerimos que de entrada, tenga una serie de estructuras de datos. Lenguajes como el Basic estándar sólo tienen arreglos como su estructura de datos más usada, pero no contempla estructuras de datos dinámicas, asunto que es de primordial importancia en el mundo moderno del cómputo.

Hoy en día tenemos mucha memoria en nuestras máquinas y más aún en nuestros discos duros, pero evidentemente los programas deben correr en una cantidad razonable de memoria. Por ejemplo, debido a que usamos sistemas operativos multitareas e incluso multiusuarios, no podemos darnos el lujo de apartar toda la memoria disponible para nuestra aplicación. De hecho, muchos compiladores podrían negarse a crear, por ejemplo, un arreglo estático que sea muy grande o peor aún, me marque un error irrecuperable del sistema por quererme "apañar" toda la memoria disponible. Actualmente tenemos que pensar en usar estructuras dinámicas, que vayan creciendo de acuerdo a las necesidades de nuestro sistema. ¿Requerimos más memoria? entonces el sistema nos la va a dar, pero no a priori nos vamos a encargar de apartarla para "no quedarnos cortos". Esto último es sin duda absurdo en la programación moderna. Un ejemplo de este acceso a memorias de manera dinámica puede verse en programas como Word o mejor aún, Excel. Consideren en este último la cantidad de renglones y columnas que pueden tener. Probablemente su computadora no tenga tanta memoria en RAM y sin embargo funciona, ¿no?

Desde luego que cuando hablamos de elegir un lenguaje para programar, tenemos que pensar en qué aplicación queremos desarrollar. No suena razonable, por ejemplo, tratar de usar C si queremos hacer programas que mejor podrían resolverse con técnicas de la inteligencia artificial. En este caso es mejor pensar en usar Prolog, por ejemplo.

Información sobre el lenguaje que se quiera aprender, hay por toneladas en la red literalmente. Basta con navegar un rato y buscar sitios en donde hay clases en línea, libros en PDF, herramientas de programación -muchas veces gratuitas- para aprender cualquier lenguaje en boga.  Pero más importante aún, creo yo, es la motivación para aprender a programar en un lenguaje determinado. Probablemente para ello la mejor idea sea la de primero, hacerse de un proyecto, algo que queramos programar y que no encontramos su equivalente en la red o bien, no hay ningún programa que satisfaga nuestras expectativas.

Es curioso pero por años he leído cómo importantes programadores empezaron así sus carreras como desarrolladores: tenían una idea a programar y no sabían cómo llevarla a cabo. De verdad, no hay mejor manera que motivarse a la programación cuando se quiere ver plasmado en código una idea para una aplicación que haga algo interesante. Y es aquí donde nacen los verdaderos programadores, aquellos que tienen la curiosidad suficiente para tratar de desarrollar en un lenguaje de programación una idea, aunque no sepan siquiera si se puede realizar o no. Eventualmente con Internet a la mano, irán encontrando material y llegarán a caminar por donde está la información que necesitan.

Y falta algo más: constancia. La programación no se aprende de un momento a otro. Se requiere de práctica, de disciplina, y poco a poco las ideas se irán acomodando en nuestros cerebros. Eventualmente será como aprender a "hablar" en un nuevo idioma, válga la analogía. Y con el tiempo se verá que todo el trabajo y esfuerzo invertido da buenos frutos. Por eso, aparte de lo que pueda haber dicho antes, la esencia de todo esto de programar computadoras es involucrarse. Si no se logra eso, mejor cambiar de actividad.

3 comments:

MOYO said...

Excelente articulo!

Constancia, Disciplina y mucha perseverancia.


"iKruz

Yax Che said...

Excelente artículo.... solo que en mi opinión, sugiero primero aprender un script language, de esos que te permiten hacer tareas "automáticamente", como Archivos de proceso por lotes.

Siguiendo la analogía del carro, digamos que es mucho más útil el saber cambiar una llanta, o programar el radio, que por ejemplo aprender a cambiar los anillos de los pistones.

Hoy en día es tanto lo que las maquinas de turing nos ayudan a hacer, que practicamente estamos ante una basta extensión de donde agarrar.

Y si, la mayor motivación nace de querer tener las cosas hechas.

El Hagalo Usted Mismo nunca tuvo mejor expresión que en la programación.

Los costos la mayoría de las veces son bajos; especialmente por que casi siempre hay alternativas gratuitas. (Y hablo de los entornos y lenguajes de programación)

Excelente blog :).

Fabian Huerta said...

Es una tontería lo que hace la UNAM tratando de enseñar lenguaje C en sus cursos de programación. Los lenguajes de programación como C, son de bajo nivel y de propósito general y esto los hace más complejos. Yo he dado clases de programación por unos 5 años y me he percatado que es mucho más sencillo iniciarlos en un lenguaje de alto nivel y posteriormente, si ellos lo deciden, se iniciaran en un lenguaje más complejo.