I'm reading Coders at Work by Peter Seibel, and many a time it has been mentioned that programmers who can't write generally make poor programmers - it's been claimed by Douglas Crockford, Joshua Bloch, Joe Armstrong, Dijkstra (and I've only read half the book).

What's your view of this? Is an inability to express yourself in writing in a natural language such as English a hindrance of writing good code?

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
If this question can be reworded to fit the rules in the help center, please edit the question.

9

I don't know about skill as a programmer, but for SELLING yourself as a programmer, smart = sexy in the freelance world. Therefore, if you can write (and speak) well, you will be perceived as smart and be considered more trustworthy as a developer (though it may be completely ungrounded).
–
YarNov 6 '10 at 0:10

By "can't write," do you mean their grammar is incorrect? That's probably a bigger issue than things like poor flow, etc.
–
MaxpmDec 15 '10 at 13:31

1

@Maxpm: Maybe, but also an unability to convey their meaning in writing, despite being grammatically correct.
–
gablinDec 16 '10 at 22:08

12 Answers
12

There's much more to programming than 'writing code'. A big part of being a successful programmer involves communication; Being able to connect with customers, understand their needs, translate them into the technical realm, express them in code, and then explain the result back to the customers.

Programmers who have a hard time expressing themselves clearly in writing may not be able to communicate well in general, whereas those who have a good grasp of language and writing can generally translate those skills to the code they write.

I think being unable to write well, and thus communicate well, will keep one from being a very good programmer.

As Jason Fried and David Heinemeier Hansson (of 37signals) say in their book Rework:

If you're trying to decide among a few people to fill a position, hire the best writer.

Being a good writer is about more than writing. Clear writing is a sign of clear thinking. Great writers know how to communicate.

Yup, and I think pretty much everyone agree that one of the quality of a good programmer is the ability to express oneself clearly in code so this would not surprise me that the ability to express yourself clearly in writing is correlate with the ability to express clearly in your code (and vice-versa). +1
–
n1ckpNov 6 '10 at 0:11

2

I'd second this. You need to communicate - not just with the machine. The people around you and the programmers who come after you need clarity in communication, both spoken and written. Spoken because sooner or later you have to talk to people, and written because thats what your code AND YOUR COMMENTS are.
–
quickly_nowNov 6 '10 at 2:12

I found your answer very interesting! But when I looked back in my memory to find who were the best programmers I worked with, worked for or worked for me, I found many of them was very bad at writing. However, they were ridicusly good. However, I'll keep your excellent answer in mind and will try it in the future. +1
–
user2567Nov 6 '10 at 13:43

If you can't explain something well enough you probably don't understand it well enough
Being a smart person means you will work with other smart people and you will have to communicate with them effectively.

Any great idea you have is useless if exists only in your head
Being able to communicate your ideas effectively is a sign of great understanding. This applies to more than just the field of programming.

One of the best "rock star" programmers I've ever worked with was a very poor writer. And when I say "very poor", I mean the type that came across like he was either extremely drunk, or barely literate - when you saw his emails. Typos, lack of punctuation, difficulty in expressing ideas clearly, and common spelling mistakes ("their/they're" and such) all abounded - almost excruciatingly at times. Reading some of his emails - I would have been worried about him emailing clients directly (we didn't need to do that in that company) - because it would make the company look bad!

Still, he was a super star programmer. An order of magnitude more productive and switched on than average.

I'm not sure what to make of it. I've seen this several times with different people. Some just don't seem to have a knack for sitting down and writing things out. And often it doesn't seem to affect their talents in other areas (even relatively seemingly similar, "knowledge work" talents, such as programming). You'd think it would be connected, but I've seen several living examples like this where it wasn't. Though I guess it's quite possible that they are "exceptions who prove the rule" - I probably just never thought to notice the bad writers who aren't programmers, and the good writers who are.

There are always exceptions to the rule. I've worked with a few as well - brilliant people, who we never let near a customer because they would have been made into mincemeat. I spent ages correcting the typos and so on in their documentation. Give them a technical problem though and the flashes of insight and solutions were amazing. This all just shows that the answers here are generalisations. However, generalisations do apply to the majority of people.
–
quickly_nowNov 6 '10 at 2:16

3

