Unless you have a software background, you’ve probably never heard of longtime Python coder Tim Peters.
In Zen of Python, he suggests 20 design principles including:
- Simple is better than complex.
- Complex is better than complicated.
How is “complex” better than “complicated”? After all, their dictionary definitions are similar and they are listed synonyms in the thesaurus:
- Complex – adj. not easy to understand or explain: not simple
- Complicated – adj. hard to understand, explain, or deal with
Education reformer Larry Cuban writes that complicated systems “assume expert and rational leaders, top-down planning, smooth implementation of policies, and a clock-like organization that runs smoothly.” Complex systems “are filled with hundreds of moving parts, scores of players of varied expertise and independence…missing a ‘mission control’ that runs all these different parts.” Roberto Poli, Research Professor at the University of Trento, Italy, wrote a similar analysis for The Cadmus Journal.
Complicated problems originate from causes that can be individually distinguished; they can be addressed piece-by-piece; for each input to the system there is a proportionate output; the relevant systems can be controlled and the problems they present admit permanent solutions. On the other hand, complex problems and systems result from networks of multiple interacting causes that cannot be individually distinguished; must be addressed as entire systems, that is they cannot be addressed in a piecemeal way.
Using Cuban’s and Poli’s definition, we can come up with some examples:
- Brain surgery? Complicated.
- Election and campaign reform? Complex.
- Designing and implementing an underground tunnel system? Complicated.
- Lowering the incidence of drug use in a low-income community? Complex.
This makes intuitive sense. However, from Cuban’s and Poli’s perspectives, complex isn’t necessarily better than complicated. In a complex system, there’s no central “mission control” to manage the moving parts, making the process more difficult.
I kept looking for definitions that would validate the Zen of Python. According to the Stack Exchange: Complexity is intrinsic. Something is complex if it involves a lot of [metaphorical] moving parts even when considered as a Platonic ideal. Complication is extrinsic. Something is complicated by external influences, or because of external influences.
Pedantically, something can be complex without being complicated, or complex because it is complicated. (Things are rarely complicated without also being complex.) Using this Stack Exchanges definition, we go back to our examples:
- Brain surgery? Complex.
- Election and campaign reform? Complicated.
- Designing and implementing an underground tunnel system? Complex.
- Lowering the incidence of drug use in a low-income community? Complicated.
The extrinsic forces which complicate a system are inherently harder to manage than the intrinsic ones. Extrinsic forces cannot be centrally controlled. Brain surgery, for example, is complex because it is intrinsically difficult. It would seem a skilled surgeon would find less difficulty performing brain surgery than a skilled policy-maker trying to reform elections. The extrinsic forces make the system or process much more complicated. By this definition, complex is better than complicated.
Words have immense power to change concepts and clarify conversations. However, this seems to be a situation where there isn’t clarity. Understanding if complex is better than complicated seems to be a complex question.
Or do I mean complicated?
This blog also appeared on Manage By Walking Around on June 26, 2014.