UNA PROPOSICIÓN PARA LA ENSEÑANZA DE LENGUAJES DE PROGRAMACIÓN EN INGENIERÍA



M. Angélica Pinninghoff J.*

Ricardo Contreras A.*

Andreas Polyméris P.*

Marcela Varas C.*

Christian Weldt M.*




*Depto. Ing. Informática y Ciencias de la Computación

Facultad de Ingeniería, U. de Concepción

Dirección Postal: Casilla 1186 Concepción-3

Resumen.

En este trabajo se presenta una experiencia en desarrollo, que dice relación con la enseñanza de Lenguajes de Programación para estudiantes de las distintas especialidades de Ingeniería Civil.

Uno de los objetivos más inmediatos del proyecto, es el conseguir que el estudiante adquiera una disciplina para enfrentar los problemas a resolver, con relativa independencia del lenguaje de programación que se vaya a utilizar para implementar sus soluciones, suministrando los mecanismos necesarios para que la opción por un lenguaje particular sea lo más natural posible.

Palabras Clave: Resolución de Problemas, Estructuras de Control, Seudolenguaje.

Introducción.

Durante años, los lenguajes de programación se han venido enseñando como herramientas particulares, que se emplean para la construcción de programas que resuelven muchos de los problemas que los ingenieros enfrentan cotidianamente. Una de las características más preocupantes de este proceso enseñanza-aprendizaje, radica en la insistencia, desde el primer momento en la sintaxis, dejando de lado aspectos, a nuestro juicio, más relevantes, como resultan ser los métodos empleados para resolver problemas.

A partir de la experiencia particular de varios académicos de nuestro departamento, a través de la dictación de la asignatura de Lenguaje de Programación para las carreras de Ingeniería Civil, hemos ido rescatando aquellos aspectos que nos han permitido llegar de mejor forma al estudiante, manteniendo el objetivo inicial de preparar al alumno para la programación en algún lenguaje de programación.

Lo que se pretende con este proyecto, cuya parte inicial se presenta en este trabajo es hacer extensivo el uso de nuevas formas de acción a todas las especialidades de Ingeniería Civil, más algunas otras carreras de nuestra universidad que también cursan la asignatura y que involucran un universo anual de aproximadamente 600 alumnos.

Lo primero: Olvidar los Lenguajes de Programación.

Uno de los problemas claros que hemos detectado, es que los estudiantes rápidamente comienzan a preocuparse del cómo resolver un problema, sin haberse centrado en el entendimiento del problema en sí, que es el que se debe resolver. Los estudiantes creen que el empleo de una sintaxis correcta en la construcción de un programa es garantía de una adecuada resolución del problema: esta es necesaria, pero para nada suficiente.

Por tal razón, nuestra preocupación inicial se centró en el estudio de problemas que, idealmente, no tuvieran connotaciones matemáticas, excluyendo aquellos como la típica generación de tablas de números, manejo de factoriales, de secuencias particulares de términos y otros cansadoramente conocidos. Así, partimos resolviendo problemas combinatoriales asociados a juegos simples, que pese a no ser tan ingenieriles como los anteriormente mencionados consiguen captar el interés de los estudiantes; lo cual bien puede no ser una garantía, pero no deja de ser un buen comienzo.

La metodología que proponemos parte con la Descripción del Problema, esto es, el texto que nos permite enterarnos de qué es lo que se pretende resolver; qué se entiende por solución. Luego, como segundo elemento tenemos un Análisis del Dominio, que nos permite identificar los medios, en su sentido más amplio, de que disponemos para resolver el problema en cuestión. Una vez clarificados los dos primeros puntos, tarea no siempre sencilla, nos enfrentamos al tercer paso: la Búsqueda de Representaciones Operacionales. Esto resulta de alguna complejidad, ya que sabemos que en este punto la imaginación nos puede llevar a representaciones difíciles de operacionalizar, pero entendemos que es parte importante del juego del aprendizaje no podar tempranamente ideas no tradicionales. Eso será en parte responsabilidad de la etapa siguiente, la Selección de una Representación. Aquí en base a criterios operacionales, se deberá optar por alguna de las eventuales representaciones generadas en el punto anterior. Es claro que puede haber consenso al desarrollar un problema particular en la elección de una representación, y no ser necesaria la fase de Selección, pero nos interesa ilustrar el andamiaje del método general.

