Desarrollo de un sistema de cómputo distribuido en Erlang: caso de enseñanza/aprendizaje Manuel Hernández Gutiérrez Instituto de Electrónica y Computación (953) 53 2 03 99 Ext. 200 manuelhg@mixteco.utm.mx Resumen Cualquier producto de calidad requiere una cuidadosa planeación y una meticulosa realización: desde un edificio hasta un automóvil. Los productos de software no deberían ser la excepción. En esta plática describo la construcción de un sistema distribuido aplicado a las tareas de soporte de enseñanza-aprendizaje por medio de una red de computadoras. El sistema está construido en Erlang, un lenguaje de programación funcional con capacidades industriales y orientado a cómputo distribuido. La especificación e implementación de tal sistema forma parte de nuestra contribución como Cuerpo Académico en Redes y Sistemas Distribuidos, con planteamientos arbitrados internacionalmente y para presentarse en The Eighth ACM SIGPLAN, Erlang Workshop. Palabras clave Cómputo distribuido, programación concurrente, Erlang. 1. Introducción La tecnología actual está en un punto que materialmente está bien desarrollada pero conceptualmente es necesaria una etapa de asimilación y control: el caso más patente es el de la computación, en donde las computadoras tienen capacidades que no han sido ni son completamente aprovechables por el software actual. Considerando que ya de por sí la programación secuencial (tradicional) de computadoras es ya de por sí altamente difícil, la programación concurrente está por ahora en un estado de inabordable complejidad, manejable sólo si se crean y utilizan herramientas apropiadas para el manejo de esta complejidad. La primera dificultad en la programación concurrente viene de considerar que el todo del sistema debe estar apoyado en la coordinación y en su caso, sincronización, de las partes. Esto conlleva a decidir si el sistema resultante debería ser diseñado con o sin tolerancia a fallas. La segunda dificultad radica en considerar si los recursos tanto físicos como computacionales debieran compartirse o no. Cuando los recursos se comparten debiera tenerse especial cuidado paro no bloquear completamente el sistema o corromper la fuente de los recursos. La última dificultad radica en obtener una herramienta adecuada que automáticamente se encargue de controlar el sistema mientras que los programadores se encargan de seguir lo más fielmente posible una especificación al materializarla en una implementación. Muchas aplicaciones donde las computadoras son una herrramienta fundamental son inherentemente distribuidas. Tal es el caso del proceso de enseñanza/aprendizaje, donde la comunicación debe armonizarse entre al menos un par de integrantes del sistema: el profesor y el estudiante. Un sistema distribuido debiera satisfacer las necesidades laborales de los profesores, facilitando las tareas de compartir experiencias pedagógicas entre ellas y automatizando labores repetitivas y desgastantes como es el diseño y evaluación de tareas y la calificación de exámenes. Por otro lado, el sistema debería satisfacer las necesidades académicas de los estudiantes, al aprovechar lo más posible las tareas de presentación de material, la utilización de tecnologías multimedia, y la comunicación entre profesores y estudiantes. En esta plática presento las decisiones de diseño, las posibilidades, las restricciones y las herramientas utilizadas en la implementación de un sistema de cómputo distribuido orientado a la enseñanza/aprendizaje vía un lenguaje de programación de vanguardia orientado a la implementación de aplicaciones distribuidas. 2. Diseño del sistema El diseño del sistema está basado en la identificación de “actores”, siguiendo una terminología propia de un lenguaje de especificación llamado UML (\emph{Unified Modelling Language}). Esta identificación la llevo a cabo mi colega Hugo Cortés. Además, los eventos que se asocian a los actores tienen que seguir un estricto orden, y su modelación matemática, no trivial, fue llevada a cabo por mi colega Jorge Hernández. En la parte correspondiente a la Pedagogía, la labor de nuestra colega Esperanza Pérez fue sumamente importante, ya que contribuyó en forma decisiva al carácter interdisciplinario de la aplicación. Finalmente, el análisis de temas de seguridad fue llevado a cabo por la profesora-investigadora Mónica García, en tanto que un análisis preliminar de recursos compartidos fue realizada por nuestro líder de Cuerpo Académico Erik Ramos, y yo. La programación del sistema, en su parte central, ha sido llevada a cabo por mí. La programación del sistema ha seguido un lineamiento básico de primero programar secuencialmente tareas que así se realizan tradicionalmente, y después incorporar los resultados obtenidos dentro de un sistema que requiera concurrencia. La secuencialidad no es estricta, sino que siempre va acompañada de la idea de recibir y enviar mensajes: se recibe un mensaje como petición y se procesa su respectiva encomienda, en tanto que los mensajes para enviar son resultados que tanto el programa como el usuario han preparado para que otros procesos consuman la respectiva salida. 3. Implementación del sistema Como una parte esencial en el desarrollo de nuestro sistema hemos utilizado un método de de desarrollo ágil de software llamado Programación Extrema. Este método de programación está basado en la idea de que el código de los programas debería estar muy cercano a la especificación, y que debería haber un fuerte entendimiento entre el especificador y el programador, sin agentes intermedios. El método plantea resultados inmediatos, aunque en programación imperativa estos resultados pueden ser provisionales y desechables. En Erlang, por su característica de ser un lenguaje funcional, estos resultados intermedios (llamados prototipos), pueden utilizarse como un punto de inicio para refinarse por transformación para finalmente obtener un programa eficiente y correcto por construcción. El sistema está enteramente diseñado en Erlang. Erlang es un lenguaje de programación funcional orientado a facilitar la escritura de programas concurrentes. En Erlang esta tarea de escritura se facilita al eliminar o reducir al mínimo la utilización de recursos compartidos. Otra facilidad provista por Erlang está en su manejo automático de procesos. Un proceso es una entidad que está computacionalmente activa y en cierta forma es como una célula de trabajo que envia y recibe información. Estos procesos tienen una vida en el tiempo y utilizan mensajes para comunicarse entre sí. Muchas de las tareas relacionadas a procesos, que en otros lenguajes deben llevarse a cabo manualmente, están en Erlang automatizadas: en Erlang, cada proceso tiene su propio “espacio de trabajo” y acepta y despacha mensajes en forma asíncrona vía un mailbox. En Erlang, una computadora ejecuta nodos, y cada nodo ejecuta procesos. Los nodos pueden a su vez ser accesibles por medio de peticiones externas vía lenguajes convencionales para la ejecución de tareas. Esta idea incorpora la posibilidad de utilizar computadoras portátiles, que en la actualidad son relativamente baratas, en las tareas básicas de enseñanza/aprendizaje. En cuanto a la interacción humano-computadora, esta interacción puede realizarse en dos niveles: en un nivel completo tenemos una computadora de escritorio como el dispositivo de acceso, y en otro nivel, tenemos dispositivos móviles con mecanismos básico de entrada y salida, pero suficientes para lograr la interacción con otros dispositivos más poderosos o más ergonómicos. 4. Aprendizaje y enseñanza Aprender y enseñar son tareas altamente complejas que requieren de herramientas para llevarse a cabo. La primera necesidad de quien aprende es tener quien le enseñe. Quien aprende también espera de quien le enseña, en un mundo ideal, las siguientes características: 1. El profesor debe ser claro. 2. El profesor debe ser incansable. 3. El profesor debe ser imparcial. Estas características raramente se encuentran en un profesor real, a pesar de la preparación y del buena voluntad de tal profesor. Una aproximación a este ideal podría lograrse si un profesor real se apoya en la utilización de una red de computadoras: 1. El profesor real puede apoyarse en un conjunto de herramientas computarizadas para lograr una mejor claridad en su exposición; entre estas herramientas, destaca la creación de acervos comunes de información auto-regulada por un conjunto de profesores que se auto-monitorean constantemente en su planteamiento de material de curso, tareas, y exámenes. 2. Una computadora no se cansa. Mientras que un profesor conoce por experiencia que fácilmente se alcanzan sus propios límites en una sesión, la computadora ofrece un campo ideal en cuanto a disponibilidad e incansabilidad, de tal forma que el estudiante puede recurrir a este soporte computarizado tantan veces como desee y con sesiones tan largas como su propio cansancio lo limite. 3. Sesgos naturales de empatía, así como un contexto social que facilita prejuicios e irreflexión, hace que un profesor real pueda equivocarse en la evaluación de sus estudiantes. En el caso de una computadora, la evaluación que otorga carece de un sesgo antropomórfico en lo fundamental, haciendo que los estudiantes sean evaluados imparcialmente con la ventaja de tener el reporte de su calificación inmediatamente. 5. Conclusiones La factibilidad de nuestro sistema ya ha sido comprobada en forma experimental en cuanto a su funcionalidad dentro de una máquina. También se han hecho experimentos con varias máquina. Nuestro siguiente paso es llevar a la práctica con profesores y estudiantes el sistema tal como ahora existe. Muchas tareas están aún pendientes y forman parte de un trabajo a corto plazo. El principal tema a tratar es precisamente el adaptar el sistema a las necesidades que los especificadores (en este caso, tanto estudiantes como profesores) indiquen. En la programación del sistema también existen varias tareas a resolver, y algunas de estas tareas ya están siendo resueltas en lo fundamental: 1. La incorporación de celulares o agendas electrónicas. 2. Un modelo de cómputo ubicuo para aprendizaje/enseñanza. 3. Temas experimentales en las instalaciones de la Universidad Tecnológica de la Mixteca. 4. Divulgación de nuestra propuesta con el objetivo de captar la atención de estudiantes de posgrado para la realización de tesis o de proyectos de investigación. 3. Bibliografía [1] H. Cortés, M. García, J. Hernández, M. Hernández, E. Pérez-Córdoba, E. Ramos. Development of a Distributed System Applied to Teaching and Learning. Proceedings of The Eight International Erlang Workshop, Edinburgo, Escocia, 2009. [2] Armstrong, Joe. Programming Erlang: Software for a Concurrent World. The Pragmatic Bookshelf, 2007