Okay, so I started this post a while ago, not entirely sure what I was writing about. I wanted to write about how I’d suddenly realized I’d gotten to the point where I could tell the differences in personality between programmer bloggers, and how some of them posture more than others in order to look logical and educated and authoritative, and how this didn’t actually seem to correlate with whether I agreed with them. I wanted to talk about how readers of programmer writing expect posturing so much that it takes a real effort to sound friendly and welcoming instead, without the help of body language, but that this allows one’s writing to become more convincing, more motivational, and more enjoyable to read.
Then I thought, why am I writing this? If it’s about not writing like a snob, I’m preaching to the choir. You guys don’t do that. My own post sounded like an ironically self-indulgent rant about why how I write is better, or something. (It’s true that I put a lot of energy into not seeming arrogant. I hope it works.) Or, worse, it might sound as though I were accusing you of needing correction in this area. Neither was something I was aiming for.
Rather, I wanted to warn you about these behaviors, because of the effect they’d have on you as you read about your craft. But I didn’t pin this motive down until I read the intro to an online book LucasFF linked to me, and found this couple of paragraphs:
If you look for help you may find people are not patient with you. You may find that, rather than help, they take the time to express how much they know about the subject. Experienced programmers might tell you that you are wrong. The subtext to their tone might be that you should stop now, rather than inflict your bad code on the world.
After a couple of engagements like this you may decide that you are not a programmer, or don’t really like programming, or that you just don’t get it. You may have thought that you once enjoyed the idea of building your own programming language, but now you have realised that it is too abstract and you don’t care any more. You are now concerned with your other passions, and any insight that may have been playful, joyful or interesting will now have become an obstacle.
For this I can only apologise. Programmers can be hostile, macho, arrogant, insecure, and aggressive. There is no excuse for this behaviour. Know that I am on your side. No one gets it at first. Everyone struggles and doubts their abilities. Please don’t give up or let the joy be sucked out of the creative experience. Be proud of what you create no matter what it is. People like me don’t want you to stop programming. We want to hear your voice, and what you have to say.
Realizing why this post had come about, I decided it was worth writing after all.
A friend of mine emailed me a few months back. He was replying to my request for collaboration on an idea I was toying with. The response came late, because he’d been dreading disappointing me with the news that he’d stopped programming. He’d had it with the infighting.
This is something you need to protect yourselves against. Creativity and motivation are fragile creatures and must be guarded.
Three types of writing
Some programmer writing is just kind of awful to read. It goes off on rants. It boasts about the writer’s knowledge and accomplishments. It insults the reader, or the writer’s coworkers or friends. It’s unprofessional, sexual, or discriminatory. Or it’s any of a dozen other things I haven’t listed.
Sometimes that writing has a valid point to get across, and sometimes it doesn’t.
My thesis here is that if you’re not sure of yourself, it’s not worth reading anyway. There’s a wealth of tech writing that doesn’t do these things.
But I’m getting ahead of myself.
Quora demonstrates this divide a lot. Questions get a lot of variety in their answers. About once a day (that I see when I’m on), someone posts this question:
“Hey so I have this HUGE GREAT IDEA and it’s worth $10B but I don’t know how to code it. Can I get a developer and pay him 20% equity to build my great idea? Should I make him sign an NDA so he doesn’t steal it?”
and the answers are, on the whole, predictably snarky. It’s funny to read the first few times you see the question, and then it gets boring. But there’s usually a range of variation, from
“People like you are the reason I never tell anyone I’m a developer. We’re sick of being badgered with people’s ‘billion-dollar’ ideas that usually don’t even make sense or have a market.”
“Dude. Execution is everything, the idea is nothing–nobody would buy your idea for $20. Go out and learn to code, or figure out something else you can bring to the table to actually earn your ridiculous 80% share. [then optionally actually answers the question]”
“[actually answers question]
“But you’re unlikely to be able to do that, I’m afraid. Most developers have lots of ideas of their own, and they’re more likely to invest their time in their own idea than yours, especially since they’d get all the reward for building their own idea, not just a fifth of it. It’s hard, time-consuming work to build things. If you really believe in your idea, you could start building it on your own by learning to code, and then see if you can get others on board once you’ve made a prototype.”
#3s usually get comments back from the OP, because even though they’re basically saying the same thing as #2, they do the OP the courtesy of actually answering the question first (the order is more important than it seems) and then giving them the benefit of the doubt that they’ve asked out of honest ignorance rather than from a place of superiority and disdain for working devs. In other words, they treat the OP like an adult, even if he’s a 14-year-old boy on a cheap netbook somewhere.
In turn, OP usually listens to them. #1 seems really hostile–an outright declaration of animosity merely for the fact that OP dared to ask such a question (which is never a good approach; if the OP was really so despicable the best thing to do would be to deprive them of an audience)–and #2 is condescending and unapproachable, if somewhat more on topic. #3 is reasonable, diplomatic, and friendly. They’re offering the help OP came for, even if the message they have to deliver is bittersweet.
Be aware of what you’re reading
Joel Spolsky of the blog Joel on Software, as much as I like his posts for other reasons, has a lot of #2 posts on his blog. “If you don’t know this, you’re incompetent!” is a common theme, and to me there are two outcomes to reading that sort of thing: either you know the thing he’s talking about, and you feel smugly superior or think “at least I’m not incompetent at this thing”, or you don’t know it and you think, “oh, great, another thing I don’t understand, I’m farther behind than I thought.” If the latter, maybe you’ll think about learning whatever it is, but now you’re feeling bad about your skills and that doesn’t help anyone.
On the other hand, Jeff Atwood of Coding Horror seems way more approachable, because he’s willing to admit upfront he may not be competent at everything, including the thing he’s talking about. He gets pretty upset when he hears about people who actually can’t write code at all pretending they’re programmers, but I’ve never seen him go off on a wild rant because they didn’t know the difference between UTF-8, ASCII, and Unicode. (For the record, I read both posts all the way through.)
I’m not saying JS’s post on character encoding wasn’t worth reading. I’m saying it was a #2 post, not a #3. It has useful information, but instead of introducing you to it in a friendly way, it kind of beats you over the head with it.
In this article I’ll fill you in on exactly what every working programmer should know. All that stuff about “plain text = ascii = characters are 8 bits” is not only wrong, it’s hopelessly wrong, and if you’re still programming that way, you’re not much better than a medical doctor who doesn’t believe in germs. Please do not write another line of code until you finish reading this article.
It was worth reading, to me, but if his aim was actually to educate people on how to use character sets in code, this was a really roundabout way of doing it and there are several things that are ishy about the post.
- I’m not going to infect someone with Ebola if my web site shows up with weird question mark characters. So far, nothing I’ve written has been a matter of life or death depending on if it works in Turkey. This holds for probably most programmers. Ergo, the comparison to a doctor who doesn’t believe in germs is straight-up overdramatic yelling at people who happen to not know this thing you know.
- Most of the post is a lecture on the history of character sets and how they work, which, while somewhat interesting, actually doesn’t have much to do with solving the problem JS is complaining about.
- His actual message, if his intent was really to stop broken international code, could have been condensed to: “PSA–make sure you declare your character sets, folks! Using UTF-8 will make international users’ lives easier.” This would fit in a Twitter post.
I know I’m kind of picking on Joel, here, but he’s not actually a bad guy. He’s written some really cool software and I think his writing is interesting. This post I’m quoting was written in 2003, and I imagine he’s changed a lot since then. Really I just want to dissect his old writing as an example.
What if you were a new programmer, stumbling upon this post? You’d be really discouraged.
Character sets? What’s a character set and why is it so important? But this guy sounds really impressive and he knows all this history… how am I supposed to know everything I need if there’s really important stuff like this and I’ve never even heard of it? Maybe this is too difficult.
Yeah. No. That’s not a good situation.
Add in the fact that this person, if they have an online presence and are asking for help, is probably hearing from ten different people:
Wait, you’re learning PHP? Why would you put time into learning such a horrible, broken system?
Your design is all off and your conventions are sloppy. Can’t you even indent properly?
You’re going to be horribly ineffective unless you learn how to work with APIs.
Burn that book, you won’t really learn anything effectively in 24 hours like it promises.
You’re not a REAL programmer unless you’ve made something someone will pay you for.
Java is for sissies, here, learn C instead.
That framework does too much for you–you’ll never learn unless you build from scratch!
Why are you still using Notepad++? Let me introduce you to…
Learning Visual Basic first will ruin you as a programmer.
Wait, you don’t know anything about pointers? Seriously? Oh, you’re self-taught, I get it…
…and you’ve got one ex-newbie programmer.
Don’t let that be you–on either end, but particularly not the newbie end. This kind of talk, even if the writers think they mean well, is nothing more than posturing and bullying. It may not be all #1. Some of it may be #2. But unless it’s #3, it’s not something a beginner needs to hear. Even #3 writing is colored by an individual’s specialties and preferences.
Be aware of what you’re reading.
Some writers just posture a lot, without any mind to whether it’s actually justifiable. When you don’t know much about your field, #1 (ranting with no point, or a bad point) and #2 (ranting with a point) are hard to tell apart. Heck, #3 writing can be wildly off target too–but it’s less likely to be if the writer doesn’t need to resort to grandeur to get their point across, and furthermore, #3 writing doesn’t make you feel bad about yourself. Yes, that’s important. You might be thinking this this approach is some crazy feel-good thing where you only read stuff you like, whether it’s true or not.
But how important is it, to a beginning programmer, to have everything right? It’s far easier to realize, “Oh. So that polite guy actually didn’t know quite what he was talking about and it’s really more like this,” than it is to get over the kind of verbal abuse listed above. Your priorities should actually be geared toward protecting your motivation, rather than always getting accurate info. I mean, unless you’re programming kidney dialysis machines first thing, it’s better to be a wrong newbie than a newbie so discouraged that you stop.
Be careful, fellow larvals. Guard your motivation, and be cautious about what you read.