martes, 3 de marzo de 2015

Lógica de Programación (1) : Introducción a la programación

¿Qué es programar?
Programar puede sonar como una actividad reservada a los genios matemáticos o a gente con un coeficiente intelectual muy elevado, pero eso no es cierto en absoluto. Programar es, en pocas palabras, el proceso que seguimos para resolver un problema usando una computadora. Para lograr esto necesitamos hacer básicamente 3 cosas: analizar y entender bien a fondo el problema que queremos resolver, definir bien cuáles son los requerimientos del problema (entradas, salidas, procesos, etc.) y finalmente diseñar una solución para el problema.

Pareciera que es complejo pero la verdad es que seguimos ese proceso todos los días cuando resolvemos los problemas más cotidianos, aunque no siempre somos conscientes de ello. Desde decidir si nos levantamos de la cama o no, preparar la comida del día o hasta elaborar ese complejo reporte sobre la Segunda Guerra Mundial que nadie nos pidió pero que hacemos porque somos super ñoños (no soy el único que hace eso, ¿o si?), todas nuestras actividades diarias siguen más o menos el mismo proceso.

Escribir un programa de computadora requiere de ciertos conocimientos y habilidades técnicas, pero en esencia cualquier persona que se proponga aprender a programar una computadora puede lograrlo. 

Ahora bien, es cierto que no hay una receta mágica que garantice que cualquier persona va a aprender a programar, pero sí podemos señalar algunos aspectos a tener en mente cuando se emprende esta tarea.



1) Las computadoras son útiles, pero también son bastante tontitas. No cabe duda que una computadora es un dispositivo fantásticamente útil, pero esa utilidad depende en gran medida de que sepamos cómo usarla y, aún más, cómo programarla para que haga lo que queremos. En efecto, detrás de la "magia" de las computadoras están los programadores de software que logran crear programas que hacen que las computadoras hagan lo que ellos (y los usuarios, por supuesto) les pidan que hagan. Y es que una computadora puede ser rápida, pero es bastante tonta. No sabe pensar ni decidir por sí misma (aunque los escritores de Terminator nos quieran hacer creer lo contrario). Una computadora necesita de un programador que le diga qué, cómo y cuándo hacer algo.



2) Las computadoras no entienden el español. Ni el inglés, ni el japonés ni ningún otro de esos lenguajes humanos tan complicados. Esos aparatos fueron concebidos para pensar y comunicarse empleando un lenguaje bastante simplón (o extremadamente complejo, depende de cómo se le mire): el lenguaje binario. O sea, la computadora sólo entiende en términos de 0 y 1. ¿Esa carta de amor que escribiste a tu novio/a ayer? para la computadora son sólo ceros y unos (¡y tú que derrochabas inspiración al escribirla!). ¿Esa canción de Lady Gaga que tanto te gusta? otra ves ceros y unos, nada de ritmos sexosos ni letras incendiarias. ¿Y qué tal esa tierna foto que le tomaste a tu bebé mientras esbozaba su primera sonrisita? spoiler: también son sólo ceros y unos. Pero si la computadora no entiende nuestro idioma, ¿cómo le decimos qué es lo que tiene que hacer? Tenemos dos opciones: o aprendemos a comunicarnos en binario o buscamos un modo de que la computadora entienda nuestro lenguaje (o algo muy parecido a ello). Es ahi donde entran los lenguajes de programación y sus intérpretes, pero ya llegaremos a hablar más a fondo de ello.


Esa bonita foto que tomaste, para la computadora sólo es un montón de código






3) Programar es un proceso creativo. No se trata solamente de aprenderse de memoria la edición más reciente de ese libro que enseña ese lenguaje de programación que está de moda. Tampoco se trata únicamente de saber repetir a la perfección todos los tutoriales de programación que nos encontramos en YouTube. Se trata de saber incorporar todo eso que sabemos para diseñar programas que sirvan, que resuelvan un problema, que sean visualmente atractivos y que sean fáciles de usar. Se trata de diseñar la mejor solución y no sólo una solución. Un buen chef conoce a la perfección los mejores ingredientes que puede usar pero su arte radica en saberlos combinar para lograr platillos exquisitos. Un músico no sólo sabe cómo se toca un instrumento, sino que también tiene la habilidad de elegir la mejor nota para que una canción sea esplendorosa. Un programador conoce cómo diseñar un programa que no sólo sea útil, sino que sea indispensable. Y dado que la creatividad requiere de imaginación, tiene sentido entonces que nos dediquemos a ejercitar ese "músculo" que todos tenemos. ¿Cómo? Acá en WikiHow tienen algunos consejos interesantes que les pueden servir.



Y entonces, ¿cómo se hace un programa?

Ya dijimos que programar es un proceso que requiere de creatividad, pero eso no quiere decir que no debamos seguir cierto orden lógico al momento de hacerlo. Dependiendo de la complejidad del problema, los pasos que normalmente se siguen para desarrollar un programa son:

