01. The Tar Pit

Dated Oct 1, 1974; last modified on Sun, 14 Mar 2021

The fiercer the struggle, the more entangling the tar, and no beast is so strong or so skillful but that he ultimately sinks.

The Programming Systems Product

How do 2 programmers in a remodeled garage build an important program that surpasses the best efforts of large teams?

A Program

Garage duos typically build a program: complete in itself, ready to be run by the author on the system on which it was developed.

A Programming Product

A programming product is a program that can be run, tested, repaired, and extended by anybody:

  • Usable in many operating environments, for many sets of data.
  • The range and form of inputs are generalized as much as reasonably possible
  • Thoroughly tested in order to be depended upon
  • Thoroughly documented so that anyone may use it, fix it, and extend it.

Costs at least 3x a debugged program with the same function.

A Programming System

A program becomes a component in a programming system: a collection of interacting programs coordinated in function and disciplined in format

  • Every input and output conforms in syntax and semantics with precisely defined interfaces.
  • Uses only a prescribed budget of resources - memory space, input-output devices, computer time.
  • Tested with other system components, in all expected combinations.

Costs at least 3x a stand-alone program of the same function.

A Programming Systems Product

Costs 9x as much. Is the truly useful object, the intended product of most system programming efforts.

The Joys of the Craft

  • The sheer joy of making things.
  • The pleasure of making things that are useful to other people.
  • Fascination of orchestrating complex objects playing out design principles.
  • Always learning from the nonrepeating nature of the task.
  • Delight of working in such a tractable medium - producing visible outputs separate from the construct itself, e.g. printouts, pictures, sounds, robotic movement.

The Woes of the Craft

  • One must perform perfectly, i.e. program the requirement to perfection.
  • Other people set one’s objectives, provide one’s resources, and furnish one’s information.
  • Dependence on other people’s programs, which are often maldesigned, poorly implemented, incompletely delivered (no source code or test cases), and poorly documented.
  • While designing grand concepts is fun, finding nitty little bugs is just work.
    • Testing drags on. The last difficult bugs take more time to find than the first.
  • The product appears to be obsolete upon (or before) completion.
    • The obsolescence of an implementation must be measured against other existing implementations, not against unrealized concepts.
    • The challenge and the mission are to find real solutions to real problems on actual schedules with available resources.