Programming Foundation

Article/Lecture Recommendation: Grady Booch's "The History of Software Engineering"

I'm a member of the IEEE, and I like to read the monthly Edge magazine which is put out by the IEEE Computer Society. This month, the feature article was "The History of Software Engineering" by Grady Booch.

Grady walks us through a brief overview of the history of computing. Grady's account spans from the late 19th century's human computers, through the first digital computers in the 1940s, a review of who's-who in software engineering, and ending with a wise note on the fundamentals that govern our field.

If you are a member of the IEEE, definitely read this article. If you're not a member, never fear: the article was adapted from an ACM lecture that is publicly available.

I enjoyed learning about the early beginnings in human computation efforts, and there are excellent quotes to reflect on. But my favorite aspect of this article is the name dropping. I am always interested in reading the foundational texts. I want to understand the foundational thoughts that shaped our present situation. I hope you'll select a few people whose names are unfamiliar and study them. I scrawled out my own (long!) list of foundational names and works to research:

If you're curious about the history of software engineering, you'll enjoy reading the article, listening to the lecture, or both!

My Highlights

A question that we will need to answer in the coming years:

How do we best architect systems with parts whose operation we cannot explain or fully trust?

Grady hits the nail on the head. This situation is why blanket advice is never all that helpful.

Some software is like building a doghouse: you just do it, without any blueprints, and if you fail, you can always get another dog. Other software is like building a house or a high-rise: the economics are different, the scale is different, and the cost of failure is higher.

Much of modern software engineering is like a city: there is room for radical innovation, but you are constrained by the past as well as the cultural, social, ethical, and moral context of everyone else in the city.

We must focus on mastering the bolded skills:

One thing I do know. No matter the medium or the technology or the domain, the fundamentals of sound software engineering will always apply: craft sound abstractions; maintain a clear separation of concerns; strive for a balanced distribution of responsibilities; seek simplicity. The pendulum will continue to swing - symbolic to connectionist to quantum models of computation; intentional architecture or emergent architecture; edge or cloud computing - but the fundamentals will stand.

Grady ends with pure magic:

Software is the invisible writing that whispers the stories of possibility into our hardware.

Further Reading

Programmers: Let's Study Source Code Classics

Updated: 20190729

Contemporary programmers are lucky: we live in a world where historical and influential program source code is available for us to review. However, most programmers only learn and study the programs they have worked on themselves. We rarely take the time to study historical works, and programming courses don’t typically spend any time on the subject.

We believe that software developers should review influential source code. This is similar to architects studying influential building designs (and critiques of those designs). Rather than repeating the same mistakes over-and-over, we should study the great works that preceded us and learn from and build upon their lessons.

Ideally, we would study great source code along with a commentary or critique which provides us information about the project’s context, successes, and failures. Such commentaries are rare, but here are a few excellent starting points:

You can also find a program you've used in the past and review the source code. It's important to start with a program you are familiar with, so you can anchor the functional behavior to the source code. Here are resources you can use to find and browse historical source code:

Change Log

  • 20190729:
    • Added additional Apollo 11 guidance computer links
  • 20190627:
    • Added links to Wolfenstein and DOOM source code + reviews