1) Analizar el problema. Es bien importante que entendamos bien a fondo ese problema que estamos tratando de resolver para poder llegar a una solución útil. Si necesito crear un programa que le permita a una empresa calcular la nómina de sus empleados, necesito primero comprender cómo calcula esa nómina la empresa. Hay que saber cuáles son los conceptos por los que le pagan a los empleados, las deducciones que se les hacen, cómo descuentan las faltas, cómo calculan cuánto pagar a los empleados por las horas extras que trabajaron, si se paga por semana, catorcena, quincena o mes, si se paga por honorarios, si hay descuentos o pagos considerados extraordinarios... en fin, necesitamos conocer muy a fondo la forma en que esa empresa lleva a cabo sus procesos de nómina. De igual modo, parte de este análisis es también el hecho de dividir el problema en "sub-problemas" menos complejos (como calcular primero las horas a pagar, luego calcular el monto bruto, luego calcular los descuentos, unir los resultados y finalmente imprimir un recibo). En pocas palabras, hay que conocer eso a lo que en este medio se le conoce como la "lógica de negocio".


2) Diseñar el algoritmo. O, en otras palabras menos técnicas, escribir la serie de pasos que tenemos que seguir para resolver el problema. Esto no implica escribir el programa, sino sólo escribir la secuencia de actividades que nos van a permitir resolver el problema en cuestión. Eso implica entre otras cosas, definir qué datos se requieren para resolver el problema, escribir fórmulas, diseñar la secuencia de uso del programa, definir los distintos escenarios que se pueden presentar al resolver el problema, etc. Aprender a diseñar algoritmos efectivos será el objetivo central de este curso.



3) Codificar el algoritmo. Ya que tenemos bien definido el proceso que se tiene que seguir para resolver el problema, es hora de indicarle a la computadora qué es lo que tiene que hacer. En otras palabras, hay que traducir nuestras instrucciones de modo que la computadora las comprenda y las ejecute. Aquí es donde hacemos uso de toda nuestra pericia técnica, nuestro conocimiento de lenguajes de programación, nuestra capacidad de razonamiento y de todas las herramientas que existen para escribir programas. Desde editores de código, compiladores, sistemas de bases de datos, programas de diseño y toda herramienta que sea necesaria para lograr nuestro objetivo. 



4) Poner a prueba el programa. Aquí es donde se revela de qué estamos hechos como programadores. No sólo porque nuestro trabajo finalmente será probado por los usuarios finales y eso dará pie al surgimiento de errores (comunmente llamados "bugs") y ajustes al código, sino porque sabremos qué tanta paciencia tenemos para soportar los cambios de último minuto, los cambios de parecer en los requerimientos de los usuarios, los errores de uso, etc. En esta etapa los códigos son depurados para ajustar la nueva aplicación a los requerimientos iniciales hasta que queda lista su versión definitiva.



5) Depurar y dar mantenimiento al programa. Una vez que nuestra aplicación ya es puesta en uso definitivo (o, como también se le dice en el medio, cuando es "movida a producción"), viene una etapa de depuración en la que vamos actualizando y mejorando el programa cada vez que sea necesario, de modo que podamos ir dando nuevas y mejoradas funcionalidades, así como ajustar mejor la aplicación a los requerimientos de los usuarios finales. También puede que surjan nuevos "bugs" que no se detectaron en las etapas de prueba previas, pero eso es perfectamente normal.



6) Documentación. Este es un mal necesario. Aburrido, pero muy importante. De hecho, no es precisamente el último paso de nuestro proceso de desarrollo, sino que, en teoría, debería ser una práctica constante a lo largo de todas las etapas. Documentar nuestro programa es esencial no solo para que los usuarios tengan un manual de referencia de nuestro programa, sino también para permitir que otros programadores que trabajen en nuestra aplicación (o aún nosotros mismos, cuando regresamos a ella después de algún tiempo de haberla hecho) tengan una mejor comprensión de nuestro trabajo, de por qué pusimos tal o cual variable, de qué hace un método determinado, de dónde estamos sacando información para mostrar en la pantalla, etc.


Programar requiere varias actividades previas, como el análisis del problema y la definición del algoritmo




Algoritmo

Dejemos de lado los tecnicismos y digamos que un algoritmo es simplemente el conjunto de pasos que tenemos que seguir para resolver un problema. Puede que el término nos suene bastante técnico y confuso, pero la verdad es que usamos algoritmos todo el tiempo: el instructivo que seguimos para armar el nuevo librero para la sala, es un algoritmo; la receta de cocina que seguimos para preparar el delicioso pastel de elote de la abuelita, es un algoritmo; esos tutoriales en YouTube para pintarse las uñas, también son algoritmos. Los algoritmos de computadora no son diferentes: son listas de pasos a seguir para que la máquina realice alguna tarea, y deben ser muy específicos para que la computadora entienda bien lo que tiene que hacer (¿recuerdan que son bastante tontitas?). En general, cualquier algoritmo debe cumplir tres requisitos:
  1. Debe ser preciso, es decir, nos debe indicar el orden de realización de cada paso.
  2. Debe ser definido, de modo que se obtenga el mismo resultado cada vez que se ejecute.
  3. Debe ser finito, o sea, debe tener un fin, un número determinado de pasos.

