“People who are really serious about software should make their own hardware” is a famous quote from Alan Kay, a visionary and a pioneer in computer science. This quote was before he worked at Apple in 1984, but after he conceived a tablet-like device called the Dynabook in 1968 (long before there were personal computers or laptops, let alone tablets).
I’ve always felt guilty for not following that advice; I’ve (only) tried to improve software development and never paid much attention to hardware. So let me take the lazy way out here, and invent (“The best way to predict the future is to invent it” is another one of his quotes, my favorite) something else Alan Kay might say in the future, something that better matches my experience.
Tools and Languages
Another thing the inventor of object oriented languages could say one day is “People who are really serious about programming languages should make their programming tools.” After all, his Smalltalk included one of the first development environments. But this would not go far enough. A better sentence would be:
“People who are serious about advancing programming should make programming tools (and their supporting languages).”
Starting from the developer experience is what makes sense; it does not make sense to start from the middle. Because programming languages are right there in the middle:
Alternatively they could start from the exact opposite direction, from the “jobs-to-be-done”, from the domain.
There are no general purpose languages. There, I’ve said it. The domain might be quite large, might not have been explicit from the start, or it might have changed along the way. Take this list of popular languages:
Let me try to roughly define their domains:
The Medium in the Middle
Now the list above also seems to contradict what Alan Kay will say one day. After all, people who are serious about advancing programming do not seem to be making programming tools. None of the languages above were defined when creating the IDE that uses them.
This ultimately stems from the fact that all of those are text languages and their IDEs are glorified text editors. Keyboards feel more productive than any other input; developers can use all their fingers at the same time, typing all those beautiful lines of code, giving them that thrilling sensation that they are moving forward quickly. And from the fact that we’ve dumbly continued focusing more on the writing, instead of on the reading, more on creating instead of changing.
You and What You Want to Do
But maybe, just maybe, when you are developing interfaces you should visually select and directly manipulate those interfaces. Maybe when you are querying the data to populate them, you should see the real data. Maybe when debugging the application logic, you should see where the program has come from, where it is going, and what is being changed. Maybe you should be able to zoom in and out of any part of your application as swiftly as you do it in your smartphone maps app.
Maybe all this could be done in a tool that thinks about you, the developer, and what you want to do.
Maybe that tool (and language) is a different one, depending on if you are creating an application, a game, or an operating system, and it was explicitly designed for that.
Maybe Alan Kay will be right again, and we’re all still far, far behind.