The Connection Between Archery And Programming
Programming is an art that exists only since 1840 (The first algorithm in history wrote by Luigi Menabre) and becomes common in our lives only in the last 30 - 40 years. On the opposite, Archery is a much older art; already in 10000Bc used in Europe. It seems that there is some connection between these two very different arts.
If we wish to understand the connection, first we should have a basic idea about archery and programming separately. Archery, as well known, has two major tools: bow and arrow. After people mastered the bow and arrow, additional tools invented were "nice to have" but not necessary to the shooting itself, just making the shooting faster, easier, and more accurate. Then, the bow became more sophisticated and the arrows followed too... the new bow and arrow were much better and allow a new set of skills, but make the use for beginners much harder and the whole process was more complex than ever. If we would like to check the evaluation of programming we will be able to see the same phenomena when hardware and assembly are analog to bow and arrow with has been improved over time and now we talking about the cloud as the leading hardware platform and very high-level programming languages like Python and Java with is much more powerful compared to the IBM Model 5150 computer with programming based Assembler language. Some "nice to have" tools have been developed here as well - automated build, source and version control, debugger, and some more.
Aim a little bit higher
Archers were familiar with gravity long before Newton sat under the apple tree. When an archer shooting a target at a fair distance s/he would aim a little bit higher... how much higher? it more a question of experience than knowledge. The programmer should do the same, try to solve a little bit bigger question you asked to solve, most of the time you will gain a "lower" result which will satisfy the original request.
Breathe, Think, Make your move
Archer has only a single place to control the arrow which s/he wishes to hit the target, this place is when the arrow is still on the bow - the beginning of each shoot. The angle of the bow, the assessment of the distance to the target, and the tensile strength set in the beginning and will determine the whole path of the arrow up to the inside/outside of the target. As programmers, it is important to stop in the beginning and set all the properties of the development; from picking technologies we will work with, to write down a rough scheme of the final result.
One-shot, but many times
Indeed, each arrow is an individual shot and has two options: hit the target or not. But, the archer is the same person and therefore is able to fix his mistake from time to time. Let's say I shoot three arrows to the same point but all three hit the target a bit to the left, next time I will aim a bit to the right and see how my arrows hit the original point. The same concept work in software development. We can try some developing schemes and see that the results don't work out with our expectations. Checking our last work from time to time and changing our attitude accordingly can make the whole difference.
It is easy to see that Archery can teach us a lot about the right way to develop software. The target of archery both as a sport and as hunting (for surviving) is parallel to the target of programming to ease our life and to develop ourselves in highly changing and new environment.