La siguiente etapa, Identificación de Estructuras de Control, nos relaciona con lo que hemos llamado un Seudolenguaje, ya que de su potencialidad nacerán las distintas formas de expresar los procesamientos que estarán permitidos. Esto implica que el Seudolenguaje mencionado debe estar relacionado fuertemente con las estructuras de control disponibles en los lenguajes de programación, por una parte, y con una restricción que implique un cierto grado de formalismo por otra, para ir puliendo aquellas conceptualizaciones que el lenguaje natural no precisa suficientemente. Del Seudolenguaje hablaremos en el próximo punto. Una vez identificadas estas estructuras de control estamos en condiciones de generar el seudoprograma que guiará el proceso de solución del problema planteado, fase que hemos llamado Estructuración de la Solución.

Es importante notar que lo que hasta aquí hemos llegado a construir es un algoritmo, que todavía es independiente de los lenguajes de programación, y que, en su desarrollo, nos ha permitido focalizarnos más en el problema mismo a resolver que en las herramientas destinadas a su implementación. Eso nos parece un logro importante.

El Seudolenguaje.

Sabemos que el lenguaje natural resulta insuficiente para la mayoría de las descripciones que deben hacerse en el campo de la ingeniería. Por tal razón se han utilizado desde hace muchos años, fundamentalmente para expresar algoritmos, lenguajes técnicos especializados, cada uno con atributos particulares, pero derivados también de manera importante de lenguajes de programación existentes. Aunque esta dependencia pueda parecer natural hay que insistir en ella, porque uno también podría sentirse tentado a librarse de ella: proponer un seudolenguaje llamado informalmente Cosa-like, para no tener que comprometerse antes de tiempo con un lenguaje de programación Cosa. Pero entonces, y aquí viene lo que hay que tener presente, para entender y usar correctamente Cosa-like, típicamente resulta necesario conocer previamente Cosa, o al menos lo esencial de este lenguaje; y así, la proposición del seudolenguaje empieza a carecer de sentido.

El seudolenguaje utilizado en este trabajo, se basa en una definición formal de lenguajes de programación [Alagic]. Así decimos que los elementos del seudolenguaje se definen de la siguiente manera:

0. Declaración de Dominios y variables.

Entenderemos por Dominio un conjunto con sus funciones y relaciones asociadas, en el cual una variable definida para ese Dominio puede tomar valores.

Para definir un Dominio, al cual pueden pertenecer una o mas variables, utilizamos:

Dominioi = (definición por extensión o comprensión del conjunto), así como de sus funciones y relaciones asociadas.

Para declarar una o más variables y el Dominio al cuál pertenece se utiliza en el seudoprograma:

variable1j, variable 2j,...,variable kj Dominio j

1. Atribución.

El seudoprograma

variable 1j,...,variablenj valor1j, ..., valornj

atribuye valorij a las respectivas variableij , con i=1..n

valorij puede ser el resultado de una expresión en el dominio de variableij . Esto significa que el resultado de esta expresión debe pertenecer al mismo dominio que variableij, objeto de la atribución.

Una expresión es cualquiera de las alternativas siguientes:

elemento del Dominio

variable del Dominio

expresióni operador expresiónj

donde operador remite a una función de los dominios de los valores resultantes de expresióni y expresiónj, y entrega un valor sobre un tercer dominio.

2. Iteración.

El seudoprograma

Realizar, mientras p: seudoprograma

repetirá seudoprograma condicionado al valor que toma el predicado p (expresión que remite a las relaciones de los dominios y entrega valores en el particular Dominio Lógico ={verdadero, falso}). Así, mientras el valor de p es verdadero, se realizará seudoprograma. Se termina la iteración al evaluar p como falso.

3. Selección.

El seudoprograma

Si p entonces realizar seudoprograma

realizará seudoprograma en base al valor del predicado p. Cuando p sea falso, no se realizará seudoprograma.

4. Secuencia

El seudoprograma

inicio

seudoprograma 1

seudoprograma 2

...

seudoprograma n

término

realizará seudoprograma 1, luego seudoprograma 2, y así sucesivamente en el orden especificado hasta realizar seudoprograma n.

Teniendo estos elementos, estamos ya en condiciones entonces de manejar un lenguaje uniforme para la descripción de nuestros algoritmos. El sentido de las estructuras de control permitidas nos parece simple y reducido, aspecto de importancia para las proyecciones visualizadas en este trabajo.

