Dijkstra y su visión sobre los algoritmos y la programación

Imagínate cuántas y cuántos científicos, ingenieros, físicos y matemáticos han trabajado para mejorar las Ciencias de la Computación desde sus inicios hasta ahora. Nombres como Von Neumann, Charles Babbage, Ada Lovelace, Alan Turing o Blaise Pascal resuenan siempre en nuestra cabeza por su contribución histórica al desarrollo de la Computación y la Informática. Pero, si te das cuenta, nunca hablamos de personajes actuales, como si el desarrollo de esta disciplina se hubiera quedado estancada a principios del S. XX. El artículo de hoy lo vamos a dedicar a hablar de una de las figuras más importantes de la programación actual, el cual ha impulsado el uso de la IA como la conocemos hoy en día. Hablo de Edger Dijkstra y en este artículo hablaremos sobre su vida y su legado (aún no finalizado), desde sus inicios hasta su ascenso como uno de los pioneros en el campo de los algoritmos y la programación estructurada.

La formación de un genio

Los primeros años

Edsger Wybe Dijkstra nació el 11 de mayo de 1930 en Róterdam, Países Bajos, en el seno de una familia intelectual. Su padre, Douwe Dijkstra, era un reconocido químico, y su madre, Brechtje Kornelis Pool, era una talentosa matemática. Este ambiente familiar hizo que en Edsger despertara desde bien pequeño una curiosidad innata por las matemáticas y las ciencias en general.

Sin embargo, su infancia no fue fácil. Creció durante un periodo turbulento de la historia de Europa, la ocupación nazi de los Países Bajos durante la Segunda Guerra Mundial. A pesar de estas dificultades, la familia Dijkstra sobrepasó ésta época mientras que Edsger mostraba un talento excepcional para resolver problemas complejos, impropios para su edad.

En la escuela secundaria, Edsger destacó, cómo no, en materias científicas (aunque también tenía enormes habilidades en idiomas). Después de completar sus estudios de secundaria con honores, Dijkstra ingresó en la universidad de Leiden en 1948. Al inicio se especializó en Física Teórica y Matemáticas, siguiendo los pasos de sus padres. Sin embargo, su vida iba a dar un vuelco que, sin esperarlo, cambiaría su vida y, de paso, la historia de la Computación.

El cambio de Dijkstra

En 1951, mientras aún era estudiante, Dijkstra asistió a un curso de verano sobre programación de computadoras en la Universidad de Cambridge. Esta experiencia fue tan importante para él que, aunque aún eran máquinas monstruosas, enormes y poco prácticas, fue capaz de vislumbrar su potencial revolucionario. Motivado por esta nueva pasión, cambió su enfoque académico. Se embarcó en el estudio autodidacta de la programación (las carreras de informática no se habían creado aún) y de la teoría de la computación. Ésta decisión no fue del agrado de alguno de sus profesores, pues veían la informática como una disciplina inferior a la Física o las Matemáticas.

Sin embargo, Dijktra continuó su camino. En 1952, incluso antes de graduarse, consiguió un trabajo como programador en el Centro de Matemáticas de Ámsterdam, convirtiéndose en uno de los primeros programadores profesionales del mundo. Esta experiencia práctica, combinada con su sólida formación teórica, le proporcionaría una perspectiva única que influiría profundamente en el desarrollo de la ciencia de la computación en las décadas siguientes.

La decisión de Dijkstra de dedicarse a la naciente disciplina de la informática resultaría ser, con el tiempo, visionaria. A lo largo de su carrera, realizaría contribuciones fundamentales en áreas como algoritmos, lenguajes de programación y sistemas operativos, estableciéndose como uno de los pioneros más influyentes en la historia de la computación, como posteriormente veremos.

Dijkstra dando una conferencia en Zúrich (1994)

El Algoritmo de Dijkstra: la revolución en la optimización de rutas

En 1959, Edsger seguía profundizando en el aprendizaje de las Ciencias de la Computación en general, y la programación en particular. En este año, publicó un artículo seminal titulado «A note on two problems in connexion with graphs» en la revista Numerische Mathematik. Este breve artículo de tres páginas, escrito cuando Dijkstra tenía apenas 29 años, presentó su famoso algoritmo para encontrar la ruta más corta entre dos nodos en un grafo ponderado, una contribución que revolucionaría el campo de la teoría de grafos y la optimización. Ahora bien, ¿cómo llegó a pensar en ésto? ¿Cómo generó este algoritmo?

La génesis del algoritmo se remonta a 1956, cuando trabajaba en el diseño del sistema operativo para la computadora ARMAC en el Centro de Matemáticas de Ámsterdam. En esta época, tenia como desafío demostrar las capacidades de la máquina al público general. Para eso, Dijkstra decidió crear un programa que calculara la ruta más corta entre dos ciudades en un mapa de los Países Bajos. Como curiosidad, y tal y cómo relató 20 años más tarde, generó el algoritmo en apenas ¡20 minutos! mientras tomaba un café con su prometida en una terraza de Amsterdam.

El algoritmo

