CDC Glossary / Lexicon

This glossary is attached to a paper on CDC. Create, Divide, and Conquer (CDC) is a methodology for solving problems.

API: Application Programming Interface. A standards-based interface to a piece of software that exposes the software as a component.

Component: a discrete entity which contributes to the composition of another entity. In software, component has come to mean something very specific, in that a component is different from a class, object, or function. A software component characteristically has a limited interface, or connection points, and is expected to interact with the system only through the interface comprising those connection points. These interface points allow it to be wired into the larger work. Another characteristic of components is that they are re-usable in a wide variety of situations, as long as the use conforms to the interface. Specifically, software components do not have to relate to other objects through inheritance. A light bulb is a component: any light bulb that has the same voltage rating and the same base can plug into a certain socket. You can then swap out the light bulb for a completely different bulb, as long as the voltage rating and the base are of the same specification. The two bulbs can be of different manufacture, design, even physical principles. A compact fluorescent and an incandescent bulb can both be put into a standard lamp socket and will both produce light. A software component is usually implemented by having it be a separate unit of code. Since code units should be of a scale that one person can work on while maintaining focus, a component lends itself nicely to being a unit of work for human effort. The size, focus, and interchangeability of components make them the work unit of choice for CDC.

Create: Make something out of nothing.

Datum, Data: A datum is a single piece of information. The plural is data, so a collection of individual pieces are data. Data is a plural word, like "sheep," so correct usage is: "are these data recent?" and "the data are valid."

Gant Chart: a time/work analysis tool which shows items to be done on a linear time scale, with items that can be done in parallel shown in parallel, and items that depend on each other shown linearly, or laid out end-to-start. So if item B depends on item A, then the beginning of B is shown starting at the end of A. If item C depends on neither A nor B, then it can start anywhere, and specifically can proceed in parallel with A or B. A key feature of a Gant chart is that it can show critical paths. If starting item D depends on B and C being complete, then D is shown starting where both B and C end. So the amount of time required to get to the start of D is the *longer* time of either C or the sum of the time for A plus B. Which ever is longer, C or A+B, is considered the critical path.

Gedanken: thought-experiment. In a Gedanken, you run an experiment, but only in imagination. A Gedanken is typically then talked-through with other people, to validate it. So the result of the Gedanken is dependent on the validity of the logic you use, but they are useful for coming up with obvious faults.

Implement: to fulfill; to fill in the workings of; to make a working object from a specification.

Iterate: Repeat. In software, this means a control loop, such that the same process is repeated over and over, but each time, another datum (single element) is processed. Typically, iteration involves entering an algorithm with a collection of data, and one iterates by processing one datum at a time, and on each iteration, selecting a new datum, but otherwise performing the same steps on it.

Methodology: A body of methods used by a discipline. The study of a body of methods in a discipline. Here I use methodology to mean a body of methods, or a method of methods. In software, methodology is used almost synonymously with "process." Your process is your set of procedures, you workflow, your methods for getting from problem to solution. A complete process, or methodology, should address: stating the problem, determining solutions, dividing up the work, working methodically, evaluating the work, and communicating. Other methodologies used in software are: Waterfall, Incremental, RAD, XP, and so on. A mature methodology comes with a set of tools. CDC does not propose any new tools, but advocates using some of the many good tools that are extant. More importantly, mandating a toolset is a hallmark of top-down management styles, which CDC does not advocate. The individual responsible for creating specifications, components, systems, integration, or evaluation should use the tools that will work best for that individual, given the communication and collaboration needs of the other people the individual must collaborate with. CDC advocates that the scope of collaboration can be limited by dividing up the problem into areas of responsibility.

Modes of Thought: Synthetic, Analytic, Integrative, Associative, Creative, Deductive, Inductive, Holistic, Deterministic, Mechanistic, Critical.

Monolithic: A system that is not broken down into components can be called a monolith - something made of one block of material. However, unlike a stone statue, software is inherently systemic -- lots of little pieces interacting in a system. So upon examination, the monolith is made up of thousands to millions of individual code statements. Without some form of componentization, software ends up with the problem called "spaghetti code" -- lots and lots of connections and no distinct boundaries, even if boundaries exist in name.

Process. See Methodology.

Prototype: something that will behave like the final product, but is incomplete in some way; something that embodies the features of a class of things. Often this means that the prototype will fulfill the features that are under consideration, but be lacking in other features that a final product might have. A prototype car might be a one-of-a kind machine for demonstration or testing, that looks and performs like future mass-produced machines of the same name, but is impossibly expensive for individual sale due to its unique nature. In software, prototyping can mean a component is made to a limited set of specifications under consideration only, or it can mean a quick-and-dirty implementation to test just a small set of functions. In the 1990's the RAD (Rapid Application Development) methodology advocated building components piece-wise, so that the prototypes were built with a little more care, and then refined and refined until they became usable in production. CDC advocates both types of prototypes: quick-and-dirty prototypes to test wacky ideas, and incremental release prototypes of better quality which eventually become the production components.

Realize: 1) Make to happen in reality. (Also, "to begin to understand the existence of," but I don't use the word in that sense in this paper.)

Recurse, Recursion: To recurse is to come about to the same place in the path again. In software, this has a very specific meaning, which is that a function is entered again from within the function itself. Bottles of shampoo often have instructions that, if read a certain way, could imply infinite recursion: "Wash, rinse, repeat." Within a recipe or instruction, a step tells you to repeat the entire instruction. Programs avoid infinite recursion by inspecting some information that is passed into the function, and that will be changed before deciding whether to recurse again. Recursion is useful for processing tree-structured data, or composite structures. CDC uses the word recursion to imply that the structure of the problem space can be viewed as a tree. CDC declares that we solve problems with one methodology which breaks the problem space up into multiple, smaller problems, each of which can be solved by diving in and treating each smaller problem with the same methodology, as though each smaller problme were a fresh, brand new, stand-alone problem. So we recurse into the smaller problem, and then pop back up once we have made enough progress on the smaller problem that work on the larger, encompassing problem can proceed.

Standards: Standards are a wonderful thing; hegemony ... not so much.

Stub, Stub-out: to make the connections for a component available. A stub is a short piece of material. In plumbing, stubbing-out from a wall means to bring the piping system out as far as the last connector, so that another component, such as a sink, can be hung on the wall and connected to the stubs. In software, it means to make the function calls of the API available, though possibly with empty implementations.

Work-Unit; Functional-Unit: A Work-Unit is a measure of work that can be done together. A work-unit would be a product of a team working on one batch of output. The idea of the work-unit helps you define the things you will optimize on for dividing the work up -- time, space, resources, efficiency, economies of scale. For example, you might divide up the work of writing a software program along structural lines, say user interface, engine, and database, or functional lines, such as accounting, scheduling, and production. Or you might divide it by work-units, for example, Tom and Mary know how to write the scheduling piece, so they will do that, and it becomes a work-unit. A functional unit, either domain functional or architecturaly functional, puts the emphasis on making a work-unit that conforms to the domain and models reality somewhat.

Copyright © 2010 Laramie Crocker