Proyecciones.

El presente trabajo se encuentra en sus etapas iniciales de desarrollo, actualmente nos encontramos realizando la especificación de requisitos del software que servirá de apoyo a la utilización de la metodología propuesta. Entendemos que este software debe suministrar inicialmente, como mínimo, toda la ayuda necesaria para conseguir una Estructura de la Solución satisfactoria en el seudolenguaje adoptado.

El software especificado cuenta principalmente con dos módulos. Un Tutorial Introductorio y un Módulo de Apoyo a la Construcción de Algoritmos. En el Tutorial Introductorio se entregarán los elementos de la metodología de resolución de problemas y ejemplos resueltos aplicando la misma. Los ejercicios escogidos son dos problemas de índole distinta. El primero trata de la construcción de figuras en base a ciertos módulos de construcción (ver Figura 1) y operadores básicos. El alumno se verá enfrentado al problema de construir módulos mayores y podrá resolverlo por sí mismo o ver una de las alternativas de solución. Las operaciones que el alumno podrá realizar sobre los módulos básicos de construcción son obtener, mover, rotar, pegar y eliminar.

Figura 1. Módulos Básicos de Construcción



Figura 2. Figuras (Módulos) Compuestos de Módulos Básicos de Construcción.

La idea es que la construcción de módulos progrese a través de distintos niveles de complejidad. Con esto se intenta introducir los conceptos de abstracción ya que en las construcciones más complejas no existirá preocupación por los módulos básicos; modularidad y cohesión, ya que cada módulo de construcción es un ente autónomo.

El segundo ejercicio considerado para este Tutorial Introductorio sitúa al estudiante en la problemática de la Máquina de Post que, más allá del Dominio Lógico, visualiza sólo una variable perteneciente al Dominio de las palabras de un alfabeto finito, y sólo ofrece un muy reducido número de funciones y relaciones; ello no obstante es una Máquina Universal [Manna]. Al alumno se le planteará una clase de problemas sobre este Dominio de palabras. Él deberá resolverlos limitándose a usar los escasos medios de esta Máquina de Post y las estructuras de control de nuestro seudolenguaje. Entonces observará que para cada uno de estos problemas las necesarias estructuras de solución resultan ser bastante engorrosas, y por ello será motivado a proceder modularmente, construyendo primero (sub)seudoprogramas de utilidad múltiple para toda la clase de problemas planteados.

El módulo de apoyo a la construcción de algoritmos, es un ambiente de trabajo, que incluye un intérprete, y debe permitir al alumno construir sus algoritmos en el seudolenguaje propuesto y ejecutarlos paso a paso, verificando el estado de las variables para cada sentencia del seudoprograma. En este punto, también se encuentran ejemplos de problemas resueltos por medio de la metodología de resolución de problemas, tales como el problema del Puzzle-8 y el de los Misioneros y Caníbales [Rich].

Objetivos más ambiciosos, planteados como una segunda etapa de este trabajo, tienen que ver con la eventual conectividad del seudolenguaje y lenguajes de programación específicos, siendo C y Pascal los primeros candidatos. Creemos que de esta forma, relegando los lenguajes de programación a su condición de simples elementos de apoyo, eliminamos los compromisos precipitados en la elección de un lenguaje, y complementando el uso del software, al ritmo de cada estudiante, con sesiones regulares de práctica del uso de lenguajes de programación, estaremos en mejores condiciones para incorporar algún nuevo lenguaje que en un momento determinado parezca satisfacer mejor nuestras necesidades.


Referencias.

[Sethi] Sethi, Ravi, "Lenguajes de Programación Conceptos y Constructores", Addison-Wesley Iberoamericana, 1992.

[RodM] Rodríguez, Miguel, "Metodología de la Programación", McGraw-Hill, 1991.

[Jaime] Jaime A., Pérez T., Gojenola K., "Una Experiencia para la Mejora en los Resultados de las Prácticas de Programación", III Congreso Iberoamericano de Educación Superior en Computación, Concepción, Chile, 1994.

[Manna] Manna, Zohar, "Mathematical Theory of Computation", McGraw-Hill, 1974.

[Rich] Rich, Elaine; Knight, Kevin "Inteligencia Artificial", Segunda Edición, McGraw-Hill, 1991

[Alagic] Alagic, Suad; Arbib, Michael "The Design of Well-Structured and Correct Programs", Springer-Verlag, 1978.