When you begin to master the tools and techniques this book describes, you can advance in many directions that are open to new discoveries.
17.2.1 Create New Languages for Your Colleagues
Empowering those around you with a new query language or a special shell that you tailor to their domain is motivating and rewarding .
17.2.2 Create New Languages for Children
There are surprisingly few computer languages for children. Surely we can expect that a great language for twelve-year-olds is different from a great language for six-year-olds. There are, of course, many other differences that call for a range of languages to be available for children. Choose a niche and fill it.
We need to teach children to program computers because natural languages such as English and languages usable by computers are here to stay. For decades to come, we will continue to need to compromise between the power of natural language and the limits of computer understanding. Until computers achieve human-level intelligence, we will need to teach people to program computers.
17.2.3 Explore Languages as Human Interfaces
The advent of graphical user interfaces makes it easy to forget that textual interfaces, especially computer languages, play a major role in how humans and computers interact. Many environments include a combination of human and textual interface. For example, spreadsheets are mostly graphical, but they typically accept formulas as text. The Sling environment also blends a textual and a graphical interface. Can you change the Sling toy to become entirely graphical? What is the ideal mix of text and widgets?
17.2.4 Improve Languages as Receptacles for Human Thought
Part of the strength of object-oriented languages is that they simplify translation from how we think about the world to how we write computer programs. We think and program, at least in part, in terms of objects. The philosophy of how humans categorize their observations into a model of reality is ontology. To learn more about ontology, a wonderful resource is The Oxford Companion to Philosophy [Honderich].
Although it is nice that we have a good mapping from real objects to objects in Java, the mapping is incomplete. In particular, real objects vary with time, but today's object-oriented languages offer little support for temporal modeling. For example, the basic temporal notion that a physical object can be in only one place at one time is not built into Java. In addition, assignment statements obliterate any previous value instead of remembering it, as a human would. Can you write an imperative language that comprehends the natural temporality of objects?
In addition to (temporal) objects, a simple view of our mental model of reality must include some idea of relations. We know, for example, that if mushrooms cost more than peppers, then peppers must cost less than mushrooms. The symmetry of this relation is much easier to model in Logikus and Prolog than in Java. If you want to learn more about relational modeling and logic programming, two excellent resources are The Art of Prolog [Sterling and Shapiro] and Prolog Programming in Depth [Covington et al.].
Logikus augments the ontological power of Java by adding support for the modeling of relations. However, Logikus does not comprehend the notion of transitivity. For example, if mushrooms are costlier than peppers, then radishes cannot cost more than mushrooms and cost less than peppers. But Logikus does not detect that the following program breaks the transitivity of the costlier relation:
costlier(mushrooms, peppers); costlier(peppers, radishes); costlier(radishes, mushrooms);
Can you create a language that supersedes Logikus by allowing a user to specify that costlier is a transitive relation? Our languages become more useful when they become better receptacles for our mental models of the world. The ontological power of languages beckons exploration.
17.2.5 Choose Your Own Direction
This chapter gives a few glimpses into the vista of opportunity that lies before you. The best computer language for you to write is the one that motivates you. Choose a direction and pursue it. The future is in your hands.