—that number at least—is the computational power increase that I have experienced in my own
lifetime.
And with all that vast change in computational power, what has been the effect on the software I
write? It’s gotten bigger certainly. I used to think 2000 lines was a big program. After all, it was a full
box of cards that weighed 10 pounds. Now, however, a program isn’t really big until it exceeds
100,000 lines.
The software has also gotten much more performant. We can do things today that we could scarcely
dream about in the 1960s. The Forbin Project, The Moon Is a Harsh Mistress, and 2001: A Space
Odyssey all tried to imagine our current future, but missed the mark rather significantly. They all
imagined huge machines that gained sentience. What we have instead are impossibly small machines
that are still … just machines.{xx}
And there is one thing more about the software we have now, compared to the software from back
then: It’s made of the same stuff. It’s made of if statements, assignment statements, and while loops.
Oh, you might object and say that we’ve got much better languages and superior paradigms. After all,
we program in Java, or C#, or Ruby, and we use object-oriented design. True—and yet the code is
still just an assemblage of sequence, selection, and iteration, just as it was back in the 1960s and
1950s.
When you really look closely at the practice of programming computers, you realize that very little
has changed in 50 years. The languages have gotten a little better. The tools have gotten fantastically
better. But the basic building blocks of a computer program have not changed.
If I took a computer programmer from 1966 forward in time to 2016 and put her
1
in front of my
MacBook running IntelliJ and showed her Java, she might need 24 hours to recover from the shock.
But then she would be able to write the code. Java just isn’t that different from C, or even from
Fortran.
And if I transported you back to 1966 and showed you how to write and edit PDP-8 code by punching
paper tape on a 10 character per second teletype, you might need 24 hours to recover from the
disappointment. But then you would be able to write the code. The code just hasn’t changed that
much.
That’s the secret: This changelessness of the code is the reason that the rules of software architecture
are so consistent across system types. The rules of software architecture are the rules of ordering and
assembling the building blocks of programs. And since those building blocks are universal and
haven’t changed, the rules for ordering them are likewise universal and changeless.
Younger programmers might think this is nonsense. They might insist that everything is new and
different nowadays, that the rules of the past are past and gone. If that is what they think, they are
sadly mistaken. The rules have not changed. Despite all the new languages, and all the new
frameworks, and all the paradigms, the rules are the same now as they were when Alan Turing wrote
the first machine code in 1946.