Why my “REAL programmers” article sucked
(March 13th, 2007)
“Anyone can say you can’t write. Let no one say you DON’T!” –Comment received from Reginald Braithwaite
My last blog entry, REAL programmers don’t use pencils sucked slugs. While many of you may already agree with this statement, there are a few people out there who may feel differently. Somehow the article managed to garner 50 more positive than negative votes on reddit and at least one person blogged favorably about it (bless you Mike Griffiths). Still, it never felt right from the moment I wrote it. I went back and reread it shortly after posting it (I need to let a post settle a bit and then proofread it, otherwise my eyes seem to miss obvious errors) and the first thing I felt was: “That’s not what I meant to say!” I made an effort to tone it down by rewriting the last paragraph, and it felt better so I left it. Still, it never seemed like it was saying what I wanted it to. After about fifty or sixty scathing comments at various locations it became clear why: I set out to write an article about how to be a better programmer and ended up writing one that said that unless you could do complex tasks entirely in your head you probably sucked.
I’m not terribly concerned about the large numbers of negative comments. When someone says something like: “This guy is an idiot, I bet he couldn’t write a linked list.” I couldn’t care less. Anything that creates the slightest bit of controversy and is well read will get these kinds of personal attacks. I’ve gotten strong negative reactions from articles like The Temple of Java and Freedom languages. I loved both of those articles (and yes, the first one was just a lighthearted rant, that’s why it was posted under rants). The difference is that in both cases along with scathing comments I also got some very interesting and useful conversation that indicated people had understood my point. I got a lot out of the comments and cross-posts. I can’t really say that is the case with the “REAL programmers” article. The few positive responses were luke-warm and often related to a sub-point rather than addressing the central thesis. As a writer the definition of bad writing is when people miss the point you are trying to make. This isn’t their fault, it’s yours.
After giving it some more time and rereading it in a more reflective spirit, here’s why I think I managed to lead people astray:
- The title. I picked the title, “REAL programmer don’t use pencils” as an attempt at some bumper-sticker humor, like “REAL men don’t wear plaid” or “REAL women drive Humvees.” It wasn’t meant to be taken seriously, just to attract some attention. Of course, side-titles like these need to be either tangentially true or explained away within the article. For example, in Making a Ruby benchmark 51x faster than PHP The article isn’t really about Ruby being faster than PHP, so one of the first things I say (very clearly) is that I don’t think Ruby is faster than PHP. That was also a weak title, but I handled it better. A title like Ego Mountain is safe, because it doesn’t make any real statement about what the article is about.
- I never state my position clearly until the conclusion. It’s fine to lead in with an analogy, but at some early point you need to clearly state your position. Failing that, people will naturally be forced to draw their own conclusions about the point you are driving towards (or simply take the title at its word).
- I use a controversial position (that learning to do math in your head makes you better at math) as an analogy for another controversial position (that learning to envision the behavior of code in your head will make you a better programmer). Worse, I overstate the first point by implying that you CAN’T be good at math unless you can do a lot of math in your head.
- I got sidetracked by semi-related and ALSO controversial points. Both the discussion on comments and my postscript about Fizzbuzz did nothing to help make my point. They just piled controversy on controversy.
None of this changes my belief that learning to program in your head is a good exercise to help you become a better coder. Nor does it change my belief that learning to do reasonably complex math in your head will help you to get better at math. Neither of these equates to a belief that once you develop these skills you should stop writing things down altogether, just that they will improve your speed and your general “feeling” for the skill. I’ll probably go back and justify these positions in another blog at some future point, but for now I’m going to leave that alone.
Interestingly, I actually like quite a bit of the specific writing, I just don’t think it makes my point very clearly. I supposed this is analogous to writing good code that later turns out to be useless to the user. The pieces all work, but the whole is less than the parts.


March 13th, 2007 at 9:30 pm
What I think you’re talking about is “it”: that feeling for just “going without knowing” and consistently ending up in the right place. Instinct, in other words, for writing good code. What I think you miss is that “it” is a product of experience and internalised methodology. Yes, many people that have a great “feel” for a skill are able to work that skill out in their heads. But they are able to do that by applying a system and memorising certain important milestones along the way.
Getting “it” requires you to have a firm foundation to build on. You must know how to set up code experiments to learn new things. You must have an understanding of what the computer is doing “under the covers” when you write a line of code. You must have good training to craft into you consistently good habits. And you must have experience where you’ve seen the outcomes of the “other ways” of tackling the problem and where you’ve seen what causes the problem in the first place.
So, REAL programmers make scientific experiments in their code, experience as much of the users’ life with the product as possible, have wide exposure to the common problems in their industry, have good training and constantly practice their craft by trying the “wrong way” in safety.
REAL programmers PLAY with their code constantly because they like practising their craft.
March 14th, 2007 at 8:37 am
Sometimes the blog postings that I feel the most uncomfortable hitting publish on turn out the best. I think it is the nature of good blogging to go ahead and hit that publish button.
When I took over the Test Pattern column in PHP | Architect from Marcus Baker, he told me “people remember the good articles and forget the others. Spend your time on the next one.” Marcus is a wise man.
March 15th, 2007 at 5:30 pm
I don’t like when I hear
people trying to make an
argument for why they are
smarter than others. That
also includes arguments dealing
with explaining how a certain
method (the author’s) is better
than all the others.
It sounded like you were
doing a little of both in
your last post.
That won’t stop me from reading
your blog though.
mm
March 17th, 2007 at 12:38 am
You are seeking to hire mappers, not packers - as you should.
This article describes the terms… it definitely clarified
my thinking (about thinking, and about why I didn’t enjoy
school very much).
http://www.reciprocality.org/Reciprocality/r0/Day1.html
March 31st, 2007 at 5:29 am
One should look at benchmarks Haskell -vs- Ruby. Haskell is a viable candidate for the language with the smartest mindshare, but is it efficient? Surprisingly, GHC Haskell blows away Ruby.
After using dozens of languages over the years, I had settled on trying to maintain proficiency in both. I realized it isn’t worth the mental overhead, better to master the superior language. While I love Ruby for the reasons given in this article, I chose Haskell.
In sailing, there’s a paradox where one sails on one’s own apparent wind, added to the true wind, reaching speeds far greater than the true wind. The extreme case is ice sailing, where speeds of 100 mph are common.
The higher order function extensibility of Haskell is like ice sailing.
March 31st, 2007 at 5:33 am
I intended the above comment for “Freedom Languages”, http://codecraft.info/index.php/archives/20/.
April 1st, 2007 at 3:14 pm
[…] Original post by Kevin Barnes […]
April 5th, 2007 at 1:15 pm
I thought I’d give you some encouragement.
When I read the original post, I was thinking “he’s starting to touch on something profound with this post. It has a resonance with ideas on the differences, benefits and drawbacks between processing information internally and information offloading on to paper. That had never occurred to me before”
In terms of the negative feedback - I didn’t read it, but have had enough of it in the past to know that on the journey to knowledge, immediate consensus is a bad thing. To provoke a heated discussion is an excellent and exciting thing - because you have touched your reader in a new and different way. You have made them uncomfortable. You have made them think.
Furthermore, in terms of your writing, to capture, express and receive feedback on their thoughts is one of the greatest gifts any person can give the world.
Blog on.
July 19th, 2007 at 12:53 am
Don’t be so dejected!