What kind of software engineer do you want to be?
Software engineering is defined in Wikipedia as follows: “…is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software, and the study of these approaches;” and so on. Intrigued by ‘disciplined’ in the definition and lack of it as seen in some organizations, I wondered how is this seen in other professions. Say, an airplane pilot, for example. What are the differences between learning to ride a bicycle, for instance, and learning to fly an airplane?
Therefore, I was reading through the Airplane Flying Handbook to figure out what makes a good pilot?
Not surprisingly, the following text, extracted from the handbook, it found at introduction chapter:
Also the following is found in the same chapter:
Paraphrasing on the above, here’s my reflection on our world:
The purpose of primary and intermediate software engineering, however, is not to learn how to program a particular programming language and framework. The underlying purpose of software engineering is to develop skills and safe habits that are transferable to any programming language. Basic software craftsmanship skills serve as a firm foundation for this.
It should also be remembered that the goal of software engineering is a safe and competent software craftsman, and that passing one certification or another for software engineering is only incidental to this goal.
I am including below a few other extracts that I found very relevant to our profession:
The role of the flight instructor is critical to making a good pilot – as a supportive coach (e.g. “promote positive attitude”), as a mentor (e.g. “certain basic… practices… must be emphasized”), and as a trainer.
In contrast, leaning to ride a bicycle is very much a skill learned individually. The prospect cyclist learns to ride a tricycle first, typically at a very young age. Thereafter, the prospect cyclist will advance to bicycle with trainer wheels. So far with very little training per-se. Maybe some encouragement from an adult that happens to be nearby. Then comes a critical stage of losing the trainer wheels. I guess this is the only stage that remotely resembles flight training. A trainer/coach is close by, still encouraging, but also actively involved in the training process. This stage takes anything between a few hours to a couple of days. And then – the world is your oyster! Ride like the wind – just improve your skills in your own pace.
So, what kind of software craftsperson would you like to be? Like an airplane pilot, or like a cyclist? And how would you like to welcome new software craftspersons to your organization? Like a flight instructor, or like training someone to give up trainer wheels?
If you are serious about becoming a pilot or a flight instructor kind of software professional, a good place to start is to work on your skillset. Don’t miss out the three top-notch workshops in Day-1 of Agile Practitioners 2012:
- Corey Haines – Improving your TDD
- David Evans – Introductory workshop on agile testing
- Gojko Adzic – Winning big with specification by example