Edsger W. Dijkstra - Edsger W. Dijkstra

Edsger W. Dijkstra
Edsger Wybe Dijkstra.jpg
Dijkstra en 2002
Nació ( 05/11/1930 )11 de mayo de 1930
Rotterdam , Holanda
Murió 6 de agosto de 2002 (2002-08-06)(72 años)
Nuenen , Países Bajos
Ciudadanía Países Bajos
Educación Universidad de Leiden (BS, MS)
Universidad de Amsterdam (Ph.D.)
Conocido por Vea abajo
Esposos) María (Ria) C. Debets
Premios
Carrera científica
Los campos
Instituciones
Tesis Comunicación con una computadora automática  (1959)
Asesor de doctorado Adriaan van Wijngaarden
Estudiantes de doctorado
Influencias
Influenciado

Edsger Dijkstra Wybe ( / d k s t r ə / DIQUE -strə ; holandesa:  [ɛtsxər ʋibə dɛikstra] ( escuchar )Sobre este sonido ; mayo 11, 1930 a agosto 6, 2002 ) era un holandés Informático , programador , ingeniero de software , científico sistemas , ensayista científico y pionero en ciencias de la computación . Un físico teórico de profesión, trabajó como programador en el Mathematisch Centrum (Amsterdam) de 1952 a 1962. Un profesor universitario durante gran parte de su vida, Dijkstra llevó a cabo la Cátedra Centennial Schlumberger en Ciencias de la Computación de la Universidad de Texas en Austin a partir de 1984 hasta su jubilación en 1999. Fue profesor de matemáticas en la Universidad Tecnológica de Eindhoven (1962-1984) e investigador en la Burroughs Corporation (1973-1984). En 1972, se convirtió en la primera persona que no era ni estadounidense ni británica en ganar el premio Turing .

Una de las figuras más influyentes de la generación fundadora de la ciencia de la computación, Dijkstra ayudó a dar forma a la nueva disciplina tanto como ingeniero como teórico . Sus contribuciones fundamentales cubren diversas áreas de la ciencia de la computación, incluyendo la construcción de compiladores , sistemas operativos , sistemas distribuidos , secuencial y programación concurrente, la programación de paradigma y la metodología, la programación de la investigación del lenguaje , el diseño de programas, desarrollo de programas, la verificación de programas, principios de ingeniería de software, algoritmos de grafos, y fundamentos filosóficos de la programación y la informática. Muchos de sus trabajos son fuente de nuevas áreas de investigación. Varios conceptos y problemas que ahora son estándar en la informática fueron identificados por primera vez por Dijkstra o llevan nombres acuñados por él.

Hasta mediados de la década de 1960, la programación informática se consideraba más un arte (o un oficio) que una disciplina científica. En palabras de Harlan Mills (1986), "la programación [antes de la década de 1970] se consideraba una actividad privada de resolución de acertijos de escribir instrucciones informáticas para que funcionaran como un programa". A fines de la década de 1960, la programación de computadoras estaba en un estado de crisis . Dijkstra formaba parte de un pequeño grupo de académicos y programadores industriales que defendían un nuevo estilo de programación para mejorar la calidad de los programas . Dijkstra, que tenía experiencia en matemáticas y física, fue una de las fuerzas impulsoras detrás de la aceptación de la programación de computadoras como disciplina científica. Él acuñó la frase " programación estructurada " y durante la década de 1970 se convirtió en la nueva ortodoxia de la programación. Como creador del movimiento de programación estructurada (el primer movimiento notable en la historia de la programación de computadoras), sus ideas sobre la metodología de programación ayudaron a sentar las bases para el nacimiento y desarrollo de la disciplina profesional de la ingeniería de software , permitiendo a los programadores organizar y administrar cada vez más. proyectos de software complejos. Como señaló Bertrand Meyer (2009), "La revolución en las visiones de la programación iniciada por la iconoclasia de Dijkstra condujo a un movimiento conocido como programación estructurada, que defendía un enfoque sistemático y racional de la construcción de programas. La programación estructurada es la base de todo lo que se ha hecho ya que en metodología de programación , incluida la programación orientada a objetos ".

El estudio académico de la computación concurrente se inició en la década de 1960, y se le atribuye a Dijkstra (1965) ser el primer artículo en este campo, identificando y resolviendo el problema de la exclusión mutua . También fue uno de los pioneros de la investigación sobre los principios de la computación distribuida . Su trabajo fundamental sobre concurrencia , semáforos , exclusión mutua, punto muerto (abrazo mortal), búsqueda de caminos más cortos en gráficos , tolerancia a fallas , autoestabilización , entre muchas otras contribuciones, comprende muchos de los pilares sobre los que se construye el campo de la computación distribuida. Poco antes de su muerte en 2002, recibió el premio ACM PODC Influential-Paper Award en computación distribuida por su trabajo en la autoestabilización de la computación de programas. Este premio anual pasó a llamarse Premio Dijkstra ( Premio Edsger W. Dijkstra en Computación Distribuida) al año siguiente. Como el premio, patrocinado conjuntamente por el Simposio sobre Principios de Computación Distribuida (PODC) de la Asociación de Maquinaria de Computación (ACM) y el Simposio Internacional de Computación Distribuida (DISC) de la Asociación Europea de Computación Teórica (EATCS ), reconoce que "Ningún otro individuo ha tenido una mayor influencia en la investigación de los principios de la computación distribuida ".

Biografía

Primeros años

Edsger W. Dijkstra nació en Rotterdam . Su padre era un químico que fue presidente de la Sociedad Química Holandesa ; enseñó química en una escuela secundaria y más tarde fue su superintendente. Su madre era matemática, pero nunca tuvo un trabajo formal.

Dijkstra había considerado una carrera en derecho y esperaba representar a los Países Bajos en las Naciones Unidas . Sin embargo, después de graduarse de la escuela en 1948, por sugerencia de sus padres, estudió matemáticas y física y luego física teórica en la Universidad de Leiden .

A principios de la década de 1950, las computadoras electrónicas eran una novedad. Dijkstra tropezó con su carrera por accidente y, a través de su supervisor, el profesor A. Haantjes, conoció a Adriaan van Wijngaarden , director del Departamento de Computación del Centro Matemático de Ámsterdam , quien le ofreció un trabajo a Dijkstra; se convirtió oficialmente en el primer "programador" de los Países Bajos en marzo de 1952.

Durante algún tiempo, Dijkstra mantuvo su compromiso con la física y trabajó en Leiden tres días a la semana. Sin embargo, con la creciente exposición a la informática, su enfoque comenzó a cambiar. Como recordó:

Después de haber programado durante unos tres años, tuve una discusión con A. van Wijngaarden , que entonces era mi jefe en el Centro Matemático de Amsterdam , una discusión por la que le estaré agradecido mientras viva. El punto era que se suponía que debía estudiar física teórica en la Universidad de Leiden simultáneamente, y como encontraba las dos actividades cada vez más difíciles de combinar, tuve que tomar una decisión, o dejar de programar y convertirme en un teórico real y respetable. físico , o llevar mi estudio de física a una finalización formal solamente, con un mínimo de esfuerzo, y llegar a ser ....., ¿sí qué? ¿Un programador ? ¿Pero era esa una profesión respetable? Porque, después de todo, ¿qué era programar ? ¿Dónde estaba el sólido cuerpo de conocimientos que podría respaldarlo como una disciplina intelectualmente respetable? Recuerdo muy vívidamente cómo envidiaba a mis colegas de hardware, quienes, cuando se les preguntó acerca de su competencia profesional, al menos pudieron señalar que sabían todo sobre válvulas de vacío, amplificadores y demás, mientras que yo sentía que, al enfrentarme a esa pregunta, yo se quedaría con las manos vacías. Lleno de recelos, llamé a la puerta de la oficina de Van Wijngaarden, preguntándole si podía "hablar con él por un momento"; cuando salí de su oficina varias horas después, era otra persona. Porque después de haber escuchado mis problemas con paciencia, estuvo de acuerdo en que hasta ese momento no había mucha disciplina de programación, pero luego pasó a explicar en voz baja que las computadoras automáticas estaban aquí para quedarse, que estábamos al principio y podíamos ¿No seré yo una de las personas llamadas a hacer de la programación una disciplina respetable en los próximos años? Este fue un punto de inflexión en mi vida y completé formalmente mis estudios de física lo más rápido que pude.

