Eastern philosophy has complemented computer science since its earliest days. Today, we still hold programming dojos, we still call search engine skills Google-fu, we still employ web ninjas, and we still write Zen koans about software engineering. In recent times, investigating the tao in things has become very popular:
a brief introduction to taoism
As usual, Wikipedia provides a succinct and accurate summary of the topic (paraphrased):
Taoism is a philosophical, ethical or religious tradition of Chinese origin that emphasises living in harmony with the Tao. In Taoism, Tao denotes something that is both the source of, and the force behind, everything that exists.
The icon most commonly associated with the philosophy is the yin-yang symbol:
It is also known as the taijitu, literally supreme ultimate diagram, so called because it illustrates a profound Taoist principle: it reflects the nature of every thing that exists, specifically that all things are the result of a combination of extremes. The symbol depicts yin in black and yang in white, which are two general groupings used in Taoism to categorise these extremes and distinguish them.
This forms a powerful and versatile basis for analysis and discussion of many topics and subjects. Dissecting previously opaque subjects into the dynamic interaction of two opposing forces or concepts can yield a wealth of precious insights.
soft overcomes hard
I’m a Tai Chi practitioner, and one of the most important dualities in the sphere of martial arts is soft vs. hard. In the archetypal self-defense scenario, your attacker’s fist is a hard thing. In the Taoist mindset, you have two options:
- Meet it with another hard thing (your arms, if you block, or your chin if you don’t)
- Meet it with a soft thing (a parry, redirection, feint, or similar)
Tai Chi, being a pursuit for health benefits as much as fighting, typically prescribes the soft approach, since meeting hard with hard results in damage to both opponents. Which is all very interesting, but how does it relate to the title of this blog post?
soft ware overcomes hard requirements
The lesson from Tai Chi is that by investing time in learning and meditation, one can use superior knowledge and intellect to overcome hard obstacles by employing soft, yielding techniques. Almost the entire practice of software development is a case in point: as an example, consider a typical computing task, a data ingest job, from a file into a database.
We could jump to the immediate, ‘hard’ solution, and convert the file into database records by hand and insert them manually. This way, even a single file would take an enormous amount of personal time and energy. Instead, as sensible developers, we accept our powers are not enough, we yield, take a step back, and consider how to defeat the problem by bringing our computing resources to bear: we identify patterns in the data, tell a computer to recognise those patterns, identify the data that corresponds to each row, and then make it insert them into the database.
A similar principle can be applied to project planning. When pressured with hard external requirements, yielding to that pressure can produce a positive outcome. If a client’s project consists of two major components, and the client demands continued development of component A, even to the detriment of the development schedule and completion of component B – well, continue developing it.
Extra time spent will produce a superior finished product. You might find that component B can be replaced with something that has already been developed by a third party, and the increased running costs or degraded feature set of the replacement are outweighed by the quality of component A, which the client will find hard to argue against, since they asked for it!
If you enjoyed the read, drop us a comment below or share the article, follow us on Twitter or subscribe to our #MetaBeers newsletter. Before you go, grab a PDF of the article, and let us know if it’s time we worked together.