Back to The Honest Programmer

Manifesto

The Honest Programmer (otherwise known as Zen and the Art of Program Maintenance!) is an idea born of a group of Cambridge software engineers as a vehicle for our insights and opinions about the craft of software engineering.

The Honest Programmer should be an editted collection of essays discussing the pragmatic issues of getting software written and working rather, detailling the rules-of-thumb and guiding principles that we use in practice. I want to avoid the psychobabble prevalent in books on the methodology of software engineering, project management, etc., so it should be chatty and anecdotal in style with lots of punchy and incisive points. With a variety of authors it should present a broad church view rather than push any particular One True Way - there is rarely such a thing as The Right Answer!

Some Topics

Here is a seeding list of topics to start you thinking:
Languages
A quick comparative survey of the major programming languages, stressing their strengths and weaknesses as well as a very quick guide to getting started in that language. (A good programmer should be multilingual even if with a preferred main language).

Tools
Know a craftsman by his tools. A survey of the various types of programming tools with quick summaries of important capabilities and some pointers to when to use them and when not to. This can cover everything from editors, browsers, debuggers through Unix shell tools to GUI designers and scripting languages.

Design & Implementation
This is a pivotal topic being one of the ways a real craftsman shines. I envisage a blend of guiding principles (such as Borris's ZOM - Zero-One-Many, Eddy's Accidence vs. Essence), anecdotes, paradigms, visualisation, and examples. Should include discussion of the lifecycle of a project and future-proofing the initial design. Obviously more than a nod towards Zen and the Art of Program Maintanence!

Testing & Fixing
Another pivotal topic as the more devious bugs require real insight to track down. Everything from what to think of when building a test-suite (and how to manage it) to how to debug real-time random failures with limited tracing facilities. But also warn against placing too much faith in testing.

Documentation
Start with a survey of text markup languages from roff to TeX and SGML/HTML, as well as brief mention of word processors. Something on literate programming and the distinction between self-documenting code and undocumented code. Also to include advice on writing user manuals, technical reports, grant proposals, etc! Style is everything here.

Management and Marketing
Few programmers are lucky enough not to have to worry about keeping management happy. Some tips on how to explain technical problems to idiots (no I mean managers!). But more seriously: something on project planning, utilising resources, avoiding synchronisation delays, etc. Advice on presentation to nontechnical people is important - you can't blame the marketting men for cocking up a sale if you didn't explain it to them properly. Can also include comments on dealing with customers (particularly the thorny issue of how to get clear requirements).

Genres of code
Modern computers have now pervaded most areas of human endeavour. This section should survey the various categories of programming required from numerical sci/eng programming, real-time hardware control, artificial intelligence, database, through to financial and business data processing. The main emphasis here is how the various demands of these applications affect the algorithms chosen, the development language and tools, and the overall process.

Scales of development
Different approaches are required for a quick 100-line utility that will never need to be changed, to the million-plus-line major program worked on by many people over many years. To include advice on appropriate and inappropriate methods and tools.

Algorithms
A quick survey of the algorithms that get used in 90% of real applications. OK, that's not much more than a couple of sorts and searches - but I'm after a practical toolset. More a reference list than a reference. To include also: discussion of flexible versus fast implementation, generalisations of algorithms (so you need remember fewer!).

Resource location
One major skill a programmer needs is to be able to find resources for a project: from finding an algorithm from the academic literature, to getting some public domain tools to do part of the job to using discussion groups such as usenet news or DevCon. Can also include tips on acquiring hardware and finding suitable people to take on.

A collection of such URLs is available on the Honest Programmer home page. Please mail zen@chaos.org.uk with any additions.


Back to The Honest Programmer / Mail the Editor
© Dave Lloyd. Last updated 23 Nov 1996. / dave@occl-cam.demon.co.uk