Beta
×

Welcome to the Slashdot Beta site -- learn more here. Use the link in the footer or click here to return to the Classic version of Slashdot.

Thank you!

Before you choose to head back to the Classic look of the site, we'd appreciate it if you share your thoughts on the Beta; your feedback is what drives our ongoing development.

Beta is different and we value you taking the time to try it out. Please take a look at the changes we've made in Beta and  learn more about it. Thanks for reading, and for making the site better!

Writing Documentation: Teach, Don't Tell

Soulskill posted about a year ago | from the here-is-a-screen-full-of-words,-go-wild dept.

Programming 211

Programmer Steve Losh has written a lengthy explanation of what separates good documentation from bad, and how to go about planning and writing documentation that will actually help people. His overarching point is that documentation should be used to teach, not to dump excessive amounts of unstructured information onto a user. Losh takes many of the common documentation tropes — "read the source," "look at the tests," "read the docstrings" — and makes analogies with learning everyday skills to show how silly they can be. "This is your driving teacher, Ms. Smith. ... If you have any questions about a part of the car while you’re driving, you can ask her and she’ll tell you all about that piece. Here are the keys, good luck!" He has a similar opinion of API strings: "API documentation is like the user’s manual of a car. When something goes wrong and you need to replace a tire it’s a godsend. But if you’re learning to drive it’s not going to help you because people don’t learn by reading alphabetized lists of disconnected information." Losh's advice for wikis is simple and straightforward: "They are bad and terrible. Do not use them."

Sorry! There are no comments related to the filter you selected.

Source code (-1, Flamebait)