-  Edsger Dijkstra, The Humble Programmer (EWD340), Comunicaciones del ACM

Cuando Dijkstra se casó con Maria (Ria) C. Debets en 1957, se le exigió como parte de los ritos matrimoniales que declarara su profesión. Afirmó que era programador, lo que era inaceptable para las autoridades, ya que no existía esa profesión en los Países Bajos.

En 1959, recibió su doctorado de la Universidad de Amsterdam por una tesis titulada 'Comunicación con una computadora automática', dedicada a una descripción del lenguaje ensamblador diseñado para la primera computadora comercial desarrollada en los Países Bajos, la Electrologica X1 . Su director de tesis fue Van Wijngaarden.

Mathematisch Centrum, Ámsterdam

Desde 1952 hasta 1962, Dijkstra trabajó en el Mathematisch Centrum en Amsterdam, donde trabajó en estrecha colaboración con Bram Jan Loopstra y Carel S. Scholten , que habían sido contratados para construir una computadora. Su modo de interacción era disciplinado: primero decidirían sobre la interfaz entre el hardware y el software, escribiendo un manual de programación. Entonces, los diseñadores de hardware tendrían que ser fieles a su parte del contrato, mientras que Dijkstra, el programador, escribiría software para la máquina inexistente. Dos de las lecciones que aprendió de esta experiencia fueron la importancia de una documentación clara y que la depuración del programa se puede evitar en gran medida mediante un diseño cuidadoso. Dijkstra formuló y resolvió el problema del camino más corto para una demostración en la inauguración oficial de la computadora ARMAC en 1956. Debido a la ausencia de revistas dedicadas a la computación automática, no publicó el resultado hasta 1959.

En el Centro Matemático, Dijkstra y su colega Jaap Zonneveld  [ nl ] desarrollaron el primer compilador para el lenguaje de programación ALGOL 60 en agosto de 1960, más de un año antes de que otro grupo produjera un compilador. Tuvo una profunda influencia en su pensamiento posterior sobre la programación como actividad científica.

Universidad Tecnológica de Eindhoven

La Universidad Tecnológica de Eindhoven , ubicada en Eindhoven en el sur de los Países Bajos, donde Dijkstra fue profesor de matemáticas de 1962 a 1984.

En 1962, Dijkstra se trasladó a Eindhoven , y más tarde a Nuenen , en el sur de los Países Bajos, donde se convirtió en profesor en el Departamento de Matemáticas de la Universidad Tecnológica de Eindhoven . La universidad no tenía un departamento de informática separado y la cultura del departamento de matemáticas no le convenía particularmente. Dijkstra intentó formar un grupo de científicos informáticos que pudieran colaborar en la resolución de problemas. Este fue un modelo de investigación inusual para el Departamento de Matemáticas. A fines de la década de 1960, construyó el sistema operativo THE (llamado así por la universidad, entonces conocido como Technische Hogeschool Eindhoven ), que ha influido en los diseños de los sistemas operativos posteriores mediante el uso de memoria virtual paginada basada en software.

Corporación Burroughs

Dijkstra se incorporó a Burroughs Corporation , una empresa conocida entonces por producir ordenadores basados ​​en una arquitectura de hardware innovadora, como investigador asociado en agosto de 1973. Sus funciones consistían en visitar algunos de los centros de investigación de la empresa varias veces al año y llevar a cabo su propia investigación. lo que hizo en la instalación de investigación más pequeña de Burroughs, a saber, su estudio en el segundo piso de su casa en Nuenen. De hecho, Dijkstra era el único becario de investigación de Burroughs y trabajaba para él desde casa, viajando ocasionalmente a sus sucursales en los Estados Unidos. Como resultado, redujo su cita en la universidad a un día a la semana. Ese día, martes, pronto se conoció como el día del famoso 'Tuesday Afternoon Club', un seminario durante el cual discutió con sus colegas artículos científicos, mirando todos los aspectos: notación, organización, presentación, lenguaje, contenido, etc. En breve después de mudarse en 1984 a la Universidad de Texas en Austin (EE. UU.), surgió una nueva "sucursal" del Tuesday Afternoon Club en Austin, Texas .

Los años de Burroughs lo vieron en su momento más prolífico en la producción de artículos de investigación. Escribió cerca de 500 documentos de la serie EWD (descritos a continuación), la mayoría de ellos informes técnicos, para circulación privada dentro de un grupo selecto.

La Universidad de Texas en Austin

La Universidad de Texas en Austin , donde Dijkstra ocupó la Cátedra Centenario de Ciencias de la Computación de Schlumberger desde 1984 hasta 1999.

Dijkstra aceptó la Cátedra Schlumberger Centennial en el Departamento de Ciencias de la Computación de la Universidad de Texas en Austin en 1984.

Últimos años

Dijkstra trabajó en Austin hasta su jubilación en noviembre de 1999. Para marcar la ocasión y celebrar sus más de cuarenta años de contribuciones fundamentales a las ciencias de la computación , el Departamento de Ciencias de la Computación organizó un simposio, que tuvo lugar en su 70 cumpleaños en mayo de 2000.

Dijkstra y su esposa regresaron de Austin a su casa original en Nuenen (Países Bajos) donde descubrió que solo le quedaban meses de vida. Dijo que quería retirarse en Austin, Texas , pero morir en Holanda. Dijkstra murió el 6 de agosto de 2002 después de una larga lucha contra el cáncer. A él y a su esposa Maria (Ria) Debets les sobrevivieron sus tres hijos: Marcus, Femke y el científico informático Rutger M. Dijkstra.

Contribuciones pioneras e impacto en la ciencia de la computación

Aunque era un físico teórico de formación, Dijkstra se convirtió en una de las figuras más influyentes de la generación fundadora de la ciencia de la computación. Como pionero en muchas áreas de investigación de la ciencia de la computación , ayudó a dar forma a la nueva disciplina tanto desde una perspectiva de ingeniería como académica . Muchos de sus trabajos son fuente de nuevas áreas de investigación. Muchos conceptos que ahora son estándar en la informática fueron identificados por primera vez por Dijkstra o llevan nombres acuñados por él. También fue el primero en formular y resolver varios problemas importantes. En 1994 se realizó una encuesta de más de mil profesores de informática para obtener una lista de los 38 artículos académicos más influyentes en el campo, y Dijkstra es el autor de cinco artículos. A la edad de 42 años, se convirtió en el primer ganador no estadounidense, no británico y europeo continental del Premio Turing .

Durante sus más de cuarenta años como científico de la computación, que incluyó posiciones tanto en la academia como en la industria, Dijkstra realizó numerosas contribuciones fundamentales en muchas áreas de la ciencia de la computación , incluida la construcción de compiladores , sistemas operativos , computación concurrente ( programación concurrente ), computación distribuida , programación. paradigma y metodología , investigación de lenguajes de programación , diseño de programas , desarrollo de programas , verificación de programas , principios de ingeniería de software , diseño de algoritmos y fundamentos filosóficos de la programación de computadoras y la informática . Además, Dijkstra estaba muy interesado en la enseñanza de la informática y en las relaciones entre la informática académica y la industria del software .

Sus principales contribuciones pioneras (incluidas ideas, inventos e innovaciones) incluyen:

Trabajo algorítmico

Tiempo de ejecución del algoritmo de Dijkstra
Algoritmo de Dijkstra. Selecciona el vértice no visitado con la distancia más baja, calcula la distancia que lo atraviesa hasta cada vecino no visitado y actualiza la distancia del vecino si es menor. Marque como visitado (puesto en rojo) cuando termine con los vecinos.

El trabajo algorítmico de Dijkstra (especialmente algoritmos de gráficos , algoritmos concurrentes y algoritmos distribuidos ) juega un papel importante en muchas áreas de la ciencia de la computación. Según Leslie Lamport (2002), Dijkstra "inició el campo de los algoritmos concurrentes y distribuidos con su artículo del CACM de 1965" Solución de un problema en el control de programación concurrente ", en el que primero planteó y resolvió el problema de exclusión mutua". Como explica Lamport, "ese artículo es probablemente la razón por la que existe PODC (...). Sigue siendo hasta el día de hoy el artículo más influyente en el campo. El hecho de que no haya ganado un premio PODC Influential Paper Award refleja una separación artificial entre algoritmos concurrentes y distribuidos –Una separación que nunca ha existido en la obra de Dijkstra ".

En 1959, Dijkstra publicó en un artículo de 3 páginas "Una nota sobre dos problemas relacionados con los gráficos" el algoritmo para encontrar el camino más corto en un gráfico entre dos nodos dados, ahora llamado algoritmo de Dijkstra . Su impacto durante los próximos 40 años se resume en el artículo de Mikkel Thorup , 'Rutas más cortas no direccionadas de una sola fuente con pesos enteros positivos en tiempo lineal' (1999): "Desde 1959, todos los desarrollos teóricos en SSSP [Rutas más cortas de una sola fuente] para gráficos generales dirigidos y no dirigidos se han basado en el algoritmo de Dijkstra ". El algoritmo de Dijkstra se utiliza en SPF, Shortest Path First , que se utiliza en los protocolos de enrutamiento OSPF e IS-IS . Muchos autores han propuesto varias modificaciones al algoritmo de Dijkstra utilizando heurística para reducir el tiempo de ejecución de la búsqueda de ruta más corta . Uno de los algoritmos heurísticos más utilizados es el algoritmo de búsqueda A * (descrito por primera vez por Peter Hart , Nils Nilsson y Bertram Raphael del Stanford Research Institute en 1968), el objetivo principal es reducir el tiempo de ejecución reduciendo el espacio de búsqueda. Dijkstra pensó en el problema de la ruta más corta cuando trabajaba en el Mathematical Center en Amsterdam en 1956 como programador para demostrar las capacidades de una nueva computadora llamada ARMAC. Su objetivo era elegir tanto un problema como una respuesta (que sería producida por una computadora) que las personas no informáticas pudieran entender. Diseñó el algoritmo de ruta más corta en aproximadamente 20 minutos sin la ayuda de papel y lápiz y luego lo implementó para ARMAC para un mapa de transporte ligeramente simplificado de 64 ciudades en los Países Bajos (de modo que 6 bits serían suficientes para representar la ciudad en el algoritmo). Como recordó, en una entrevista publicada en 2001:

¿Cuál es el camino más corto para viajar de Rotterdam a Groningen , en general: de una ciudad determinada a una ciudad determinada? Es el algoritmo para el camino más corto , que diseñé en unos veinte minutos. Una mañana estaba de compras en Ámsterdam con mi joven prometida y, cansado, nos sentamos en la terraza del café a tomar una taza de café y estaba pensando si podía hacer esto, y luego diseñé el algoritmo para el camino más corto. . Como dije, fue un invento de veinte minutos. De hecho, se publicó en el 59, con tres años de retraso. La publicación todavía es legible, de hecho, es bastante agradable. Una de las razones por las que es tan bonito fue que lo diseñé sin lápiz ni papel. Más tarde supe que una de las ventajas de diseñar sin lápiz y papel es que uno está casi obligado a evitar todas las complejidades evitables. Con el tiempo, ese algoritmo se convirtió, para mi gran asombro, en una de las piedras angulares de mi fama.

-  Edsger Dijkstra, en una entrevista con Philip L. Frana, Comunicaciones del ACM 53 (8), 2001.

Un año después, se encontró con otro problema de los ingenieros de hardware que trabajaban en la próxima computadora del instituto: minimizar la cantidad de cable necesario para conectar los pines en el panel posterior de la máquina. Como solución, redescubrió el algoritmo conocido como algoritmo de árbol de expansión mínimo de Prim . El algoritmo de Prim fue desarrollado originalmente en 1930 por el matemático checo Vojtěch Jarník . y más tarde redescubierto de forma independiente y republicado por Robert C. Prim en 1957, y Dijkstra en 1959. Por lo tanto, a veces también se le llama el algoritmo DJP .

En 1961, Dijkstra describió por primera vez el algoritmo del patio de maniobras , un método para analizar expresiones matemáticas especificadas en notación infija , en el informe Mathematisch Centrum . Se puede utilizar para producir resultados en notación polaca inversa (RPN) o como un árbol de sintaxis abstracta (AST). El algoritmo se denominó algoritmo del patio de maniobras porque su funcionamiento se asemeja al de un patio de maniobras de ferrocarril . El algoritmo del campo de maniobras se usa comúnmente para implementar analizadores de precedencia de operadores .

En 1962 o 1963, Dijkstra propuso el mecanismo de semáforo para el algoritmo de exclusión mutua para n procesos (una generalización del algoritmo de Dekker ), que probablemente fue el primer algoritmo concurrente publicado y que introdujo una nueva área de investigación algorítmica. También identificó el problema del interbloqueo y propuso el algoritmo del banquero que evita el interbloqueo .

En 1974, Dijkstra presentó tres algoritmos de autoestabilización para la exclusión mutua en un anillo. Este trabajo se considera el primero en introducir y demostrar el concepto de autoestabilización.

A mediados de la década de 1970, Dijkstra (junto con otros autores) introdujo dos abstracciones útiles (mutador y recolector) al estudio de la recolección de basura . El mutador abstrae el proceso que realiza el cálculo, incluida la asignación de una nueva celda de almacenamiento. El recolector es el proceso que recupera automáticamente la basura. Además, este documento proporciona una formalización del marcado tricolor que es básico para la recolección de basura incremental.

A principios de la década de 1980, Dijkstra y Carel S. Scholten propusieron el algoritmo Dijkstra-Scholten para detectar terminaciones en sistemas distribuidos .

En 1981, Dijkstra desarrolló smoothsort , un algoritmo de clasificación basado en comparaciones y una variación de heapsort .

Construcción de compiladores e investigación de lenguajes de programación

ALGOL 60 fue creado como resultado de la conferencia ALGOL de enero de 1960 en París. En agosto de 1960, Dijkstra y su colega Jaap Zonneveld pusieron en funcionamiento el primer compilador completo de ALGOL 60 (para la computadora Electrologica X1 ) del mundo. El compilador Dijkstra – Zonneveld es anterior al segundo compilador ALGOL 60 (de otro grupo) en más de un año.

Dijkstra era conocido por ser un fanático del lenguaje de programación ALGOL y trabajó en el equipo que implementó el primer compilador para ALGOL 60 , en el que estuvo muy involucrado en el desarrollo, la realización y la popularización. Como comenta Peter Naur en el artículo 'El lado europeo de la última fase del desarrollo de ALGOL 60', en las Actas de la Primera Conferencia ACM SIGPLAN sobre Historia de los Lenguajes de Programación , enero de 1978, Dijkstra participó en el período 1958– 1959 en una serie de reuniones que culminaron con la publicación del informe que define el lenguaje ALGOL 60. El nombre de Dijkstra no aparece en la lista de 13 autores del informe final, pero fue miembro oficial del Grupo de Trabajo 2.1 sobre Lenguajes y Cálculos Algorítmicos de la Federación Internacional para el Procesamiento de la Información (IFIP) IFIP , que especificó, respalda y mantiene ALGOL 60 y ALGOL 68 . Finalmente dejó el comité, aparentemente porque no estaba de acuerdo con las opiniones de la mayoría. Aún así, mientras estaba en el Mathematisch Centrum (Amsterdam), escribió junto con Jaap Zonneveld el primer compilador de ALGOL 60 . En agosto de 1960, él y Zonneveld pusieron en funcionamiento el primer compilador completo de ALGOL 60 (para la computadora Electrologica X1 ), más de un año antes de que otro grupo produjera un compilador. Dijkstra y Zonneveld, que colaboraron en el compilador, acordaron no afeitarse hasta que se completara el proyecto. Zonneveld se afeitó poco después, pero Dijkstra mantuvo su barba por el resto de su vida.

