Coding: Isn't It Just Writing?
As my formal education in computer science progresses, I have now discovered an unexpected relationship between coding and writing.
There is perhaps no single greater way to articulate and delve deeper into one's thoughts than writing. It's one of those essential feelings you discover in high school or college, and then spend the rest of your life wondering why people waste time using other less-efficient forms of media to get their point across.
This is all well and good if you plan to become a writer, but what's the connection between this timeless little book and writing a computer program?
Writing programs that the computer can understand is challenging. That's why so few people, in the big scheme of things, become competent programmers. But writing paragraphs and sentences that your fellow humans can understand -- well, that's even more difficult. The longer you write programs and the older you get, eventually you come to realize that in order to truly succeed, you have to write programs that can be understood by both the computer and your fellow programmers.
/*Code Readability*/
if (readable()){
be_happy();
}else{
refactor();
}
Of all the cruel tricks in software engineering, this has to be the cruelest. Most of us entered this field because the machines are so much more logical than people. And yet, even when you're writing code explicitly intended for the machine, you're still writing. For other people. Fallible, flawed, distracted human beings just like you. And that's the truly difficult part.
I think that's what Knuth was getting at with his concept of Literate Programming. (link to a pdf)
The practitioner of literate programming can be regarded as an essayist, whose main concern is with exposition and excellence of style. Such an author, with thesaurus in hand, chooses the names of variables carefully and explains what each variable means. He or she strives for a program that is comprehensible because its concepts have been introduced in an order that is best for human understanding, using a mixture of formal and informal methods that reinforce each other.
This is, of course, much easier said than done. Most of us spend our entire lives learning how to write effectively. I'd like to highlight one (very popular) rule that I keep coming back to, over and over again; I think it serves as a helpful guidepost for great code:
Omit Needless Words
Vigorous writing is concise. A sentence should contain no unnecessary words, a paragraph no unnecessary sentences, for the same reason that a drawing should have no unnecessary lines and a machine no unnecessary parts. This requires not that the writer make all his sentences short, or that he avoid all detail and treat his subjects only in outline, but that every word tell.
What does this say to you about your writing?About your code?
Coding, after all, is just writing.
How hard can it be?