educación, informática y demás

Introducción a la programación estructurada

Programa informático

Para entender que es la programación, primero tenemos que entender qué es un programa. Al inicio de los estudios de este módulo, ya vimos qué era el software y qué era un programa. No obstante no estaría mal, echar un vistazo a la siguiente entrada de la wikipedia sobre programa informático y cómo se obtienen.

Wikipedia – Programa informático

Para crear un programa, primero tenemos que definir la solución al problema que queremos que lleve a cabo el programa. Los programas, al fin de cuenta, no son más que una automatización que nos permite resolver problemas u obtener información a partir de ciertos datos de forma automática. Nos facilitan la vida realizando el trabajo de cálculo más pesado para nosotros. No obstante, alguien, el programador, debe indicar cómo se soluciona el problema y para ello debe conocer qué debe hacer el programa y los pasos que dar para resolver el problema.

Wikipedia – Resolución de problemas

Todo programa suele tener datos de entrada y datos de salida, al igual que los sistemas informáticos. Muchas veces los datos de salida son operaciones que se realizan en el sistema, como realizar operaciones de administración, por ejemplo crear una serie de directorios o cuentas de usuario o añadir usuarios a grupos, etc.

Pero al final, esas acciones generan datos que se almacenan en alguna parte, bien se muestran en pantalla o bien se almacenan en ficheros, como pueden ser ficheros de configuración de cuentas de usuario o grupos del sistema.

Algoritmos

Antes de crear un programa, tenemos que saber qué queremos que haga el programa y cómo lo hará. El qué indica la función principal del programa y el cómo determina los pasos que deberá dar el programa para llevarlo a cabo. Estos pasos son el algoritmo del programa. Un algoritmo es, básicamente, una secuencia de pasos ordenados, no ambiguos y finitos que al llevarse a cabo realizan una acción concreta o solucionan un problema.

Wikipedia – Algoritmo

Es decir, el algoritmo determina cómo solucionar el problema en una serie de pasos ordenados.

Pseudocódigo y lenguaje natural

Para que ese algoritmo pueda ser implementado utilizando algún lenguaje de programación, se deberían utilizar para expresarlo herramientas similares a las que se dispone en el lenguaje de programación en el que se va a implementar. Si bien es cierto que esto no es obligatorio, si es muy útil, puesto que la transformación de un algoritmo utilizando pseudocódigo (una forma de representar el algoritmo) estructurado facilita la implementación del algoritmo utilizando un lenguaje de programación estructurado.

Wikipedia – Pseudocódigo

A pesar de que es recomendable el uso de pseudocódigo o incluso de DFDs en las primeras fases en el aprendizaje de programación, una de las mejoras formas de afrontar la programación de aplicaciones es utilizando el lenguaje natural.

Estamos acostumbrados a resolver problemas en nuestro día a día utilizando razonamiento lógico utilizando el lenguaje natural. Sin embargo, no somos conscientes de ello, porque lo hacemos de forma natural.

No obstante, utilizamos las herramientas básicas de programación estructurada en nuestro día a día, eso si adaptadas a nuestra vida cotidiana y utilizando el lenguaje natural que es muy ambiguo.

Por ejemplo, usamos la secuencialidad, que consiste en ordenar los pasos que se deben dar para solucionar un problema en nuestras tareas cotidianas o si tenemos que dar órdenes a alguien.

Usamos las sentencias condicionales para hacer una u otra cosa en función de condiciones. Por ejemplo, si antes de salir de casa está lloviendo o parece que lloverá cogemos el paraguas.

También utilizamos la sentencias iterativas o los bucles. Si queremos batir un huevo repetimos el proceso de batir con el tenedor mientras el huevo no tengan la textura adecuada. Si queremos copiar todas las fotos en las que aparezca un amigo de la galería del móvil a un directorio compartido, para cada foto del álbum comprobamos si aparece nuestro amigo, si aparece la seleccionamos y la copiamos al directorio compartido.

El uso del pseudocódigo facilita expresar de una manera más estructurada los pasos a dar, puesto que el pseudocódigo suele utilizar las mismas limitaciones que nos dará el lenguaje de programación que utilicemos para implementar el algoritmo, eliminando las ambigüedades del lenguaje natural.

Por ejemplo, ¿cómo podemos expresar que haya probabilidades de que llueva en un algoritmo? ¿qué el huevo esté batido? ¿qué una persona aparece o no en una foto?. Estas condiciones son del mundo real, sin embargo, en sistemas informáticos podríamos comprobar la probabilidad de lluvia en un servicio web del servicio de meteorología o podríamos comprobar si alguien aparece en una foto con servicios de reconocimiento facial. Esto último se escapa de los objetivos de este documento, pero es posible hacerlo.

Lo más habitual es que utilicemos operaciones aritméticas y lógicas para definir condiciones o utilicemos otras funciones externas (comandos en shell script) para comprobar si se cumple una condición o no.

Programación estructurada

La programación estructurada es el paradigma de programación que vamos a estudiar en este documento porque es el que se utiliza en el desarrollo de bash shell scripts, que es el uso que haremos de las nociones de programación que obtengamos.

Wikipedia – Pogramación estructurada

Aunque hoy en día el paradigma más utilizado en el desarrollo de software es el de programación orientada a objetos, esta está muy relacionada con la programación estructurada y todo lo que aprendamos nos puede servir como base para aprender programación orientada a objetos y desarrollar aplicaciones usando este paradigma.

No obstante, volviendo al objetivo principal de este documento, en el desarrollo de shell scripts de bash que nos facilite la administración de sistemas utilizaremos casi exclusivamente programación estructurada. De ahí la importancia de centrarnos en este paradigma de programación.

La programación estructurada utiliza, básicamente, tres herramientas fundamentales para crear programas:

  • Secuencia
  • Instrucciones condicionales
  • Instrucciones iterativas o bucles

Si a esto le sumamos el uso de funciones y, por último, la modularidad tendremos una técnica de programación que permite crear aplicaciones de cierta complejidad de manera que sean relativamente fáciles de mantener y razonar sobre ellas.

No obstante no es la panacea y tiene algunos problemas que se tratan de solventar con la programación orientada a objetos, que proporciona características como la encapsulación, la reutilización de código, etc. Todo esto, de nuevo, se sale del objetivo de este documento, aunque se deja como comentario por si alguien quiere aprender por su cuenta y le llama la atención.

Vídeo – Introducción a la programación de scripts