Writing The language you can learn is your own

Please Learn to Write

There’s been lots of buzz on the topic of whether or not you should learn to code. As an engineer, I don’t have unbiased thoughts on the matter. I tweeted Jeff Atwood’s piece because, well, I agree that it’s pretty silly to think that the world is going to be a better place if the Mayor of New York City learns how to code. I agree with Atwood that his valuable time would be better spent elsewhere.

I believe there are essential skills you learn as an engineer who codes. It teaches you how to structure your thinking, and the process looks something like this:

  • I have this thing I want to build.
  • I have a finite set of tools that enforce a certain set of rules I must follow.
  • And… go.

Coding is unforgiving. Its structure is well-defined and enforced by whatever interpreter or compiler you might be using. You are punished swiftly for obvious errors. You are punished more subtly for the less obvious ones.

Once you’ve mastered a particular language, you’ve also mastered a means of thinking. You understand how to decompose a problem into knowable units, and you learn how to intertwine those units into pleasant and functional flow. Perhaps you’ve figured out how to get that flow to perform at Herculean scale. There is no doubt in my mind that this is an essential and valuable skill for anyone to learn and master.

However, there is a language you could master that teaches many of the same lessons, appears far more forgiving in terms of syntax, and has immediate broader appeal.

The language you can learn is your own.

I argue that there is an essential set of skills that intersect both with writing words and writing code. Let’s revisit the process:

  • There’s this thought I want to write.
  • I have finite set of words, a target audience, and, likely, a certain article length that all serve as constraints.
  • And… go.

Writing appears more forgiving because there is no compiler or interpreter catching your its/it’s issues or reminding you of the rules regarding that or which. Here’s the rub: there is a compiler and it’s fucking brutal. It’s your readers. Your readers are far more critical than the Python interpreter. Not only do they care about syntax, but they also want to learn something, and, perhaps, be entertained while all this learning is going down. Success means they keep coming back – failure is a lonely silence. Python is looking pretty sweet now, right?

The articles on Rands keep getting longer and longer, and as I’m finishing a piece, I worry, “Is it too long?” I worry about this because we live in a lovely world of 140-character quips and status updates, and I fret about whether I’ll be able to hold your attention, which is precisely the wrong thing to worry about. What I should be worried about is, “Have I written something worthy of your attention?”

Writing is the connective tissue that creates understanding. We, as social creatures, often better perform rituals to form understanding one on one, but good writing enables us to understand each other at scale.

Now… go.

Leave a Reply

Your email address will not be published. Required fields are marked *

