This is a glossary of terms as used in this essay. These do not necessarily have a standardized meaning to other people. Eric S. Raymond has compiled a massive and informative glossary[HackerDict] that rather surprisingly can pleasurably be read cover-to-cover once you can appreciate a fraction of it.
Slang for unknown-unknown. Problems that cannot presently even be conceptualized that will steal time away from the project and wreck the schedule.
The person or entity that gives you tasks. In some cases this may be the public at large.
The insertion of statements into a program on a strictly temporary basis that output information about the execution of the program for the purpose of debugging.
The practice of writing a program so that it can produce a configurable output log describing its execution.
A technique of top-down design and, importantly, of debugging that is the subdivision of a problem or a mystery into progressively smaller problems or mysteries.
Illusionary and often deceptive promises of software that is not yet for sale and, as often as not, will never materialize into anything solid.
The person who sets your tasks. In some cases, the user is the boss.
The people with whom you share loyalty to a common goal.
Big improvements that cost little.
The initiator of projects.
Objects that are no longer needed that hold memory.
A group of people organized for making money.
A group of people organized for making money.
A group of people you share cultural affinity and loyalty with.
The effect of being unable to find information you need because it is buried in too much other, less interesting information.
Actually time as measured by a clock on a wall, as opposed to CPU time.
The most important limitation in the performance of a system. A constriction that limits performance.
A unique piece of information from which all cached copies are derived that serves as the official definition of that data.
Memory can be said to be heap allocated whenever the mechanism for freeing it is complicated.
Allocated memory that no longer has any useful meaning.
A system for recycling garbage.
The unwanted collection of references to objects that prevents garbage collection (or a bug in the garbage collector or memory management system!) that causes the program to gradually increase its memory demands over time.
A style of programming emphasizing communication with the customer and automated testing.
To run out of a specific resource causing performance to degrade sharply rather than gradually.
Producing a feature before it is really known if that feature will be useful.
A design principle that seeks to keep things independent and decoupled by using interfaces that expose as little information as possible.
An programming style emphasizing the the management of state inside objects.
A language designed primarily for standardization rather than execution.
A loose, informal style of making diagrams consisting of boxes and arrows drawn between those boxes to show the relationships. This contrast with formal diagram methodologies, such as UML.
A language so popular as to be a de facto standard for its field, as French was for international diplomacy at one time.
An adjective describing a choice between spending money for software or writing it your self.
Work that requires little creativity and entails little risk. Mere work can be estimated easily.
A synonym for programming language that emphasizes the mathematical nature of programming language and their relative simplicity compared to natural languages.
A document meant to be the starting point of a technical discussion. A strawman may lead to a stickman, tinman, woodman, ironman, etc.
An informative document that is often meant to explain or sell a product or idea to an audience different than the programmers of that product or idea.