Documente Academic
Documente Profesional
Documente Cultură
Niklaus Wirth
ETH Zurich
This article originally appeared in L. Boszormenyi, we should be concerned about the resulting
ed., MEDICHI 2007Methodic and Didactic deterioration in programming quality. Our
Challenges of the History of Informatics, limitations in designing complex systems are
Austrian Computer Society (OCG), Klagenfurt, no longer determined by slow hardware, but
Austria, 178 pp. The Austrian Computer Society by our own intellectual capability. From
(OCG) has kindly granted permission for an edited experience, we know that most programs
version to be published by the Annals. could be significantly improved, made more
reliable, more economical, and easier to use.
The term programming was commonly used
through the mid-1960s, and referred essential- The 1960s and the origin of
ly to the task of coding a computer. The term software engineering
software engineeringreferring to the highly It is unfortunate that people dealing with
disciplined, systematic approach to software computers often have little interest in the
development and maintenancecame into history of their subject. As a result, many
existence after a NATO-sponsored conference concepts and ideas are propagated and adver-
in 1968. At that conference, the difficulties tised as being new, when in fact they existed
and pitfalls of designing complex systems were decades ago, perhaps under a different name. I
explored in depth, and a search for solutions believe it worthwhile to occasionally consider
began that concentrated on better methodol- the past and to investigate how computing
ogies and tools. The most prominent of these terms and concepts originated.
tools were languages reflecting procedural, I regard the late 1950s as a period essential
modular, and object-oriented styles of pro- to the era of computing. At that time, large
gramming. Since 1968, the development of computers became available to research insti-
software engineering has been intimately tied tutions and universities. Computers were then
to these tools emergence and improvement, used primarily in engineering and the natural
as well as to efforts for systematizing or sciences, but they soon became indispensable
automating program documentation and test- in business, too. The time when they were
ing. Ultimately, analytic verification and cor- accessible only to a few insiders in laboratories,
rectness proofs were supposed to replace when they frequently broke down whenever
testing, but that has not happened. one wanted to use them, belonged to the past.
As this article will explain, the rapid growth Computers emergence from the closed labo-
of computing power has made it possible in ratory of electrical engineers into the public
recent years to apply computing to tasks that domain meant that computers use, in partic-
are ever more complicated. This trend has ular their programming, became an activity of
dramatically increased the demands on soft- many. As a result, a new profession was born,
ware engineers. Programs and systems have and all kinds of companies began to hire
become increasingly complex and almost programmers. The actual computers, however,
impossible for a single individual to fully remained hidden, enclosed within special
understand. The abundance of computing rooms built to house them in those same
resources coupled with a significant drop in companies. Programmers would write code
their cost inevitably reduced the attention and bring their programs to a counter where a
given to good design. At the expense of quality, dispatcher would pick up the programs and
the pursuit of profit became paramount, but queue them for processing. The programs
32 IEEE Annals of the History of Computing Published by the IEEE Computer Society 1058-6180/08/$25.00 G 2008 IEEE
results would be fetched from the counter
hours or days later. There was no interactivity The transition from
between man and computer: programming
and computing were separate tasks. batch processing to time
Programming was understood to be a
sophisticated task requiring a painstaking sharing was more
attention to detail, along with a love for
obscure codes and what might even be called difficult than anyone
tricks. To facilitate this coding, formal
notations were created that we now call anticipated. As a result,
programming languages. The primary idea
was to replace sequences of special instruction systems could not be
code by mathematical formulas. The first
widely known language, Fortran, was devel- built or delivered on
oped by IBM in 1957, soon followed by the
first Algol version in 1958 and its official time, bringing some
successor in 1960. As computers were then
used for computation rather than for data companies to the brink
storage and communication, these early lan-
guages catered mainly to numerical mathe- of collapse.
matics. In 1962, the language Cobol was issued
by the US Department of Defense specifically
for business applications.
But as computing capacity grew, so did the It turned out that the transition from batch-
demands on programs and on programmers: processing to time-sharing systems was vastly
tasks became ever more intricate. It was slowly more difficult than anyone had anticipated.
recognized that programming was a difficult Among other difficulties, systems were an-
task, and that mastering complex problems nounced but then could not be delivered on
was nontrivial, even thoughor perhaps be- time; the operational problems were too
causecomputers were so powerful. Salvation complex; research had to be conducted on
was sought in better programming languag- the job. The topics of multiprocessing and
es, in more tools, and in automation. concurrent programmingcentral ingredients
To be considered better, a language of time-sharing systemshad not been en-
should be useful in a wider area of application; countered before and were insufficiently mas-
it should be more like a natural language tered. Consequently, systems were promised
and also offer more facilities. For example, PL/ but could not be completed and delivered on
1, developed by IBM in the early 1960s, was time. The difficulties brought big companies
designed to unify the scientific and commer- to the brink of collapse.
cial worlds. It was advertised under the slogan In the midst of this situation, in 1968
Everybody can program thanks to PL/1. NATO sponsored a conference dedicated to
Programming languages and their compilers the topic of software engineering.1 Although
became a principal cornerstone of computing critical comments had occasionally been
science, but they fitted into neither mathe- voiced earlier about the programming profes-
matics nor electronics, the two traditional sion,2,3 it was not until the 1968 conference
sectors where computers were used. A new that programmers difficulties were openly
discipline soon emerged, which was called discussed in a public forumand with unusual
computer science in the US and informatics in franknessand that the terms software engi-
Europe. neering and software crisis were coined. It was
In 1963, the first time-sharing system recognized that current techniques of software
appeared. It was designed by John McCarthy development were inadequate and that new,
at MIT and implemented on a slightly extend- more methodical ways had to be adopted.
ed DEC PDP-1 computer. This time-sharing
system provided the interactivity that batch- Programming as a discipline
processing systems lacked. Computer manu- The software crisis in 1968 existed despite
facturers seized on the idea and soon an- efforts made several years previously to specif-
nounced time-sharing systems for their large ically address the issue of programmings
mainframes (for example, the IBM 360/67 and increasing complexity. In the academic world,
the General Electric GE-645). it was mainly Edsger W. Dijkstra and C.A.R.
JulySeptember 2008 33
A Brief History of Software Engineering
JulySeptember 2008 35
A Brief History of Software Engineering
under time pressure remained. In conversa- pilation with automatic checking of interface
tion, more than once, Dijkstra would often compatibility.
pinpoint the difficulty by saying that testing Just as structured programming had been
may show the presence of errors, but it can the guiding spirit behind Pascal, modulariza-
never prove their absence. He also sneered that tion was the principal idea behind the lan-
software engineering is programming for guage Modula-2, Pascals successor, published
those who cant. in 1979.15 In fact, the motivation for Modula-2
actually came from the language Mesa, an
Programming as a internal development of the Xerox Palo Alto
mathematical discipline Research Center (PARC), and itself a descen-
In 1967, Robert W. Floyd had suggested the dant of Pascal. The concept of modularization
idea of assertions of states, of truths always and separate compilation was also adopted by
valid at given points in a program.10 It led to the language Ada (1984), which was also based
Hoares seminal paper titled An Axiomatic largely on Pascal. In Ada, modules were called
Basis of Computer Programming, postulating packages.
the so-called Hoare logic.11 A few years later, in
1975, Dijkstra deduced from it the calculus of Era of the personal workstation
predicate transformers.12 Programming was However, another development influenced
obtaining a mathematical basis. Programs the computing field more profoundly than all
were no longer just code for controlling programming languages. It was the worksta-
computers, but static texts that could be tion, whose first incarnation, the Alto, was
subjected to mathematical reasoning. built in 1975 by the Xerox PARC lab.16 In
Although these developments were recog- contrast to the aforementioned microcomput-
nized at some universities, they passed virtu- ers, the workstation was powerful enough to
ally unnoticed in industry. Indeed, Hoares allow serious software development, complex
logic and Dijkstras predicate transformers computations, and the use of a compiler for an
were explained on interesting but small algo- advanced programming language. Most im-
rithms such as multiplication of integers, portant, the Alto pioneered the bit-mapped,
binary search, and greatest common divisor. high-resolution display and the pointing de-
But industry was plagued by large, even vice called a mouse, which together brought
gargantuan, systems. It was not obvious that about a revolutionary change in computer
mathematical theories would ever solve real usage. Along with the Alto, the concept of a
problems when the analysis of simple algo- local area network was introduced, and that of
rithms was demanding enough. central servers for (laser) printing, large-scale
An eventual solution to the dilemma of file storage, and email service.
mathematical rigor for small programs against It is no exaggeration at all to claim that the
the intractability of large programs as they modern computing era started in 1975 with
existed in industry emerged in the form of a the Alto. The Alto caused nothing less than a
disciplined manner of programming, rather revolution, albeit slowly, and as a result many
than from rigorous scientific theory. A major people today have no idea how computing
contribution to structured programming was was done before 1975, without personal,
made by David Parnas in 1972 with the highly interactive workstations. The influence
concept of information hiding,13 and at the of these developments on software engineer-
same time by Barbara Liskov with the concept ing cannot be overestimated.
of abstract data types.14 Both concepts em- As the demand for ever more complex
body the notion of breaking up large systems software persistently grew, and as the difficul-
into parts called modules, and clearly defining ties became more menacing, illustrated by
their interfaces. If module A uses (or imports) some spectacular failures (of which the most
module B, then A is called a client of B. The conspicuous was the crash of a rocket that
designer of A then need not know the details, abruptly ended a space mission), the search for
the functioning of B, but only the properties as panaceas began. Many cures were offered,
stated by its interface. sold, and soon forgotten. One of them,
This principle, modularization, probably however, proved fruitful and has survived:
constituted the most important contribution object-oriented programming (OO).
to software engineering, that is, to the con- Up until 1980, the commonly accepted
struction of systems by large groups of people. model of computing was transforming data
The concept of modularization is greatly from their given state to the result, gradually
enhanced by the technique of separate com- transforming input into output. In its simplest
JulySeptember 2008 37
A Brief History of Software Engineering
all, the increase of power was itself the reason do so as long as they (however carefully) built
for the terrifying growth of complexity. What- their own work on top of complex base
ever progress was made in software methodol- softwarea platformthat was neither fully
ogy was quickly compensated for by still higher described nor dependable. We know that any
complexity of the software tasks. This is chain is only as strong as its weakest link. This
reflected by Martin Reisers law: Software holds also for module hierarchies. Systems can
is getting slower faster than hardware is getting be designed with utmost care and profession-
faster.17 Indeed, new problems have been alism, yet they remain error-prone if built on a
tackled that are so difficult that engineers often complex and unreliable platform.
have to be admired more for their optimism The crazy drive for more complexity
and courage than for their success. euphemistically called sophisticationlong
What has happened in software engineer- ago had also afflicted the most essential tool
ing was predictable, because inherent in a field of the software engineer: the programming
of engineering, where the demands rise, work language. Modern languages like Java and C#
is done under time pressure, and the cost of may well be superior to old ones like Fortran,
materials dramatically drops. The conse- PL/1, and C, but they are far from perfect, and
quence is a true waste of cheap resourcesof they could be much better. Their manuals of
both computing power and storage capacity, several hundred pages are an unmistakable
resulting in inefficient code and bulky data. symptom of their inadequacy. Engineers in
This waste has become ever present and industry, however, are rarely free from con-
represents a grave lack of concern for software straints. Their work theoretically must be
quality. Programs inefficiency is easily cov- compatible with the rest of the world, and to
ered up by the use of faster processors, and deviate from established standards might
poor data design by the use of larger storage prove fatal to the engineers companies.
devices. But their side effect is a decrease of But this cannot be said about academia. It is
qualityof reliability, robustness, and ease of therefore a sad fact that academia has re-
use. Good, careful design is time-consuming, mained inactive and complacent about the
and costly. It is, however, still cheaper than state of programming languages. Not only has
unreliable, difficult software, when the cost of research in languages and design methodology
maintenance is factored in. The trend is lost its attractiveness and glamour, but worse,
disquieting, and so is the complacency of the tools common in industry have now
customers. quietly been adopted in the academic world,
without debate and criticism. Current lan-
Personal reflections and conclusions guages may be inevitable in industry use, but
What can we do to release this logjam? for teaching, for an orderly, structured, sys-
There is little point in reading history unless tematic, well-founded introduction to pro-
we are willing to learn from it. Therefore, I dare gramming and designing algorithms, they
to reflect on the past and will try to draw some are wrong and obsolete.
conclusions. A primary effort must be educa- This situation is notably, and sadly, in
tion concerning a sense of quality. Program- accord with other trends of the 21st century:
mers must become engaged crusaders against we teach, learn, and perform only what is
homemade complexity. The cancerous growth immediately profitable, what is requested by
of complexity is not a thing to be admired; it students. In plain words: we focus on what
must be fought wherever possible.18 Program- sells. Universities have traditionally been
mers must be given time and afforded respect exempt from this commercial focus. Universi-
for work of high quality. This is crucial, ties were places where people were expected to
ultimately more effective than more and better ponder about what matters in the long run.
tools and rules. Let us embark on a global effort Universities were spiritual and intellectual
to prevent software from becoming known as leaders, showing the path into the future. In
softwaste! our field of computing, I am afraid, they have
Recently I have become acquainted with a simply become docile followers. Universities
few projects where large, commercial operat- appear to have succumbed to the trendy
ing systems were discarded in favor of the yearning for continual innovation, and to
Oberon system, whose principal design objec- have lost sight of the need for careful crafts-
tive had been perspicuity and concentration manship.
on the essentials.19 The project leaders, being If we can learn anything from the past, it is
obliged to deliver reliable, economical soft- that computer science is in essence a method-
ware, had recognized that they were unable to ological subject. It is supposed to develop
JulySeptember 2008 39