When I look at a piece of software, I see several things. I see the text. I see some patterns. I see variables that might have some meaning. I see data structures, constants, and other data definitions. I might see some loops, functions with parameters, and I might even see some comments. Can I train my eyes to actually read and understand the source code? I remember a blog post by Grady Booch about "code reading". Grady referred to an earlier blog post about the book, "Code Reading" by Diomidis Spinellis. The blog continued to talk about possible required code reading lists for developers.
The Computer History Museum in the Silicon Valley is collecting a wide range of hardware, software, oral histories, collectibles, and a timeline of the computer industry. One of the really cool collections at the museum (and online) is source code. For example, you can download and read the MacPaint version 1.3 and Quickdraw source code. You’ll find the zip files at http://www.computerhistory.org/highlights/macpaint/.
I think, after 41 years, that I understand a little about software engineering. At the same time I know that I will never understand other aspects of programming. Our software industry, the technologies, the tools, the architectures, the languages, the patterns, and everything else are continually evolving. Companies and individuals are striving to understand what users need. We continue to try and understand how to take advantage of the opportunities of our modern Internet connected software economy. I’ve always said that these are the things that keep me young. The constant search for understanding allows us all to push forward the state-of-the-art in development.
As a human being, there are completely other dimensions to understanding that I am sure I will never be able to approach. This, for me, is especially true of certain human interactions and software design. I am heartened by the work of Alan Cooper and his team in the areas of Human-Centered Design, Interaction Design, and Restoring Sanity in software design and implementation (their books).
RAD Studio IDE’s support for design pattern viewing, using, and harvesting helps me to build better applications and to understand and extend programs that I didn’t write. Even though we have had design patterns for more than fifteen years, I often find myself going back to my three main men and the gang of four guys for more understanding:
- Kent Beck - Three Rivers Institute, "Implementation Patterns"
- James Coplien - "Idioms and Patterns as Architectural Literature"
- Christopher Alexander - "The Timeless Way of Building" and "A Pattern Language"
- Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides - Design Patterns: Elements of Resuable Object-Oriented Software
You’ll find several references to "Programming is Understanding" using Google search. In part 3, page 2 of an Artima Developer conversation with Bjarne Stroustrup, "Abstaction and Efficiency", you’ll find a section heading with the phrase. Lucian Cionca’s blog is titled "Programming is Understanding" there is a post that explains the source of the blog name - About the Quotation - attributes it to Kristen Nygaard (co-creator of the Simula programming language) and Neal Stephenson (author).
My hope is that we will continue to strive for more understanding - in our programs, in our lives, and in our world. I definitely live each minute wanting more understanding. I’ll end this blog post with a link to Elvis Costello and the Imposters performing the Nick Lowe 1974 song "(What’s so funny ’bout) Peace, Love, and Understanding". I hope you find sweet harmony in your software development.