ALGOL fue el resultado de una colaboración de los comités estadounidenses y europeos. ALGOL 60 (abreviatura de ALGOrithmic Language 1960) es un miembro de la familia ALGOL de lenguajes de programación de computadoras. Siguió a ALGOL 58 e inspiró muchos idiomas que le siguieron. Que dio lugar a muchos otros idiomas, incluyendo el BCPL , B , Pascal , Simula , y C . Algol 60 era un lenguaje informático de diseño sofisticado y proporcionaba una gran cantidad de desafíos de implementación desconocidos hasta ahora . Como señala Bjarne Stroustrup , "un problema con Algol60 era que nadie sabía cómo implementarlo". Un nuevo desafío importante en la implementación de Algol 60 fue la asignación y gestión de datos en tiempo de ejecución. En 1960, Dijkstra y Zonneveld mostraron cómo se podían ejecutar procedimientos recursivos utilizando una pila de registros de activación en tiempo de ejecución , y cómo acceder de manera eficiente a los identificadores de ámbitos de inclusión estática utilizando la llamada pantalla . El compilador ALGOL 60 fue uno de los primeros en admitir la recursividad empleando un método novedoso para hacerlo. El breve libro de Dijkstra Primer of Algol 60 Programming , publicado originalmente en 1962, fue la referencia estándar para el lenguaje durante varios años.

Papel de la metodología de programación y el nacimiento del movimiento de programación estructurada

En 1965, Dijkstra escribió sus famosas Notas sobre programación estructurada y declaró la programación como una disciplina en contraste con un oficio . También en 1965 Hoare publicó un importante artículo sobre la estructuración de datos. Estas ideas tuvieron una profunda influencia en el nuevo lenguaje de programación , en particular Pascal . Los lenguajes son los vehículos en los que se deben expresar estas ideas. La programación estructurada pasó a ser compatible con un lenguaje de programación estructurado .

-  Niklaus Wirth , IEEE Annals of the History of Computing (2008)

La revolución en las visiones de la programación iniciada por la iconoclasia de Dijkstra condujo a un movimiento conocido como programación estructurada, que defendía un enfoque sistemático y racional de la construcción de programas. La programación estructurada es la base de todo lo que se ha hecho desde entonces en la metodología de programación , incluida la programación orientada a objetos .

-  Bertrand Meyer , Touch of Class: Aprender a programar bien con objetos y contratos (2009)

La programación de computadoras en las décadas de 1950 a 1960 no fue reconocida como una disciplina académica y, a diferencia de las ciencias maduras, no había conceptos teóricos ni sistemas de codificación. La programación como actividad profesional era poco conocida en esos años. A finales de la década de 1960, la programación informática estaba en crisis. La crisis del software es un término utilizado en los primeros días de la informática para referirse a la dificultad de escribir programas informáticos útiles y eficientes en el tiempo requerido. La crisis del software se debió al rápido aumento de la potencia de las computadoras y a la complejidad de los problemas que se podían abordar. Con el aumento de la complejidad del software , surgieron muchos problemas de software debido a que los métodos existentes eran insuficientes. El término "crisis del software" fue acuñado por algunos asistentes a la primera de las Conferencias de Ingeniería de Software de la OTAN en 1968 en Garmisch , Alemania. Su conferencia del premio ACM Turing de 1972 hace referencia a este mismo problema: "¡La principal causa de la crisis del software es que las máquinas se han vuelto varios órdenes de magnitud más poderosas! Para decirlo sin rodeos: mientras no haya máquinas, la programación fue no hay problema en absoluto; cuando teníamos algunas computadoras débiles, la programación se convirtió en un problema leve, y ahora tenemos computadoras gigantes, la programación se ha convertido en un problema igualmente gigantesco ".

Si bien Dijkstra había programado extensamente en código máquina en la década de 1950, llegó a la conclusión de que en los lenguajes de alto nivel el uso frecuente de la declaración GOTO solía ser sintomático de una estructura deficiente. En 1968 escribió un artículo privado "Un caso contra la declaración GO TO", que luego se publicó como una carta en el CACM. El editor Niklaus Wirth dio a esta carta el título " Ir a la declaración considerada perjudicial ", que introdujo la frase " considerada perjudicial " en la informática.

Dijkstra argumentó que la declaración de programación GOTO, que se encuentra en muchos lenguajes de programación de alto nivel, es una fuente importante de errores y, por lo tanto, debería eliminarse. Esta carta provocó un gran debate en la comunidad de programación. Algunos fueron a la longitud de equiparar la programación buena con la eliminación de GO TO . Dijkstra se negó a mencionar el debate, o incluso la declaración GO TO, en su artículo "Notas sobre programación estructurada". El debate se ha calmado hace mucho tiempo; Los lenguajes de programación brindan alternativas al GO TO, pocos programadores lo usan libremente y la mayoría nunca lo usa.

La tesis de Dijkstra era que las desviaciones del flujo de control lineal eran más claras si se permitían solo en estructuras disciplinadas de nivel superior, como la declaración if-then-else y el bucle while . Esta metodología se desarrolló en el movimiento de programación estructurada , el título de su libro de 1972, en coautoría con Tony Hoare y Ole-Johan Dahl . Considerada por muchos como el primer movimiento significativo en la historia de la programación de computadoras, la programación estructurada se convirtió en la nueva ortodoxia de la programación durante la década de 1970.

La programación estructurada se considera a menudo como "programación sin goto". Pero como señala Bertrand Meyer, "Como muestra el primer libro sobre el tema [ Programación estructurada de Dijkstra, Dahl y Hoare], la programación estructurada es mucho más que estructuras de control y el goto . Su mensaje principal es que la programación debe considerarse un disciplina científica basada en el rigor matemático ". Como paradigma de programación , la programación estructurada, especialmente en las décadas de 1970 y 1980, influyó significativamente en el nacimiento de muchos lenguajes de programación modernos como Pascal , C , Modula-2 y Ada . La versión Fortran 77 , que incorpora los conceptos de programación estructurada, fue lanzada en 1978. El lenguaje C ++ era una versión considerablemente ampliada y mejorada del popular lenguaje de programación estructurado C (ver también: lista de lenguajes de programación basados ​​en C ). Dado que C ++ se desarrolló a partir de un lenguaje estructurado más tradicional , es un ' lenguaje híbrido ', en lugar de un lenguaje de programación orientado a objetos puro .

En su artículo Programación estructurada: retrospectiva y perspectiva (1986), Harlan Mills escribe: " El artículo de Programación estructurada de 1969 de Edsger W. Dijkstra precipitó una década de intenso enfoque en las técnicas de programación que ha alterado fundamentalmente las expectativas y los logros humanos en el desarrollo de software . Antes de esta década La programación fue considerada como una actividad privada de resolución de acertijos de escribir instrucciones de computadora para que funcionara como un programa. Después de esta década, la programación podía considerarse como una actividad pública basada en las matemáticas de reestructurar especificaciones en programas. El desafío consistía en lograr que los programas se ejecutaran y luego depurarlos más para que hicieran las cosas correctas. Después, se podía esperar que los programas se ejecutaran y hicieran las cosas correctas con poca o ninguna depuración. Antes, era de conocimiento común que ningún programa considerable podría estar libre de errores. Después, muchos programas considerables se han ejecutado durante un año o más sin que se hayan detectado errores. Estas expectativas y los logros no son universales debido a la inercia de las prácticas industriales. Pero están lo suficientemente bien establecidos como para anunciar un cambio fundamental en el desarrollo de software ".

El libro Concise Encyclopedia of Computer Science (2004), editado por Edwin D. Reilly, señala que "las principales contribuciones de la programación estructurada han sido dobles: la elevación de la técnica de programación a algo menos que un arte y más una ciencia, y la demostración de que los programas cuidadosamente estructurados pueden ser obras creativas de mérito literario suficiente para merecer ser leídas por humanos y no solo por computadora ".

Investigación sobre diseño y desarrollo de programas en los albores de la ingeniería de software