No es el propósito de este artículo explicar detenidamente el algoritmo (lo dejaremos para otro artículo). Pero para que sepas un poco. Se basa en un enfoque iterativo que explora los nodos adyacentes a partir de un nodo de origen (la ciudad origen en el mapa de los Países Bajos), actualizando constantemente las distancias tentativas hasta encontrar la ruta más corta hacia el nodo de destino (la ciudad de llegada). Además, es un algoritmo muy elegante y su elegancia radica en su simplicidad y en su eficiencia computacional. Por eso se convirtió rápidamente en un pilar fundamental en el campo de los algoritmos de grafos y la teoría de la optimización.

La importancia del algoritmo fue reconocida casi inmediatamente. En los años siguientes a su publicación, se aplicó en una amplia gama de campos, desde la planificación de rutas en sistemas de navegación hasta la optimización de redes de comunicación. Su influencia se extendió más allá de la informática, encontrando aplicaciones en disciplinas tan diversas como la biología, la economía y la ingeniería de transporte.

Una de las primeras implementaciones prácticas del algoritmo fue en el sistema de enrutamiento de paquetes de ARPANET, el precursor de Internet. Esta aplicación sentó las bases para los protocolos de enrutamiento modernos que son fundamentales para el funcionamiento de las redes de comunicación globales.

La programación estructurada

El impacto de Dijkstra en la informática no se limitó al campo de los algoritmos. A mediados de la década de 1960, se convirtió en uno de los principales defensores de un nuevo paradigma de programación que cambiaría fundamentalmente la forma en que se desarrollaba el software: la programación estructurada.

En 1965, publicó un artículo titulado «Programming considered as a human activity» en el que argumentaba que los programas deberían ser comprensibles no solo para las computadoras, sino también para los seres humanos. Esta idea sentó las bases para su crítica más famosa a las prácticas de programación de la época.

Tres años más tarde, escribió una carta al editor de la revista Communications of the ACM titulada «Go to statement considered harmful«. Este breve artículo, que se convirtió en uno de los más influyentes en la historia de la informática, criticaba el uso indiscriminado de la instrucción goto en la programación. Dijkstra argumentaba que este uso indiscriminado conducía a producir códigos desordenados, difíciles de entender y propensos a errores. Por eso, en lugar de ese comando, abogaba por el uso de estructuras de control más disciplinadas, como bucles y sentencias condicionales. La razón de Edsger era que estas estructuras hacían que el flujo del programa fuera más predecible y más fácil de seguir, lo que a su vez facilitaba la depuración y el mantenimiento del código.

Como ante cualquier cambio, muchos programadores de la época se resistieron al cambio. Sin embargo, con el tiempo, los beneficios de este nuevo tipo de programación se hicieron evidentes y esta nueva forma de programar se aceptó globalmente. Este nuevo tipo de programación sentó las bases e influyó en el diseño de nuevos lenguajes como Pascal y C. Además, este nuevo paradigma fue el precursor de metodologías de programación más avanzadas, como la Programación Orientada a Objetos (POO).

Conclusion

Por lo tanto, a Dijkstra le debemos mucho. Le debemos que fomentara un enfoque más riguroso y sistemático de la programación, elevándola de una mera habilidad técnica a una disciplina de ingeniería con sus propios principios y mejores prácticas.

Su Algoritmo de Djikstra sigue siendo una herramienta fundamental en una variedad de aplicaciones, desde la planificación de rutas hasta la optimización de redes. Además, su defensa de la programación estructurada ha dado forma a la forma en que se desarrolla el software moderno, fomentando la modularidad, la legibilidad y la facilidad de mantenimiento del código.

Hoy en día, las ideas de Dijkstra sobre la programación estructurada siguen siendo relevantes. Aunque las tecnologías han evolucionado, los principios de claridad, modularidad y mantenibilidad que él defendió siguen siendo fundamentales en el desarrollo de software moderno. Su legado perdura no solo en el algoritmo que lleva su nombre, sino en la forma en que los programadores de todo el mundo abordan el arte y la ciencia de la programación.

P.D: Papers de Dijkstra

Te dejo una serie de papers a modo de bibliografía, escritos por Edsger, por si te apetece echarles un vistazo.

  • Dijkstra, E. W. (1959). A note on two problems in connexion with graphs. Numerische Mathematik, 1(1), 269-271.
  • Dijkstra, E. W. (1965). Programming considered as a human activity. Proceedings of the IFIP Congress, 65, 213-217.
  • Dijkstra, E. W. (1968). Go to statement considered harmful. Communications of the ACM, 11(3), 147-148.
  • Dijkstra, E. W. (1972). The humble programmer. Communications of the ACM, 15(10), 859-866.
  • Dijkstra, E. W. (1974). Self-stabilizing systems in spite of distributed control. Communications of the ACM, 17(11), 643-644.
  • Dijkstra, E. W. (1976). A discipline of programming. Prentice-Hall.
  • Dijkstra, E. W. (1982). On the role of scientific thought. In Selected Writings on Computing: A Personal Perspective (pp. 60-66). Springer.

Además, te dejo en el siguiente enlace un PDF con mucha más información sobre su vida. Puedes encontrarlo aquí.


Descubre más desde nauKabits.com

Suscríbete y recibe las últimas entradas en tu correo electrónico.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

error: Contenido protegido

Descubre más desde nauKabits.com

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo