views:

770

answers:

11

I read Richard P. Gabriel's book "Patterns of Software" (pdf) which contains an essay called "Writing Broadside" in which he contends that programmers should develop their ability to write clearly. I have found that his suggestions have definitely improved my ability to write tech. spec's and design documents.

One of his suggestions is to develop writing workshops at work. That this will help improve your ability to express yourself clearly when documenting your designs.

We already have a system where, once a week, a team member gives a Pecha Kucha talk on any topic to help improve our ability to give presentations.

So I'm thinking of suggesting the writing workshops as well.

Does anyone have writing workshops at their place of work?

"A man who has the knowledge but lacks the power clearly to express it is no better off than if he never had any ideas at all." - Thucydides

Edit: What I am talking about here is the ability to document your code in a clear manner, e.g. tech. spec's and design doc's. Not the writing of the source code itself.

+18  A: 

Yes! Most definitely.

One of the biggest problems I see in code is the inability to name things accurately. This can often be down to the inability to express one's ideas.

A great resource to improve writing skills is: The elements of Style. It's small, succinct and easy to read.

Mitch Wheat
I disagree! (The pat where you say "Yes! Most Definately"). See my post as to why.
mattlant
That's your prerogative!
Mitch Wheat
indeed it is my perogative. I just like to at least show a little respect and let people know why i press that down arrow :)
mattlant
indeed it is good for me.
mattlant
@Mitch Wheat, Downvoted mattland and upvote you mitch. That is my prerogative.
Simucal
That is a great answer!
Ashley Tate
+6  A: 

What we do is to let co-workers do a presentation every week, mostly on technical topics, so that we also get some advanced training.

I guess this not only trains the ability to express yourself, but it also strengthens the team and the communication within the team.

It really improves productivity if the team members know how to express themselves, even as far as tiny things like the difference between "parameters" and "arguments" are concerned.

Grimtron
A: 

my thoughts:

A, The Most important, i think a developer needs to be able to write clear, concise, beautiful, self documenting code. This is far more important than writing docs.

B, Your Unit Tests should also be clear and concise and a form of documentation as to how to use code.

C. Part of this depends. If they are very low level programmers working on smal parts of code, A + B stand, However, if they are high level, or work on a large part of the system, or the whole system, then yes it becomes more imprtant that they know how to write clearly and properly, but to an extent.

In short, I think it is important, but it is not the measure of how good a develper is. How well the code documents itself is the true measure.

Besides if every developer could write docs, then technical writers would be out of a job.

As to do i know any resources or what to suggest, no I dont, i have never really looked to improved my writing capabilities.

EDIT: I should also add though some of this depends on the process you use and what roles and responsibilities a developer might have. Obviously if its required that developers write part of the user manual, then yes, writing clearly is VERY important. But this is not usually the norm.

EDIT2: None of this is meant to say that a devloper should not have ANY writing skills, it was more to say that code writing is far more important than tech/doc writing.

EDIT3: Now that it has been clarified that the OP doesnt want any reference to writing code, then I must say that no, in general it is not very important for a developer to be able to write technical documentation and design documentation, as there are far more important things for a deveoloper to be good at.

mattlant
Being able to write clearly and express ones ideas, does not necessarily mean writing docs. It still aplies to code.
Mitch Wheat
and please tell me what I said that counters what you said? "The Most important, i think a developer needs to be able to write clear, concise, beautiful, self documenting code."
mattlant
READ THE QUESTION! "I have found that his suggestions have definitely improved my ability to write tech. spec's and design documents." was part of it which tells me the OP was reffering a lot more to that than code.
mattlant
Wow, you guys must think that a devloper's technical writing skills are far more important than their code writing skills. Pretty sad.
mattlant
back to my first comment: I am not talking about the ability to write technical docs. The point is to be able to express ones thoughts and ideas and excahnge information, a person needs language. Having language skills is therefore important.
Mitch Wheat
@mattlant that's not what I said. I worked with clowns who can write fantastic code but can't document what they've written. To a company that's useless!@Mitch Wheat Your last point here is what I am talking about.
Rob Wells
Well, its ok, we can agree to disagree. I cant write worth shit. But I can still write beautiful code. Clear Code. Consice code. You ask me to write a technical doc and you'll get a pile of shit.
mattlant
I guess both you guys missed point C and EDIT1. A company with 1000's of developers ISNT GOING TO GIVE A #### about how well some lowly code can write tech docs
mattlant
@Rob, rewrite you question then. It is not written "clearly" as you go on and mention Technical Docs and stuff, but not about *code*
mattlant
@mattlant - done.
Rob Wells
While Point C says that writing clear, beautiful self-documenting code is more important than being able to write docs, you will be missing the point that those who can write such code are also able to master writing prose - for the virtues of a good programmer help enormously with writing both.
Jonathan Leffler
And to that I disagree totally. So with what you said, I guess my next hire should be an english major?
mattlant
no your next hire should be a CS major who happens to actually also have an English major. It doesn't matter if you write it in code or in english : if you are able to articulate your thoughts at the conceptual level, the output will be clear in both languages (think of code as a foreign language)
Jean
Code is not a foreign language to anyone but non programmers. Programmers job is not to write prose, or design, they follow the design. They may have small design tasks within a very small scope, but they express that in code.
mattlant
Aspire to be the guy who creates the design, not an intern-level programmer who just implements the design. You'll thank me for this advice in 10 years.
indiv
This thread was not about aspirations. This thread was about your current state and *WRITING*. My post dealt with writing skills, not communications skills in general. Obviously if you want to be the architect, you need to be able to make good blueprints.
mattlant
+2  A: 