Las ideas de Dijkstra sobre la metodología de programación (especialmente el movimiento de programación estructurada) ayudaron a sentar las bases para el nacimiento y desarrollo de la disciplina profesional de la ingeniería de software (en particular, el diseño y desarrollo de software), permitiendo a los programadores organizar y gestionar proyectos de software cada vez más complejos. A finales de la década de 1960, Dijkstra discutió el concepto de familias de programas. A mediados de la década de 1970, David Parnas y otros aclararon la idea y mostraron cómo aplicarla en los principios de la ingeniería de software.

El surgimiento del movimiento de programación estructurada condujo a muchos otros enfoques estructurados aplicados al diseño de software . Las técnicas de análisis estructurado y diseño estructurado son consecuencia de conceptos y técnicas de programación estructurada y de las primeras ideas sobre diseño modular. Los principios de modularidad fueron reforzados por los conceptos de acoplamiento (minimizado entre módulos) y cohesión (maximizado dentro de los módulos) de Larry Constantine , por las técnicas de ocultación de información de David Parnas y por tipos de datos abstractos . Una serie de herramientas y métodos que emplean conceptos estructurados se han desarrollado, tales como diseño estructurado , programación estructurada de Jackson , Ross ' Structured Análisis y Diseño Técnica (TDAA), estructurado método de Yourdon , Análisis De Sistemas Estructurados y método Diseño (SSADM), y James Martin de la información ingeniería tecnológica . El campo de las métricas de software a menudo se considera una influencia directa del movimiento de programación estructurada en la ingeniería de software en la década de 1970.

La separación de preocupaciones (SoC), uno de los principios básicos en la ingeniería de software , es un principio de diseño para separar un programa de computadora en distintas secciones, de modo que cada sección aborde una preocupación separada . El término separación de preocupaciones fue acuñado por Dijkstra en su artículo de 1974 "Sobre el papel del pensamiento científico".

Investigación del sistema operativo

En la década de 1960, Dijkstra y sus colegas de Eindhoven diseñaron e implementaron el sistema operativo THE (que significa ' Technische Hogeschool Eindhoven ') , que estaba organizado en capas de abstracción claramente identificadas . Su artículo de 1968 sobre este tema sentó las bases para los diseños posteriores de los sistemas operativos. David Alan Grier de la IEEE Computer Society escribe: "Por lo general, la idea de construir sistemas informáticos en capas se remonta a un artículo de 1967 que el informático holandés Edsger Dijkstra pronunció en una conferencia conjunta de IEEE Computer Society / ACM. Antes de este artículo, los ingenieros había luchado con el problema de cómo organizar el software. Si observa los primeros ejemplos de programas, y puede encontrar muchos en la biblioteca electrónica de Computer Society, encontrará que la mayor parte del código de esa época es complicado, difícil de leer, difícil de modificar y difícil de reutilizar. En su artículo de 1967, Dijkstra describió cómo se podía construir el software en capas y dio un ejemplo de un sistema operativo simple que usaba cinco capas. Admitió que este sistema podría no ser una prueba realista de su ideas, pero argumentó que "cuanto más grande es el proyecto, más esencial es la estructuración". La idea de usar capas para controlar la complejidad se ha convertido en un pilar de la arquitectura de software. aplíquelo a muchos problemas. Lo vemos en la jerarquía de clases en la programación orientada a objetos y en la estructura de la arquitectura orientada a servicios (SOA). SOA es una aplicación relativamente reciente de capas en informática. Se articuló en 2007 como un medio para controlar la complejidad de los sistemas comerciales, especialmente los sistemas distribuidos que hacen un uso sustancial de Internet. Al igual que el plan de Dijkstra para el desarrollo de sistemas, su sistema de capas se llama SOA Solution Stack o S3. Las nueve capas del S3 son: 1) sistemas operativos, 2) componentes de servicio, 3) servicios, 4) procesos comerciales, 5) acciones del consumidor, 6) integración del sistema, 7) control y garantía de calidad, 8) arquitectura de la información y 9) gobernanza y políticas del sistema ".

Dijkstra organizó el diseño del sistema en capas para reducir la complejidad general del software. Aunque el término 'arquitectura' aún no se había utilizado para describir el diseño de software , ciertamente se consideró el primer vistazo a la arquitectura de software . Introdujo una serie de principios de diseño que se han convertido en parte del vocabulario de trabajo de todo programador profesional: niveles de abstracción, programación en capas, el semáforo y procesos secuenciales cooperativos . Su artículo original sobre el sistema operativo THE se reimprimió en la edición del 25 aniversario de Communications of the ACM, en enero de 1983. A modo de introducción, el Editor en Jefe dice: "Este proyecto inició una larga línea de investigación en sistemas multinivel arquitectura - una línea que continúa hasta el día de hoy porque la modularidad jerárquica es un enfoque poderoso para organizar grandes sistemas ".

Computación concurrente (programación concurrente)

Si bien la ejecución concurrente de programas se había considerado durante años, la informática de la concurrencia comenzó con el artículo seminal de 1965 de Edsger Dijkstra que introdujo el problema de la exclusión mutua . (...) El segundo problema fundamental de programación concurrente a estudiar fue la sincronización productor-consumidor. Esta forma de sincronización se utilizó a nivel de hardware en las primeras computadoras, pero fue identificado por primera vez como un problema de concurrencia por Dijkstra en 1965, aunque no se publicó en esta formulación hasta 1968. (...) Después de los sistemas distribuidos , el siguiente gran problema El paso en los algoritmos concurrentes fue el estudio de la tolerancia a fallas . El primer examen científico de la tolerancia a fallas fue el artículo seminal de 1974 de Dijkstra sobre la autoestabilización . Sin embargo, como sucede a veces con trabajos que se adelantan a su tiempo, ese papel recibió poca atención y fue esencialmente olvidado durante una década. (...) Las décadas siguientes han visto un gran crecimiento del interés en la concurrencia, particularmente en los sistemas distribuidos. Mirando hacia atrás en los orígenes del campo, lo que destaca es el papel fundamental desempeñado por Edsger Dijkstra, a quien está dedicada esta historia.

-  Leslie Lamport , Turing Lecture: The Computer Science of Concurrency: The Early Years (junio de 2015)
Un semáforo ( holandés : seinpaal ), el término utilizado en el artículo original de Dijkstra. A principios de la década de 1960, Dijkstra propuso el primer mecanismo de sincronización para procesos concurrentes, el semáforo con sus dos operaciones, P y V.

En un artículo de una página de 1965, Dijkstra presentó el " problema de exclusión mutua " para n procesos y discutió una solución. Probablemente fue el primer algoritmo concurrente publicado . En este artículo también se introdujo la noción, estándar ahora, de una " sección crítica ". Per Brinch Hansen , un pionero en el campo de la computación concurrente , considera que Cooperating Sequential Processes (1965) de Dijkstra es el primer artículo clásico en programación concurrente. Como señala Brinch Hansen, "Dijkstra sienta las bases conceptuales para la programación concurrente abstracta" con ese artículo.

Un ejemplo simple de dos procesos que modifican una lista enlazada al mismo tiempo provocando un conflicto. El requisito de exclusión mutua fue identificado y resuelto por primera vez por Dijkstra en su artículo seminal de 1965 titulado Solución de un problema en el control de programación concurrente , y se le atribuye el crédito como el primer tema en el estudio de algoritmos concurrentes .

En 1968 Dijkstra publicó su artículo seminal ' Cooperando procesos secuenciales ', un ensayo de 70 páginas que originó el campo de la programación concurrente . En él discutió la noción de exclusión mutua ( mutex ) y los criterios que debe satisfacer una solución satisfactoria. También corrigió la perspectiva histórica que quedó fuera de su artículo de 1965 al incluir la primera solución correcta conocida al problema de la exclusión mutua , para dos procesos, debida a Theodorus Dekker . Posteriormente, Dijkstra generalizó la solución de Dekker en n procesos. Además, propuso el primer mecanismo de sincronización para procesos concurrentes, el semáforo con sus dos operaciones, P y V. También identificó el ' problema del punto muerto ' (llamado allí 'el problema del abrazo mortal ') y propuso un elegante ' algoritmo de banquero 'que evita el estancamiento . La detección y prevención de puntos muertos se convirtieron en problemas de investigación perennes en el campo de la programación concurrente.

