I recently chanced across a truly wonderful talk by Guy Steele, one of the creators of the Scheme programming language. He gave the talk at the 1998 ACM OOPSLA conference, but it touches on some timeless themes in communicating with computers.
The talk focusses on the need for us to build languages that can be extended easily by their users. Rather like natural language, programming languages gain utility as it becomes possible to say more things with them. And languages that are popular with users are those that start small and grow with the contributions of those users.
There is a PDF of the talk online. The video is a bit glitchy, but you’ll get a good sense of it.
Steele proposes adding generics, user implemented operator overloading and lightweight user defined types for numbers to Java. He says:
if we add just a few things — generic types, overloaded operators, and user defined types of light weight, for use as numbers and small vectors and such—that are designed to let users make and add things for their own use, I think we can go a long way, and much faster. We need to put tools for language growth in the hands of the users.
Well, Java did get generics in 2004. But you would need to use Scala or Clojure to get the rest of that stuff.
He also makes a good case for how the participatory culture of Free/Open Source software development makes building a successful language easier.
The key point is that in the bazaar style of building a program or designing a language or what you will, the plan can change in real time to meet the needs of those who work on it and use it.