There was a time, maybe a year and a half ago, when I would post here almost every week. Now, I’m lucky if I post once a month; for instance, it’s been almost three months between this and the previous post. What has happened since then?
Besides being kept pretty busy at work I’ve been spending basically all of the time I set aside for extracurricular activities, like blogging, on a new hobby project. It is a new programming language (what else) which is a child of Saturn and grandchild of Neptune (note to self: find out if there is a roman deity with the same lineage). This is where I’ve been spending my time and in fact this is probably the longest I’ve managed to stay focused on a hobby project without losing interest at any point — and I think the lack of blogging is caused by that. I recently read Vampires of the Internet, which is about writers who blog instead of writing, but which I could also relate to in part. Here is a relevant quote, adapted slightly:
Every day, when you try to sit down to code on your project, you will notice a strange weariness in your fingers. You mind will go blank as you look at the blank screen. And then, almost of their own volition, you fingers will dance on the keys, typing in the dreadful www.blogger.com
Don’t get me wrong, I’m not saying that it’s a waste of time, but sometimes less blogging activity is not altogether a bad thing. If you come back in another three months and I haven’t posted anything new then hopefully all it means is that I’m over at antineutrino (don’t ask about the name) working on my language.
Speaking of language design I came across this great talk, The story of the Ribbon, about the evolution of the most recent Microsoft Office UI. Besides being an all-round interesting talk about UI design (with, however, surprisingly tasteless slides and use of music) he made a number of important points that apply to programming language design as well.
A big problem with previous versions of office was the it had become so compex that people’s sense of mastery was gone (around 23:55). “Sense of mastery is the feeling that you get when you use a piece of software and you sort of understand what it’s capable of.” His first example is notepad, where he says that “Even if you can’t recite all of the features that are in notepad I feel pretty confident that you could form an opinion on all of the things that are in notepad.” This applies directly to programming language design. It should be at the front of every language designer’s mind that programmers should be able master their language, to understand it and to feel that they and not the software are in control. Sadly, I can’t come up with more than two or three languages that even come close to having this property.
Later on he goes through the design tenets of the new office version (around 38:25) and I especially noted two of the rules. The first one is “Give features a permanent home. Prefer consistent-location UI over ‘smart’ UI.”When the user wants to accomplish something it should be clear where to go to do it. If you have several types of menus, toolbars, task panes, context menus and whatnot, it’s unclear where to look for the tool that you need. If you have all the tools the same place you always know where to go, especially if that one place is well organized. Of course this also applies to programming languages. In smalltalk, for instance, there is more or less just one thing you can do: send a message to someone. To accomplish anything you just have to identify 1) who it the subject of this operation I want to perform, and 2) how do I phrase this as a message to that object. If your code and libraries are well organized then this structure is very helpful. Conversely, the more specialized features your language has the more difficult it becomes to identify which feature to use in a given situation. Of course Tim Toady languages are especially guilty here; having the same feature present in different forms according to context is just like a “smart” UI that tries to adapt itself to fit what you’re doing. Introducing special “smart” features only highlights the fact that the standard features are stupid.
The final point, and one that doesn’t need any comments, is “straightforward is better than clever”.