Ilustración del problema de los filósofos gastronómicos

El problema de los filósofos de la cena es un problema de ejemplo que se utiliza a menudo en el diseño de algoritmos concurrentes para ilustrar problemas de sincronización y técnicas para resolverlos. Fue formulado originalmente en 1965 por Dijkstra como un ejercicio de examen para estudiantes, presentado en términos de computadoras que compiten por el acceso a periféricos de unidades de cinta . Poco después, Tony Hoare dio al problema su formulación actual. El problema del peluquero dormido también se atribuye a Dijkstra.

Michel Raynal (2012) escribe: "Desde los primeros trabajos de EW Dijkstra (1965), quien introdujo el problema de la exclusión mutua, el concepto de proceso, el objeto semáforo, la noción de una condición previa más débil y los comandos guardados (entre muchos otros contribuciones), la sincronización ya no es un catálogo de trucos, sino un dominio de la informática con sus propios conceptos, mecanismos y técnicas cuyos resultados se pueden aplicar en muchos dominios. Esto significa que la sincronización de procesos tiene que ser un tema importante de cualquier informática. plan de estudios."

John W. McCormick y col. (2011) señala: "La noción de programa concurrente como un medio para escribir programas paralelos sin tener en cuenta el hardware subyacente fue introducida por primera vez por Edsger Dijkstra (1968). Moti Ben-Ari (1982) resumió elegantemente la idea de Dijkstra en tres frases : 'La programación concurrente es el nombre que se le da a la notación de programación y a las técnicas para expresar el paralelismo potencial y resolver los problemas de sincronización y comunicación resultantes. La implementación del paralelismo es un tema en los sistemas informáticos (hardware y software) que es esencialmente independiente de la programación concurrente. Programación concurrente es importante porque proporciona un entorno abstracto en el que estudiar el paralelismo sin atascarse en los detalles de implementación '".

Computación distribuida (programación distribuida)

Dijkstra fue uno de los primeros pioneros de la investigación sobre los principios de la computación distribuida . Los patrocinadores del Premio Dijkstra reconocen que "ningún otro individuo ha tenido una mayor influencia en la investigación de los principios de la computación distribuida". Incluso se considera que algunos de sus trabajos son los que establecieron el campo. El artículo de 1965 de Dijkstra, Solution of a Problem in Concurrent Programming Control, fue el primero en presentar la solución correcta al problema de exclusión mutua . Leslie Lamport escribe que este trabajo "es probablemente la razón por la que existe PODC " y "inició el campo de los algoritmos concurrentes y distribuidos ".

En particular, su artículo "Sistemas de autoestabilización a pesar del control distribuido" (1974) inició el subcampo de la autoestabilización . También se considera como el primer examen científico de sistemas tolerantes a fallas . El artículo de Dijkstra no fue ampliamente notado hasta la charla invitada de Leslie Lamport en el Simposio ACM sobre Principios de Computación Distribuida ( PODC ) en 1983. En su informe sobre el trabajo de Dijkstra sobre sistemas distribuidos autoestabilizantes , Lamport considera que es 'un hito en el trabajo sobre tolerancia a fallos 'y' un campo muy fértil para la investigación '.

Especificación y verificación formales

Desde la década de 1970, el principal interés de Dijkstra fue la verificación formal . En 1976, Dijkstra publicó un libro fundamental, A Discipline of Programming , que presentaba su método de desarrollo sistemático de programas junto con sus pruebas de corrección. En su exposición usó su ' Lenguaje de comando cauteloso '. El lenguaje, con su dependencia del no determinismo, la semántica de precondición más débil adoptada y el método de desarrollo propuesto, ha tenido un impacto considerable en el campo hasta el día de hoy. El cálculo de refinamiento , propuesto originalmente por Ralph-Johan Back y desarrollado por Carroll Morgan , es una extensión del cálculo de precondiciones más débil de Dijkstra , donde los enunciados del programa se modelan como transformadores de predicados .

En 1984, para agregar más apoyo a este enfoque de la programación, publicó junto con Wim Feijen un libro de texto introductorio para estudiantes de primer año de ciencias de la computación. El libro, publicado por primera vez en holandés, se tituló Een methode van programmeren . La edición en inglés apareció en 1988 como A Method of Programming .

Sobre la naturaleza de la informática y la programación informática

Muchas de las opiniones de Dijkstra sobre la informática y la programación se han generalizado. Por ejemplo, a veces se le atribuye la frase de programación "dos o más, use un para" (una regla general para usar un bucle).

Fue el primero en afirmar que la programación es tan intrínsecamente compleja que, para administrarla con éxito, los programadores deben aprovechar todos los trucos y abstracciones posibles.

Dijkstra fue uno de los oponentes más famosos de la visión de la ingeniería de la ciencia de la computación. Al igual que Peter Naur y Kristen Nygaard , a Dijkstra no le gustaba el término "informática". La informática , como señaló Dijkstra, merece un mejor nombre. Sugiere que se puede llamar "ciencia de la computación". En lugar de la computadora, o tecnología informática, Dijkstra quería enfatizar los mecanismos abstractos que utiliza la ciencia de la computación para dominar la complejidad. Al expresar la naturaleza abstracta de la ciencia de la computación , escribió:

Una confusión aún más antigua vino del hecho de que los que no estaban preparados incluían a los ingenieros electrónicos que se suponía que debían diseñar, construir y mantener las máquinas. En realidad, el trabajo estaba más allá de la tecnología electrónica de la época y, como resultado, la cuestión de cómo conseguir y mantener el equipo físico más o menos en condiciones de funcionamiento se convirtió en los primeros días en la principal preocupación. Como resultado, el tema se conoció prematuramente, principalmente en los EE. UU., Como ' ciencias de la computación ', que, en realidad, es como referirse a la cirugía como 'ciencia del cuchillo', y se implantó firmemente en la mente de las personas que la ciencia de la computación se trata de máquinas. y sus equipos periféricos. Quod non [latín: "Lo que no es cierto"]. Ahora sabemos que la tecnología electrónica no tiene más que contribuir a la informática que el equipo físico. Ahora sabemos que la computadora programable es ni más ni menos que un dispositivo extremadamente útil para realizar cualquier mecanismo concebible sin cambiar un solo cable, y que el desafío central para la ciencia de la computación es, por lo tanto, conceptual, a saber, qué mecanismos (abstractos) podemos concebir sin perdernos en las complejidades de nuestra propia creación.

En The Humble Programmer (1972), Dijkstra escribió: "No debemos olvidar que no es nuestro negocio [los científicos informáticos] hacer programas, es nuestro negocio diseñar clases de cálculos que muestren un comportamiento deseado".

Dijkstra también se opuso a la inclusión de la ingeniería de software bajo el paraguas de la informática académica. Escribió que, "Como la economía se conoce como" La ciencia miserable ", la ingeniería de software debería conocerse como" La disciplina condenada ", condenada al fracaso porque ni siquiera puede acercarse a su objetivo, ya que su objetivo es contradictorio". Y "la ingeniería de software ha aceptado como estatuto 'Cómo programar si no se puede'".

Personalidad y estilo de trabajo

Dijkstra en la pizarra durante una conferencia en la ETH de Zúrich en 1994. Una vez comentó: " Una imagen puede valer mil palabras , una fórmula vale mil imágenes".

La sencillez es una gran virtud pero requiere mucho trabajo para lograrla y educación para apreciarla. Y para empeorar las cosas: la complejidad se vende mejor. La industria de la computación no es la única que ha descubierto esa dolorosa verdad: también lo ha hecho el mundo académico. Si dices una conferencia que es clara como el cristal de principio a fin, tu audiencia se siente engañada y murmura al salir de la sala de conferencias "Eso fue bastante trivial, ¿no?"

-  EW Dijkstra, "Sobre la naturaleza de la ciencia de la computación" (EWD896), agosto de 1984

Difícilmente se puede culpar al MIT por no prestar atención a un científico informático desconocido en una pequeña ciudad de los Países Bajos.

-  Dijkstra solía describirse ingeniosamente a sí mismo en Nuenen a mediados de la década de 1960.

