What Happened to Dijkstra's Crisis: The End of Algol and Beginning of Software Engineering?
Dijkstra's Crisis refers to a pivotal period in the late 1960s and early 1970s, marked by Edsger W. Dijkstra's critiques of the prevalent 'software crisis' and his advocacy for structured programming. This era saw the decline of complex languages like Algol 68 and laid the foundational principles for modern software engineering, emphasizing clarity, maintainability, and logical control flow.
Quick Answer
Dijkstra's Crisis was a critical turning point in computing history, driven by the 'software crisis' of the 1960s where software projects frequently failed due to complexity and lack of discipline. Edsger W. Dijkstra's influential 'Go To Statement Considered Harmful' (1968) and his promotion of structured programming provided a systematic approach to software development, moving away from unstructured 'spaghetti code' prevalent in languages like early Algol. Today, these foundational principles continue to underpin modern software engineering, with structured constructs being the default in almost all programming languages, even as debates about their absolute application (e.g., `goto` in Go) persist into 2026.
📊Key Facts
📅Complete Timeline13 events
Algol 58 Developed
The first version of Algorithmic Language (ALGOL) was created by European and American computer scientists, introducing concepts like code blocks and nested functions.
Algol 60 Defined
The ACM/GAMM Committee defined Algol 60, a significant advance in programming languages, introducing block structures and recursive function definitions.
The 'Software Crisis' Begins
The 'Software Crisis' emerged as software development struggled to keep pace with hardware advancements, leading to project delays, cost overruns, and unreliable systems.
'Go To Statement Considered Harmful' Published
Edsger W. Dijkstra's influential letter, originally titled 'A Case Against the Goto Statement,' was published in Communications of the ACM, criticizing the `goto` statement and advocating for structured programming.
First NATO Software Engineering Conference
Held in Garmisch, Germany, this conference formally recognized the 'software crisis' and proposed 'software engineering' as a new discipline to address the challenges of software development.
Algol 68 Published
A new version of Algol was published, but its significant complexity and difficult documentation led to criticism and limited adoption compared to Algol 60.
Dijkstra Receives ACM Turing Award
Edsger W. Dijkstra was awarded the ACM Turing Award for his fundamental contributions to developing structured programming languages, solidifying his impact on computer science.
'Notes on Structured Programming' Published
Dijkstra's expanded work, 'Notes on Structured Programming,' further detailed his ideas, triggering the structured programming movement and influencing many programming practices.
Edsger W. Dijkstra Dies
Edsger W. Dijkstra passed away, leaving behind a monumental legacy in computer science, including his work on structured programming, algorithms, and operating systems.
Modern Software Crisis Debates Continue
Discussions persist about whether a 'modern software crisis' exists, driven by new complexities and expectations, indicating that the foundational challenges identified by Dijkstra remain relevant.
Dijkstra's Legacy in Modern Languages like Go
The debate over the `goto` statement and structured programming continues, with modern languages like Go still including `goto` but strongly discouraging its use, reflecting Dijkstra's enduring influence.
Dijkstra's Ideas Shape Developer Thinking
Dijkstra's letter on `goto` is still recognized for changing how generations of developers think about writing code, emphasizing organized, readable, and logical programming.
Historical Reinterpretation of Dijkstra's Crisis
Academic historians continue to analyze and reinterpret the origins of software engineering, with recent discussions challenging conventional narratives and exploring Dijkstra's specific motivations.
🔍Deep Dive Analysis
The mid-to-late 1960s witnessed a growing 'software crisis,' characterized by software projects that routinely ran over budget, missed deadlines, and delivered unreliable or incomplete systems. This crisis stemmed from the inability of existing ad-hoc programming methods to cope with the increasing complexity and scale of software required for new, powerful hardware. The term 'software engineering' itself was coined at the 1968 NATO Software Engineering Conference in Garmisch, Germany, convened to address these mounting challenges and propose a more disciplined, engineering-like approach to software development.
Edsger W. Dijkstra, a prominent Dutch computer scientist, became a leading voice in this movement. His seminal 1968 letter, 'Go To Statement Considered Harmful,' published in the Communications of the ACM, was a powerful critique of the unrestricted use of the `goto` statement, arguing that it led to 'spaghetti code' that was difficult to read, debug, and maintain. Dijkstra advocated for 'structured programming,' a paradigm that emphasized clear, modular code structures using constructs like sequences, selections (if-then-else), and iterations (loops) to control program flow logically. This approach aimed to make code more provable, understandable, and maintainable.
Algol, particularly Algol 60, played a complex role in this crisis and its resolution. Algol 60 was a pioneering language, introducing block structures, nested functions, and lexical scope, which were key advances towards structured programming. It became a standard for publishing algorithms in scientific articles. However, its successor, Algol 68, was criticized for its extreme complexity and an 'inappropriate documentation' that made it difficult to implement and understand, contributing to its eventual decline in widespread use. Dijkstra himself was critical of Algol 68, seeing it as a move away from the clarity he championed.
The consequences of Dijkstra's crisis were profound. Structured programming became the dominant paradigm, influencing the design of subsequent languages like Pascal, C, and Ada. The focus shifted from merely writing code to designing and managing software projects with engineering discipline. While the 'software crisis' itself is a historical term, its underlying challenges of complexity, budget overruns, and quality issues persist in modern contexts, leading some to argue that aspects of the crisis remain a 'software normality' in 2025. However, the principles championed by Dijkstra—readability, maintainability, and logical structure—remain fundamental to contemporary software development, even in languages like Go that retain a `goto` statement for specific, discouraged uses. Historians like Thomas Haigh have also offered nuanced perspectives, suggesting that the narrative of the 'software crisis' and the birth of software engineering was partly constructed by academics to promote a more mathematical vision of programming.
What If...?
Explore alternate histories. What if Dijkstra's Crisis: The End of Algol and Beginning of Software Engineering made different choices?