Anonymous Coward | about a year ago | (#44751627)

Source code is the best documentation.

Re:Source code (5, Insightful)

Entropius (188861) | about a year ago | (#44751685)

Do you really want to read the source code for ssh every time you forget whether it's -p or -P to specify the port? (It's one for ssh and another for rsync...)

Re:Source code (1)

Anonymous Coward | about a year ago | (#44751757)

Of course I do. Reading source code is guaranteed to be the most up-to-date explanation of how things work. By definition!

And of course this is based on the assumption that people name their methods, classes, functions and variables in a meaningful way, structure their code, and other do all the other things that make it a maintainable code but even if not, what would you rather base your decision on, an out-of-date wiki or a confirmation by seeing with your own eyes?

I can't believe my eyes when I read all those idiotic questions on stackoverflow.com such as "what if I use this option with this library, will that work?" Then they go via trial-and-error and at the end of it, they still don't know whether what they observed is true or not. Instead of clicking 'download source' in their IDE and fucking checking themselves.

It's not rocket science, it's just code. Code is like any language. It is to be both written and read (except for Perl, which is write-only :-P ).

Re:Source code (5, Informative)

Anonymous Coward | about a year ago | (#44751919)

I hate you! You're one of those co-workers that urgently e-mails me at 1AM in the morning asking me how to use some utility I wrote. In the morning I reply, "Use the -h switch, you mother f*cker." Followed by my usual disclaimer--"Every utility I write has an -h switch, which describes the switches option-by-option, followed by short description of the function of the utility, plus gives links to additional documentation."

And if you think you're going to find the -p switch in OpenSSH source code, good luck. Option argument handling is strewn about in several different files. I know, because I've had to hack on it and add options, as well as fix the parsing of forwarding option arguments, among other things. I've seen worse, but it's a long way from some utilities, where getopt and getopt_long processing is concise and easily readable.

Pro tip: readable source code has nothing to do with methods, classes, functions, or variables per se. It's the overall structure that counts, even if it's a single 10,000 SLoC function. Most C++ apps are harder to read than a gigantic ASM app.

Most people organize their code by what it literally does--by the components they learned in school or a textbook. They tediously breakdown blocks into a myriad functions and classes based on their algorithmic role. Or they farm out "parse_int", but then have a 200-line chunk of code processing a dozen different kinds of ints (ints for timeouts, ints for userid, etc).

I don't have many simple tips for alternatives. I just know that most people are doing it horribly wrong. I like to think my code is fairly easy to read--and people have told me that--but I know I could get better.

Okay.. one simple thing people could do more often--use fewer source files, fewer classes, etc.

Also, people abstract too early, before they understand what the meaningful abstractions are. So they end up with too many abstractions, creating too much complexity. People should begin to write their applications as quickly as possible, without worrying about structure--just functionality. It's only until you're about one third or even halfway through that you have an idea of how the whole application should be structured. That's when you start over, before it's too late to re-architect, but after you have a concrete idea of what's necessary and what's superfluous.

Re:Source code (3, Informative)

snowraver1 (1052510) | about a year ago | (#44752003)

-h? Next time, use all three of these: -?, -help, --help. I'm probably not going to try throwing -h at a program without having a clue what it might do.

Re:Source code (0)

snowraver1 (1052510) | about a year ago | (#44752011)

Hate to reply to myself, but I forgot /?

Re:Source code (3, Informative)

lgw (121541) | about a year ago | (#44752019)

Command line utilities should print their documentation for any unrecognized or erroneous command line arguments (unless that's so lengthy they need to only print a subset).

Re:Source code (5, Funny)

LinuxIsGarbage (1658307) | about a year ago | (#44752375)

And for no arguments. Or at least print what is required to get help


C:\>app
Crappy app 0.0.0.1a
GPL 2 (If you don't like it fix it yourself

For help type -?

C:\>app /?
Crappy app 0.0.0.1a
GPL 2 (If you don't like it fix it yourself

I said enter -?, not /? This program was barely ported using cygwin, so you have to use *NIX arguments
Don't like it, fix it yourself
C:\>_

Re:Source code (0)

lgw (121541) | about a year ago | (#44752403)

Hahaha! Awesome.

) ) there, that's better.

Re:Source code (0)

Anonymous Coward | about a year ago | (#44752119)

You can't have -help using getopt(3) or getopt_long(3), but it will usually resolve like -h anyhow, assuming you exit after printing the usage. If getopt_long is available I also always add --help. -? is a freebie, because you can aggregate -h and unknown options in the same block. Although, my code will send -h to stdout and exit with 0, but -? to stderr and exit with EXIT_FAILURE.

A / switch is not something you'll find in Unix land.

At the very least, all applications should provide -h, period. It's almost universally supported by system utilities.

Re:Source code (4, Funny)

VortexCortex (1117377) | about a year ago | (#44752675)

-h? Next time, use all three of these: -?, -help, --help. I'm probably not going to try throwing -h at a program without having a clue what it might do.

Then use the damn manual. That's why we write them. If you want to know how to use the manual, use the manual:
$ man man

... hmm, That gives me an idea.
$ man woman
No manual entry for woman

Yep. It knows everything!

Re:Source code (0)

Anonymous Coward | about a year ago | (#44752379)

Nah,

The the thing is that most people are not programmers. Telling them to look at Wiki's, Source Code, or mile long README types of docs, are useless. These sources are for other developers who want to improve or make the application part of their workflow.

Those who wish to learn the software and are not programmers will simply be lost. I see this all the time with wordpress. People install the minimum required to get Wordpress running, and then get charged up the wazoo by their host because they don't install any caching or anti-spam plugins, so their disk space and bandwidth is chewed up in a manner of minutes instead of weeks.

Wordpress is a great example of doing everything wrong. It doesn't come, out-of-the-box in with appropriate plugins and is insecure by default. The average person running wordpress will have their site "hacked" at least once a year by defects in wordpress, without taking into consideration any plugins.

Non-programmers can not fix most OOP programs, even if they have the source code, because OOP programming is not for beginners. Non-programmers can usually fix a trivial 10 line javascript, not a 50,000 line Jquery widget.

Re:Source code (1)

interval1066 (668936) | about a year ago | (#44752397)

use fewer source files, fewer classes, etc.

Hardly useful; I use as many or as few source files as I require, no more, no less. I make a conscience effort to make the number of source files fewer, but that hardly matters if your user-facing interface or API is easy to use. If its documented well, there's hardly more you can do I think.

Re:Source code (0)

Anonymous Coward | about a year ago | (#44752613)

I try to use exactly one source file per abstract role. For example, I'll put an entire JSON, DNS, or HTTP library in a single source file (this is all C code, mind you), because it makes it infinitely easier to reuse the code without resorting to a full-blown shared library. It also allows me to tweak and experiment on a project-by-project basis, without worrying that a single change will break some other application, but when I do migrate changes over it's as simple as a copying a single file (or two, with the header).

I see too many projects which break down something simple into half a dozen source files.

Some of my projects may have twenty or thirty source files. Putting an entire JSON parser/composer in a single source file seems stupid until you see it embedded inside a larger application. Then it makes a ridiculous amount of sense. How does this app handle HTTP? Oh, it's in http.c. How does this application handle daemon startup and option processing? Oh, it's _all_ inside main.c, carefully layered out in layers from top-to-bottom.

The problem is that people write their projects as-if they're the only project in the universe. Especially neophyte programmers, who dream about creating the next greatest module system, etc.

I think this is why functional programmers do so well. Because of the nature of purely functional programming, you have to think long and hard about the simplest interface to your module. You can't simply offload the work by requiring the user to juggle or protect a ton of state.

In OOP-land, I think this is why people who suggest to avoid subclassing are correct. If you're implementing a Zebra, implement the platonic ideal of a Zebra, not a horse subclassed with stripes. 9 times out of 10 that additional abstraction will go entirely unused except by your Zebra, and the conciseness of the Zebra implementation will suffer.

Re:Source code (3, Funny)

youngatheart (1922394) | about a year ago | (#44752561)

Oh cool! I known that shutdown -r -t 600 works on Windows when I expect it to finish installing an update and I'm ready to go for a coffee, but I never remember what it is in Linux. Thanks to your tip, I now know I can use shutdown -h but I know the Linux guy had to put a number, so let me try shutdown -h 0 and see what it tells me about how

Re:Source code (0)

Anonymous Coward | about a year ago | (#44752441)

Just for you, I name my methods things like bob, Bob, bOb, boB, BOb, BoB, bOB, BOB, _bob, etc. My text documentation is absolutely beautiful, though.

Re:Source code (0)

Anonymous Coward | about a year ago | (#44751903)

Do you really want to read the source code for ssh every time you forget whether it's -p or -P to specify the port? (It's one for ssh and another for rsync...)

I usually just write my own ssh and rsync clients. Much faster...

BTW: In rsync -p is the same as --perms and -P is the same as --partial --progress. Neither of them specify the port. You need --port for that. getopt_long() FTW!

Re:Source code (1)

forkazoo (138186) | about a year ago | (#44752385)

More importantly. The source code of a library isn't necessarily any use for understanding best practices for using a library. Reading libavcodec would be gloriously unhelpful for adding video support to an application.

You Insensitive Clod! (0)

Anonymous Coward | about a year ago | (#44751837)

I run Windows!

Docs vs tutorial (2)

dfsmith (960400) | about a year ago | (#44751635)

There's a difference between a tutorial and documentation? Who'd have thunk!

'help' (3, Interesting)

globaljustin (574257) | about a year ago | (#44751807)

a difference between a tutorial and documentation

I agree with your superficial point...who would have thunk it indeed

However, I think it is still a distinction without a difference, one that only causes more confusion.

You and I know what 'documentation' in the computing sense means, but it's not a logical concept for a non-techie.

'documentation' in computing can be as simple as the coder showing his/her work and making a formal log of changes and bug reports/fixes

however, and here is where the problem happens...what constitutes 'sufficient documentation' for a coder is *not* sufficient for a user!

the problem is, that to bridge the gap, most programmers (who are not at all schooled in education theory & by nature tend anti-social) must create some sort of 'document' beyond the 'documentation' for the end user

sometimes this takes the form a 'tutorial'

a 'tutorial' is not full instructions...it is a real-time step-by step *demonstration* which may have supplimentary material that is actually instructions

ex: I can make a video with the steps to start a car, put it in gear and how the brake and throttle work...a person, with *nothing* else but that video and factory plans of the car *could* learn to use it...but calling a basic video and factory plans 'instrucitons' is insulting!

'documentation' can be helpful

'tutorials' can be helpful

'help' menus can be helpful

even so, its not a full user manual that an end user in other industries would expect

the computing industry has decades of work in this area I fear...so many have gotten used to doing it a bad way

Re:'help' (1)

spottedkangaroo (451692) | about a year ago | (#44752045)

Who cares about non-techies? we're talking about API docs. Non-techies likely aren't playing without help from a techie in the first place -- if they play at all.

Re:'help' (1)

Anonymous Coward | about a year ago | (#44752687)

Whoa there, dude. I care about techies. API docs without the explanations about why are just stooopid!!

I KEEP six honest serving-men
  (They taught me all I knew);
Their names are What and Why and When
  And How and Where and Who.

Notice in Kipling's poem that What and Why have priority over How. I don't give a damn about How until I know Why. Simply looking through the source code won't tell me that in the general case.

Re:Docs vs tutorial (4, Insightful)

lgw (121541) | about a year ago | (#44752043)

WHile the difference between a textbook and a reference manual should be obvious to all, TFA still has a point: good documentation should include both.

Most docstrings I see are worthless: they add nothing to the code right below them. OTOH, a bit of tutorial-style documentation with examples can be golden. Often that makes well-written unit tests the best docs, or at the very least, if you're going to provide examples, they should also be unit tests - another test is always nice, plus you know your examples actually work.

Re:Docs vs tutorial (1)

denmarkw00t (892627) | about a year ago | (#44752749)

plus you know your examples actually work.

I've hit this so many times...I go back to documentation after I've made substantial changes to a class and test the documentation - often it breaks, and either the docs get updated or the class gets fixed. Caught many-a-bug just doublechecking my work against how I thought it should work.

Documentation vs Tutorial (1, Insightful)

Anonymous Coward | about a year ago | (#44751637)

But for those of us who already know the basics of driving, a quick reference is much more useful than a didactically structured text. Documentation isn't supposed to be a tutorial.

Obviously documentation that tells you to read the code is useless, though.

Re:Documentation vs Tutorial (2)

snowraver1 (1052510) | about a year ago | (#44751981)

One problem I encounter all the time is what level of competence should be assumed? If I write "try ping host xyz" should I assume they can successfully pingtest something and interpret the results? For ping, yes maybe I should assume that, but what about grep? Grep isn't officially supported by the organization so...

I feel like I'm wasting my time writing instructions for simple tasks, but I also feel that I have to write as I though a monkey is the intended audience. I hate to say it, but it's the godawful truth, that there are too many people in IT that can only read-and-do.

Re:Documentation vs Tutorial (1)

Anonymous Coward | about a year ago | (#44752021)

One problem I encounter all the time is what level of competence should be assumed?

You've asked the only question that really matters, not only in terms of documentation, but all writing:

Know your audience.

Trying to write one-size-fits-all documentation is as futile as coming up with the single one true programming language. It ain't gonna happen.

Re:Documentation vs Tutorial (2)

Shavano (2541114) | about a year ago | (#44752549)

You don't write the ping documentation yourself. You refer to it in the system reference manual. Somebody already wrote acceptable documentation for ping. You should study the ping man entry in, for example, the BSD user manual to see one way to write intelligble, useful documentation.

If you're advising the user to "try ping host xyz" you need to explain why and what to do if it returns the expected or unexpected results and what conclusions he can draw from them.

Wikis are better than nothing (1)

im_thatoneguy (819432) | about a year ago | (#44751643)

I think one thing the author misses is that sometimes something, even something bad is better than nothing. While a wiki certainly can't replace a professional technical writer devoting a full time job to writing documentation--most of the time your choices are between nothing and something unreliable. In the case of documentation I would rather have unreliable information than absolutely nothing at all. With nothing at all often you will have to scour google for an inkling of a hint. Also wikis on languages like PHP offer up if not corrections at least lots of different examples of usage.

Say what you want but Stack Overflow is an amazing resource and essentially a wiki.

Stack Overflow (4, Informative)

EMB Numbers (934125) | about a year ago | (#44751773)

In my opinion, Stack Overflow is most often the blind leading the blind. There will be 20 wrong answers, 10 answers to the wrong question, 2 suboptimal solutions, and if you are in luck there will be 1 good solution. Now, tell me which is which. It seems to me that the good answer is almost always buried under crap.

Stack overflow questions are often badly stated and difficult to find with more correct search terms. If you don't even know the search terms, the site is useless.

There have been a few times when stack overflow saved me a lot of time. There have been many times when stack overflow has been a pointless time sink.

Re:Stack Overflow (2)

timeOday (582209) | about a year ago | (#44751825)

Well, I am going to defend Stack Overflow here, because I think it fills a very useful niche, which is "what is the best way to do X." There is no way that a "single-source" documentation, such as the API documentation or a book, can foresee all those specific questions. I do not go to stackoverflow to search for information, but very often when I use google to search, stackoverflow has the first useful information. As opposed to a straight wiki, what makes it useful is the (slashdot-like) moderation system.

Re:Stack Overflow (4, Informative)

real-modo (1460457) | about a year ago | (#44752173)

Well, I am going to defend Stack Overflow here, because I think it fills a very useful niche, which is "what is the best way to do X."

closed as not constructive by XxxxxX Sep 29 '11 at 13:29

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.

Re:Stack Overflow (4, Insightful)

PRMan (959735) | about a year ago | (#44751999)

Um, that's why people VOTE on the correct answer. One of the top 2 answers is virtually ALWAYS the correct answer (usually 2 ways of solving the same problem that you can choose from).

Re:Stack Overflow (1)

EMB Numbers (934125) | about a year ago | (#44752017)

The blind leading the blind. People who can't tell good answers from bad upvote bad answers. Try searching for some topic that you know a lot about and see what I mean.

Re:Stack Overflow (3, Insightful)

Anonymous Coward | about a year ago | (#44752197)

People who can't tell good answers from bad upvote bad answers.

Same thing happens here. This is how your previous post got modded up.

Re:Stack Overflow (0)

Anonymous Coward | about a year ago | (#44752471)

Sounds like someone couldn't get an answer accepted.

Re:Stack Overflow (3, Insightful)

snowraver1 (1052510) | about a year ago | (#44752155)

Sometimes when you are out of ideas, even a wrong idea can be a help.

Re:Stack Overflow (2)

turbidostato (878842) | about a year ago | (#44752281)

"There will be 20 wrong answers, 10 answers to the wrong question, 2 suboptimal solutions, and if you are in luck there will be 1 good solution. Now, tell me which is which."

The one that makes sense, of course.

If you can't see what the proper solution is at a glance, then Stack Overflow may seem that it's for you but, believe me, it's not.

Re:Wikis are better than nothing (1)

turbidostato (878842) | about a year ago | (#44752267)

"I would rather have unreliable information than absolutely nothing at all."

Quite extrange. I certainly would prefer absolutly nothing at all than unreliable information. Incomplete, vague? That's better than nothing but, unreliable? No thanks.

With no documentation at least I know where I stand but what's good about learning, say, that an API call will return 0 on sucess... well, or maybe it's 1 despite what the documentation says, who knows?

Re:Wikis are better than nothing (-1)

Anonymous Coward | about a year ago | (#44752791)

All information is unreliable, you nitwit. That doesn't mean it's all useless. Some of it will probably be close to, if not fully, right.
If you can't make use of Stack Overflow then you're probably not capable of figuring things out on your own either.

Re:Wikis are better than nothing (1)

lahosken (24108) | about a year ago | (#44752301)

Yeah. I'm a professional tech writer, proud of my skills. But in plenty of cases, source-code-with-docstrings is enough.

I hope someone wouldn't hide away these rough forms of documentation, waiting on some exquisitely-crafted docs that they might never get around to writing. I like what he's saying about organization, keeping in mind how someone's going to learn this stuff. But I think he's setting a high bar.

Any tool can't be the right tool (0)

Anonymous Coward | about a year ago | (#44751651)

In other news a screwdriver is not the best hammer, it turns out.

Re:Any tool can't be the right tool (1)

ArcadeNut (85398) | about a year ago | (#44751719)

Maybe not the way you use it....

Um, no (3, Insightful)

grasshoppa (657393) | about a year ago | (#44751653)

From TFA: The purpose of technical documentation is to take someone who has never seen your project, teach them to be an expert user of it, and support them once they become an expert.

No. Experts in their field shouldn't need to be taught how to understand your system; that's part of being an expert ( or indeed, even a professional ). All documentation should be doing is explaining the sticky bits and providing details and/or examples ( whichever is relevant ).

Just my opinion of course. But having stepped in to countless networks/codebases, I can tell you that I just get annoyed when the documentation gets in the way of the information I need to complete my job.

Re:Um, no (0)

Anonymous Coward | about a year ago | (#44751709)

But having stepped in to countless networks/codebases, I can tell you that I just get annoyed when the documentation gets in the way of the information I need to complete my job.

Sounds like those documentation that get in your way are not properly done. Basically the author's premise.

I do agree with your point though, an expert technical documentation does not make. But we're probably just splitting hairs, to some pointy haired boss somewhere, as long as a new developer can read docs and get going to be productive, they may consider them "expert" enough...

Re:Um, no (1)

Jay Vollmer (2882139) | about a year ago | (#44751815)

Um, yes, but...

Good documentation needs to be able to walk the line between being good enough and exhaustive. Nobody wants to spend a lot of time reading what they would consider pointless supportive text, but sometimes this explanatory thread is the best way to communicate the ideas involved. I'm a former high school teacher who has discovered that I love technical writing. I think that every teacher will agree that different people learn in different ways and through different modalities. I've been writing technical documentation for many years now, and I've always had the most success when I approach each topic explaining it in a way where I present the important 'get out of my way' details for those who aren't helped by supportive text, but also with these features tied together with an explanatory thread for those who are helped by this approach.

Re:Um, no (1)

Anubis IV (1279820) | about a year ago | (#44751929)

I've found that it's useful to have a bit of A and a bit of B, since they need not be mutually exclusive, and I think that's what the author was getting at.

If you're approaching a massive codebase, most people need a mental framework to operate within, so have a few documents that lay out the high-level stuff, explain them in general terms, and provide a bit of thinking behind some of the big-level decisions that went into them can be extremely useful to both experts and novices.

As you said, however, no one likes it when the documentation gets in the way, so you really need to have quick reference parts that can provide bullet point answers while going light on the text. Of course, you can also have paragraphs to walk people through examples, philosophies, architectures, or whatever else, but those should be in addition to and clearly delineated from the quick reference portions of the documentation.

Basically, the key is to keep the documentation accessible to everyone. Going too far in one direction to the exclusion of the other is a bad thing, but it's quite possible to write documentation that is both brief enough in the important parts that an expert in the field can get up to speed quickly, as well as educational enough that a non-expert can become an expert in using the software. It may involve having separate sections to your documentation, or else having a quick summary at the top of each section with education details underneath, but it's very doable.

Re:Um, no (0)

Anonymous Coward | about a year ago | (#44751939)

Experts in their field shouldn't need to be taught how to understand your system; that's part of being an expert ( or indeed, even a professional ).

And thus showeth typical tunnel vision. How do you suppose those people get to be experts in the first place? You gloss over that, when it's right in the bit you quoted.

Which sadly is far from uncommon in the software world. There are even really big projects, used by bloody everybody, that think that merely having a doxygen dependency substitutes for writing documentation. Because now you have all the function headers nicely printed in five additional formats... but still no idea what it all does, nevermind how it can possibly work together. Thus I could contend that the common case is actually worse than TFA presupposes, as it assumes someone has tried to write meaningful documentation at all. Yes, there's a lot of failing in that field. More still don't even try.

Xorg comes to mind--and it's a reason people try and reinvent the wheel, like that horrible d-bus botch or the various opaque configuration databases where a reasonably functional network-independent (instead of -unaware) and a both auto- and hand-manageable database already existed. It's also a reason why they keep on failing with their own architecture and why their rewrite from scratch will have the same ailments in the long term. They still haven't figured out how to manage a long-running project: Useful documentation.

All documentation should be doing is explaining the sticky bits and providing details and/or examples ( whichever is relevant ).

It's entirely possibly to provide "details and/or examples" that are perfectly useless except in a few corner cases. That makes the "sticky bits" be a complete lack of coherence, of an overview of what parts there are and how they fit together, and thus the documentation be a part of the problem, not of the solution. Nice consulting job there, boyo.

Just my opinion of course. But having stepped in to countless networks/codebases, I can tell you that I just get annoyed when the documentation gets in the way of the information I need to complete my job.

Yet you have no idea what it means for documentation to be both a thorough introduction and a meaningful reference. The latter means that you can quickly find the relevant bits to your situation, but it doesn't mean it only contains the stuff you really need right now. What you effectively require is the minimal set of all the problems *you* might require, in order of appearance, and that requires the shipper to have a functional crystal ball.

Re:Um, yes (0)

Anonymous Coward | about a year ago | (#44751979)

For an API there's probably 90% that is almost never used in day to day operations. It's either there as infrastructure supporting the framework or is there for use in rare corner cases. Thus an example goes a long way in showing typical usage of how these things fit together. Same goes for all those man pages with long lists of arguments, when in reality almost everyone always runs that particular command with the arguments -Duv for most practical scenarios. If done right, the technical specs+practical examples, you should be able to jump to either one without the other being "in the way". You do know how to use your scroll wheel right?

Without practical usage, it's kinda like getting an assemble-yourself -plywood-furniture with all the pieces and screws, but without the instructions that show you how to put it together. Yes, you could argue that someone could manage to get it together without those instructions, but it will be much more difficult, and they will likely do things wrong. Just as when using APIs sometimes, people find ways to get it done, but without knowledge of some of the nuances of the framework they might be doing something wrong. This is often the case with someone rolling their own encryption, where someone gets something working but it is insecure because they missed one little nuance. If you can read the RFC's and manage to get something together, that alone is impressive, but maybe they didn't know they should also read the entire article on generating key materials properly and thus the whole thing is unapparently insecure.

Re:Um, yes (2)

real-modo (1460457) | about a year ago | (#44752249)

Yeah, this is one of the big annoyances with *nix man(1) pages.

Between "Name" and "Synopsis", they're all missing the "Typical usage examples" section. I shudder to think how much time has been wasted through this poor design choice.

Re:Um, no (1)

Tsu Dho Nimh (663417) | about a year ago | (#44752199)

From TFA: The purpose of technical documentation is to take someone who has never seen your project, teach them to be an expert user of it, and support them once they become an expert.

Definitely NO, and even HELL NO! It's to make it possible for them to use the product at the level they were hired to use it at, or for the purpose they bought it for. My auto's user manual is a USER manual, not a service manual and not an automotive engineering textbook.

Re:Um, no (0)

Anonymous Coward | about a year ago | (#44752363)

From TFA:

You don’t need to explain things from first principles. Try to put yourself in the shoes of your users.

If your users are experts then tailor your documentation accordingly, but it still is necessary to provide background and high level ideas. If documentation is "getting in your way" - learn to use the search button? While the rest of us less gifted experts try to make some high level sense of what the code is about. And then we can get to the sticky bits and learn why they are sticky.

Re:Um, no (4, Insightful)

murdocj (543661) | about a year ago | (#44752395)

No. An expert may be an expert in an area, but until he's familiar with your code, he's not an expert in your system. I've spent way to much time deciphering code where a single sentence explaining what the hell the code was doing would have saved time. If you had enough time to write the system, you have enough time to document it. And if it's hard to document, that's a hint that it's a crappy system.

Re:Um, no (2)

DuckDodgers (541817) | about a year ago | (#44752587)

I write extensively on the wiki at work. I can't teach someone else to be as good as I am at my job just by reading books. Outside of the rare incredibly intelligent person, for most learners at some point you have to try things for yourself in order to genuinely understand them.

What I am trying to do is provide a Howto for every task I do routinely. I've got a page of links in alphabetical order with duplicates (i.e. "Database Setup" and "PostgreSQL Setup" both take you to the same page.) Each wiki page is in this form "Step 1: pre-requisites. Your computer must be on the office wired network or connected to the VPN." "Step 2: You must have the following programs installed." "Step 3: Open.... and type or paste the following... " "Step 4: In step 3, if the result was X, go to Step 5. Otherwise, go to step 6."

The goal is to make it so a tenth grader with basic computer skills and reading comprehension can handle all of the mundane tasks and I can be left alone to work on the more advanced projects. So far, no luck. If anything breaks, it's easier to contact me than try to fix it on your own. That's fine right until I turn in my two weeks' notice... which happens tomorrow. I used to worry that nobody else in IT understands what's happening in sys-admin or network-admin roles. But I spent the last three years putting a step-by-step guide for just about everything I can think of down, and asking and later begging people to try it out and report errors. At this point I don't care any more. They want to test my instructions after I am no longer available to fix errors, that's their problem.

Re:Um, no (2)

Shavano (2541114) | about a year ago | (#44752599)

Seriously, you ARE the problem. You're arrogant and fucking lazy.

Fuck the users if they don't already know everything there is to know about everything. They should already know how to use my code even thought I just wrote it and it's novel and interesting and they should be honored just to have the privilege of using my code. Who do they think they are to ask what it's for or how to use it or how it handles errors?

Sigh (0)

Anonymous Coward | about a year ago | (#44751669)

Programmer Steve Losh has written a lengthy explanation. . .

And we're done.

Examples Examples Examples Examples (0)

Anonymous Coward | about a year ago | (#44751679)

Provide that in addition to docstrings, and you will make everyone satisfied.

I don't get it :p (1, Insightful)

Anonymous Coward | about a year ago | (#44751691)

API documentation is like the user’s manual of a car. When something goes wrong and you need to replace a tire it’s a godsend.

Great! That's exactly what API documentation is for.

But if you’re learning to drive it’s not going to help you because people don’t learn by reading alphabetized lists of disconnected information

If you want to learn to program you want to read tutorials not the API documentation...

Reference manual (0)

Anonymous Coward | about a year ago | (#44751725)

Most documentation comes in the form of a reference manual for good reason: It is written for advanced users who already know the concepts and need to know the details. If you don't know the concepts, you're the target audience of tutorials. Some people need a tutorial, but all people eventually need a reference manual. It's the more important piece of documentation.

Re:Reference manual (1)

hedwards (940851) | about a year ago | (#44751855)

Some people? Unless the developer has gone out of his way to make the basics self explanatory, nobody is going to become an advanced user without one. Unless of course your program is the only one that does what it does.

I was screwing around with Kdenlive a couple days ago, and it completely lacks any intuitive way of cutting files up. You can save zones, but I have yet to find any corresponding restore function. And there isn't any obvious way of cutting sections of a clip out other than just the first clip you do.

There presumably is a way of doing it, but without proper documentation a person is never going to figure it out. I haven't read the documentation yet, so I don't know if that's going to help, but good luck caring enough about the software to get to the point where tutorials aren't mandatory.

As a tech writer of decades (0)

Anonymous Coward | about a year ago | (#44751727)

Thanks for pointing out what we've been telling developers for as long as there have been tech writers.

In other words... (1, Redundant)

vuke69 (450194) | about a year ago | (#44751729)

...the author doesn't understand what documentation is supposed to be used for.

Driver's Manual (0)

Anonymous Coward | about a year ago | (#44751731)

Am I the only one who enjoys reading the entire owners manual when you buy a new car?

Re:Driver's Manual (1)

dfsmith (960400) | about a year ago | (#44751801)

My last owner's manual was about 400 pages; but contained only about 10 pages of useful information.

Re:Driver's Manual (3, Insightful)

m00sh (2538182) | about a year ago | (#44752097)

My last owner's manual was about 400 pages; but contained only about 10 pages of useful information.

10 pages of useful information to you maybe. Other people will find some other 10 pages useful.

My mathematics textbook is 600 pages but there is only 1 page with the information that I need to solve a problem. Doesn't mean the book has only 1 page of useful information.

Re:Driver's Manual (1)

dfsmith (960400) | about a year ago | (#44752265)

My mathematics textbook is 600 pages but there is only 1 page with the information that I need to solve a problem. Doesn't mean the book has only 1 page of useful information.

Wow! Did your textbook contain 599 pages of "this equation is not designed to be used in the rain" type of legaleze? B-)

About the only thing worse than car owner manuals is car baby seat installation manuals. These are almost impossible to read because the disclaimers are so thick one can't even find the instructions supposedly within them. There are more red-circle-prohibitions than how-to diagrams!

The web and hyper text are a challenge (5, Insightful)

EMB Numbers (934125) | about a year ago | (#44751733)

As an author of three successful dead-tree programming books, I have a few observations.

1) I use the electronic versions myself because of easy search (better than an index) and copy/paste.
2) In book format, it's possible to lead a reader through topics in a sensible order that builds on prior topics.
3) The challenge with electronic/on-line documentation is that there is no expectation that readers will approach the material in any particular order. Readers type a search term into google and up pops a page or two of documentation. How can the author make safe assumptions about the definitions of terms and prior conceptual knowledge the reader will have? Adding links to the definitions of terms and links to chapter oriented conceptual documentation doesn't usually help because readers are impatient, and there is no good place in the middle of the documentation to start.
4) Many readers don't know the terms to type into google and therefore aren't lead to the relevant conceptual documentation even if they would have read it had they known.

Re:The web and hyper text are a challenge (1)

hedwards (940851) | about a year ago | (#44751865)

It's harder, but you can give them the prerequisites at the top of the article along with the relevant page numbers. With dead tree manuals people could always skip the background information. And with manuals that's more likely than with novels.

Re:The web and hyper text are a challenge (1)

Anonymous Coward | about a year ago | (#44752095)

The challenge with electronic/on-line documentation is that there is no expectation that readers will approach the material in any particular order.

This challenge was addressed about 23 years ago by Tim Berners-Lee. He invented a system whereby one can productively investigate written material in an unordered manner. You can check out successful [wikipedia.org] manifestations of this concept on a system called the Internet.

The belief that things are best presented in a one dimensional, book-like fashion is writer nostalgia and publisher business model. Real learning is discontinuous, which is why usable books have a comprehensive table of contents and an elaborate index, at least. Real teachers never present textbooks in a linear manner; they must always isolate the parts that need to be taught at any given moment, because real learning in real schools with real students demands this.

The effort spent on coercing knowledge into a one dimensional format is wasted. That effort is better spent discovering where specific knowledge fits in the unbounded, demonstrably non-linear network of knowledge and conveying these relationships in a usable manner.

Re:The web and hyper text are a challenge (2)

EMB Numbers (934125) | about a year ago | (#44752243)

As a university instructor, I disagree. Many subjects are presentable in sensible sequence with knowledge neatly building on prior knowledge. The entire curriculum is created with prerequisite and co-requisite courses. Attempting a 400 level class without having mastered the 100 level course content is a recipe for pointless struggle.

Wikipedia is a great resource. It's articles are self contained and generally rely only on general knowledge. Wikipedia is not a good source for delving deep into subjects.

Having said that, I use wikipedia extensively. There is almost an entire Computer Science undergraduate curriculum in there. t still requires a guide. There are still sensible paths through the information. Here is a great example: http://en.wikipedia.org/wiki/Fibonacci_heap [wikipedia.org] In the context of a Data Structures course, that is a great page. What benefit would that page provide to somebody who has never programmed and doesn't know what a data structure is? You can follow links to http://en.wikipedia.org/wiki/Heap_(data_structure) [wikipedia.org] and then http://en.wikipedia.org/wiki/Data_structure [wikipedia.org] and then you are directed to dead-tree textbooks that explain the topics in a sensible sequence.

Re:The web and hyper text are a challenge (2)

Shavano (2541114) | about a year ago | (#44752623)

Table of contents.

blurred lines (1)

globaljustin (574257) | about a year ago | (#44751739)

I like seeing this alot:

documentation should be used to teach, not to dump excessive amounts of unstructured information onto a user

That's it in a thesis statement.

What does 'documentation' or a 'user manual' that **teaches** not dumps random data actually look like???

Complexity is the problem, and it causes blurred lines in areas that in a simpler technical area (with less uncertainty), say auto repair, would not be uncertain.

Computer programs, languages, API's, etc are insanely complex compared to a radio or engine. The parameters and variables are way off the scale in comparison.

Another way to say it is, even on the 'strict' end, in computing there are too many ways to do everything.

A second problem is time. Specifically time in relation to the development cycle.

A manual for a '68 Mustang will always be accurate and usable as long as '68 Mustangs exist.

A complete guide to HTML, CSS, and Dreamweaver...well that can become obsolete in 2 years b/c of changes in the industry. What good is a tome on CSS 2 when CSS 3 becomes standard? It filters down through the whole development stack.

1. Complexity
2. Time

These things cause making a proper 'user manual' that teaches the user like the best user manuals or instructions for other things we've seen.

That's the thing, us tech-minded people know what a good 'user manual' or 'FAQ' or 'help page' looks like when we see it.

The challenge for developers is to integrate educational concepts to mitigate the challenges of the complexity and speed of the industry provide.

We need teachers who can code...we need *women* who can code...

To get that, we need to learn to admit when we *don't know* exactly what we are doing and fess up to the fact that much of computer developmenet these days is done by trial and error!

I don't like it, but we have to accept it to change a whole industry.

Programmer discovers tech writing - Film at 11 (-1)

Anonymous Coward | about a year ago | (#44751751)

Wow.

TFA is stupid and wrong because I say so (0)

Anonymous Coward | about a year ago | (#44751765)

TFA sez:

But all that is irrelevant because aside from Wikipedia itself and video game wikis, they don’t fucking work. ...wait, what? So, aside from the largest wiki, and indeed, possibly the largest single repository of human knowledge EVER, wikis don't work? Because of your silly driving lesson strawman argument, too pedantic to repost here?

Yeah.... I really don't want to read *your* technical documentation now.

A common language (3, Insightful)

jackb_guppy (204733) | about a year ago | (#44751771)

The article misses something critial - the use of common language.

The biggests example of this is HIS use of "user". A "user" for all my time in this business is the person sitting in front of the computer using the software to preform a business funtion... not programming a business function.

This leads to second issue a developer is person that uses an embedded function written by another developer - generally with a higher skill or at least akill peaked before the new developerl. That developer is trying to come up to speed about cause and effect of using a given piece of code and trusting the original developer actual did his job right.

How can you trust a person that says what documentation is to be, that cannot teach it following his own rules? The first rule of any teaching is placing terms that you are going to be using, to teach the others what you mean. You see this legal documents to prevent confussion of common terms being used in a more defined or limited manor.

Re:A common language (2)

PPH (736903) | about a year ago | (#44751813)

peaked before the new developerl.

Freudian slip much?

Re:A common language (0)

Anonymous Coward | about a year ago | (#44752023)

A programmer using a library is a user of that library. The person programming a piece of software is not the end-user of the software being written, but she is still a user.

Life feeds on life
feeds on life
feeds on life ...

end user is on top of the food chain, is all.

His advice for wikis is what I've saying for years (-1)

Anonymous Coward | about a year ago | (#44751803)

to Windows users. You can guess how far that's gotten me!

But . . . er, uh . . . without a wiki, just how do I get a bunch of tech-weenies like myself to create documentation if I can't afford the services of a professional technical writer? M$-Sharepoint? Oh, wait - I know: we can go back to the "good old days" when policies and procedures were part of an organization's oral history.

At the end of the day, Mr. Losh may be prepared to speak to the documentation situation where he's at and where he's been, but he still doesn't know diddly about where I'm at and what I'm dealing with. I recommend readers assign the appropriate credence to Mr. Losh's assertions.

Re:His advice for wikis is what I've saying for ye (1)

Anonymous Coward | about a year ago | (#44752499)

But . . . er, uh . . . without a wiki, just how do I get a bunch of tech-weenies like myself to create documentation if I can't afford the services of a professional technical writer? M$-Sharepoint? Oh, wait - I know: we can go back to the "good old days" when policies and procedures were part of an organization's oral history.

The same way your managers answered the question "just how do I get a bunch of suits to create a business if I can't afford the services of professional tech-weenies who can write actual code? Excel Macros?"

When you have a business need for a professional tech writer: hire one. (Even if you do it on contract. Chances are your developers will learn a fair bit too, because they have to explain things to the tech writer well enough for the tech writer to get started. You'll wind up with a better product, and you'll probably find some bugs you had no idea existed.)

Worst car analogy ever (2)

simishag (744368) | about a year ago | (#44751901)

Since when did the car owner's manual teach the owner how to drive?

I work for an airline. We train pilots on our aircraft and our procedures. We certainly do not teach them how to fly.

The rules (0)

Anonymous Coward | about a year ago | (#44751969)

Document everything that you would have liked to have seen / needed to know if you'd suddenly been placed on the project at short notice.

Document your code for other developers : a single sentence is often enough to explain what a block of code does.

Don't make the readers of your code run every line in their heads - if the code works then they can read the documentation quicker.

Documentation must be maintained as dilligently as the code (nothing worse than wrong / obsolete documentation).

If you had to really think about it, document it.

Don't add unnecessary documentation (i++ // incerment i by 1)

If you believe that "all code is self documenting", go and work somewhere else, because at 3.a.m in the morning the developers trying to get your shitty code working will probably want to do you some harm.

truer words have never been written (1)

Gravis Zero (934156) | about a year ago | (#44751977)

developers, take notice because these words ring true! while there may be some quibbles among people about details in this article, there are two things that have are universal truths.

auto-generated documentation is worse than useless: it lets maintainers fool themselves into thinking they have documentation.
...
[crowd written] Wikis are an abomination. They are the worst form of “documentation”.

you have no idea how many times i've heard developers tell me to read the documentation only to find out it's just Doxygen generated with very sparse non-code text. it's a nightmare. "crowd" written wikis are terrible for code documentation, no question about it. however, privately written and maintained wikis can be a good editing tool for documentation.

if you want a good example of good documentation, check out the Qt documentation, it's has all the great things discussed, it's on the web, it's in a independent program and it has plugins that integrate it into IDEs.

*drops mic*

Back in my day... (1)

Anonymous Coward | about a year ago | (#44752057)

We wrote two documents for every program (of any significant length), a "user guide" and a "reference manual". That's in addition to the man page and the "usage" blurb if it was invoked with nonsensical arguments.

They fulfill two very different needs.

(now get off my lawn)

There's also something to be said for selling (2)

istartedi (132515) | about a year ago | (#44752079)

There's also something to be said for "sell, don't tell". I seem to recall that the Commodore 64 Programmer's Reference Manual was written as if they were enthusiastically pitching the product. For some reason, it was much easier to retain the information when the author gushed about it.

Wikis are not magical, but they are not bad (1)

gregmac (629064) | about a year ago | (#44752091)

I think the author's tirade against wikis is that many people use a wiki as a magical tool that allows them to forego writing documentation in the hopes it will suddenly appear, written by users that want to write documentation. This obviously isn't what typically happens.

However, I think wikis can be (and often are) a great format for documentation. The author(s) of the software should still be the primary and/or only contributors, but even so good wiki software serves to lower the barrier to writing documentation: creating/editing as simple as clicking edit, and you instantly see the results. You can link between pages, reducing duplication. Some software forces a hierarchy of pages, leading you to create things in a logical, structured way (of course, you can lead a horse to water...).

The key to this of course is that the person/people writing the software must write the bulk of the documentation (eg, like you would without the wiki as well). Don't allow random edits, or at least subject edits to a review process.If your project is big and successful, just as it lowers the barrier for you to write docs it may encourage others to contribute -- but don't rely on this.

Think of the wiki more like a publishing platform or format; not like a way to absolve yourself of the responsibility to write documentation.

Not all wikis are Wikipedia (2)

Idarubicin (579475) | about a year ago | (#44752129)

Reading the linked article, it is clear that this blogger is conflating two concepts: "wiki" and "let's leave a big blank space on the open interweb and hope that the magical crowdsourcing fairies will deliver us brilliant and complete documentation!"

To be honest, when I say that "not all wikis are Wikipedia", I'm still being a bit unfair to Wikipedia. Even that project - which puts, for all practical purposes, zero dollars into content creation - still has recognized that at least some regulation is a good thing, and that even if you give everyone read access, you don't have to give everyone write access. Further, with their Pending Changes [wikipedia.org] process, not all changes to a page go live immediately--for certain pages a reviewer has to approve edits before they appear on the outward-facing Wikipedia article.

A private company or organization can appoint gatekeepers to control who can edit what, and who can approve changes. Moreover, they can pay people to edit documentation, and can impose requirements and standards across the project. Wiki software can provide a lot of 'back-end' support for creating complex, multi-page, potentially multi-media documents, using markup that is relatively straightforward to learn. It can provide clear, complete records of who changed what, when--and who is responsible for breaking stuff.

Sure, waiting for people to randomly show up and write documentation, and then accepting everything they give you without any validation or quality control is a recipe for failure. But that's not the only way to use a wiki. Linus doesn't let just anyone check stuff into the kernel.

I too love reading great documentation (1)

gargleblast (683147) | about a year ago | (#44752151)

I love reading great documentation. When I have a question and the documentations explains the answer almost as if the author has magically anticipated my problem, I get a warm, fuzzy feeling inside.

I too love reading great documentation. Documentation that does not change the point of view twice. And then back again.

... documentations explains ... I’d like to say thanks to ... for proofreading this.

Documentation that was PROOFREAD by GOOD PROOFREADERS !!!

Re:I too love reading great documentation (1)

LinuxIsGarbage (1658307) | about a year ago | (#44752565)

I too like good documentation. I only dabble in programming, but when the language reference explains all options, complete with functional examples, it's good.

Where I work (manufacturing process automation maintenance) I like being able to take a complex problem that no one understands, figure it out, and document it so those after me can understand it.

what separates good documentation from bad? (1)

csumpi (2258986) | about a year ago | (#44752163)

up-to-date-ness

BD, DT, and wrote TFMs it'snot rocket surgery (2)

Tsu Dho Nimh (663417) | about a year ago | (#44752171)

I've been writing technical documents since the early 1970s.

You can't expect one piece of documentation to serve everyone ... it's like buying a "vehicle" and trying to use it to race, haul hogs, and climb Pikes Peak.

A - Ordinary users don't give a shit how the stuff works, they want it to do something for them ... tell them how to make whatever it is work as a tool for them. Run through the common use cases, screen by screen, showing them how to make the widget-smasher do it's thing.

Start with things the way they should work, then give them some basic troubleshooting, maintenance, etc.

B - Administrative users: They need all of "A", and how to handle the other users. Add, remove and monitor users.

Start with things the way they should work, then give them some basic troubleshooting, maintenance, etc. for the added functions.

C- Service techs, sysadmins, and those who will touch the sacred code: All of A and B (be reference to the appropriat4e manual or section thereof) and then feel free to pile on the technocrapobabble.

Each detailed explanation should start with a very brief "statement of purpose" ... when will this command be needed, or what does the bit of machine do. Why would you use it?

Then explain how to use it, and the expected results if you used it right, the expected results if you screwed up, and how to recover from an error.

========
You need to explain for each level of user what happens to a transaction, or data, or a part being manufactured, as it passes through the process or the proigram ... chronologically, what touches it and what is supposed to happen?

What will you see if there is a failure?

How do you recover from the failure?

It's not difficult, you just have to make sure that each level of user can get their task done efficiently.

Re:BD, DT, and wrote TFMs it'snot rocket surgery (1)

LinuxIsGarbage (1658307) | about a year ago | (#44752601)

Start with things the way they should work, then give them some basic troubleshooting, maintenance, etc. for the added functions.

Oh basic troubleshooting. I laugh sometimes at how basic some of the basic troubleshooting is "Problem: Display won't light up. Possible problem: No power supply Solution: Check power supply"

I find it even funnier calling tech support, for companies that we pay a lot for tech support contracts, only to have them read back the same page of the manual I'm looking at word for word.

Most FOSS documentation is abysmal (4, Interesting)

hduff (570443) | about a year ago | (#44752183)

That's how I got my entree into writing about Linux. Programmers are very smart, but not very eloquent and they are also very poor teachers.

There are any number of rules and guidelines for writing documentation, most of which are ignored since documentation is often the red-headed stepchild of the project.

Documentation should tell a story clearly and help the reader understand the 'why' and 'how' as well as the 'what'.

Documentation? Really? (1)

rueger (210566) | about a year ago | (#44752285)

I'm an end user, although one that likes mucking about in Linux, flashing a new OS on to my phone, and generally getting into the guts of whatever tech I'm using.

Maybe it's just because I'm old enough to remember trying to make early Linux distros work relying on Man pages, but "documentation" tends to be the last place that I look for answers. I still shudder to recall that understanding Man Page A required understanding Man page B required understanding Man page C..... I just wanted my modem to work!

The problem is that so much documentation is just too much for day to day needs. I don't want to understand the technical underpinnings of Android or Debian packages I just want to know how to make a problem go away. Simple questions require simple answers.

Instead I rely heavily on Google + Forums for probably 98% of my needs. I really need to have a very, very obscure problem to find that no-one has figured it out yet. (At which point I dutifully file a bug report)

Finally, am I alone in finding that whatever technical support docs are available on corporate sites are useless?

An excellent post, with one omission: pictures. (4, Interesting)

QilessQi (2044624) | about a year ago | (#44752307)

I produce a lot of documentation along with my coding, and the one thing that makes it palatable (even to me, re-reading it) are illustrations.

I'm not talking about UML class or activity diagrams, although those things are great where appropriate. It could be anything relevant to getting your point across, like a fragment of a database table showing sample data so people can visualize how a group of tables will work together. Screen grabs with arrows and circles.

My rule of thumb: if I ever find myself drawing a picture on a whiteboard as I'm explaining my module to someone, I immediately stop and take a picture of the diagram I just drew, and ASAP afterwards I turn that picture into an illustration in the user docs. Then next time I can just whip out the docs and point to the illustration.

Not documenting is a conscious technique (2)

WOOFYGOOFY (1334993) | about a year ago | (#44752401)

Not documenting is a more or less conscious technique developers and projects use to increase their market value. In those projects where the business model is consulting , you better believe that unless it's a public API , it's got zero documentation.

I know this is true. If software developers wanted to , they could write a nice book about how their source code works (as opposed to how their program works or how to write a plugin for their program).

They don't. This is not merely a case of being rushed for time or whatever. They don't want anyone else to understand it really. You control what only you understand- every developer knows this intuitively. Going to great pains to write a book-style learning aid to your actual code so that *just anyone* could take your place.. well... do I really need to finish that sentence?

Devs (don't) do it to so they can get some job security. Companies (don't ) do it to get consulting gigs. No one will admit that this is what's going on, but it is. I can hear the rebuttals already.. I can see the down-modding about to happen... go ahead.. flamebait me down. .. knock yourself out.

The closet analogy I can think of is magicians guarding their secrets. That worked very well for a long long time. The incentive was the same. If you give this away, if you make it understandable, you're going to be out of work. Slightly different dynamic, but you get the idea.

This is one of the product spaces we want to move into, but as you might imagine we have come to the conclusion that we have to move carefully, and even obliquely.

This is not exclusive to software engineering either. I know for a fact - which means i have multiple, full confessions, that mathematics teachers are far less clear than they could be wit their students. Some have said they do it to winnow out the weak. Others have admitted they do it to classes to students they don't like. They know it makes a huge difference, how you explain something- and that no one can accuse them of anything. That's basically a kind of power or force you can wield against and for people who please you or displease you.

Just sharing what I know.

Re:Not documenting is a conscious technique (0)

Anonymous Coward | about a year ago | (#44752461)

There are developers with good documentation skills, but most suck at writing user friendly documentation. It is a skill one acquires after many years of practice.

There are projects that purposely have shitty docs to drive consulting, but most suck because they lack the skill. Writing great documentation takes a lot of skill.

bah (1)

Charliemopps (1157495) | about a year ago | (#44752605)

Losh's advice for wikis is simple and straightforward: "They are bad and terrible. Do not use them."

With that quote right there he's lost all credibility.
A well maintained wiki with proofing, editors, publishers that has management on-board is about the best way to document anything. He seems to be referring to the often found, random wiki the local coders threw up for lack of anything better... yes, those are bad. But a well maintained one, that actually has official practices and peer review... Where you get a project to write or update something, and then someone else gets a project to edit it, and then the entire team peer reviews it before it goes to a "publisher" who then publishes it to the wiki officially is great.

In my job, published edits to our wiki documentation are something you can use for promotion, raises and even to get new positions. The "stars" at my company are the ones making the most published edits. And note, I say "published" edits. You can make all the edits you want but if they fail peer review you just wasted several hours so you'd better make sure they are worth-while and done well.

Not just computer science (2)

recrudescence (1383489) | about a year ago | (#44752717)

It is not the responsibility of the student to fix a broken lesson plan. For fuck’s sake, the entire point of having a teacher is that they know what the students need to learn and the students don’t!

This. I've lost count of the number of times as a medical student when I showed up in a pompous consultant's teaching session, (arranged with great difficulty, no less), and the first sentence was "So, what would you like me to teach you today?".
If I knew I'd have gone and read about it myself rather than waste time here with you, thank you very much you arrogant prick!

Re:Not just computer science (1)

sandbagger (654585) | about a year ago | (#44752757)

Well, actually that's a very good question to start a course. If the instructor doesn't know your level of knowledge is, is just plain common sense.

Who is the arrogant prick again?

Load More Comments
Slashdot Login

Need an Account?

Forgot your password?