The more I learn about Smalltalk, the more I realize what a foundational language it was. I’m not convinced it it a language that really deserves widespread use today. Newer languages have improved upon most of its features in one way or another. However, a lot of modern programming originated with Smalltalk. Here’s a sampling:
- The GUI was first popularized on the Xerox Alto which, if I’m not mistaken, was programmed primarily in Smalltalk.
- The Model-View-Controller UI design model came from Smalltalk
- Most of our Object Oriented design ideas came from the world of Smalltalk.
- Unit testing originated in Smalltalk with Kent Beck’s Testing Framework.
- Extreme Programming comes out of the world of Smalltalk programmers.
- Refactoring came out of the Smalltalk community.
- Responsibility Driven Development (like CRC cards) came out of Smalltalk too.
- Design Patterns originated in the Smalltalk community.
Some of this is the language, a lot of it is the community. Things like XP, Unit Testing, Refactoring, and CRC cards are all obviously community creations. However, even some of what we usually consider language features come from the community. In Smalltalk a huge amount of what is enforced by languages today is done through convention. Smalltalk has objects and inheritance but there is no sense of an interface in the language. There is no support for abstract classes. Yet most of the design patterns originated in the world of Smalltalk.
Why is this? I’m not certain. At the time, all other languages (other than Simula) were procedural. Smalltalk was the only one that was object oriented. The world didn’t really tune in to objects until at least a decade after Smalltalk took off. It’s long been said that a programming language influences the way you think. Perhaps that is what happened. Maybe in order to come up with extreme programming, you need to be freed from the ways of procedural language.
Why do you think all of these inventions came from this relatively small community? I’d love to hear your thoughts.