[C con Clase] Estatuto FOR

Salvador Pozo salvador en conclase.net
Lun Ago 17 08:51:52 CEST 2009


El pasado 2009-08-16 16:42:29, David escribió:
 
D> Sandra,
D> Hola
D> con mi mejor intencion, no creo que puedas aprender a programar bien de solo
D> ejercicios.
D> vas a aprender a dominar el lenguaje y eso dista mucho de ser buen
D> programador.

Hola, David:

Sin afán de polemizar, voy a responder. :-)

Hasta aquí, estoy de acuerdo contigo, aunque con matices.

Lo cierto es que la mejor manera de hacer algo (desde montar en bicicleta hasta física cuántica) es haciendo ejercicios, o dicho de otro modo, con la práctica. La teoría está muy bien, puede responder a muchas preguntas y ahorrar muchas horas de estrujarse la cabeza, pero aunque es imprescindible, por si misma no basta. Y mucho menos con actividades evidentemente prácticas, como la programación o... montar en bicicleta.

También ayuda algo de "ingeniería inversa", lo que siempre hemos llamado "análisis", que es ver como lo hacen otras personas. Eso puede ayudar (con la programación y con la física cuántica), aunque en ocasiones puede ser una pérdida de tiempo (como montar en bicicleta o aprender a jugar al Mus). En programación puede ser útil ver programas hechos por otros, siempre que esos otros sean buenos programadores, claro.

D> para ser un buen programador hay que saber de algoritmos, sistemas
D> operativos (al menos para el cual vas a programar), del lenguaje en si,
D> estructuras de datos y hasta algo de matematica es muy recomendable.

Totalmente de acuerdo. Pero también es cierto que casi cualquier curso de programación, sea del lenguaje que sea, explicará algo de esas disciplinas. Los algoritmos son muy importantes, así como las estructuras de datos. El sistema operativo lo será dependiendo de que tipo de programas desarrolles. Las matemáticas son algo que casi se da por sabido, aunque no tiene por qué ser así en los que acuden a sitios como nuestra página.

De hecho, algo curioso que pasa con los programadores (al menos con los analistas) es que están obligados a dominar, al menos hasta cierto nivel, las disciplinas para las que desarrollan sus programas.

Me explico: 

Un programador al que encargan un programa de nóminas debe ser capaz de comprender y hacer el trabajo que tiene que programar. O sea, que al menos mientras trabaje en el programa, debe ser capaz de calcular las nóminas de una empresa. Pero debe hacerlo mejor que el operario que lo hace antes de informatizar su trabajo, ya que debe ser capaz de anticiparse a cualquier variación futura, ha de ser capaz de prever qué parámetros cambiarán con el tiempo, qué procesos se pueden complicar o simplificar, y que valores añadidos se pueden extraer de tener esa tarea automatizada.

Es decir, no basta con que sepa resolver el problema que representa calcular las nóminas para una empresa concreta en un mes concreto, sino que debe ser capaz de "metaresolver" el problema, es decir, resolverlo para todas las posibles configuraciones futuras de esa empresa y para cualquier mes.

Esto significa que, a lo largo de su carrera, un programador necesitará aprender a resolver multitud de problemas, dominar muchas pequeños cotos de muchas disciplinas diferentes, e inventar muchas formas creativas de evitar complicaciones.

A fin de cuentas, un ordenador es un trasto tonto, y no hará nada que tu no sepas hacer antes.

Eso hace que, probablemente, existan muchos tipos de programadores. No puedes buscar un programador para diseñar los programas que ponen un satélite en órbita en el mismo sitio en el que buscas un programador de videojuegos o de gestión de nóminas. Y es lógico, casi nadie tiene esa capacidad para dominar con la suficiente soltura tantas disciplinas.

Un curso de programación que no explique esas cosas no pasa de ser una referencia del lenguaje, algo muy útil cuando ya dominas la programación y algún lenguaje diferente.

Asumimos (al menos yo lo hago), que los que acuden a esta lista de correo y/o a la página de C con Clase son personas inquietas que quieren aprender a programar, más o menos de forma autodidacta, y no personas que pretenden presentarse a exámenes finales de ingeniería de sistemas. Desde luego, te aseguro que ese no es el objetivo de este proyecto.

La realidad es que muchos estudiantes de ingeniería acuden a la página y a la lista, y me alegra mucho que así sea. Y supongo que es porque explicamos algo más que la sintaxis del lenguaje C++.

Al final siempre termino enrollándome, siento la charla. :-)

Hasta pronto.

-- 
Salvador Pozo (Administrador)
mailto:salvador en conclase.net


Más información sobre la lista de distribución Cconclase