Software developers very much like professionals in any other area or industry should be able to express their thoughts and ideas.

Software development is a team effort and communication is single most important factor that can cause project failure. The more so nowadays developers on projects communicate with sales, marketing, business people, users and others how do not have a clue in software development. And ability to communicate ideas and lean others towards them is very critical skill.

Needless to say that if Tech Lead came up with brilliant design but is not able communicate his design to the rest of the team, this means that you have no design.

Dima Malenko
Aha, but a tech lead is much differnet than a *programmer* as generalized by the OP
mattlant
Tech lead is somewhat different from mere developer, but the general idea still holds true: if have or want to have ideas that other will follow you must be able to communicate them.The cite from Thucydides in original question catches it all.
Dima Malenko
Indeed, but in many large companies, the ideas of *programmer* are not heard. That is slowly changing especially with the vast amounts of small organizations, but to that then I would say they are no longer a programmer.
mattlant
A: 

Here in Argentina we have to communicate with our pals at US to get our work done.

The main way of communication is email and IM. You wouldn't imagine how difficult it is to understand lots and lots of emails because of lack of good writing. And I'm not talking about difficult technical stuff, but just how to express yourself in plain english.

So, yes. I think that it's very important.

miya
+3  A: 

@slashmais: Anyone in any sort of professional capacity should be able to communicate clearly, be it engineer, manager, tester or whatever. This isn't just a personal preference, I believe this for the good of an organization or business. You don't want programmers whose only function is to implement and poorly document code; you want engineers who can think deeply about the code and communicate it's intent to others in a medium outside of the code listing.

What we do at my company is a weekly technical presentation by an engineer on a topic of their choice. This is a big win for everyone--it helps the engineer hone their speaking and writing skills and educates us about what they're doing. We also have code reviews where the documentation of the code is critiqued just as much as the code itself. This leads to far more maintainable code.

It doesn't matter if it's IM, email, written documents or code--the less time I have to spend trying to parse your communication and the more time I spend accomplishing things as a result of your communication, the better for my company.

drewh
I understand absolutely where you are comming from, and from a management perspective I agree with you 100%. (I editted my answer.) I do not expect a truck-driver to map routes - I give him the route-map.
slashmais
And I do not expect a carpenter to make the blue prints, thats what the architects are for.
mattlant
+2  A: 

Yes, programmers should document their own work; would you build a house from a one-eighth-scale model and trust that blueprints weren't necessary?

Worth reading: Steve McConnell's Code Complete, especially the chapters on naming functions and writing documentation. If you're naming and commenting your code appropriately, the docs write themselves.

Kent Brewster
And that is exactly my point. However, they dont need to be experts at writing doc. Also, a "programmer' isnt writing the blue prints, that is up to the architect. Tell me, would you build a house if the blue prints were form a carpenter who hammers nails for a living?
mattlant
+17  A: 

Obligatory Dijkstra quote:

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

lindelof
Mastery of speech, and mastery of writing are two different things, and one can be superior on one and not the other and vice verse.
mattlant
Mastery of tongue includes both speech and writing.
Null303
I don't know about you, but I don't write with my tongue.
Kibbee
+2  A: 

Communication is essential in any profession, software engineering and computer programming are no exceptions. It doesn't matter how brilliant your idea is if you cannot effectively communicate it to your peers, managers, and customers. You can have as much influence with well written text as with well written code.

A good example that I'm sure is familiar to most people reading this is the famous K&R book. In my opinion, one of the reasons that C became such a prominent programming language is because Kernighan and Ritchie produced a well written book. Had they produced a manual that was typical of the style of compiler manuals at the time instead of an easy to follow, succinct, and compete textbook I doubt C would have become as dominant as it has.

mxg
mattlant
+1  A: 

The task of programming involves two major parts. The first is communicating to a machine what is that you are trying to do with your code. That is the easy part, the compiler/interpreter/virtual machine does most of the work there. The hard part is communicating to the other programmers what you are trying to do with your code.

Because of the human aspect of programming, it is vital that you are an effective writer to be an effective programmer. Making things work isn't good enough, the people who come after you need to be able to understand it and work with it just as well.

Having good writing skills can help you write code in a more natural language way (although there are pit-falls to natural languages, so use as appropriate). It will also help you document, comment, and explain that code better.

As Blair Conrad said, naming things is also important and is greatly benefited by having better writing skills. What you call things has an impact on the way people think about them. If other programmers can figure out how the code was thought out, then they have a better chance of using that code as intended.

Bernard
A: 

Yes,


But writing clearly is not the same as having faultless spelling and grammar.

However good someone spelling is, their writing will be hard to understand if they can’t order their thoughts in a logical way and decide what details are important to include (and leave out).

A short comment that is to the point is a lot better then a long comment with faultless grammar that does not hit the point.

If you wish to move into management then being able to quickly write long documents with perfect spelling and grammar become a lot more important.

Remember it all about how easy it is someone to understand what you mean, not how match they like your style of writing.

Faultless grammar is not always the best way to communicate, e.g.

“This is the sort of English up with which I will not put.”

Ian Ringrose
@Ian, I totally agree with what you are trying to say here.
Rob Wells