Espacios. Vol. 34 (3) 2013. Pág. 19 |
Método de análisis de problemas algorítmicos (PyR)Analysis method algorithmic problems (PyR)Ingrith Marcano 1 y Manuel Rosa 2 Recibido: 19-02-2013 - Aprobado: 13-03-2013 |
Contenido |
Gracias a sus donaciones esta página seguirá siendo gratis para nuestros lectores. |
RESUMO: |
ABSTRACT: |
1. IntroducciónLa generación de nuevas estrategias de trabajo en el ámbito académico de la educación universitaria venezolana, es una acción que repercute directamente en beneficios hacia el proceso enseñanza-aprendizaje de la comunidad estudiantil desde donde se identifican necesidades y se construyen soluciones; tal es el caso de la enseñanza de la programación de computadoras, disciplina en la que el docente junto con su grupo de estudiantes, abordan la concepción de la Informática como ciencia que da tratamiento automático y racional de la información, y a partir de la cual se han generado justos avances en tecnología que inciden en la rutina de trabajo del hombre, sin importar su área de conocimiento o profesión; es así como la Informática está presente en cualquier ámbito de desarrollo de la vida humana, y esto ha sido posible gracias a la inventiva del hombre, quien ha emprendido el reto de satisfacer sus necesidades de crecimiento y mejoramiento, valiéndose de los recursos naturales y tecnológicos a su alcance. Han sido muchos los avances de esta ciencia, también los beneficios que ha traído a la humanidad, y como carrera universitaria ha brindado al mundo profesionales que día tras día han generado aportes entre los que destacan la creación de nuevas tecnologías de desarrollo de software, y por ende, mejorías en los procesos de trabajo donde se involucra el ser humano y el computador. No obstante a esta realidad exitosa de la Informática para el mundo, también vale destacar que el estudio de esta ciencia presenta necesidades particulares, en especial cuando se aborda el tema de la enseñanza de la programación, en donde se debe emprender el camino a través del cual el estudiante construye soluciones informáticas a problemas presentados en el área de procesamiento de datos. Estas necesidades particulares van en relación a las estrategias de enseñanza implementadas, donde, a partir de la experiencia docente de la autora, se identificaron notables desventajas del método de análisis de problemas que se ha venido utilizando para la enseñanza en esta disciplina. En función de la necesidad que se hizo presente en los grupos de estudiantes asistidos por la investigadora, se emprendió el estudio interpretativo que permitiese determinar las causas de la marcada dificultad que presentan los aprendices al momento de analizar un problema para proponer su solución algorítmica; esos esfuerzos fueron organizados a través de un estudio cualitativo, en donde se documentó la participación de los estudiantes en diversas sesiones de clase, también se recolectó información de manera escrita y por medio de anotaciones derivadas de la observación directa; además se documentó la apreciación del docente en cuanto a vivencias que se han venido trazando a lo largo de su experiencia en la enseñanza de la programación bajo el enfoque estructurado. A partir de esa recopilación de datos, se emprendió la propuesta y construcción de un nuevo esquema representativo del análisis de problemas algorítmicos, contextualizado en un método de trabajo denominado PyR (Pienso y Resuelvo), el cual está enfocado a la implementación de terminología propia de la programación desde el momento en que se emprende el análisis del problema, para que se integre este conocimiento y así procurar la generación oportuna de acciones que trazarán posteriormente el camino hacia el algoritmo que resuelva el problema. Vale destacar que la investigación fue financiada por la Comisión de Investigación de la Universidad de Oriente, bajo el código CI-6060207/1752/11. 2. Fundamento y viabilidadEl software de sistema abarca todos aquellos programas que hacen funcionar y dan mantenimiento al hardware; mediante el software de aplicación se automatiza cualquier proceso imaginable por el hombre; mientras que el software de programación se concentra en crear programas conocidos como lenguajes de programación, los cuales son utilizados para el desarrollo de programas informáticos. Es así como los programas creados para satisfacer cualquier requerimiento de procesamiento de datos presentado por un usuario, se denominan programas informáticos o aplicaciones informáticas. Vale destacar que al hablar sobre software y hardware, necesariamente se define lo que es la Informática como “ciencia que estudia el tratamiento automático y racional de la información” (Alcalde y García, 1994, p. 1). Es así como quedan enmarcadas en las funciones de la Informática: (a) el desarrollo de nuevas máquinas; (b) desarrollo de nuevos métodos de trabajo; (c) la construcción de aplicaciones informáticas; y (d) mejorar los métodos y aplicaciones existentes, (ob. cit., p. 2). De esta manera se reitera que el desarrollo de software le compete a los estudiantes que se forman académicamente en la carrera Licenciatura en Informática, así como a los profesionales en Informática, claro está, que existe una marcada especificidad en el alcance de los programas informáticos desarrollados por estudiantes aprendices, en comparación con el alcance del software desarrollado por profesionales. En el caso de los estudiantes en formación, se trata de crear programas pequeños en su alcance y que se construyen en sólo un archivo fuente, los cuales se nombrarán como programas en lo adelante. Durante el desarrollo de un programa se siguen una serie de pasos, que incluyen la resolución algorítmica de un problema, estos son: (a) análisis del problema; (b) diseño del algoritmo; (c) codificación; (d) compilación y ejecución; (e) verificación; (f) depuración; y (g) documentación. Se puede decir que estos pasos son básicamente los que se abordan en la programación; sin embargo, existe en el mercado un amplio espectro de metodologías que se especializan en algún tipo de software, y que contemplan en gran medida los pasos tradicionales antes mencionados, combinándolos con los aportes novedosos, a fin de resultar atractivas y funcionales para los programadores. En consecuencia, se dispone de una importante existencia de metodologías de programación, en las que se pueden apreciar particularidades que definen el detalle de cada una de sus etapas, fases o pasos, que es lo que les permite distinguirse del resto de las metodologías. No obstante a sus diferencias, éstas generalmente comienzan con la etapa que refiere la comprensión del alcance de la automatización, también conocida como fase de análisis del problema. Punto donde el solucionador hace una revisión de los requerimientos que permiten delimitar el alcance que tendrá el programa resultante; en el caso particular de la asignatura Algoritmos y Estructuras de Datos I, donde se realizan estas prácticas, los problemas son seleccionados intencionalmente por el docente, a fin de intervenir en el proceso de aprendizaje de los estudiantes para que éstos transiten hacia la adquisición de competencias en la programación, y es por ello que se ha podido apreciar cuál es el comportamiento general del grupo de trabajo cuando aplica este análisis, lográndose evidenciar que son pocos los avances que los estudiantes tienen en cuanto a la comprensión del problema y delimitación del alcance del programa; siendo una posible causa, la poca claridad con la que se presenta la explicación acerca del proceder del solucionador del problema en esta fase inicial, lo que conlleva a afirmar que en muchos de los casos, la documentación de esas metodologías de trabajo contienen explicaciones incompletas y/o ambiguas, lo que conlleva a que los programadores hagan interpretaciones de éstas, según su conveniencia. En el caso de programadores avanzados, este detalle puede no afectarlos, dado que es muy probable que éstos logren sus objetivos incorporando empíricamente un modelo de análisis acorde a su necesidad; sin embargo, para los programadores que se están iniciando, el apego a los pasos para el desarrollo de programas de computadora, es sumamente significativo para su proceso de aprendizaje y adaptación, así como para la adquisición de experiencias que enriquezcan su trayectoria en la programación. Estas experiencias conllevan al desarrollo de la lógica, que es una capacidad innata del ser humano, no se transfiere, no se enseña; y es precisamente una concepción que se desprende de la teoría señalada por el padre de la Filosofía Moderna René Descartes, quien argumenta mediante las Reglas del Método, que “la capacidad de razonar es básica y primitiva, y nadie puede enseñárnosla” García (s/f). En este sentido, se podría afirmar que ante alguna circunstancia o asunto que resolver, el ser humano razona atendiendo a los factores internos y externos que lo circunscriben, de tal forma que pueda llegar a cierto nivel de comprensión, y posteriormente obtener respuestas a sus necesidades. Es así como en medio del proceso de resolución de un problema, se procede a estructurar y esquematizar el pensamiento que conlleva a la solución, es decir, se aplica lo que se ha denominado Lógica Simbólica, que es una ciencia derivada de la Lógica formal implementada desde el siglo XIX por las ciencias computacionales. Para estructurar ese pensamiento que conlleva a la solución, intervienen múltiples factores, entre los que se desean resaltar los conocimientos y formalidades que se deben incorporar según sea la naturaleza de ese problema por resolver. En este orden de ideas, se puede afirmar que para hacer un buen análisis se deben contemplar una serie de aspectos inherentes al problema, y es a través de este ejercicio, donde se descubren y puntualizan detalles que configuran la naturaleza del problema, así como su solución; lo que conlleva a inferir que la calidad del resultado del análisis depende de la adecuada conjugación de conocimiento acerca del problema, disposición para resolverlo y del método empleado. Durante el proceso tradicional para la creación de programas, específicamente en la etapa del análisis del problema, se responden cuatro (4) preguntas, referidas a ¿Cuál es el problema?, ¿Cuáles datos se utilizarán?, ¿Cuáles operaciones se aplicarán? y ¿Cuáles son las salidas?; preguntas que a grandes rasgos resultan insuficientes para los estudiantes que apenas están comenzando a entrenarse en la disciplina de la programación. Pues bien, luego de responder las preguntas del análisis, el solucionador del problema pasa a la solución algorítmica, presentando dudas acerca de cómo se configurará la solución del problema; vale decir que esta afirmación se sustenta en la experiencia que la autora tiene en la formación profesional de estudiantes que se inician en la programación de computadoras; esto sugirió que se le debe prestar mayor atención al análisis, abordándolo de forma más completa y logrando que el estudiante contemple todos los factores que incidirán en el éxito de la solución a proporcionar. Es decir, el ejercicio de análisis de un problema implica un proceso de pensamiento por parte del solucionador, en este proceso deben existir herramientas de representación de resultados que permitan obtener un bosquejo formal y completo del resultado de esta práctica, a efectos de que pueda ser retomado y utilizado para proseguir en las siguientes etapas para el diseño del algoritmo. Por las fuerzas anteriormente expuestas, se propone la creación de un nuevo método para el análisis de problemas, que provea a su vez un esquema representativo del resultado del análisis, que contemple integralmente lo que corresponde a este paso, sin dejar ambigüedades y aportando al estudiante una guía concreta y efectiva, que le facilite el paso al diseño del algoritmo, evitando así las demoras y confusiones que se presentan cuando se aplica un análisis del problema incompleto. 3. Métodos empleadosLa confección de un método de análisis de problemas dirigido a la comunidad estudiantil que se inicia en la programación a nivel básico y bajo el paradigma estructurado, representa un trabajo de investigación que incluye un alto valor pedagógico en vista de que la idea se concibe desde el propio escenario donde éste acontece. En este sentido, se implementaron métodos cualitativos tales como la observación directa, entrevistas a profundidad, y como eje central se desarrollará el estudio bajo el enfoque investigación acción participativa orientada al contexto del salón de clases, donde se concentran esfuerzos para resolver situaciones que suscitan en el aula. El método de investigación acción es considerado como uno de los más integradores, por cuanto implica el consenso y el trabajo grupal, donde los estudiantes y docentes conforman el equipo de investigación, rompiendo el paradigma que separa el sujeto y el objeto de estudio (Martinez, 2006). Se justifica este método en vista de que la naturaleza de la investigación requiere de un trabajo a partir del cual se logren identificar los elementos que conlleven a definir la realidad de la construcción y aplicación del método de análisis en la resolución de problemas. 4. Fundamentación TeóricaLa Resolución de ProblemasLa resolución de problemas consiste en un conjunto de actividades mentales y conductuales, que buscan dar respuesta a una situación planteada, para ello se activan procesos del pensamiento, que no han sido enumerados estricta y estáticamente, dado que son procesos sumamente complejos, dinámicos y propios del ser humano; no obstante, los procesos de pensamiento se ponen de manifiesto cuando el sujeto está involucrado en una situación de solución de problemas. Varios autores ya señalaban la importancia de esta idea (muy representativos son Bloom y Broder, 1950; Duncan, 1959; Polya, 1945); pero es a partir del influyente libro “Human Problem Solving” de Newell y Simon (1972) cuando éste se convierte en un paradigma de investigación de los procesos de pensamiento (Saiz, 1994, p. 6). El precitado autor también argumenta que Newell y Simon fueron acertados en su paradigma porque ofrecieron una metáfora clara y poderosa del pensamiento humano. En opinión de algunos autores esta metáfora es hoy día el marco de referencia fundamental en la investigación del pensamiento humano (Anderson, 1993; Baron, 1988; Greeno y Simon, 1988; Lesgold, 1988; Mayer, 1992; VanLehn, 1989). Su notable influencia en estos estudiosos del pensamiento humano obedece a que la metáfora de solución de problemas, en primer lugar, es enormemente transparente (Anderson, 1993, es muy explícito en este sentido al denominarla concepción canónica); sus componentes son simples (el estado–inicial e intermedio–, la meta –final y las submetas–, los operadores, y el espacio problema). En segundo lugar, es flexible porque es susceptible de aplicarse a cualquier situación problema; y como tercer punto, es útil porque como metáfora permite comprender la interdependencia que existe entre diferentes ideas o conceptos, y entre algunos de los mecanismos de la mente humana (p. 7). En términos puntuales, Saiz (ob. cit.) sintetiza que en medio del paradigma del pensamiento humano se acepta que durante el proceso de resolución de problemas la mente humana activa su proceso para “… tomar decisiones, generar soluciones satisfactorias (mediante mecanismos de razonamiento o procedimientos heurísticos), que normalmente requieren una considerable dosis de creatividad”, (p. 7). En este sentido, este proceso se refiere a que en el momento de resolución se vinculan actividades como: decidir, razonar (formal o informalmente –heurísticamente–) y pensar creativamente. Esta metáfora sobre la solución de problemas ha sido ampliamente utilizada en innumerables estudios que buscan precisar el proceso de pensamiento humano, no obstante, tal pretensión escapa del alcance de esta investigación, por cuanto sólo aborda el estudio de los aspectos representativos que el estudiante elabora durante el análisis de un problema. En suma, es válido resaltar que dentro del complejo proceso de resolución de problemas, son innumerables los aspectos que aún se investigan, entre los que destacan la comprensión y la búsqueda de solución (estrategias). Siendo la representación un elemento inherente a la comprensión, mientras que las estrategias persiguen la búsqueda de alternativas de solución; además, se mantienen en estudio los factores que afectan la solución de problemas (Verdugo y Fuertes, 1994). La representación consiste en la transformación de la información presentada que es almacenada en el sistema de memoria del individuo y que incluye la identificación de las metas y los datos que orientan la solución del problema; las estrategias se refieren a las operaciones mentales que los solucionadores utilizan para pensar sobre la representación de las metas y los datos, con el fin de transformar éstos en metas y alcanzar una solución; mientras que los factores que afectan la solución de problemas, según Lester (1983) citado por Fuentes (1993), se agrupan en categorías como factores vinculados a la tarea, relacionados con los procesos, y dependientes del sujeto. Los factores vinculados a la tarea son aquellos asociados con la naturaleza del problema, por ejemplo: su contenido, su estructura, el contexto y la sintaxis. Los factores que conciernen a los procesos mentales desarrollados por los individuos son objeto de estudio por parte de los investigadores del paradigma cognitivo, quienes tratan de modelar la forma en que opera el cerebro al momento de pensar y resolver un problema, lo cual ha constituido todo un reto a la humanidad. Los factores dependientes del sujeto solucionador se refieren básicamente a las características de los individuos en cuanto a su conocimiento, la experiencia previa, la habilidad en la lectura, la perseverancia, las habilidades de tipo espacial, la edad y el sexo. Por otra parte, Andre (1986), citado por Poggioli (2001), indica que el proceso de resolución de problemas (sin importar su naturaleza) puede describirse a partir de los elementos considerados a continuación: (a) una situación en la cual se quiere hacer algo, pero se desconocen los pasos precisos para alcanzar lo que se desea; (b) un conjunto de elementos que representan el conocimiento relacionado con el problema; (c) el solucionador de problemas o sujeto que analiza el problema, sus metas y datos, para luego formar una representación del problema en su sistema de memoria; (d) el solucionador de problemas que opera sobre la representación para reducir la discrepancia entre los datos y las metas; (e) la solución de un problema está constituida por la secuencia de operaciones que pueden transformar los datos en metas; (f) al operar sobre los datos y las metas, el solucionador de problemas utiliza o puede utilizar los siguientes tipos de insumos: información almacenada en su memoria de largo plazo en forma de esquemas o producciones, procedimientos heurísticos, algoritmos y relaciones con otras representaciones; (g) el proceso de operar sobre una representación inicial con el fin de encontrar una solución al problema, se denomina búsqueda. Como parte del proceso de búsqueda de la solución, la representación puede transformarse en otras representaciones; y (h) la búsqueda continúa hasta que se encuentra una solución o el solucionador de problemas se da por vencido. Tal como se puede apreciar en los ítems anteriores, la resolución de un problema implica un proceso donde la concentración de esfuerzos, el conocimiento, la inventiva, la motivación y destreza del solucionador del problema, juegan un papel que marca el éxito del proceso, es decir, de la solución en sí. En las asignaturas donde se inicia la formación de estudiantes, en materia de creación de programas para computadoras, se proponen una serie de problemas que implican la creación de algoritmos que respondan a la solución de éstos, implicando la conjugación de los factores emocionales, cognitivos y conductuales. En este sentido, para mejorar las estrategias en la resolución de problemas, y/o garantizar que el rendimiento en el desarrollo de esta tarea sea elevado, se estudió la forma en que los estudiantes llevan a cabo el análisis del problema, a fin de que esa fase dentro de la resolución de problemas, se defina con claridad, ofreciendo un nuevo esquema de representación para el modelado del análisis, que sea comprensible y cubra con los aspectos que deben abordarse para continuar al paso siguiente (diseño del algoritmo). Revisión de algunos métodos de Resolución de ProblemasCada disciplina o área de conocimiento dispone de estrategias específicas para resolver problemas de su ámbito; por ejemplo, resolver problemas matemáticos implica utilizar estrategias propias de las matemáticas. Sin embargo, algunos psicólogos opinan que es posible utilizar con éxito estrategias generales, útiles para resolver problemas en muchas áreas. A través del tiempo, la humanidad ha utilizado diversas estrategias generales para resolver problemas, en la esta sección se detallarán algunas estrategias, explicando cada una de sus etapas, a fin de tener un abanico de alternativas metodológicas que con el devenir se han puesto en práctica en la resolución de problemas. Varios investigadores han analizado la actividad de resolución de problemas y señalan que tal actividad es un proceso que involucra una serie de etapas, Wallas (1926), señala las fases de: (a) preparación, donde el solucionador analiza el problema, intenta definirlo en forma clara y recoge hechos e información relevante al problema; (b) la incubación, en la cual el solucionador analiza el problema de manera inconsciente; (c) la inspiración, fase en la cual la solución al problema surge de manera inesperada; y (d) la verificación, es la fase que involucra la revisión de la solución. De forma empírica cualquier problema alcanzable por el entendimiento de su solucionador, pudiera resolverse aplicando este método, dado que plantea una estrategia bastante general, poco rigurosa, falta de detalles, que bien puede considerarse inaplicable para efectos por ejemplo, de la enseñanza de algoritmos a estudiantes que se inician en esta tarea, puesto que precisamente no abunda en los detalles acerca de qué debe preguntarse el estudiante para resolver o al menos guiarse hacia la solución del problema objeto de estudio. Otros autores (Andre, 1986; Hayes, 1981), citados por Poggioli (ob. cit.) señalan que las etapas en la resolución de problemas sirven para enfatizar el pensamiento consciente y para aproximarse analíticamente a la solución, así como también para ofrecer una descripción de las actividades mentales de la persona que resuelve el problema. En tal sentido, Andre propone que las etapas en la resolución de problemas son las especificadas de la siguiente manera: (a) darse cuenta del problema, de que existe una discrepancia entre lo que se desea y lo que se tiene; (b) especificación del problema, se trabaja una descripción más precisa del problema; (c) análisis del problema, se analizan las partes del problema y se aísla la información relevante; (d) generación de la solución; (e) revisión de la solución, se evalúan las posibles soluciones; (f) selección de la solución; (g) instrumentación de la solución, se implementa la solución; (h) nueva revisión de la solución, de ser necesario. Es preciso resaltar que las etapas se aplican usualmente a problemas aritméticos y algebraicos, pero también pueden aplicarse a muchos otros tipos de problemas Poggioli (ob. cit.). Un autor clásico acerca de la solución de problemas es Polya (1965) quien en su obra “Cómo plantear y resolver problemas” sugiere estrategias favorables al desarrollo de habilidades cognitivas. El mismo, señala que un problema puede resolverse correctamente si se siguen los siguientes pasos: (a) comprender el problema, (b) concebir un plan para llegar a la solución, (c) ejecutar el plan, (d) verificar el procedimiento y (e) comprobar los resultados. Además, Polya propuso el empleo de métodos heurísticos como descomponer el problema en subproblemas más simples, usar diagramas o gráficas y trabajar el problema hacia atrás, es decir desde el resultado, hacia los datos o estados iniciales. Pese a los años que han pasado desde la creación del método propuesto por Polya, hoy día aún se considera como referente de alto interés acerca de la resolución de problemas, tal es el caso del estudio realizado por López (2010, p. 6), donde contextualiza el método Polya a la solución informática de un problema, sintetizando que las cuatro fases que componen el ciclo de programación, concuerdan con las operaciones mentales descritas por Polya para resolver problemas matemáticos: entender el problema (analizar el problema); trazar un plan (diseñar un algoritmo); ejecutar el plan (traducir el algoritmo a un lenguaje de programación); y revisar (depurar el programa). Vale destacar que el mencionado autor hace énfasis en la importancia de la primera fase, entender el problema, esto es, analizar el problema hasta lograr la mejor comprensión posible de éste; para ello, se debe formular claramente, especificar los resultados que se desean obtener, identificar la información disponible (datos), determinar las restricciones y definir los procesos necesarios para convertir los datos disponibles (materia prima) en la información requerida (resultados solicitados). Además hace la siguiente afirmación “los textos universitarios consultados, aunque reconocen la importancia del análisis de problemas, omiten explicar la forma de trabajarlo en el aula y a esto le dedican únicamente pocas páginas”, con lo cual estoy en total acuerdo, se habla, se define el análisis, en qué consiste, pero prevalecen fallas en cuanto a su práctica su representación, lo cual puede incidir directamente en el resultado de tal práctica. Por su parte, Schoenfeld (1985), considerando insuficientes las estrategias planteadas por Polya para la resolución de problemas, sostiene que este proceso es más complejo e involucra más elementos, inclusive de carácter emocional-afectivo, psicológico, sociocultural, entre otros. Estableció, por tanto, la existencia de cuatro aspectos que intervienen en el proceso de resolución de problemas: los recursos (entendidos como conocimientos previos, o bien, el dominio del conocimiento), las heurísticas (estrategias cognitivas), el control (estrategias metacognitivas) y el sistema de creencias. Schoenfeld se ha dedicado a proponer actividades de resolución de problemas que se pueden llevar a cabo en el aula, con el fin de propiciar situaciones semejantes a las condiciones que los matemáticos experimentan en el proceso de desarrollo de resolución de problemas, su modelo de resolución abarca los siguientes pasos: (a) análisis, (b) exploración y (c) comprobación de la solución; el cual puede aplicarse a problemas matemáticos y algebraicos. En la etapa de análisis, sugiere acciones como trazar un diagrama, si es posible; examinar casos particulares; probar a simplificar el problema. Mientras que en la etapa de exploración, sugiere examinar problemas esencialmente equivalentes, sustituyendo las condiciones por otras equivalentes, recombinando los elementos del problema de modo diferente y/o replanteando el problema; examinar problemas ligeramente modificados: estableciendo submetas, descomponiendo el problema en casos y analizar caso por caso; también, examinar problemas ampliamente modificados: construir problemas análogos con menos variables, mantener fijas todas las variables menos una para determinar qué efectos tiene esa variable, tratar de sacar partido de problemas afines que tengan parecido en su forma, en sus datos o en sus conclusiones. En la etapa de comprobación de la solución obtenida, indica que se debe verificar la solución obtenida siguiendo criterios específicos: utilización de todos los datos pertinentes, uso de estimaciones o predicciones; y además, verificar la solución obtenida siguiendo criterios generales: examinar la posibilidad de obtener la solución por otro método, reducir la solución a resultados conocidos. Por otra parte, Bañuelos (1995), propuso un resumen de los pasos para solucionar problemas y la intervención del solucionador, a través del planteamiento de una serie de preguntas por cada paso, los cuales se tratan de (a) comprender el problema; (b) concebir un plan, donde el solucionador debe descubrir las relaciones entre los datos y la incógnita; también puede verse obligado a tomar en cuenta problemas auxiliares si no encuentra una relación inmediata; además debe llegar a tener un plan de resolución; (c) ejecución del plan; y (d) verificación. El planteamiento de Bañuelos es sumamente razonable, en virtud de que las preguntas que sugiere en cada paso, apuntan a que el solucionador se concentre en la esencia del problema, relacionándolo con otros que pudieran formar parte de su experiencia previa; sin embargo, este énfasis en la experiencia previa puede convertirse en factor que condicione el rendimiento del sujeto solucionador en aquellos casos donde esta experiencia sea baja o nula, por ejemplo, eso se podría apreciar si se implementase este método en las asignaturas donde se realizan prácticas de solución algorítmica de problemas, tal como el caso en estudio. Una de las más completas opciones metodológicas halladas en la revisión documental, se refiere a la Metodología para la Resolución de Problemas Algorítmicos propuesta por Tucker (1991), denominada por sus siglas en inglés MAPS, sus etapas son las siguientes: (a) El Diálogo, que consiste en comprender el problema, leer el enunciado del problema y hacer preguntas sobre las características de las entradas y las salidas. Consiste también en la identificación de las entradas, las salidas y sus respectivas limitaciones, para un problema determinado, como fruto de un proceso de análisis, en el cual se le sugiere al estudiante aplicar un enfoque sistémico para realizar una correcta delimitación del problema; (b) Las Especificaciones, que se definen a partir de las entradas y salidas identificadas en la etapa anterior. Este proceso tiene como fin predecir las pre y post condiciones expresadas como predicados, que en un futuro permitirán evaluar la consistencia del algoritmo ya sea utilizándolas como estados iniciales, intermedios o finales. El estudiante debe tener conocimientos previos de lógica matemática para lograr especificaciones claras de las pre y post condiciones. Escribir pre y postcondiciones que sean completas y consistentes; (c) La División, que implica subdividir, de forma sistemática, el proceso en una colección de pasos diferentes. Repetir este proceso para cada paso hasta que la subdivisión no tenga sentido. Identificar las relaciones de control entre los distintos pasos. Es decir ¿qué paso debe preceder a cuál?, ¿qué pasos son parte de otro más complejo?, ¿qué pasos deben repetirse dentro de un bucle?, y así sucesivamente; (d) Definición de Abstracciones, etapa donde se determinan cuáles de los pasos que se han utilizado se repite, recolectándolos y adaptarlos en una sola rutina para ser utilizada en la situación presente. Se deben identificar rutinas que se pueden reutilizar en el programa, ya sea que existan o que se necesiten desarrollar, esto le permitirá realizar sus programas más fácilmente, de tal forma que su mantenimiento y comprensión sea más sencilla. En muchos casos, esta tarea implica la construcción de nuevas rutinas a partir de otras, o incluso construir una nueva para una utilización más especializada; (e) Codificación, que trata de trasladar el algoritmo a un lenguaje de programación, crear el programa fuente con base en la sintaxis propuesta por el lenguaje de programación escogido, compilarlo y por último depurarlo; (f) Prueba y Verificación, donde se realizan las pruebas y verificaciones del programa con miras a que éste sea: un programa correcto, robusto y amigable. La prueba se realiza para el conjunto de entradas que permita explorar todo el rango de valores permitidos por las precondiciones, para cada ejecución, comprobar que las salidas satisfacen las postcondiciones; (g) Documentación, donde se debe crear la documentación necesaria, esta debe ser tanto interna (expresada en líneas de texto dentro del programa) como externa (creando un documento anexo que exponga los aspectos clave del programa para su mantenimiento posterior), de forma tal que su mantenimiento sea fácil. Se debe identificar el programa, el autor la fecha, una explicación de cada rutina utilizada, no hay límite en cuanto a comentarios, de tal manera que faciliten la modificación programa. MAPS además plantea dos (2) conceptos fundamentales, estos son: el análisis y la síntesis. El análisis consiste en definir las partes en función de un comportamiento; es decir, se debe obtener algo específico y conocido, a partir de algo general y desconocido; es ir del todo a las partes; es responder a preguntas que involucran ¿qué?, consiste en indagar. Por ejemplo: ¿qué debe entrar al problema?, ¿qué resultados deben salir del problema? y ¿qué procesos debe ejecutar el problema para convertir las entradas en salidas? Por su parte, la síntesis que consiste en definir un comportamiento a partir de una serie de partes, es ir de las partes al todo, de algo conocido a lo desconocido, consiste en crear; es responder a preguntas sobre ¿cómo? Por ejemplo: ¿cómo se debe desarrollar este proceso para lograr convertir las entradas en salidas? El método MAPS, resulta de mucha utilidad referencial; sin embargo, es escasa en la descripción de las especificaciones acerca de las notaciones que el estudiante, analista o solucionador del problema, debe utilizar para representar el resultado de cada una de sus etapas. Lo cual se traduce precisamente en una de las necesidades que se tiene en la actualidad, referente a proporcionar a las personas que incursionan en el mundo de la programación de computadoras (estudiantes), acerca de una herramienta que sea rica en detalle, de forma tal que éstos solo tengan que hacer el trabajo fuerte de pensar, razonar, la solución, sin invertir tiempo ni esfuerzo en pensar y hallar la forma como plasmará su resultado, el cual será insumo en la etapa de diseño del algoritmo y programa de computadora. En el caso particular de los problemas que son objeto de estudio en la investigación, se utiliza un proceso que también conduce al estudiante (solucionador) a hacerse una serie de preguntas; sin embargo, la experiencia de la autora permite señalarlo como un método incompleto, insuficiente, digno de ser mejorado y profundizado, tal como lo sustenta el resulta del análisis de efectividad aplicado sobre éste (Marcano, 2010). En consecuencia, prevalece una falta de descripción referente a cómo el estudiante o solucionador debe plasmar las operaciones que utilizará para resolver el problema; en este orden de ideas, hace falta incorporar a estos modelos de análisis, mayor detalle en cuanto a cómo describir las operaciones; con lo cual se logrará un mayor aprovechamiento de lo que se identifique en el análisis, para el diseño del algoritmo. En síntesis, como puede observarse, desde principios del siglo XIX, diferentes autores han propuesto pasos, fases o etapas a cumplir para resolver problemas con éxito. Este aspecto es importante ya que permite, de antemano, planificar los pasos a seguir en la resolución de un problema, ejecutar esos pasos y, posteriormente, supervisar el proceso de resolución y comprobar la solución o resultado. Sobre la base de esta última idea, se concentra el esfuerzo que compromete a la investigación en la confección del método PyR, para ser utilizado en la creación de programas para computadoras, utilizando el paradigma de programación estructurada, tal como es el caso de la asignatura Algoritmos y Estructuras de Datos I (230-1214), de la Carrera Licenciatura en Informática de la Universidad de Oriente. 5. Resultado: Método PyREste modelo de análisis marca un adelanto en la introducción al uso de estructuras de control que serán formalmente utilizadas en los algoritmos y programas, que posteriormente el solucionador del problema deberá proporcionar. Es importante que en medio de la tarea de análisis, el solucionador pueda concretar la estructura general que tendrá la solución al problema, cuestión que se perfilará aún más en un siguiente paso tal como lo es el diseño del algoritmo. Esto sugiere para el solucionador, un mayor esfuerzo en comprender la situación que se debe abordar para construir la solución algorítmica. Por ello, se debe hacer referencia durante la labor del análisis, a la identificación de las estructuras selectivas, repetitivas y de cálculo que se prevén utilizar, las cuales son imprescindibles para la solución buscada. Una de las premisas que sustentan el planteamiento de esta fuente contentiva de elementos representativos del resultado del análisis de problemas, se refiere precisamente a que el solucionador debe plasmar sus ideas o enfoque derivado de la comprensión que obtuvo del problema, y para ello éste debe conocer o al menos simpatizar con alguna forma de representación de las ideas o conjeturas que se establece para resolverlo; esto es, básicamente contar con un esquema de representación, que no se trata de un lenguaje universalmente probado, sino más bien, de una herramienta de trabajo que el docente utiliza en medio del proceso de enseñanza de la programación de computadoras; en este sentido, a través del método se ofrece un punto de referencia que puede ayudar al docente a comunicarse con sus estudiantes y viceversa. A continuación se identifican los aspectos de representación según sean las acciones aplicables para solución de un problema, entre las cuales se tienen: asignaciones; estructuras de selección, simple, doble y múltiple; y estructuras repetitivas. Por otra parte, se señalan aspectos representativos para el tratamiento de estructuras de datos como: cadenas, registros, arreglos y archivos. Considérese que el tipo de problemas aplicables en la asignatura caso de estudio, son de tipo bien estructurado, por ende, las acciones que se definen a continuación están contempladas para esta tipología de problemas. Asignaciones
Estructura de Selección Simple
Estructura de Selección Doble
Estructura de selección Múltiple
Estructura Repetitiva
En la identificación de iteraciones se debe especificar el significado que tendrá cada iteración en relación al problema que se está resolviendo, y dentro del cuerpo del ciclo delimitado por el corchete, se colocan cada una de las acciones que se ejecutarán dentro del ciclo. Es válido resaltar que en la sección de identificación de iteraciones no se concreta el diseño de una expresión lógica formal, en lugar de ello, se establece la condición que regirá las iteraciones, es decir, el solucionador debe aproximarse a la lógica que controlará las repeticiones sucesivas del proceso que se está demarcando en un proceso cíclico. Los ciclos son particularmente útiles para repetir procesos, en la enseñanza de la programación es muy utilizado el cálculo a través de contadores y acumuladores, variables bandera o centinelas, y éstas se activan o mejor dicho obtienen valores puntuales al procesarse las iteraciones dentro de los ciclos, es por ello que resulta imprescindible anotar dentro del cuerpo del ciclo, cuáles son las variables que guardan este tipo de cálculo, y aún más importante, el solucionador debe tener claridad respecto con el control de las iteraciones que se realizarán. Acceso a un carácter dentro de una cadenaIdentificador [posición] Para el tratamiento de datos tipo cadena de caracteres, se debe precisar la forma de acceso requerida al contenido, esto es, al valor completo o bien a cada carácter individualmente. El acceso se anotará colocando como tradicionalmente se realiza en los lenguajes de programación, el nombre del identificador que guarda el valor de la cadena de caracteres y encerrando entre corchetes el número de la posición a acceder, ahora bien, para hacer referencia al contenido completo de la cadena, basta sólo con colocar el nombre del identificador; y si se quiere comparar el valor de una cadena y el valor no está representado por un identificador, entonces el mismo debe encerrarse entre comillas dobles. Acceso a un elemento dentro de un Arreglo UnidimensionalIdentificador [posición] Para el tratamiento de datos contenidos en arreglos de una dimensión, también conocidos como vectores, se accederá la estructura completamente en el caso que se requiera hacer una copia de ésta en otro identificador de iguales características, o bien, se accederá individualmente a cada uno de los valores almacenados, los cuales ocupan una posición particular dentro de la estructura. El acceso se anotará colocando como tradicionalmente se realiza en los lenguajes de programación, el nombre del identificador que guarda el conjunto de valores y encerrando entre corchetes el número de la posición a acceder; al igual que el acceso individual a los caracteres de una cadena, el acceso a cada valor del arreglo requiere de un índice que se ocupa de señalar cuál es la posición a tratar en un momento dado. El solucionador del problema, durante el análisis debe graficar la estructura del vector, indicando qué cantidad de celdas o elementos contiene la estructura, la apariencia es la de un rectángulo segmentado en tantas partes como valores almacenará la estructura. Acceso a un elemento dentro de un Arreglo BidimensionalIdentificador [coordenada fila] [coordenada columna] Para el tratamiento de datos contenidos en arreglos de dos dimensiones, también conocidos como matrices, se accederá la estructura completamente en el caso que se requiera hacer una copia de ésta en otro identificador de iguales características, o bien, se accede individualmente a cada uno de los valores almacenados, los cuales ocupan una posición particular dentro de la estructura, que resulta del cruce de la coordenada de las filas y la coordenada de la columna. El acceso se anotará colocando como tradicionalmente se realiza en los lenguajes de programación, el nombre del identificador que guarda el conjunto de valores y encerrando entre corchetes el número de la posición correspondiente a la coordenada de las filas, seguido de otro par de corchetes que encierra la posición correspondiente a la coordenada de las columnas; en el caso del acceso a una matriz, se requieren dos índices, uno para el posicionamiento en cada coordenada fila, columna, a través de las cuales se podrá localizar el valor que particularmente se desea acceder dentro de la estructura. En el análisis se requiere que el solucionador del problema elabore un gráfico de la estructura del arreglo, en este caso la matriz, dibujando la cuadrícula y señalando la cantidad de filas, de columna y a qué elemento del contexto del problema se asocia cada una de estas dimensiones. Acceso a un elemento dentro de un RegistroIdentificador.Campo En el tratamiento a estructuras de registros, se accederá la estructura completamente en el caso que se requiera hacer una copia de ésta en otro identificador de iguales características, o bien, se accederá a cada uno de los campos que conforman la estructura del registro, esto es, utilizando el nombre del identificador, seguido de un punto que funge como selector del nombre del campo que se requiere tratar. En el análisis se requiere plantear gráficamente la estructura del o los registros utilizados, utilizando la notación de árbol jerárquico invertido, es decir, la raíz va primero y se identifica con el nombre del registro a graficar, luego cada hoja se etiqueta con el nombre de cada campo que conforma la estructura, si un campo de compuesto de otros, igualmente se grafican los mismos como hojas dentro del campo compuesto. Acceso a un elemento dentro de un Archivo de DatosEl manejo de archivos implica la descripción de operaciones de tratamiento requeridos para hallar los resultados esperados en función del contenido de los mismos. En este sentido, para indicar cada operación se optará por utilizar una descripción narrativa de la acción a efectuarse sobre la estructura del archivo.Entre las operaciones básicas a representar se tienen las siguientes: Creación del archivo: se coloca la acción Crear seguida del nombre del identificador asociado al archivo en tratamiento. Abrir archivo: se indica la acción de Apertura seguida del nombre del identificador asociado al archivo en tratamiento. Cierre del archivo: se coloca la acción Cerrar seguida del nombre del identificador asociado al archivo en tratamiento. Eliminar el archivo: se coloca la acción Eliminar seguida del nombre del identificador asociado al archivo en tratamiento. Renombrar un archivo: se coloca la acción Renombrar seguida del nombre del identificador actual asociado al archivo en tratamiento, luego se agrega el nuevo nombre con el que se actualizará. Lectura de un registro: previa la apertura del archivo en tratamiento, se indica la acción para leer, agregando el nombre del archivo de donde se aplica la operación y también el nombre del registro donde se recibe el resultado de la lectura, esto es: Leer un registro del archivo identificador guardando copia en el registro identificador De igual forma se graficará el contenido del archivo, indicando la estructura del registro, de esta forma, el solucionador tendrá presente los nombres de los campos a utilizar durante la gestión del archivo. Una vez identificada la forma de representación de las acciones que pueden suscitar en la solución de un problema, al igual que el tratamiento para los datos localizados en cadenas, registros, arreglos y archivos, se procede a definir la estructura que dará forma a la representación completa del análisis de un problema. Secciones que conformanel MétodoPyREste método propone una serie de secciones entre las cuales destacan: definición del problema, cálculos a realizar, definición de datos y descomposición modular del problema, éstas en conjunto recogerán el resultado de la labor de análisis emprendida por el solucionador del problema. Cada una será descrita en los párrafos siguientes. A. Definición del ProblemaEnunciado 1. Enunciado 2. Enunciado N. Considerando como enunciados, cada uno de los objetivos que se deben cumplir para llegar a la solución del problema. Con esta forma de precisar el problema, el estudiante pensará o realizará un mayor esfuerzo en comprender la lectura que encierra el planteamiento, dando así pasos más firmes y precisos para avanzar a los siguientes aspectos a cubrir para el análisis. B. Cálculos a realizarAquí se elaborará cada expresión que conduzca al cálculo matemático o lógico necesario para hallar la solución al problema. Es decir, en esta sección se incluyen las expresiones aritméticas y lógicas que apliquen para resolver cada parte del problema. Expresiones aritméticas. Diseñe una formula (ecuación) utilizando el operador de igualdad para referir una asignación del resultado de cálculo al identificador que aparezca al lado izquierdo de la fórmula. Expresiones relacionales. Coloque al margen izquierdo de la expresión un par de signos de interrogación, lo cual señalará que se trata de una expresión que origina una pregunta o cuestionamiento, la cual deberá evaluarse obteniendo como resultado un valor lógico (verdadero o falso); según sea el resultado que se obtenga, éste se indicará al igual que las acciones que se deban realizar en cada caso. En esta parte del análisis igualmente se debe acotar si las expresiones van enmarcadas en operaciones que deben efectuarse de manera iterativa; en tal caso, se debe enmarcar el espacio que reúne aquellas expresiones que se repiten en este proceso, tal como se señaló en la notación para estructuras repetitivas. C. Definición de DatosEn esta sección se puntualizan los identificadores que fueron utilizados en la sección referida a los cálculos, a sabiendas de que los identificadores son todos aquellos objetos contenedores o representativos de algún valor involucrado en el problema. Para ello se elabora una tabla de especificaciones. Esto ayudará a concretar el uso de cada identificador en el algoritmo próximo a construir, una vez analizado el problema. Constantes Variables
En la tabla de constantes, se crearán nombres para las constantes involucradas en el problema, a cada una se le asignará un nombre, también conocido como identificador, seguido de su valor; aquí básicamente se está dando nombres a los valores más destacados en los cálculos, de modo que éstos puedan ser representados como constantes en el algoritmo. Se tomará como variable a todo identificador creado en la sección de cálculos a realizar, agregando la especificación sobre el tipo de datos de cada variable, entre los cuales están: entero, real, carácter, cadena, registro, arreglo o archivo; además señalando la función que tendrá cada una en el proceso, lo cual dependerá del momento en el cual recibirá su valor, esto es: entrada, proceso, salida. Se propone esta especificación para que el solucionador tenga en cuenta que existen valores que serán aportados por el usuario, los cuales se tratan de los valores de entrada al problema, y estarán almacenados en las variables de entrada; por otra parte, existen variables que no obtienen valores del usuario, sino más bien de resultados de cálculos parciales elaborados en el proceso, por tal razón se les identificará como variables de proceso; y finalmente, se tendrán aquellas variables portadoras de valores resultados buscados durante la labor de análisis, a éstas se les llama variables de salida. Las variables portadoras de resultado (de salida) conforman una lista que debe ser cotejada con los enunciados realizados en el punto inicial del análisis, de tal forma que se pueda verificar el cumplimiento de las salidas a la solución del problema. Desde aquí se debe sembrar la cultura de colocar nombres adecuados a los identificadores, obedeciendo a reglas estándares que facilitarán el trabajo en las fases subsiguientes en la producción de soluciones informáticas. Entre las recomendaciones más resaltantes comentadas por Joyanes (1998), se tienen las siguientes: (a) sólo se permite el uso de letras, números y guión bajo; (b) el nombre debe comenzar por una letra; (c) no se permiten espacios en blanco, utilice el guión bajo en lugar de espacio; (d) coloque nombre significativo, es decir, que el nombre exprese lo que el identificador representa; la extensión del nombre del identificador no debe exceder doce (12) caracteres. Al respecto de la última acotación que menciona el autor, se le indica a los estudiantes que mientras más largo sea el nombre, mayor será la posibilidad de equivocarse escribiéndolo en el algoritmo y luego en el programa, en lugar de nombres largos se sugiere abreviar. Vale resaltar que las operaciones pertinentes a un módulo en particular, deben escribirse luego de un encabezado que lo identifica, y si éste contará con intercambio de parámetros, pues se listan en esa misma línea dichos parámetros, a fin de dar precisión a los elementos que entran y salen del módulo a describir. Es posible que se incluyan líneas de separación entre los contenidos de cálculos a realizar para cada módulo, la inclusión de éstos dependerá del estilo que adopte un analista en particular. En los ejercicios que se plantean para demostrar el uso del presente esquema representativo, se utiliza el enmarcado de los módulos, sin embargo su uso quedará a discreción del desarrollador, pues se trata de un asunto meramente estético. D. Descomposición en módulosSe trata de la descomposición en bloques de la solución. Esta descomposición se hace en base al principio del diseño descendente (top-down), el cual es uno de los preceptos de la programación estructurada. Según Joyanes (ob. cit.), el diseño descendente es el proceso mediante el cual un problema se descompone en una serie de niveles o pasos sucesivos de refinamiento; se descompone el problema en etapas o estructuras jerárquicas, de forma que se pueda considerar cada estructura desde dos puntos de vista ¿qué hace? y ¿cómo se hace?. La intención al agregar este elemento en el análisis de problemas, se debe a que el solucionador, más que resolver el problema, debe ampliar su poder de abstracción para configurar el proceso que resuelve en sí el problema, localizando cada parte del mismo en bloques de contenido que más adelante se podrán considerar como módulos que formarán parte de un algoritmo y luego del programa. 6. ConclusionesLa implementación del Método PyR, conlleva al solucionador a concentrar sus esfuerzos en representar de manera completa y adecuada, el resultado del análisis del problema, en donde se deja evidencia clara del diseño de las acciones que se proponen utilizar para resolver cada parte del problema, utilizando términos técnicos que pertenecen a cada caso particular; es decir, el método contempla simbología para cada tipo de acción a realizar, los cuales van de la mano con la explicación teórica que obedece a este tipo de acciones, entre las que destacan las acciones de asignación, selección, repetición y modularización. A su vez, contempla la definición de constantes y variables, aspectos que, en principio constituyen la teoría con la que se inicia la enseñanza de la programación de computadoras bajo el enfoque estructurado, que, aunque actualmente ha sido adelantado por la programación orientada a objetos, aún se mantiene en algunos contenidos de pensum de estudios donde se ha considerado su pertinencia en las carreras de formación profesional en materia de Informática. Además, vale destacar que PyR constituye un elemento innovador dentro del espacio académico en el cual se ejecutó la investigación, y luego de su aprobación y divulgación, de seguro será considerado como alternativa para otros grupos de docentes y estudiantes que buscan en nuevas alternativas, posibles salidas a las necesidades existentes en materia de herramientas de trabajo para la enseñanza; y con ello, quedará en evidencia el interés de los profesionales de la docencia, en superar obstáculos e innovar en materia de contenidos y estrategias de enseñanza. 7. ReferenciasAlcalde, E. y García, M. (1994). Informática Básica. España: Mc Graw Hill. Bañuelos, A. (1995). Resolución de problemas matemáticos en estudiantes de bachillerato. Perfiles Educativos, enero-marzo, número 67. Universidad Nacional Autónoma de México. México D. F. Disponible en: http://redalyc.uaemex.mx/redalyc/html/132/13206706/13206706.html Fuentes, A. (1993). Modelos mentales y habilidades en la solución de problemas aritméticos verbales. Revista de Psicología General y Aplicaciones 46 (2), 149-160. Disponible en: http://dialnet.unirioja.es/servlet/fichero_articulo?codigo=2383540 García, M. (s/f). En su traducción del Discurso del Método de Descartes. Traducción del francés, prólogo y notas de Renato Descartes, Discurso del método y Meditaciones metafísicas, Jiménez-Fraud (Colección Granada), Madrid 191?, XXX + 247 págs. Espasa-Calpe Argentina (Austral nº 166), Buenos Aires 1937; 26ª ed. 1991. Selecciones Austral (Filosofía nº 21), Madrid 1976, &c. Numerosas ediciones en distintas colecciones y editoriales. Disponible en: ver Joyanes, L. (1998). Fundamentos de Programación. España: McGraw-Hill. López, J. (2007). Solución De Problemas Mediante La Programación. Publicado en Eduteka. Disponible en: http://www.eduteka.org/pdfdir/FGPUPonenciaAlgoritmos.pdf Marcano (2010). Evaluación de la Efectividad de un Método de Análisis de Problemas (Caso de Estudio). Vol. 31 (4) 2010. Pág. 21 Martínez M., Miguel (2006). Ciencia y Arte en la Metodología Cualitativa. México: TRILLAS. Poggioli, L. (2001, Febrero). Serie Enseñando a Aprender. [Documento en Línea]. Empresas Polar. Disponible en: http://www.elaceong.org.ve/poggioli/poggioli01.htm Verdugo, M. y Fuertes, J. (1994). Evaluación curricular: una guía para la intervención psicopedagógica. Siglo veintiuno de España Editores. Disponible: http://books.google.co.ve/books Wallas, G. (1926). The art of thought. London: C.A. Watts & CO ltd (Abridged edition, 1945). |
1 Programa Licenciatura en Infomática de la Universidad de Oriente, Núcleo Nueva Esparta. Venezuela.iroselys@gmail.com |