Fundamentos de programación - Capítulo 1
Es común que los aspirantes a programadores empiecen en su recorrido autodidacta consultando sobre qué lenguajes de programación vale la pena estudiar. Es algo muy válido, y en la red hay respuestas de todo tipo. Pero lo que muchos no saben es que esa es una elección muy temprana y se lanzan sin ningún tipo de conocimiento base a aprender lenguajes populares como C Sharp, Python, Java, etc.
Aunque haciendo esto si es posible aprender y llegar a un nivel avanzado, es el camino más arduo, con una curva de aprendizaje demasiado empinada. Sea cual sea la aspiración del aprendiz (ser programador de páginas web, de sistemas de gestión de información, vídeo juegos, virus informáticos, etc) es esencial empezar por una base de conocimientos comunes para todos los lenguajes llamada Fundamentos de programación. Así que antes de elegir un lenguaje de programación o plataforma de desarrollo, es realmente necesario conocer dichos fundamentos.
Una de las primeras cosas que vamos a descubrir estudiando los fundamentos de la programación es si realmente es una actividad a la que nos queremos dedicar de lleno. Programar (sea cual sea el lenguaje y si aspiramos a crear herramientas complejas) no es fácil y requiere de muchos conocimientos, habilidades y obviamente mucha práctica.
La práctica es fundamental para cualquier programador, sin embargo, lo que intento transmitir y enseñar en estas páginas, es que la práctica no debe ser lo primero. La base teórica debe ser, por encima de todo, el primer paso en la formación. Con unas sólidas bases teóricas ya podremos ir de lleno a la práctica y esperar muy buenos resultados y logros.
¿Qué es programar?
La programación parte de un problema o necesidad, cuya solución se puede obtener a través de un sistema computarizado. En el mundo actual, las principales consumidoras de programadores son las empresas.
El usuario final (la persona o empresa que nos contrata o paga para desarrollar un programa) desea obtener a través de un sistema informático una solución. ¿Debemos los programadores darle esa solución? La respuesta es no. Desde el punto de vista de los programadores no nos interesa la solución, lo único que nos debe interesar es el método para hallar la solución. No desarrollamos soluciones, sino sistemas capaces de dar al usuario final la solución que él desea.
Veamos un ejemplo muy simple y didáctico pero que ilustra esto claramente:
Juanito sale todas las mañanas a recolectar manzanas en el campo, luego debe volver a casa y dejar unas cuantas manzanas para su mamá. Ella le ha animado a que el día que recoja muchas manzanas venda algunas en el pueblo. Le ha dicho que el día que le queden más de 10 manzanas luego de que ella coja las que desea, vaya y las venda. Pero Juanito tiene un problema: no sabe ni sumar, ni restar y no se atreve a contárselo a su mamá. Sin embargo, Juanito tiene un celular, y nos conoce, así que nos ha pedido que le hagamos una aplicación para él saber cuando le quedan más de 10 manzanas e ir a venderlas. (Puede parecer un ejemplo muy raro y exagerado, pero no te desanimes, sigue leyendo).
Así que la situación de Juantito es la siguiente: hoy ha recogido 21 manzanas, en casa su mamá se ha quedado con 7. ¿Le han quedado más de 10?
Para resolver este sencillo problema lo primero será definir algunas variables. Las variables no son más que etiquetas creadas por nosotros mismos cuyo fin es almacenar algún dato. Así que para este problema necesitamos las siguientes variables:
1. Manzanas que recoge Juantito.
2. Manzanas que toma su mamá.
3. Manzanas que le quedan.
Aquí tenemos un muy pequeño inconveniente: los nombres de las variables son muy largos y teniendo en cuenta que las usaremos para crear una ecuación, sería una buena idea abreviarlas así:
1. MR (Manzanas recogidas)
2. MM (Manzanas de mamá)
3. MQ (Manzanas que quedan)
Ahora, para saber cuantas manzanas le quedan a Juanito, debemos construir una sencilla ecuación:
MQ = MR - MM
Reemplazando los valores tendríamos:
MQ = 21 - 7
MQ = 14
Ahora Juantito sabe que le han quedado 14 manzanas, ¿debe o no debe salir a venderlas? Recordemos que él sólo quiere ir a venderlas si son más de 10, así que tendríamos lo siguiente:
Si MQ > 10 entonces:
Debe ir a venderlas
Sino:
No debe ir a venderlas
Reemplazamos:
Si 14 > 10 entonces:
Debe ir a venderlas
Con la situación problema plenamente analizada, podemos crear para Juantito una aplicación en la cual él ingrese el número de manzanas recogidas, el número de manzanas que toma su mamá, y está aplicación le informará si la cantidad restante es mayor que 10 para que vaya a venderlas.
La aplicación que hemos diseñado a Juanito es perfecta, ya que le dará la solución que él necesita independientemente del número de manzanas que recoja y del número de manzanas que tome su mamá. Así que si al día siguiente el recoge 13 manzanas y su mamá se queda con 6, la aplicación que le hemos diseñado le indicará que solo le quedaron 7 y que al ser menos de 10 no debe ir a venderlas.
Juanito ha obtenido la solución a su problema. ¿Pero qué fue lo que hizo el programador? ¿Desarrolló una solución? No. Lo que ha desarrollado y creado es un método para hallar una solución. Para el programador es indiferente si Juanito obtiene información sobre si debe o no debe ir a vender sus manzanas. Al programador no le interesa si un día le quedan 11 manzanas o 200 manzanas, solo le interesa que Juanito tenga la solución a su problema.
Pero mucho cuidado. El hecho de que como programadores no nos interese la solución en sí, no significa que no debamos tenerla en cuenta. Durante el desarrollo de un programa debemos verificar muy exhaustivamente que la solución o resultado que esté arrojando el programa sea correcto. Por ejemplo, si Juanito ingresa en su aplicación que recoge 23 manzanas, que su mamá se quedó solo con 3, pero aún así está le informa que no debe ir a venderlas, entonces el programador debe revisar muy detalladamente lo que hizo. Esto se conoce como "depurar el código". (En este ejemplo, lo más probable es que exista un error en la ecuación, como por ejemplo invertir el orden de las variables, es decir, que estemos restando MM - MR, en lugar de MR - MM. Así como este, en un código real y complejo, se pueden encontrar errores humanos de todo tipo).
En conclusión por esta entrega, lo que debemos tener muy claro es que nuestro trabajo como programadores es diseñar métodos para obtener una solución efectiva (el método para hallar la solución, no la solución).

Deja un comentario: