jueves, 12 de marzo de 2015

Orígenes III: Ada Lovelace, la primera programadora de la historia



La extraordinaria mujer a quien comunmente se conoce con el nombre de Ada Lovelace, nació con el nombre de Ada Augusta Gordon en 1815. Fue hija del tempestuoso matrimonio que sostuvo el poeta inglés George Gordon, Lord Byron, con la matemática Annabella Milbanke.

Temiendo que Ada heredara en volátil temperamento 'poético' de su padre, su madre decidió criarla bajo un estricto régimen de ciencia, lógica y matemáticas. De hecho, Ada desde su infancia tenía una gran fascinación con las máquinas: le gustaba diseñar botes y máquinas voladoras imaginarias y estudiaba detenidamente los diagramas de los nuevos inventos de la Revolución Industrial que llenaban las páginas de las revistas científicas de la época.

A la edad de 19 años se casó con un aristócrata de nombre William King. Cuando King se convirtió en Conde de Lovelace en 1838, su esposa se convirtió en Lady Ada King, Condesa de Lovelace. De ahi que se le llame Ada Lovelace que, aunque es técnicamente erróneo, suele ahorrar muchas confusiones. Tuvo tres hijos en su matrimonio con King.

En 1833, la mentora de Lovelace, la científica y erudita María Sommerville, le presentó a Charles Babbage, el Profesor Lucasiano que ya había alcanzado considerable celebridad por sus visionarios (y perpetuamente incompletos) planes para construir gigantescas máquinas de cálculo. Tanto Charles Babbage como Ada Lovelace tenían personalidades poco convencionales y se hicieron buenos amigos de toda la vida. Babbage la describió como "esa hechicera que ha lanzado su hechizo mágico en torno a la más abstracta de las Ciencias y la ha comprendido con una fuerza que pocos intelectos masculinos podrían haber ejercido sobre ella," o en otra ocasión, como "La hechicera de los números".

Algoritmo para el número de Bernoulli, por Ada Lovelace, 1843


La máquina analítica
Lovelace estaba profundamente intrigada por los planes de Babbage para construir un dispositivo tremendamente complejo al que llamó la Máquina Analítica, que era pretendía combinar la matriz de engranajes de adición de su anterior Máquina Diferencial con un elaborado sistema operativo de tarjetas perforadas. La máquina nunca fue construida (al menos en el tiempo de Babbage), pero el diseño tenía todos los elementos esenciales de una computadora moderna.

En 1842 Lovelace tradujo un breve artículo que describe la máquina analítica por el matemático italiano Luigi Menabrea, para su publicación en Inglaterra. Babbage le pidió que ampliara el artículo, "dado que ella entendía la máquina muy bien". El último artículo tiene más de tres veces la longitud del original y contiene varios primitivos "programas de computadora", así como las observaciones sorprendentemente premonitorias sobre los usos potenciales de la máquina, incluyendo la manipulación de símbolos y la creación de la música. Aunque Babbage y sus ayudantes habían esbozado programas para su máquina antes, los de Lovelace son más elaborados y completos, y los primeros en ser publicados; por lo que a Ada se le conoce a menudo como la primera programadora de computadoras de la historia.  El mismo Babbage "habló muy bien de sus poderes matemáticos, y de su peculiar capacidad - más grande, dijo, que de cualquiera que conocía - para preparar las descripciones relacionadas con su máquina de cálculo."

Ada Lovelace murió de cáncer a los 36 años, pocos meses después de la publicación de su artículo "Esquema de la Máquina Analítica, con Notas del Traductor".

La Máquina Analítica permaneció sólo como una visión, hasta que las notas de Lovelace se convirtieron en uno de los documentos fundamentales que inspiraron el trabajo de Alan Turing sobre las primeras computadoras modernas en los años 40.

Su potencial frustrado, y su pasión y visión para la tecnología, han hecho de ella un símbolo de gran alcance para la mujer moderna en tecnología.




Lógica de Programación (5): Constantes y variables


Los programas de computadora contienen ciertos valores que no deben cambiar durante la ejecución del programa. Tales valores se llaman constantes. De igual forma existen otros valores que podrán cambiar durante la ejecución del programa; a estos se les llama variables. Tanto las constantes como las variables pueden ser de cualquiera de los tipos de datos que mencionamos en la lección anterior (sí la estudiaron, ¿verdad?).

Variables en uso en un código de JavaScript

Como todo objeto que se usa dentro de un programa, tanto las constantes como las variables deben tener un nombre para que puedan ser reconocidas y utilizadas. A estos nombres los llamamos identificadores. Los lenguajes de programación modernos tienen reglas más o menos parecidas que debemos seguir cuando se trata de escribir identificadores. Entre ellas podemos mencionar:

  • Usar caracteres como letras, dígitos y uno que otro símbolo (como el guion bajo o medio, por ejemplo)
  • Comenzar con una letra
  • No usar espacios en blanco
  • Procurar no usar caracteres especiales como acentos o ñ *
  • Ser significativo y tener relación con el objeto que representan (como horas_trabajadas, tarifa_por_hora y tasa_impuesto)


Para declarar (o darle a conocer) variables o constantes a nuestros algoritmos, vamos a usar la siguiente notación:

<tipo_de_dato> <identificador> [=<expresión>]
NOTA: lo que se encuentra entre corchetes es opcional

Por ejemplo:
entero horas_trabajadas
real tarifa_por_hora, tasa_impuesto = 2.3
cadena nombre_empleado
cadena email = "curso@estudioiq.com"
caracter letra = 'a'
bool casado = falso
const real pi = 3.1416

Como podemos ver, hay algunas variables que no tienen valor mientras que otras sí lo tienen. Cuando se asigna un valor a una variable desde el momento que se declara, se dice que estamos inicializando la variable. En el caso del segundo ejemplo, estamos declarando dos variables del mismo tipo en la misma línea y le asignamos valor sólo a una de ellas. Esto también es perfectamente válido y nos ahorra algunas líneas de "código".

También podemos notar que en el último ejemplo, agregamos la palabra const al inicio. Esto quiere decir que lo que declaramos es una constante que no cambiará su valor durante la ejecución del programa. En el caso de las constantes, estas siempre deben inicializarse cuando se declaran.

Los conceptos que hemos aprendido hasta esta lección son necesarios para comprender mejor la escritura de algoritmos. A partir de la siguiente lección comenzaremos a profundizar más en la escritura de las expresiones aritméticas que podemos escribir en una computadora. ¡Hasta la próxima!

ACTIVIDADES DE APRENDIZAJE

1) ¿Puedes decir qué tipo de dato contiene cada una de las siguientes variables basándote en el valor que se les está asignando?
  • IDCompra = 2
  • HostName = "gc1001.estudioiq.com"
  • PrecioUnitario = 14.99
  • ImprimirFactura = verdadero
  • CodigoPostal = "45080"


2) ¿Cuáles de los siguientes identificadores están mal escritos y qué correcciones sugerirías en cada caso?
  • NombreDelAlumno
  • 3CASA
  • Nombre_del_niño
  • ID usuario
  • Server34




NOTAS
* Algunos lenguajes de programación modernos no tienen esta restricción, pero es considerado una buena práctica no usarlos de todos modos.

miércoles, 11 de marzo de 2015

Daum, Editor de Ecuaciones en línea

Daum Equation Editor en la Chrome Web Store


Mientras preparaba una de las lecciones para mi curso de Lógica de Programación me encontré con la necesidad de algún buen programa editor de ecuaciones que no fuera alguna de las herramientas que tienen programas editores de textos como Microsoft Word. Preferí buscar alguna opción en línea porque soy usuario de una Chromebook, lo que me ha empezado a alejar bastante de los programas instalados y me ha movido a las aplicaciones web que no dependen del sistema operativo y que se pueden ejecutar directamente en el navegador web. 

Así que buscando en la Chrome Web Store me encontré con una opción genial: Daum Equation Editor. Este potente editor nos permite, con unos cuantos clics, crear expresiones matemáticas bastante complejas que luego podemos guardar en forma de texto (usando la nomenclatura LaTeX) o de imagen png ya sea en nuestra computadora o directamente a nuestra cuenta de Google Drive. Miren lo potente que es:



Sin duda es una opción bastante interesante para quien tiene que estar escribiendo constantemente fórmulas matemáticas en la computadora y requiere de una forma rápida y accesible de lograrlo.

Pueden encontrar la app (que en realidad sólo es un acceso directo) en la Chrome Web Store haciendo clic aqui.

lunes, 9 de marzo de 2015

Lógica de Programación (4): Datos y tipos de datos

Como ya hemos visto, un algoritmo requiere de datos para poder funcionar. Dependiendo del tipo de programa que necesitemos hacer, esos datos pueden ser de tipos muy diversos. En nuestro ejemplo del cálculo de la nómina de un empleado, por ejemplo, sabemos que los datos de entrada que recibiremos (horas_trabajadas, tarifa_por_hora y tasa_impuesto) son sólo números. El tipo de dato que recibiremos (y que entregaremos como resultado) es crucial para que nuestro programa funcione adecuadamente. En este caso, dado que necesitamos realizar algunas operaciones aritméticas con esos datos, es requisito esencial que sean números. Si en el programa hubiéramos requerido conocer también el nombre del empleado, estaríamos hablando de un tipo de dato enteramente distinto. Conocer los tipos de datos que tenemos disponibles es necesario para desarrollar nuestros algoritmos puesto que podemos decidir qué clase de operaciones podemos hacer con ellos.

En esta imagen están representados algunos* de los diferentes tipos de datos que podemos usar en nuestros algoritmos. Vamos a analizar a detalle cada uno de ellos.

Principales tipos de datos (clic para agrandar)

Los tipos de datos simples son los tipos esenciales que admite cualquier computadora o lenguaje de programación. Entre estos podemos encontrar:

Tipos numéricos
Como su nombre lo indica, en estos tipos podemos almacenar números (duh!), los cuales a su vez pueden ser Enteros o Reales. Los enteros (si recuerdan bien sus clases de matemáticas de primaria) son números que no tienen componentes fraccionarios o decimales y pueden ser positivos o negativos. En nuestro algoritmo de ejemplo, el número de horas trabajadas probablemente sea un número entero dado que difícilmente se pagarán fracciones de hora. Por otro lado, los reales son los números que sí contienen alguna parte decimal y también pueden ser positivos o negativos. Volviendo al ejemplo, tanto la tarifa por hora como la tasa de impuesto son probablemente valores reales porque incluirán centavos o valores decimales respectivamente.

Tipos alfanuméricos
Estos están formados por todos los caracteres (letras, dígitos y símbolos) que reconoce una computadora. El tipo Caracter es el que está formado solamente por un caracter, ya sea letra, dígito o símbolo**. Por otro lado, el tipo Cadena de Caracteres está formado por más de un caracter, como puede ser el nombre de una persona, un domicilio, una dirección de correo electrónico, entre otros muchos ejemplos. Los tipos alfanuméricos suelen delimitarse usando comillas simples o dobles (por ejemplo: "a", "Mambrú se fue a la guerra", "(555) 334-56-78", "03/Mar/2015"). Cabe mencionar que es muy diferente expresar, por ejemplo, que una variable tiene el valor de "1255" a decir que vale 1255. En el primer caso, dado que el valor está entre comillas, asumimos que es de tipo alfanumérico, es decir, una computadora no lo reconocerá como número y por lo tanto no podremos realizar operaciones matemáticas con él, a menos que hagamos una conversión de tipos. Sin embargo, esto último no nos atañe de momento. Baste saber que la diferencia es importante cuando se trata de traducir nuestros algoritmos a un lenguaje de programación particular.

Tipos lógicos.
El tipo lógico, también llamado booleano (en honor a George Boole, uno de los fundadores de las Ciencias Computacionales) es el que sólo puede tomar uno de dos valores: verdadero (true) o falso (false). Este tipo de datos se usa para representar alternativas a determinadas condiciones (como SI/NO, ENCENDIDO/APAGADO, LLENO/VACIO, etc). Por ejemplo, al decidir si un número es par, la respuesta se dará en términos de verdadero o falso.


Hasta aquí llegamos con la lección de hoy. En la siguiente lección aprenderemos a reconocer dos elementos esenciales para nuestros programas: las constantes y las variables. ¡Hasta la próxima!




NOTAS
*Digo "algunos" porque hay lenguajes de programación que admiten más o menos tipos dependiendo de su construcción. Aquí nos ocupamos de los tipos de datos generalmente aceptados por todos los lenguajes de programación.

**El conjunto de todos los símbolos estandar aceptados por una computadora está representado por el llamado código ASCII, del cual puedes aprender mucho más en nuestra querida y adorada Wikipedia.



Enlace: Índice del curso


viernes, 6 de marzo de 2015

Lógica de programación (3): Instrucciones y tipos de instrucciones



Como ya aprendiste en lecciones anteriores (y si no ¡vuélvelas a repasar!), un algoritmo está conformado por datos de entrada, instrucciones de procesamiento y datos de salida. En esta lección nos vamos a enfocar en conocer los distintos tipos de instrucciones que podemos darle a una computadora.

Para lograr resolver un problema, necesitamos generar un algoritmo formado por distintas clases de instrucciones, las cuales pueden ser luego implementadas en cualquier lenguaje de programación. Entre los principales tipos se encuentran:

  • Instrucciones de inicio-fin
  • Instrucciones de asignación
  • Instrucciones de lectura de datos (entrada)
  • Instrucciones de escritura de resultados (salida)
  • Instrucciones de control de flujo

Instrucciones de inicio-fin
Estas son las que usamos para indicarle al algoritmo cuando inicia y cuando termina, ya sea el algoritmo completo o alguna parte del mismo. Generalmente se usan las palabras Inicio y Fin, así sin más. Son especialmente útiles cuando usamos alguna instrucción de bifurcación, de las que ya hablaremos en un momento más. 

Instrucciones de asignación
Una instrucción de asignación es la que se usa para darle un valor a una variable. ¿Y qué es una variable? pues es un valor que puede cambiar durante la ejecución de un programa. En el algoritmo para el cálculo del pago de nómina que hemos visto en las lecciones anteriores, las variables serían: horas_trabajadas, tarifa_por_hora y tasa_impuesto. Para representar la asignación de un valor a una variable vamos a estar utilizando el símbolo de una flecha apuntando a la izquierda (←). 

Instrucciones de lectura de datos (entrada)
Son las que usamos para indicar la entrada de un dato para nuestro algoritmo por medio de algún dispositivo (como el teclado, el mouse, un escaner, etc) o incluso de algún otro programa. Generalmente usamos la palabra leer.

Instrucciones de escritura de resultados (salida)
Son las que se usan para indicar la salida de resultados a algún dispositivo (como la pantalla, la impresora, las bocinas, etc) o hacia algún otro programa que usará nuestras salidas como entradas.

Instrucciones de control de flujo
Estas nos permiten dividir la secuencia de ejecución o repetir ya sea algunas o todas las instrucciones de nuestro algoritmo en base a alguna condición. Si esa condición se cumple, se ejecuta (o repite) un conjunto de instrucciones y si no se cumple, se ejecuta (o repite) un conjunto distinto*.

Esta es una lección cortita sólo para introducir los tipos de instrucciones. En la siguiente lección conoceremos los principales tipos de datos que existen así como las operaciones básicas que podemos ejecutar. ¡Hasta la próxima!



* Estas situaciones son bastante comunes en nuestra vida diaria también. Pensemos en la decisión de la ropa que vamos a ponernos para salir a pasear en una tarde de sábado. Si el clima es caluroso, decidimos por un atuendo más ligero. Si no, nuestro atuendo es más cubierto. Por otro lado, cuando vamos a comer tacos a un lugar nuevo, decidimos repetir el pedido sólo si nos agradó la manera en que los preparan. Esto nos indica dos cosas: que programar es más común de lo que parece y que a mí me encantan los tacos...

miércoles, 4 de marzo de 2015

Lógica de programación (2): Elementos básicos de un programa

¿Listos para arrancar con el aprendizaje de la lógica de programación? Pues bien, lo primero que un buen programador debe hacer es reconocer a detalle cuáles son los datos de entrada que necesita, cuáles son los procesos que debe realizar con esos datos de entrada y cuáles son los datos de salida que se obtendrán como resultado de ese procesamiento.

Esto representa un cambio significativo (y definitivo) en nuestro rol de usuarios a programadores. Y es que cuando somos usuarios, el procesamiento de los datos es como una caja negra. Como usuarios de un programa, sólo nos interesa introducir datos, hacer algunos clics y dejar que la computadora haga su magia para mostrarnos ese reporte que necesitamos, o para añadir un amigo en Facebook. Sin embargo, como programadores, nuestra labor será convertir esa caja negra en una transparente, no sólo para comprender el código detrás de la magia, sino para crear esa magia nosotros mismos.

Ni magia ni aliens. La computadora funciona con programas escritos por personas...
Esa "caja transparente" es el algoritmo que como programadores debemos crear para convertir las entradas esperadas en las salidas deseadas. Cabe mencionar que estas salidas tienen que ser información útil ya sea para los usuarios finales o para algún otro programa que requiera esa información como entrada para procesarla.

Si comparamos un programa con la receta para preparar un pastel de chocolate (que, como establecimos en la primera lección de este curso, ambos son algoritmos), las entradas serían todos los ingredientes necesarios, la receta misma sería el algoritmo y la salida sería nuestro flamante y delicioso pastel de chocolate listo para consumirse.

(Clic en la imagen para agrandar)
En una computadora, las entradas pueden venir de una gran variedad de dispositivos: el teclado, el mouse, un lector de código de barras, una memoria USB, etc., mientras que los datos de salida también se pueden mostrar en una amplia variedad de formas: en la pantalla, impresos en papel, en forma de sonidos en las bocinas, en forma de alguna acción de otro dispositivo (como encender o apagar la Wi-Fi del celular), etc.

Un buen programador sabe no sólo procesar los datos de entrada para generar las salidas, sino también el origen de las primeras y el destino de las segundas. 

Por ahora nosotros nos preocuparemos sólo en generar las instrucciones para procesar datos, independientemente de su origen o su destino después del procesamiento.

¿Recuerdan nuestro primer algoritmo de ejemplo en la lección anterior? 

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

En ese algoritmo, los datos de entrada se leen en la instrucción número 1 y son: horas_trabajadas, tarifa_por_hora y tasa_impuesto. Estos datos son procesados por las instrucciones 2,3 y 4 para generar los datos de salida que son visualizados en el paso 5. Como ven, en este caso no nos preocupamos ni de dónde vienen las entradas ni dónde serán mostrados los resultados finales.

En la próxima lección comenzaremos a adentrarnos en el diseño del algoritmo conociendo los diferentes tipos de instrucciones que podemos utilizar para darle forma a nuestro proceso. ¡Hasta la próxima!


ACTIVIDADES DE APRENDIZAJE

  • En la lección anterior escribiste 2 algoritmos: uno para cambiar el pañal a un bebé y otro para calcular el monto a pagar por el consumo en una taquería. Define ahora cuáles serían las entradas, las instrucciones de procesamiento y las salidas esperadas para cada uno de esos algoritmos.

CONCEPTOS CLAVE

  • Datos de entrada
  • Proceso
  • Datos de salida






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

Copyright © Mi rincón del código Compartido por Gooyaabi Templates | Powered By Blogger

Design by Anders Noren | Blogger Theme by NewBloggerThemes.com