@quickly_now: I would be wondering (since you didn't specify) how their code read though. They can be very clever and good problem solver but if their code is unreadable they are not that great programmer if you want my opinion.
–
n1ckpNov 6 '10 at 11:03

@n1ck: Now that you mention it, the guy I'm thinking of wasn't very good at documenting his code. The code itself was good and well designed, but he didn't put in comments around the inherently complex bits of code, which meant it was harder to maintain than it should be. Hadn't thought of that. :)
–
Bobby TablesNov 6 '10 at 20:31

I'm in agreement with @n1ckp. I'm also willing to bet his choice of names for variables/methods/classes would sometimes be cryptic and confusing. I tend to be very wary of programmers with extremely high productivity, because it often comes at the expense of spending a little extra time to improve long term maintainability.
–
Craig YoungJul 1 '12 at 22:48

If you mean code that just works, there is hardly any relation between being able to communicate with humans and being able to communicate with computers.

If you mean code that works, is maintainable, and clearly expresses the intention of the code, there is absolutely a relation between writing good code and writing in a language solely intended for humans.

Although you wouldn't need all the different skills required to be a good writer for writing understandable code, there are still some of the elements that have to be there, as both will be read by humans. In some ways it's even harder to write good code, as it should describe the intention with the code, while not using constructs that would perform badly while executed by the computer.

I don't think it's a major hindrance for a code monkey (I am assuming a certain basic level/ability to express one's self in their native language). However I do think it can quickly become a major hindrance as you (the developer) has to begin to better articulate designs/arch/plans to a non-technical audience. In my experience getting something across to someone else who is roughly on the same technical level as myself is my easier and takes considerably less (natural) language skills then it does to articulate something to a client and/or manager. At the same token even when it's a technical audience as the subject matter becomes less concrete the person who is writing about it (or talking for that matter) has to be fairly articulate.

The thing is, coding is also a communication skill. Jack Ganssle in his Embedded Muse e-newsletter recently quoted Doug Abbott:

When you write a program, what you’re
really doing is communicating to
another human what it is you want the
computer to do. Programming is about
communication, just like any other
form of writing. So yes, computer
science students should be exposed to
good writing. But since there’s so
precious little of it in computer
science, maybe they just need some
basic creative writing classes.

Programmers who don’t know how to write prose probably don’t know how to write code, either.

Does someone unable to express precisely a system organisation or an idea be able by writing it would be able to write code - that are precise instructions - correctly interpreted by (very) dumb computer?

But you get a very clear and immediate feedback loop from the computer if your code is not correctly written. I suspect you could have extremely poor written English and hardly ever even be told about it, let alone given the feedback you need to improve.
–
Carson63000Nov 6 '10 at 2:42

You have to learn to be clear and correct even with the compiler because if you don't you'll never even compile anything in the end.
–
KlaimNov 6 '10 at 14:30

I think it is very important for a programmer to be able to communicate well, both with spoken and written language. The ability to translate an idea into words is a prerequisite to writing code.

Whether we are communicating with a computer or a person we have to put words into an order that makes sense following rules of grammar. We have to either pronounce the words correctly or spell them correctly in order for the other side of the conversation to understand them. Computers will throw syntax errors, coworkers will either say "WHAT?" or discount what is being said as inane babbling or worse, an irritating distraction.

I have strongly discouraged hiring candidates because they couldn't complete a thought or stay on a subject. One person was hired by our boss anyway, and turned out to be unable to deliver a simple assignment on time because he was distracted by whatever bright and shiny new technology or toy caught his eye.

So, yes, it is important that programmers be able to communicate well. If they can't effectively communicate with a human they can't do it with a computer.

Poor writers make poor writers, and nothing else. Poor writing skill does not mean they can't communicate at all, but they just can't write or express very well. Of course anyone can say communication skill is important and crucial in company and so on and so forth, but that doesn't mean a programmer with poor communication skill can't get the job done nicely. The programming and writing are art, but of completely different kind. Writing is about how to make some other human understand what you are saying and/or act accordingly, but programming is not making computer understand your requirement, because no computer will understand any user requirement (at least within 100 years from now IMO). The programming is about how to translate the requirement to the programming language, and that's why writing skill is not so related.

Part of the job of a programmer is to express himself clearly in code (and comments) so that, not just the computer, but also other humans can read the code. It would make senses (but is not proven AFAIK) that these skills are correlated.
–
n1ckpNov 6 '10 at 11:05

I think the bullet points 1,2 and 3 require one to be a good writer in addition to being a good programmer. In essence, you are considering good writing skills as an implicit trait.
–
Mamta DNov 10 '10 at 8:05