En el mundo de las ciencias de la computación, Dijkstra es bien conocido como un "personaje". En el prefacio de su libro A Discipline of Programming (1976) afirmó lo siguiente: "Por la ausencia de una bibliografía, no ofrezco explicación ni disculpa". De hecho, la mayoría de sus artículos y libros no tienen ninguna referencia. Este enfoque de las referencias fue deplorado por algunos investigadores. Pero Dijkstra eligió esta forma de trabajar para preservar su autosuficiencia.

Como profesor universitario durante gran parte de su vida, Dijkstra vio la enseñanza no solo como una actividad requerida, sino como un esfuerzo de investigación serio. Su enfoque de la enseñanza no era convencional. Su estilo de conferencia ha sido descrito como idiosincrásico. Al dar una conferencia, las largas pausas entre las oraciones a menudo se han atribuido al hecho de que el inglés no es el primer idioma de Dijkstra. Sin embargo, las pausas también le sirvieron como una forma de pensar en sus pies y fue considerado como un pensador rápido y profundo mientras participaba en el acto de dar una conferencia. Sus cursos para estudiantes en Austin tenían poco que ver con la informática, pero se ocupaban de la presentación de pruebas matemáticas. Al inicio de cada semestre tomaba una foto de cada uno de los alumnos, para poder memorizar sus nombres. Nunca siguió un libro de texto , con la posible excepción del suyo mientras estaba en preparación. Al dar una conferencia, escribía pruebas con tiza en una pizarra en lugar de usar láminas de aluminio. Invitó a los estudiantes a sugerir ideas, que luego exploró, o se negó a explorar porque violaban algunos de sus principios. Asignaba problemas de tarea desafiantes y estudiaba a fondo las soluciones de sus alumnos. Realizó sus exámenes finales oralmente, durante toda una semana. Cada estudiante fue examinado en la oficina o en el hogar de Dijkstra, y el examen duró varias horas.

No es tarea de la Universidad ofrecer lo que la sociedad pide, sino dar lo que la sociedad necesita. [Las cosas que pide la sociedad generalmente se entienden, y no se necesita una Universidad para eso; la universidad tiene que ofrecer lo que nadie más puede ofrecer].

-  EW Dijkstra, "Respuestas a las preguntas de los estudiantes de Ingeniería de Software" (EWD1305), noviembre de 2000

Dijkstra también fue muy original en su forma de evaluar la capacidad de las personas para un trabajo. Cuando Vladimir Lifschitz llegó a Austin en 1990 para una entrevista de trabajo, Dijkstra le dio un acertijo. Vladimir lo resolvió y ha estado trabajando en Austin desde entonces.

A pesar de haber inventado gran parte de la tecnología del software, evitó el uso de computadoras en su propio trabajo durante muchas décadas. Incluso después de sucumbir al estímulo de sus colegas de UT y adquirir una computadora Macintosh , la usó solo para correo electrónico y para navegar por la World Wide Web . Dijkstra nunca escribió sus artículos usando una computadora. Prefirió confiar en su máquina de escribir y luego en su bolígrafo Montblanc . El instrumento de escritura favorito de Dijkstra era la pluma estilográfica Montblanc Meisterstück . Probó repetidamente con otros bolígrafos, pero ninguno desplazó al Montblanc.

No tenía ningún uso para los procesadores de texto , creyendo que uno debería poder escribir una carta o un artículo sin borradores, reescritura o edición significativa. Lo resolvería todo en su cabeza antes de poner la pluma en el papel, y una vez mencionó que cuando era estudiante de física, resolvía mentalmente sus problemas de tarea mientras caminaba por las calles de Leiden . La mayoría de las publicaciones de Dijkstra fueron escritas por él solo. Nunca tuvo secretaria y se ocupaba solo de toda su correspondencia. Cuando sus colegas prepararon un Festschrift para su sexagésimo cumpleaños, publicado por Springer-Verlag , se tomó la molestia de agradecer a cada uno de los 61 colaboradores por separado, en una carta escrita a mano.

A lo largo de la carrera de Dijkstra, su trabajo se caracterizó por la elegancia y la economía. Escritor prolífico (especialmente como ensayista), Dijkstra fue autor de más de 1300 artículos, muchos escritos a mano con su guión preciso. Eran ensayos y parábolas; cuentos de hadas y advertencias; explicación integral y pretexto pedagógico. La mayoría trataban de matemáticas e informática; otros eran informes de viajes que son más reveladores sobre su autor que sobre las personas y lugares visitados. Tenía la costumbre de copiar cada artículo y distribuirlo entre un pequeño grupo de colegas que copiarían y enviarían los artículos a otro grupo limitado de científicos. Su historia de amor con la sencillez llegó a una edad temprana y bajo la guía de su madre. Una vez dijo que le había preguntado a su madre si la trigonometría era un tema difícil. Ella respondió que debía aprender todas las fórmulas y que, además, si necesitaba más de cinco líneas para probar algo, estaba en el camino equivocado.

Dijkstra era famoso por su ingenio, elocuencia, rudeza, brusquedad y, a menudo, crueldad con sus compañeros profesionales, y su manera de hablar, como en su comentario, "La cuestión de si las máquinas pueden pensar (...) es tan relevante como la cuestión de si Los submarinos pueden nadar ". Su consejo para un investigador prometedor, que le preguntó cómo seleccionar un tema de investigación, fueron las sabias palabras: "Haz solo lo que solo tú puedes hacer". Dijkstra también era conocido por su crítica vocal y su ausencia de habilidades sociales al interactuar con sus colegas. Como visionario abierto y crítico, se opuso firmemente a la enseñanza de BASIC .

En muchos de sus ensayos más ingeniosos, Dijkstra describió una empresa ficticia de la que se desempeñó como presidente. La empresa se llamaba Mathematics, Inc., empresa que imaginó habiendo comercializado la producción de teoremas matemáticos de la misma forma que las empresas de software habían comercializado la producción de programas informáticos. Inventó una serie de actividades y desafíos de Mathematics Inc. y los documentó en varios artículos de la serie EWD. La compañía imaginaria había producido una prueba de la Hipótesis de Riemann, pero luego tuvo grandes dificultades para cobrar regalías a los matemáticos que habían probado los resultados asumiendo la Hipótesis de Riemann. La prueba en sí misma era un secreto comercial . Muchas de las pruebas de la empresa se apresuraron a salir por la puerta y luego gran parte del esfuerzo de la empresa tuvo que dedicarse al mantenimiento . Un esfuerzo más exitoso fue la Prueba estándar para el teorema de Pitágoras , que reemplazó las más de 100 pruebas existentes incompatibles. Dijkstra describió a Mathematics Inc. como "el negocio más emocionante y miserable jamás concebido". EWD 443 (1974) describe que su empresa ficticia tiene más del 75 por ciento de la cuota de mercado mundial.

Manuscritos EWD

Dijkstra era bien conocido por su hábito de componer cuidadosamente manuscritos con su pluma estilográfica . Los manuscritos se llaman EWD, ya que Dijkstra los numeró con EWD , sus iniciales, como prefijo. Según el propio Dijkstra, los EWD comenzaron cuando se mudó del Centro Matemático de Ámsterdam a la Universidad Tecnológica de Eindhoven (entonces Technische Hogeschool Eindhoven). Después de ir a Eindhoven , Dijkstra experimentó un bloqueo de escritor durante más de un año. Dijkstra distribuyó fotocopias de un nuevo EWD entre sus colegas. Muchos destinatarios fotocopiaron y enviaron sus copias, por lo que los EWD se difundieron por toda la comunidad informática internacional. Los temas fueron ciencias de la computación y matemáticas, e incluyeron informes de viaje, cartas y discursos. Estos breves artículos abarcan un período de 40 años. Casi todos los EWD que aparecieron después de 1972 fueron escritos a mano. Rara vez tienen más de 15 páginas y están numeradas consecutivamente. El último, el número 1318, es del 14 de abril de 2002. Dentro de la informática se conocen como informes EWD, o simplemente EWD. Se han escaneado más de 1300 EWD, con un número creciente de transcripciones para facilitar la búsqueda, y están disponibles en línea en el archivo Dijkstra de la Universidad de Texas.

