(This is a snapshot of my old weblog. New posts and selected republished essays can be found at raganwald.com.)

Monday, May 07, 2007
  Style Matters

Art Matters

—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.


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.



Comments on “Style Matters:
writing about how all religions are the same is a virtual guarantee of a series of violent agreements. in fact you could say that the whole topic of religious differences is a history of violent agreement. anyway, moral of the story, if you want to write a blog post where you use religion as a metaphor, don't. I'm just glad I haven't gotten any death threats for comparing Alabama to Afghanistan.
I'm just glad I haven't gotten any death threats for comparing Alabama to Afghanistan.

That ought to be funny, but in this day and age, it sadly isn't.

I own a very amusing "board" game called Illuminati.

In this game, there are groups (like the Boy Scouts and Organized Crime). The groups have various "alignments." Similar alignments work together, so Texas and the Gun Lobby are affined because both are violent. And Texas and Republicans are also affined because they are both conservative.

Alignments have opposites, so Hollywood and Big Oil hate each other because Hollywood is liberal (with a few high-profile exceptions) and Big Oil is conservative.

Anyways, one of the most insightful features of the game is an alignment with a special exception: fanatic. Fanatic groups include Goldfish Fanciers, Trekkies, and the Gun Lobby.

And the special exception? Fanatic is its own opposite. Every fanatic group hates every other fanatic group.

I just thought you'd like to know...

<< Home
Reg Braithwaite

Recent Writing
Homoiconic Technical Writing / raganwald.posterous.com

What I‘ve Learned From Failure / Kestrels, Quirky Birds, and Hopeless Egocentricity

rewrite_rails / andand / unfold.rb / string_to_proc.rb / dsl_and_let.rb / comprehension.rb / lazy_lists.rb

IS-STRICTLY-EQUIVALENT-TO-A / Spaghetti-Western Coding / Golf is a good program spoiled / Programming conventions as signals / Not all functions should be object methods

The Not So Big Software Design / Writing programs for people to read / Why Why Functional Programming Matters Matters / But Y would I want to do a thing like this?

The single most important thing you must do to improve your programming career / The Naïve Approach to Hiring People / No Disrespect / Take control of your interview / Three tips for getting a job through a recruiter / My favourite interview question

Exception Handling in Software Development / What if powerful languages and idioms only work for small teams? / Bricks / Which theory fits the evidence? / Still failing, still learning / What I’ve learned from failure

The unary ampersand in Ruby / (1..100).inject(&:+) / The challenge of teaching yourself a programming language / The significance of the meta-circular interpreter / Block-Structured Javascript / Haskell, Ruby and Infinity / Closures and Higher-Order Functions

Why Apple is more expensive than Amazon / Why we are the biggest obstacles to our own growth / Is software the documentation of business process mistakes? / We have lost control of the apparatus / What I’ve Learned From Sales I, II, III

The Narcissism of Small Code Differences / Billy Martin’s Technique for Managing his Manager / Three stories about The Tao / Programming Language Stories / Why You Need a Degree to Work For BigCo

06/04 / 07/04 / 08/04 / 09/04 / 10/04 / 11/04 / 12/04 / 01/05 / 02/05 / 03/05 / 04/05 / 06/05 / 07/05 / 08/05 / 09/05 / 10/05 / 11/05 / 01/06 / 02/06 / 03/06 / 04/06 / 05/06 / 06/06 / 07/06 / 08/06 / 09/06 / 10/06 / 11/06 / 12/06 / 01/07 / 02/07 / 03/07 / 04/07 / 05/07 / 06/07 / 07/07 / 08/07 / 09/07 / 10/07 / 11/07 / 12/07 / 01/08 / 02/08 / 03/08 / 04/08 / 05/08 / 06/08 / 07/08 /