57 Responses

  1. A friend and mentor once said, “The difference between a good engineer and a great engineer is that the latter wields a word processor as well as they do a compiler.” I think that’s true. Good post!

  2. Gustav 13 years ago

    Jim, I like your statement, but please replace engineer with programmer. People who code are not engineers and are not required to adhere to professional standards like professional engineers. “Software engineer” is an arbitrarily manufactured title.

  3. Gustav,

    Some people who code are engineers. I’m an Electronic Engineer but about 75% of my job is writing firmware. I used to be a programmer before I did my engineering degree, I don’t think there’s really much in it between what I did as a “programmer” and what I do now as an “engineer”.

    At the company I work for there are hardware guys and software guys. We work to the same standards.

    Cheers,

    Al

    p.s., all the job titles I’ve had have been arbitrary.

  4. Kenny 13 years ago

    I think you just outlined why it is beneficial for people to learn to code, even if they won’t ever write code professionally – it’s a much clearer example of a domain that requires the subject to decompose their goals into clear, explicit components. If the ‘world’ doesn’t need more programmers it certainly doesn’t need more writers! But the world would certainly be a better place if there were better programmers and better writers, and practicing either is the best way to achieve that. Jeff wrote that programmers should strive to write as little code as possible. That same principle applies to writers as well!

  5. Kathy Sierra 13 years ago

    “… I fret about whether I’ll be able to hold your attention, which is precisely the wrong thing to worry about. What I should be worried about is, “Have I written something worthy of your attention?”

    Yes.

    I also agree that learning to *communicate* through writing is more useful for most people than learning to *code*, but still think EVERYBODY needs an intro to programming. Not so they can *write code*, but so they have at least a glimmer of appreciation/understanding around the algorithms that influence and control so much of our lives.

  6. Cyril 13 years ago

    “Writing appears more forgiving because there is no compiler or interpreter catching your its and it’s issues or reminding you of the rules regarding that or which.”

    I agree with you. But should not that also include grammar?

  7. Angelos Arampatzis 13 years ago

    “I have a finite set of tools that enforce a set certain of rules I must follow.” I believe it should be: “I have a finite set of tools that enforce a certain set of rules I must follow.”

  8. Scott Nielsen 13 years ago

    You probably have a typo in the second item of your first bulleted list. “enforce a set certain of rules”

  9. “The shame of speaking unskilfully were small if the tongue onely thereby were disgrac’d: But as the Image of a King in his Seale ill-represented is not so much a blemish to the waxe, or the Signet that seal’d it, as to the Prince it representeth, so disordered speech

    is not so much injury to the lips that give it forth, as to the disproportion and incoherence of things in themselves, so negligently expressed. Neither can his Mind be thought to be in Tune, whose words do jarre; nor his reason in frame, whose sentence is preposterous; nor his Elocution clear and perfect, whose utterance breaks itself into

    fragments and uncertainties. Negligent speech doth not onely discredit

    the person of the Speaker, but it discrediteth the opinion of his

    reason and judgement; it discrediteth the force and uniformity of the

    matter and substance. If it be so then in words, which fly and ‘scape censure, and where one good Phrase asks pardon for many incongruities and faults, how then shall he be thought wise whose penning is thin and shallow? How shall you look for wit from him whose leasure and head, assisted with the examination of his eyes, yeeld you no life or sharpnesse in his writing?”

    –Timber, or, Discoveries made upon Men and Matters, by Ben Jonson

    “Now, it is clear that the decline of a language must ultimately have political and economic causes: it is not due simply to the bad influence of this or that individual writer. But an effect can become a cause, reinforcing the original cause and producing the same effect in an intensified form, and so on indefinitely. A man may take to drink because he feels himself to be a failure, and then fail all the more completely because he drinks. It is rather the same thing that is happening to the English language. It becomes ugly and inaccurate because our thoughts are foolish, but the slovenliness of our language makes it easier for us to have foolish thoughts. The point is that the process is reversible. Modern English, especially written English, is full of bad habits which spread by imitation and which can be avoided if one is willing to take the necessary trouble. If one gets rid of these habits one can think more clearly, and to think clearly is a necessary first step toward political regeneration: so that the fight against bad English is not frivolous and is not the exclusive concern of professional writers.”

    -George Orwell, “Politics and the English Language”

  10. Alan Summers 13 years ago

    It’s neither learning to code nor learning to write; rather learning to solve problems via a repeatable process that really matters. Writing and coding are merely good ways to practice the Problem Solving Process: Identify the Problem (“there’s this thought I want to write”), find the tools you have available to help you solve this problem (“I have a finite set of tools that enforce a set certain of rules I must follow”) and use those Tools to solve the problem (Go). Ending, of course, with test your solution (compile / discover if your readers thought it was worth reading / were amused).

    Some people will learn the “how to think” in a more structured environment such as coding, while others will respond to writing better. As long as we all learn to solve problems elegantly, the world will, indeed, be a better place (cheesy smile here).

  11. John F 13 years ago

    To Gustav and Matt van Horn: A good craftsman is a good engineer. The best programmers I’ve worked with follow rigorous engineering discipline, with good naming conventions, tidy code and strong processes for everything that isn’t code (e.g. releasing). A craftsman in any medium should be able to do things repeatably and in such as way that someone else can maintain their creation later.

  12. “I have a finite set of tools that enforce a set certain of rules I must follow.”

    Yes, you should learn to write.

  13. For the engineering side-thread, I believe the point Gustav was making is that “engineer” actually means something in most areas. In many states, you can’t legally refer to yourself as a professional engineer unless you are a licensed PE.

  14. I let my coders figure out “how”. My job is to tell them “what” and “why”, and together we figure out “when”.

  15. there is no compiler or interpreter catching your its and it’s issues

    I fully realize the irony of me pointing this out, but I think you mean “catching yours and its issues”.

  16. NormM 13 years ago

    Writing involves communication, just as programming does. That’s why in both cases you use language. But there is an essential difference, in that most people don’t understand the power of a highly constrained context with exactly followed instructions. And even for non-programmers, many repetitive tasks on their computers can benefit from being automated.

    Without a basic understanding of the power of automated instruction following, multiplied by enormous clock rates, all of modern computer technology is just magic. It is dangerous to have a population that believes in magic.

  17. Kathy Sierra 13 years ago

    Normm said: “Without a basic understanding of the power of automated instruction following, multiplied by enormous clock rates, all of modern computer technology is just magic. It is dangerous to have a population that believes in magic.”

    I agree. And it takes only the gentlest intro to demystify the magic. I watched my daughter’s fellow five-year-old classmates “programming” a turtle logo simulation with a plush toy and floor tiles. No computer, just one kid (holding the toy) “interpreting” the other kid’s “code”. Within a couple days, switching to programming in logo on the computer was no big stretch for them.

    Nearly anyone *can* and I believe *should* learn to program. And to reference an earlier Rands post, I also believe everyone should learn a bit of neuro/cog science and the psychology of motivation and manipulation. Between big data and behavioral economics (hmmm gamification), humans are being mind-hacked in increasingly sophisticated, subconscious ways. Simply knowing it’s happening is not protection from the effects of exposure, but at least we can make more informed choices about what to avoid.

  18. Chris 13 years ago

    Great read, I enjoyed this a lot.

    Just to throw my 2 cents at the engineering comments, I am currently studying for my MEng in Software Engineering, a qualification whose title I think is wholly appropriate.

    You can have craftsmen, creatives and also engineers in software. It’s all about the approach you take, and (in my opinion) the type and scale of software you are building.

    To give some backup to having “software engineer” be more than a “made up title”, in my country I would be allowed to become a Chartered Engineer, based on the graduation from this course. That is the same list that holds architectural, electrical and mechanical engineers.

  19. arg non 13 years ago

    Hmnn.

    Is programming “essential” to learn? Probably not. But it is equally difficult to gasp on the belief that learning to write better is a lot more essential as well.

    {Please learn to write}, sounds to me as a diversion. Please don’t acquire the knowledge that I consider only myself and few others to be worthy of having. Please focus on writing!

    Where has the missing middle gone to vacation? It is perfectly possible to both learn to write better and learn to code.

    Surely, coding is not essential. But I find it decreasingly silly and increasingly horrendous to find people complain about other people wanting to learn to code. You make programming sound as if this was this esoteric knowledge that only so few are worth of and that most people would do terribly.

    If major Bloomberg wants to learn to code. So what? The world is never going to become a worse place when the amount of knowledge about a topic is increased. I cannot really find a good explanation for how is it that there are apparently so many people that still believe that there are cases in which less people gaining knowledge about a topic is a preferable thing.

    Also, what if you already have nurtured writing for a good while and want to try other things for once? I am not sure what your opinion about Bloomberg’s writing is, and I am sure that like any human being there is always room for improvement. But I am going to take the wild guess that his political position has a sort of implicit requirement for knowing language a little well.

    Besides, just because you are a software engineer it does not mean people cannot enjoy programming with out your methodologies. Structural engineers do not own physics and Painters do not own aesthetics – It seems a little arrogant for software engineers to believe they own programming. Rest assured that having some few people learn your secret language won’t mean they will own become engineers and flood your software projects with bad code you will have to debug – That bad code will come regardless of whether Bloomberg convinces a couple of extra kids to become software engineers or not.

  20. Mark Ransom 13 years ago

    @Jason Baker, I believe the statement was correct as written, although some punctuation might have helped.

    there is no compiler or interpreter catching your “its” and “it’s” issues

  21. Jason Baker,

    There’s no irony, you’ve misunderstood. He was referring to confusing “it’s” with “its”.

    Although I’d have probably put:

    …”there is no compiler or interpreter catching your ‘its/it’s’ issues”

  22. Many more words have been written about the Golden Gate bridge than engineering hours spent building it. I’d argue the latter has provided more benefit to society. I can also assure you China is preparing to beat us senseless by training more coders, not more writers.

  23. Length was just fine! good read and points.

  24. Gregg Tavares 13 years ago

    Maybe there are unintended consequences but I’d certainly like to have more politicians that know how to code deciding on things like SOPA, PIPA, ACTA, CISPA etc than not.

  25. Matt Van Horn 13 years ago

    Gustav, I agree – I prefer “craftsman” to engineer.

    Professional engineers did not build the Taj Majal, the Hagia Sofia, or il Duomo in Florence. They build a lot of strip malls though.

    I’ve seen a lot of Java code that smells of engineering, but there are a few craftsmen building beautiful things with it, too.

  26. Richard Barrell 13 years ago

    If anything, I’d call this article too short.

    I miss Steve Yegge’s interminable blog posts.

  27. Christian Romney 13 years ago

    I agree with your observation about language wholeheartedly. For the record, my biggest gripe was about presumption. The unstated assumption is that the Mayor plans to do this learning on “taxpayer time” (and that he was serious). But what if he merely wants to learn to code on his own time for personal fulfillment? Perhaps it’s a personal enrichment goal. What right does anyone have to tell the man how he ought to spend his free time? In short, the whole topic is inflammatory, presumptuous and silly.

  28. I think it might also serve the mayor well to learn and use a spreadsheet program like Excel.

    Sure, his staff can do that for him, but when he’s working out a budget or other number-based planning/proposal, being able to see the effects of changes here-and-there *quickly* would be beneficial.

  29. @rands Good reflection! People should really learn to write more than to code to improve/achieve some of these kinds of knowledge you presented (and, probably, many others).

    However, I think that some people are trying to learn/teach some undoubtedly useful principles of CS, and they are trying to do it through coding. Lets give them a little opportunity…

    The first logical question would be: what is the useful generic CS knowledge that can help the common users to face an even more computerized future? But that’s not for me to say without a thorough study, even if I’m a CS teacher and I’m thinking about it every once in a while.

    Therefore, today, the right question may be if coding would bring any useful knowledge in that direction… The answer may be that it is unlikely to be the right tool. And that’s what @codinghorror argued and many others as you pointed out. I haven’t got much to add.

    But don’t you think that the common user would benefit from some deeper knowledge of how things work on and around a computer?

    Finally, let me close my arguments with a couple of clarifications:

    * I think that computing must be easy and almost transparent in many ways (for an everyday use, not for specialists). Even if that seems to oppose to the “people must have more insight”… I keep thinking that it is not. It never is transparent, no matter how hard we try.

    * Moreover, I honestly think that people who think that “teaching how to code to everyone would make their lives easier and would unleash some potential” are deeply wrong because they certainly are underestimating the difficulty and the unpleasantness of coding for novice people, and the profession itself.

  30. Lonny Eachus 13 years ago

    I have only one quibble with this piece:

    If you think the value to society of the time of the Mayor of New York City is actually more valuable than a programmer’s, then you don’t know jack about politics.

  31. John Miller 13 years ago

    Some quotes (my blood’s caffeine-level is too low for original thought at the moment):

    “Clear language engenders clear thought and clear thought is the most important benefit of education. We are neither peddlers nor politicians that we should prosper by that use of language that has the least meaning.”

    And as Dijkstra had to say for all the programmers out there:

    “Besides a mathematical inclination, an exceptionally good mastery of one’s native tongue is the most vital asset of a competent programmer.”

  32. Thanks for sharing this inspirational post with us. I am usually not afraid to commit or deploy code but am always terrified when submitting a story, article or presentation.

    Also in the comments discussion about engineersprogrammers, I love the comment by @Matt Van Horn. I wish I could answer “tinkerer”, “craftsman” or “artist” when asked for my title.

  33. I respectfully disagree. Aristotle, in his essay on politics, said that reading was one of the four primary tools of education. Learn to read first, then learn to write. And I mean the Ezra Pound kind of reading, not the hackish mechanics used by mayors who want to read “gooder”. Mastering the skill of effective, critical reading will benefit a student more than writing.

    Perhaps you would consider this to be a chicken-egg dilemma. I guess it’s true that Aristotle also said in the essay: “the proper time for a woman to marry is eighteen, for a man thirty-seven, a little more or less”. Let’s discuss.

  34. Tom McCollough 13 years ago

    Nothing more to say about this article than to simply agree wholeheartedly.

  35. steve 13 years ago

    when the world is a hell, what does it matter what happens in it?

  36. Brian Balke 13 years ago

    Writing manifests a plethora of intentions. A great programmer of Dykstra’s type is also a pedagogue.

    For this discussion, considering the association of code with prose in the practice of the software developer, I would suggest that it’s really about controlling the generation of entropy. Great prose (Plato’s Republic or Locke’s Two Treatises on Government) can organize the behavior of an entire culture. So it is with software – particularly when it encapsulates expertise that empowers users to perform well beyond what they could accomplish without the tool in hand.

    So one reason that the great programmer must also be a master of prose is that software influences the behavior of other developers and users. Unless they have access to prose that prepares them for effective interaction, the work of the originator is bound to be undermined or ignored.

    Pairing a great programmer with a good technical write may be another strategy, but that works in the long run only if they are tied together at the hip.

  37. PapaMike 13 years ago

    I have long advocated that computer science degrees (and, I suppose engineering degrees) should have a greater focus on writing and communications courses. It is a perpetual shortcoming of programmers who I’ve worked with (and hired, unfortunately) that, although they may understand both a problem and a potential solution for that problem at a profound level, they can’t tell a non-technical person what either the issue or the solution are in terms that they can grasp.

    I have a guy who works for me right now who routinely delivers emails including great technical detail but no context with which to frame that detail. When you get one of his emails, it’s like receiving a detailed city map with most of the placenames erased (and certainly no title at the top). You have to deduce, from what’s there, what the guy is even talking about, much less what his point is in sending the pile of technical detail your way. I’m working with him on it – he’s very capable in many other ways and it would be a shame to lose him over his communication skills – but it makes me want to pull my hair out at times…

  38. CPelkie 13 years ago

    Why don’t you learn how to write without the use of gratuitous obscenities (“there is a compiler…”). It will improve the quality of your discourse.

  39. Lucretia 13 years ago

    English, Math, Code, Music – there’s a reason they are all called languages.

    Some of us, at best, might attain fluency. Others will create art. But historically the ‘masses’ have been hard pressed to master the basic rules and practices when it comes to their first language.

    But this is still going in my ‘link it rather than rewrite it’ bookmarks.

  40. Jim de Graff 13 years ago

    We are taught mathematics because a basic understanding of that discipline is necessary to function in a society that runs on numbers. We are taught physics, chemistry and biology in high school so that we have a basic understanding of the sciences. I think everyone should have at least a basic understanding of programming. That doesn’t mean that everyone should be a programmer any more than I think everyone should be a physicist.

  41. You write well, and the I love the argument. But elegant writing, like elegant code, requires practice, study and attention to detail. To take your work to the next level, try re-writing this article without using the word “is,” or for a bigger challenge, with an absolute minimum use of any tense of the verb “to be.” I think you will astonish yourself.

  42. Andrea 13 years ago

    I enjoyed this excellent piece of an excellent length. I only have 2 corrections to make. I believe you’ve ended 2 sentences with prepositions. They could have been easily corrected.

  43. Great point and great article. It’s really not difficult to learn the proper way to write and to speak. It bugs me when some seem to not care about it. That is the price we pay for text messaging and twitter. People have forgotten how to write well.

  44. Me thinks the error’s were intentional. Yet the irony t’was lost in the interpretation of the thought.

    Eloquent irreverence and poetic irony is often lost upon the intelligence of braggarts and fools……..

    Great post!

    Some eloquent comments & foolish remarks.

  45. This is wonderful. This post is perfect for justifying why I need to take a natural language (Spanish) class in order to gain perspective on coding in a computer language (Java).

  46. Not sure if anyone will get down this far. Great post lots of great info just a few thoughts to add:

    1. Not everyone can write well. Rand writes regularly and should proud of his work and as many comments here demonstrate (and part of the point) the message can be lost while scrutinizing the messenger/message. While writing is good skill to learn, there are many other skills such as time management, presentation skills, conversation, networking, mechanical skills and more that would also be helpful to learn.

    2. Engineering and Software development always seem to butt heads on this subject. An engineer friend once told me; “Look out for an engineer with a soldering iron”. Likewise Software developers are wary of Engineers writing programs. The difference is focus, an Engineer uses software to solve their own problem and Software developers write software to solve other people’s problems. It is as different as a bread board and production circuit board.

    While Engineering is a tough curriculum, so is Computer Science and although Information Systems and communications are not considered as rigorous, there are many software developers that come from other science fields such as Meteorology, Biology, Operations Analysis and other intensive information fields. Engineers and Software Developers do not compete in the same space so comparisons are irrelevant.

  47. As always, fucking brilliant. I am a Rands fanboy!!

  48. Maggie 13 years ago

    ^Pyre, I could be going out on a limb here, but I’m pretty sure that _Mike Bloomberg_ can use Excel.

    😉

  49. Aaron Benitez 13 years ago

    You need to read a lot to write properly. You need to read a lot and think a lot to write something worth your readers’ time.

    Reading and thinking sure help everybody, not just engineers. After this, some writing seems to be a natural consequence. Great piece, Rands. ¡Saludos desde México!

  50. Janet 13 years ago

    Engineers make plans that others implement. The engineer designs the foundation and structure for a building. Perhaps there are some IT professionals who design systems for others to implement, never getting involved in the nitty-gritty of actually making the object.

    Software developers are technicians, analogous to steelworkers, who build things with their hands. Both tinker and collaborate with others to create things.

    Other commenters are correct that one cannot legally call oneself an “engineer” without implying the title “Professional Engineer”, which requires passing the PE Exam in a chosen specialty and maintaining the license through continuing education.

  51. Obvioso 12 years ago

    Bloomberg’s tweet is just the default thing that comes out of Codecademy. He probably knows how to code already, he has an electrical engineering degree and started Bloomberg LP after all…

  52. Doug Whitmore 12 years ago

    Reading this I was reminded of some things I had read about Robert E. Howard’s writing. He wrote for a medium that was purposefully flowery (pulp fiction) but he somehow had an economy of words that enabled him to tell a larger than life story with full feeling within the constraints of a short story.

    How is that different from the old school demo programmers that coded these beautiful demos with ridiculously tiny memory footprints? I don’t see the difference, and I treat both with respect.

    I’m inspired to start writing again…

  53. It’s really a nice and helpful piece of info. I am glad that you shared this useful info with us. Please keep us informed like this. Thank you for sharing.

  54. Mike Dimmick 11 years ago

    Janet probably won’t come back, but:

    No. Software developers are *not* technicians. We are designers of detailed blueprints. It just happens that we have so successfully automated the implementation process – the assembly of our detailed designs into executable code – that we have removed the human completely from that task. We have a completely automated production line that (barring compiler bugs) produces exactly what was specified every time. As the last human in the process, we are erroneously identified as the production worker, but we aren’t, we are the last designer before hand-over to production.

    Almost all new software is written in a high-level language. We concentrate on telling the computer what, we let our tools decide on the how. That is, we say ‘assign this variable this value’. The ahead-of-time compiler, JIT compiler or interpreter decides what variables would be best held in registers, and which register, and what memory location to store it in. Even then, what comes out of a developer’s toolkit is typically still a flat-pack of parts to be assembled into an actual running process: the operating system’s loader pulls together the disparate parts from what I produce, from its own parts and from third-party libraries and glues those parts together, potentially changing some of those assignments to ensure that all the parts can live together.

    In a bytecode/IL environment what we ship is a detailed blueprint slightly more refined than the one we drew up, and the assembly technician lives on the user’s computer and adapts it to the hardware and software they actually have. On the web we just send them the blueprint itself.

  55. “It’s your readers.”

    While this was a great read on its own, the edits and suggested rewrites in the comments only add to the article and drive the point home.

    And yes, this was quite entertaining.

  56. Raymond 11 months ago

    Great piece of advice.
    Agree on the audience as compiler analogy, recently read through an article on Think-Write-Share as a means to reflect and communicate and at the same time willing to allow critiques from others during “Share”.