—button on a fellow coffee lover’s lapel
Giles Bowkett has written an entertaining opinion piece
, wherein he argues that the gulf between sophisticated programmer and fundamentalist programmer is far, far wider than the hairline between fundamentalist programmers that use different programming languages.
You know, blog posts with sufficient depth (anything more than “How to call a COM+ object on Windows 2000 Server using CORBA over SOAP from IE 7”) are Rorschach Blots. If you’re predisposed to affinity, you read your own thoughts in them. And indeed, I immediately liked the article, because I thought he was saying that fundamentalist programmers use Blub
, and that when he talks about the limitations of languages he was saying that people matter more than tools
Essentials of Programming Languages is an in-depth exploration of the deep ideas behind programming languages. This is a hands-on book: you’ll build a series of interpreters that actually implement each language feature, building a full understanding of the way programming languages actually work.
This is critical for learning how to use these features in languages that have them, but better than that it also teaches you how to greenspun them into languages that don’t!
Of course, he’s actually saying a little of that but also a little of something else, and what’s really important to me
are the ways in which what he says are different than the things I was already thinking. A mirror is a dangerous tool for experiencing the universe!
And then I read Andrew Norris’ reply
, and what struck me was that Andrew may have had the opposite reaction to Giles’ opinions: he seemed to fixate on the differences between what Giles was saying and what Andrew was thinking. But closely reading Andrew’s impassioned response, I recognize so many similarities to the two points of view that I’m shocked they aren’t both the same person.
As a colleague used to say, these two men are in violent agreement
. Giles is talking about the importance of the programmer’s deep understanding, and Andrew is talking about the importance of the programmer’s deep understanding as well!
They both seem to agree without reservation on the utter dead-endedness of the fundamentalist, “all innovation stopped with the invention of language X” thinking, for all values of X (including Lisp!). You can sort out the differences for yourself, they pale in comparison.Styling
What I find most valuable (in the sense of expanding my own thinking, not just confirming what I already thought I knew) about Giles’ post is his assertion on the value of a personal style, of having a voice, on finding something unique to contribute, something that shines through the specific language and platform you use.
Isn’t that related to the entire meta-programming/DSL
thingie? This idea that the language is a platform for a program so personal it deserves its own programming language?
Isn’t that exactly
what both Giles and Andrew are promoting? Giles says “develop your personal style that is independent of the programming language.” Andrew says “use the tool that fits the job.” Well, what could be more personal than bending a tool to become a new tool customized for the problem? What could be more “polyphonic?”
And Giles’ example of Avi Bryant brings up an important component of developing a personal style. Giles pointed out the common thread in Avi’s work. he suggests it is Avi’s style, and it is. But Avi can’t use that style on any arbitrary problem. To a certain extent, Avi selects problems that fit his style.
To develop a style, you must be ready to apply it to problems, and you must also be prepared to walk away from problems where it really doesn’t apply. Otherwise, you will become the jack of all trades but the master of none. of course a great programmer can use shell scripts, C, and Python. But the programmer who has equal facility with all three problem domains is inferior to the programmer who “knows enough to be dangerous” in most domains but has obtained mastery in a very few of them.
So, Develop your style. Choose problems wisely. And learn your tools deeply, so that you may choose the right tools to express your style.