¿Por
qué parece tan difícil programar?
Muchas personas que
comienzan a programar lo encuentran muy difícil. Tal vez lo que ocurre es que están
tan concentrados en el lenguaje de programación que se olvidan de lo importante…
Hay mucha literatura sobre
las fases de la programación, pero a efectos prácticos, cuando te pones a hacer
tus primeros programas, necesitas ser consciente de estos cuatro pasos
fundamentales:
PASO 1) Entender bien el problema
PASO 2) Diseñar un método para resolverlo
(algoritmo)
PASO 3) Escribir el programa en un lenguaje concreto
PASO 4) Depuración y pruebas
Esta sencilla idea de los 4
pasos puede asustar. Puede parecer que tanta fase significa un proceso largo y
costoso. Tal vez por eso muchos estudiantes intentan saltarse el paso 1 y 2
para acabar antes. Pero el efecto
acaba siendo el contrario… ¿no te lo crees? sigue leyendo…
Repasa la lista de los 4
pasos y observa cómo cada paso depende del anterior.
Como cada paso depende del
anterior, los errores en los primeros se arrastran a los siguientes, y la
situación empeora:
-Si
no dedicas suficiente esfuerzo a entender bien el problema (paso 1), es
probable que el programa no haga lo que tiene que hacer, y todo esfuerzo
posterior será inútil.
-Una
vez tengas claro el problema (paso 1), si no dedicas el tiempo necesario a
buscar un buen algoritmo (paso 2), te complicarás la vida. Tal vez el programa
compile, pero no funcionará a la primera, ni a la segunda, ni a la tercera… y
entrarás en un largo proceso de depuración y pruebas. En el caso mejor, si
consigues hacerlo funcionar, habrás perdido más tiempo del que supuestamente
“ahorraste” al principio.
-Puede
que el programa acabe funcionando “a martillazos”, a base de prueba y error,
pero eso se nota… será un programa complicado, poco eficiente, y difícil de
entender y defender. Ni siquiera estarás muy seguro de que el programa funcione
con según qué datos de entrada. Lo peor es que con tanto tiempo ocupado en la
desagradable tarea de “probar y probar”, el proceso de programación te parecerá
difícil, pesado y engorroso. En resumen, odiarás programar…
¿Te sientes identificado?
Sigue leyendo
Si odias programar es porque
el problema te domina a ti. ¿Cómo puedes cambiar la situación?
Este cuadro está pensado
para ayudarte. Échale un vistazo, te puede servir para ser consciente de cómo
programas, a qué le dedicas más tiempo y cómo te organizas. Tal vez te facilite
el trabajo:
Fase
|
Objetivo
|
Herramientas útiles
|
Habilidades a Adquirir
|
Consejos
|
1) Analizar el
problema
|
Tener una idea clara de qué
hay que hacer
|
Lectura / escucha atenta.
Petición de aclaraciones si es necesario.
División del problema en un
esquema simple: entradas, proceso y resultados.
|
Lectura/escucha
comprensiva.
|
Cuando leas el enunciado
no presupongas nada.
Relájate y concéntrate en
leer y entender lo que significa exactamente.
Normalmente no basta con leer
por encima y tener una idea aproximada de lo que te piden. Lee el detalle.
Entiéndelo completamente.
Preguntas a hacerte:
¿Cuál es la entrada? ¿qué hay que sacar? ¿qué hay que hacer? ¿Cómo paso de las entradas a los
resultados?
|
2) Diseñar un método
para resolver el problema (algoritmo)
|
Tener una idea clara de cómo
va a hacer nuestro programa lo que tiene que hacer.
Es decir, obtener un método
(algoritmo) que haga lo que hay que hacer, de la forma más
sencilla y eficiente posible.
|
Pseudocódigo, diagrama de flujo.
|
Ser capaz de descubrir el
método más sencillo y eficiente posible que resuelva el problema.
Conocer las piezas del
“puzzle” con las que contamos para componer un algoritmo (variables,
condiciones, bucles,…) y saber componer una solución con ellas.
|
Tú sabes resolver
problemas, lo haces continuamente. La única diferencia cuando programas es
que tienes que dividir el método de resolución en pasos pequeños, en
instrucciones simples que pueda entender un ordenador.
Preguntas a hacerte:
¿cómo se soluciona? ¿Qué pasos hay que dar? ¿Cuál es la forma más sencilla y
eficiente?
Mejora y simplifica tu
algoritmo y te ahorrarás trabajo después.
Si no te sale “de
cabeza”, dibújalo. El diagrama de flujo y el pseudocódigo
se inventaron para ayudar al programador.
|
3) Escribir el
problema en un lenguaje de programación
|
Traducir el algoritmo a un lenguaje de programación
El programa tiene que ser
lo más sencillo y legible posible.
|
Entornos de
desarrollo, Compiladores.
Guías de estilo.
|
Conocimiento de un
lenguaje de programación,
Conocimiento de las
reglas que hacen más legible un programa.
En programación
“avanzada”, conocimiento profundo de las particularidades del lenguaje para
hacer un uso eficiente.
|
Intenta que el algoritmo
(paso 2) esté completamente claro y simplificado antes de comenzar a escribir
código.
Cuando conozcas las
instrucciones del lenguaje, este paso tiene que ser breve y limitarse a ser
una traducción de tu algoritmo. El trabajo debe centrarse más en los pasos 1
y 2.
El algoritmo es lo
importante, es “la idea que quieres expresar”. El lenguaje de programación
que uses es sólo un vehículo más de expresión de tu algoritmo, como lo son
los diagramas de flujo o el pseudocódigo.
Conoce el lenguaje:
Sintaxis, estructuras de datos, instrucciones …
Domina las instrucciones condicionales.
Estudia y aplica la guía
de estilo.
Haz tu programa agradable
de leer y entender, con un uso adecuado del estilo y de los comentarios.
Usa las estructuras y las
instrucciones más adecuadas. Normalmente la forma más sencilla y legible de
hacerlo será la mejor.
|
4) Depuración y
pruebas
|
Asegurar el buen
funcionamiento del programa
|
Herramientas y métodos de
depuración del entorno de desarrollo
|
Buena selección de juegos
de prueba.
Si se encuentran errores,
habilidad deductiva para enfocar la búsqueda hacia la causa.
|
Intenta poner a prueba tu
programa con valores normales y también con valores que creas que puedan dar
problemas.
Aprende a usar el
depurador.
Intenta como reto que en
esta fase todo funcione a la primera. Pasa el esfuerzo a la fase 1 y 2.
Importante: La depuración
y pruebas no debe de ser “una forma de programar” –por prueba y error-, sino
la forma de comprobar que va bien.
|
Que no te engañen, todo
programador diseña algoritmos:
Cuando un principiante ve a
un programador experto, piensa que no es necesario realizar los pasos 1 y 2,
porque ve a menudo cómo el programador experto se lanza a programar
directamente.
Lo que en realidad ocurre
es que el experto ha adquirido destrezas que aplica muy rápidamente y de forma
casi inconsciente. Es capaz de entender el problema y pensar en un algoritmo
que lo resuelve de forma muy rápida y sin ayuda de papel, lo que le permite
lanzarse a implementar ese algoritmo que está en su cabeza, directamente en un
programa fuente con un lenguaje de programación que domina. Este proceso es tan
veloz, que algunos programadores ni siquiera se dan cuenta del proceso y pueden
confundirte cuando te dicen que ellos “no diseñan el algoritmo”. Es como cuando
aprendes a conducir: A ellos ya no les hace falta fijarse en detalles como el
cambio de marchas o los intermitentes porque no piensan en ello, lo han
automatizado. ¿Sabes lo que hacen cuando se les presentan nuevos problemas
especialmente difíciles? Cogen papel y lápiz y se hacen un esquema.
Sobre todo al principio, es
muy importante entrenarte en las fases 1 y 2. Quizá incluso más que conocer la sintaxis
del lenguaje de programación con el que aprendas.
Las fases 1 y 2 son las que
te van a permitir programar bien en CUALQUIER LENGUAJE. Esas son las destrezas
que te permitirán ser un buen programador en cualquier circunstancia. Lo demás
está en los libros de referencia de cada lenguaje y en las normas de estilo de
cada organización. Este breve texto está orientado a que cambies el enfoque y
te fijes en lo que importa.
En cualquier asignatura de
programación, te encontrarás con bastante información sobre la sintaxis de un lenguaje
concreto (como C), por eso a veces puede parecer que la sintaxis lo es todo,
pero sólo es algo que usas en una parte del proceso de programar, al final.
No te aburras con las
pruebas
Te lo aseguro, aunque no te
lo creas, las fases 1 y 2 son las más bonitas. Si crees que programar es un
proceso aburrido de prueba y error hasta que la cosa funciona, tal vez lo que ocurre
es que pierdes demasiado tiempo arreglando lo que tenía que funcionar desde el
principio.
Si por el contrario cambias
el enfoque e intentas partir de una idea clara y detallada de lo que ha de
hacer tu programa, dedicarás un poco más de tiempo a pensar pero el proceso de
escribirlo será muy rápido, y cuando funcione la sensación será mucho más
agradable, porque no será el producto de un proceso aburrido de prueba y error
(tras numerosos disgustos tipo “esto no funciona”), sino que será el producto
de tu inteligencia y creatividad, lo que te producirá mucha más satisfacción.
Resumiendo
No intentes “ahorrar
tiempo” en los pasos 1 y 2, porque:
-Puede que ni siquiera consigas hacer lo que en realidad se te pide
-El tiempo total que dediques a programar aumentará
-El
programa que consigas será probablemente más complicado, menos eficiente, y más
difícil de leer y por lo tanto de depurar.
-Dedicarás más tiempo a la parte más desagradable (probar y depurar)
-No adquirirás las habilidades útiles para cualquier lenguaje
-Te saltarás la parte más bonita
Este texto no ha pretendido
ser teórico o formalista. Sólo intenta ayudarte a cambiar el enfoque y que te
fijes en cosas importantes. No te pierdas en la sintaxis.
Para acabar, recuerda que
muchas de las habilidades que estás adquiriendo sólo se consiguen con la
práctica.
O como dice una frase
conocida del mundillo: La única forma de
aprender a programar es programando.
Autor: Vicente Muñoz Pijuán
Fecha: Diciembre de 2007