Una receta de cocina es el mejor ejemplo de algoritmo que cumple con los tres requisitos: es preciso, definido y finito



Ya entiendo. Pero entonces ¿cómo se escribe un algoritmo para computadora?



Bueno, en realidad no hay gran ciencia detrás de ello. Lo importante es describir a detalle el proceso a seguir. Sin embargo, hay dos herramientas que los profesionales usan para escribir algoritmos: los diagramas (ya sean de flujo o UML) y el pseudocódigo.



Tanto los diagramas de flujo como los diversos diagramas UML (Unified Modeling Language - Lenguaje Unificado de Modelado) son una representación gráfica de un algoritmo. Para diseñarlos, se emplean símbolos estándar como círculos, cuadrados, rombos, trapecios, etc., cada uno de los cuales tiene una función y significado particular. En este curso no nos vamos a ocupar de ninguno de ambos tipos de diagramas. El primero por ser ya anticuado y casi estar en desuso y el segundo por que requiere todo un curso aparte para conocerlo a fondo y aprovechar su potencial.



El pseudocódigo, por otro lado, es una herramienta de programación en la que las instrucciones se escriben en palabras similares al inglés o al español, que facilitan tanto la lectura como la escritura de programas.


Tenemos, por ejemplo, el siguiente proceso simplón para calcular el pago de la nómina de un empleado:

"Calcular Nómina"
1. Solicitar que nos proporcionen la cantidad de horas trabajadas, el pago por hora y la tasa de impuestos a descontar.
2. Calcular el monto bruto a pagar multiplicando la cantidad de horas trabajadas por el pago por hora.
3. Calcular el monto a descontar por concepto de impuestos.
4. Calcular el pago neto, restando los impuestos calculados en el paso anterior del monto bruto a pagar.
5. Mostrar al usuario el monto del pago bruto, la cantidad descontada por impuestos y el monto del pago neto. 

Un ejemplo de pseudocódigo para definir este proceso podría ser como sigue:


Algoritmo Calcular_Nomina

1. Leer horas_trabajadas, tarifa_por_hora, tasa_impuesto

2. Calcular PagoBruto = horas_trabajadas * tarifa_por_hora

3. Calcular Impuestos = PagoBruto * tasa_impuesto

4. Calcular PagoNeto = PagoBruto - Impuestos
5. Visualizar PagoBruto, Impuestos, PagoNeto


Como podemos ver, la escritura de un pseudocódigo no se apega a ningún lenguaje de programación en particular, sino que emplea un lenguaje más o menos familiar para poder definir la estructura del algoritmo. Para escribir el pseudocódigo no hay reglas, más bien convenciones que en realidad en muchas ocasiones las define el propio programador. En el ejemplo, vemos que algunas palabras están remarcadas en negrita. Esas palabras se corresponderían con lo que en los lenguajes de programación se llaman Palabras Reservadas, o sea, palabras que representan una instrucción particular dentro de ese lenguaje. Luego podemos ver que las operaciones matemáticas se representan con algunos símbolos conocidos (como el signo = o - ) y otros no tanto, como el asterisco para representar la multiplicación, tradición propia de los lenguajes de programación. Otra vez, al escribir un pseudocódigo no hay reglas definidas y cada quien va definiendo su estilo al escribirlo.


En este curso vamos a aprender lógica de programación usando sólo pseudocódigo. Verán que los pseudocódigos que voy a compartirles siguen el estilo que yo mismo he definido para mí, pero en ningún caso eso quiere decir que sea la única forma correcta de escribirlos. Lo importante por ahora será aprender la lógica de programación, no tanto la forma de escribirla. Ya habrá tiempo de preocuparse de eso cuando comencemos a aprender algún lenguaje de programación formal.

ACTIVIDADES DE APRENDIZAJE

  • ¿Puedes pensar en al menos 5 ejemplos de algoritmos que usamos en la vida diaria?
  • Si tuvieras que escribir un algoritmo para describir el proceso de cambiar el pañal de un bebé, ¿qué pasos incluirías?
  • Imagina que eres el encargado de cobrar las cuentas de consumo de los clientes de la taquería "Don Eustaquio". ¿qué pasos consideras que debe incluir el algoritmo para calcular cuánto va a pagar el cliente por su cuenta? supón que sólo se venden 3 clases de productos: tacos, quesadillas y refrescos.

CONCEPTOS CLAVE

  • Programación
  • Proceso de programación
  • Algoritmo
  • Características de un algoritmo
  • Pseudocódigo

1 comentario:

Copyright © IsraelCapetillo.com - Un blog de tecnología, noticias geek y más Compartido por Gooyaabi Templates | Powered By Blogger

Design by Anders Noren | Blogger Theme by NewBloggerThemes.com