
Imagine trying to read something like this:
その部分は日本語で書かれています
1ÚqÊ hyN6 tiV;x#È 6N 5t#È 97VË 1`N 8`VË 5# jRrdT 175#8j1D`B5^—3Ë 36T2
√¥˚µ∫«º¨∆µæµ˜©ƒ;∫©œ¡™§©√ç∂£÷æ,,˙¥√ß
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
The conclusion is obvious and left as an exercise for the reader.
The End.
Now, imagine a whole book or many books like this. Most of us would find such manuscripts impossible to read, and probably insane to attempt, except as part of some entertaining competition. But in fact, this is what it is like to read the computer programs that make up most modern computer systems that we use daily. They consist of a large number of components written in a variety of programming languages, most of which look very different at the syntactical level. In addition to the many programming languages, there are configuration files of various types that have no consistent structure; they are just ad hoc text records. And we wonder why modern computer systems seem to break often and are difficult to fix and maintain.
The complexity of modern systems is staggering, and there are many amazingly powerful systems that are critical to running our current world. However, given the way they are constructed, with many thousands of programs in the scattered variety of languages and support files, it is impossible for anybody to begin to comprehend the entire system. This is a major flaw and contributes to many challenges. One might say that the amazing capabilities of our current systems are created despite the programming tools used rather than because of them.
What does this have to do with the 50th anniversary of smalltalk, the first object oriented language? Smalltalk (for the technically inclined, The Early History of Smalltalk is highly recommended) arose from many powerful ideas. One is particularly relevant to this discussion: uniformity of language expression for all needs, via the metaphor that every entity of the language should be an object and should be thought of just like a computer in a network of computers. That is, an object-oriented system should be thought of the same way as the Internet with vast numbers of software objects talking to each other over a network by sending messages back and forth.
Alan Kay is the primary inventor of smalltalk and object-oriented programming, though many others deserve credit for their contributions. One of the many inspirational ideas came from the Lisp programming language of John McCarthy. Lisp was very concise and could mostly be “written in itself” by bootstrapping a small kernel of the language. Kay wanted that conciseness and a language with enough expressiveness for the highest-level conceptual idea of the system (e.g. a generative AI chatbot that can read and respond to English and other languages) to the lowest-level symbol, (a number or letter). A language similar in concept to those we use to write books; expressive enough to write anything from the simplest fact to the most abstract, complex notion.
While the ideas expressed in such a language could be simple or complex and widely varied, they would all be expressed in the same language with no special provisions. As with languages like English, you should be able to write a quick message (to say you’re going to be a few minutes late) or a very complex set of ideas (Einstein’s Theory of Relativity, the U.S Constitution) or something long and dense (War and Peace) or something timeless and beautiful (Shakespeare). If you learn to read and write in that one language, you can read and create everything written in that language, including new ideas not yet expressed.
You will have to learn much more than just the alphabet and syntax to understand the content of something like Tolstoy’s War and Peace, but more important is that Tolstoy didn’t have to shift to another language to write down all his ideas. Kay’s goal for smalltalk was similar. He said, “Simple things should be simple, complex things should be possible”, and all within the smalltalk language. This would make it possible to write a large, complex computer system, all in the same language. Those facile with this language could then read through all the programs of the entire system and have some hope of comprehending it.
It’s an unfortunate commentary on computer science, and the overall software industry, that smalltalk, while it has its issues, in many ways remains a great improvement on its successors. While programming languages such as Java, Javascript, and Python have adopted many of the ideas that were manifested in smalltalk, they lack its comprehensiveness and uniformity. In these “modern” languages, you can’t create an entire system from top to bottom in the same language. To paraphrase Dan Ingalls (the primary smalltalk implementor and a major influence on its design), if you need to use another programming language to do something, then your programming language is insufficient.
A good illustration of this is the story of Steve Jobs complaining that he didn’t like the scrolling of the original smalltalk environment when he made his famous 1979 visit to Xerox PARC that was part of the inspiration for the Apple McIntosh computer. The version he didn’t like scrolled line by line in a staccato manner. Steve asked if the scrolling could be continuous and smooth. Dan Ingalls immediately made the change, and the system started scrolling continuously. Ask any of your programmers or anyone anywhere if they can do this – change the style of scrolling – in any system today using the same tools they used to create web applications and other general programming. This is a good test of the concept of uniformity and power of expression, and as far as I know one that every current (as of late 2024), widely used system will fail.
Written languages like English are constructed from alphabets and very small numbers of syntax rules and conventions. Yet they are capable of very rich expression across a limitless variety of topics, one of which is the description of the syntax and rules of the language itself. There are many “English debuggers” written in English, e.g. dictionaries, rules of grammar, descriptions of genres, etc. No such parallel exists for the most widely used modern programming languages.
We should celebrate the creation of this remarkable language and more importantly, the ideas it embodies, on its 50th anniversary. We still have much we can learn from the powerful ideas embedded within it. These ideas could help us improve current languages, and the systems we construct with them.