On this page
Before 1970, writing software was often treated as an ad-hoc craft. Programs were tangled webs of logic, difficult to read and harder to fix. The Swiss computer scientist Niklaus Wirth believed programming should instead be a systematic, disciplined engineering activity. To teach this discipline, he created a new language.
Wirth described the Pascal programming language in 1971 (source). Pascal was built to enforce what became known as structured programming. Rather than letting a programmer jump around the code with unstructured commands—often resulting in confusing "spaghetti code"—Pascal required clear control structures and strongly typed data. In 1984, Wirth received the ACM Turing Award, computer science's highest honour. His citation noted that Pascal had "become pedagogically significant" and provided a foundation for future research (source).
What is stepwise refinement?
In 1971, Wirth published the foundational paper "Program Development by Stepwise Refinement" in *Communications of the ACM* (source). He argued that you should not start writing code immediately when faced with a problem.
Instead, you begin with a high-level description of the task. You then break that main task into smaller, more manageable subtasks. You continue refining each subtask in parallel with the data it uses, delaying specific technical decisions until the very end. By the time you write the final program, the complex problem has been solved through a series of small, verifiable steps.
To demonstrate this, Wirth used the classic Eight Queens problem—placing eight chess queens on a board so that none threaten each other. He started with a single abstract sentence describing the goal. Instead of guessing a layout, he divided the work into finding safe positions column by column. As the logic grew more detailed, he introduced arrays to track which rows and diagonals were occupied. This parallel refinement kept the design clear.
You can use a similar stepwise checklist when studying:
Write down the final goal in plain words without any maths.
Break the path to the goal into independent steps.
Choose the formulas (algorithms) and values (data) needed for each step.
Solve one step at a time, checking it before moving to the next.
Why did he write Algorithms + Data Structures = Programs?
In 1976, Wirth published his influential textbook, *Algorithms + Data Structures = Programs* (source). The title captures his central thesis: the logic of a program (the algorithm) and the way its information is organised (the data structure) are inseparable.
You cannot design an effective way to sort exam scores without also deciding how those scores are stored in memory. In his book, Wirth used Pascal to show students how to match the right data structure with the right algorithm, laying the groundwork for modern software engineering.
How does step-by-step reasoning help you learn?
Wirth's philosophy of breaking problems down remains one of the most effective ways to learn any complex subject. When a student is stuck on a calculation, simply reading the final answer rarely helps. The learning happens in the intermediate steps.
This is why Fermi's AI tutor does not just print answers. When you bring a problem to it, Fermi holds a line of reasoning across a whole session, notices where a student is stuck, and decides whether to explain, ask, or show. Like Wirth's stepwise refinement, the Fermi Problem Library has worked problems with a step-by-step solver that explains the reasoning rather than printing an answer, so you can see exactly how the task is decomposed.
Wirth's focus on clarity shaped generations of students and languages. To see how other pioneers built the tools we use today, read about John Backus and Fortran: letting scientists write formulas or Donald Knuth and the analysis of algorithms, with a worked example.