Vida personal y muerte

Dijkstra llevó un estilo de vida modesto , hasta el punto de ser espartano. La casa de él y de su esposa en Nuenen era sencilla, pequeña y sin pretensiones. No tenía televisión, videograbadora ni teléfono móvil, y no iba al cine. Tocaba el piano y, mientras estaba en Austin , le gustaba ir a conciertos . Un oyente entusiasta de la música clásica , el compositor favorito de Dijkstra era Mozart .

Dijkstra murió el 6 de agosto de 2002. Según funcionarios de la Universidad de Texas, la causa de la muerte fue el cáncer.

Influencia y reconocimiento

La diferencia entre un programador de computadoras y un científico de la computación es una cuestión de título de trabajo. Edsger Dijkstra quiere con orgullo que lo llamen "programador de computadoras", aunque no ha tocado una computadora desde hace algunos años. (...) Su gran fortaleza es que es intransigente. Le pondría físicamente enfermo pensar en programar en C ++.

-  Donald Knuth (1996), una entrevista con Donald Knuth por Jack Woehr del Dr. Dobb's Journal .

En 1972, la Association for Computing Machinery (ACM) reconoció las contribuciones fundamentales de Dijkstra al campo otorgándole el distinguido premio Turing. La cita para el premio dice:

Edsger Dijkstra fue uno de los principales contribuyentes a finales de la década de 1950 en el desarrollo de ALGOL , un lenguaje de programación de alto nivel que se ha convertido en un modelo de claridad y rigor matemático. Es uno de los principales exponentes de la ciencia y el arte de los lenguajes de programación en general, y ha contribuido enormemente a nuestra comprensión de su estructura, representación e implementación. Sus quince años de publicaciones abarcan desde artículos teóricos sobre teoría de grafos hasta manuales básicos, textos expositivos y contemplaciones filosóficas en el campo de los lenguajes de programación.

La introducción dada en la ceremonia de premiación es un homenaje a Dijkstra:

El vocabulario de trabajo de los programadores de todo el mundo está plagado de palabras originadas o promulgadas con fuerza por EW Dijkstra: visualización, abrazo mortal , semáforo, programación sin acceso, programación estructurada . Pero su influencia en la programación es más generalizada de lo que cualquier glosario pueda indicar. El precioso regalo que reconoce este premio Turing es el estilo de Dijkstra: su enfoque de la programación como un gran desafío intelectual; su elocuente insistencia y demostración práctica de que los programas deben componerse correctamente, no solo depurarse para que sean correctos ; y su iluminadora percepción de los problemas en los cimientos del diseño de programas . (…) Hemos llegado a valorar los buenos programas de la misma manera que valoramos la buena literatura. Y en el centro de este movimiento, creando y reflejando patrones no menos hermosos que útiles, se encuentra EW Dijkstra.

En palabras de Sir Tony Hoare , FRS , pronunciadas por él en el funeral de Dijkstra:

Edsger es ampliamente reconocido como un hombre que ha pensado profundamente en muchas cuestiones profundas; y entre las preguntas más profundas está la de la filosofía moral tradicional: ¿Cómo es que una persona debe vivir su vida? Edsger encontró la respuesta a esta pregunta temprano en su vida: decidió que viviría como un científico académico, investigando una nueva rama de la ciencia, la ciencia de la computación. Él sentaría las bases que establecerían la informática como una disciplina científica rigurosa; y en su investigación, en su enseñanza y en su escritura, buscaría la perfección excluyendo todas las demás preocupaciones. Nunca se desvió de estos compromisos, y es así como ha hecho a su sujeto de estudio elegido la mayor contribución que una persona podría hacer en una vida.

En marzo de 2003, se envió el siguiente correo electrónico a la comunidad informática distribuida :

Esto es para anunciar que el premio anteriormente conocido como el "Premio PODC Influential-Paper " ha sido rebautizado como " Premio Edsger W. Dijkstra en Computación Distribuida " en honor al fallecido Edsger W. Dijkstra, un pionero en el área de la computación distribuida. Su trabajo fundamental sobre primitivas de concurrencia (como el semáforo), problemas de concurrencia (como exclusión mutua y punto muerto ), razonamiento sobre sistemas concurrentes y autoestabilización comprende uno de los soportes más importantes sobre los que se construye el campo de la computación distribuida. Ningún otro individuo ha tenido una mayor influencia en la investigación de los principios de la computación distribuida.

El ex presidente de ACM , Peter J. Denning, escribió sobre Dijkstra:

Edsger Dijkstra, uno de los gigantes de nuestro campo y un apasionado creyente en la visión matemática de los programas y la programación (...) Durante el cuarto de siglo anterior, había formulado muchos de los grandes desafíos intelectuales del campo como programación: el instrucción goto, programación estructurada, procesos concurrentes, semáforos, interbloqueos, programación recursiva en Algol y derivación de programas correctos.

Premios y honores

Entre los premios y honores de Dijkstra se encuentran:

En 1969, la British Computer Society (BCS) recibió la aprobación para un premio y una beca, Distinguished Fellow de la British Computer Society (DFBCS), que se otorgaría en virtud del estatuto 7 de su estatuto real . En 1971, se hizo la primera elección, a Dijkstra.

En 1990, con motivo del 60 cumpleaños de Dijkstra, el Departamento de Ciencias de la Computación (UTCS) de la Universidad de Texas en Austin organizó un seminario de dos días en su honor. Vinieron oradores de todo Estados Unidos y Europa, y un grupo de científicos informáticos contribuyó con artículos de investigación que se editaron en un libro.

En 2002, la Fundación C&C de Japón reconoció a Dijkstra "por sus contribuciones pioneras al establecimiento de la base científica del software informático a través de la investigación creativa en teoría básica del software, teoría de algoritmos, programación estructurada y semáforos". Dijkstra estaba vivo para recibir la notificación del premio, pero fue aceptado por su familia en una ceremonia de entrega de premios después de su muerte.

Poco antes de su muerte en 2002, Dijkstra recibió el premio ACM PODC Influential-Paper Award en computación distribuida por su trabajo sobre la autoestabilización de la computación de programas. Este premio anual pasó a llamarse Premio Dijkstra ( Premio Edsger W. Dijkstra en Computación Distribuida ) al año siguiente, en su honor.

El Premio Dijkstra al Logro Académico Sobresaliente en Ciencias de la Computación ( Departamento de Ciencias de la Computación de la Universidad Loyola de Chicago ) lleva el nombre de Edsger W. Dijkstra. A partir de 2005, este premio reconoce el mejor desempeño académico de un graduado en ciencias de la computación. La selección se basa en el GPA en todos los cursos principales y la elección por parte de la facultad del departamento.

El Departamento de Ciencias de la Computación (UTCS) de la Universidad de Texas en Austin acogió la conferencia inaugural Edsger W. Dijkstra Memorial el 12 de octubre de 2010. Tony Hoare , profesor emérito de Oxford e investigador principal de Microsoft Research, fue el orador del evento. Esta serie de conferencias fue posible gracias a una generosa donación de Schlumberger para honrar la memoria de Dijkstra.

Ver también

Publicaciones Seleccionadas

Libros
  • - (1962). Introducción a la programación de ALGOL 60: junto con el informe sobre el lenguaje algorítmico ALGOL 60 . Prensa académica. ISBN 978-0122162503.
  • -; Dahl, Ole-Johan ; Hoare, CAR (1972). Programación estructurada . Prensa académica . ISBN 978-0-12-200550-3.
  • - (1976). Una disciplina de programación . Prentice Hall. ISBN 978-0132158718.
  • - (mil novecientos ochenta y dos). Escritos seleccionados sobre informática: una perspectiva personal . Monografías en Informática. Saltador. ISBN 978-0387906522.
  • -; Feijen, WHJ; Sterringa, Broma (1988). Un método de programación . Addison-Wesley. ISBN 978-0201175363.
  • -; Scholten, Carel S. (1990). Cálculo de predicados y semántica de programas . Textos y monografías en informática. Springer-Verlag. ISBN 978-0387969572.
Artículos seleccionados

Referencias

Otras lecturas

enlaces externos