On the Path to Excellence
How to improve in the software field? What is the best path to excellence?
Cynics might say that our future as software engineers is doomed to an endless enslaving race, lost in advance. As a matter of fact, the wide, increasing variety of development languages, with their frameworks and libraries, can’t be mastered by a single individual. For 50 years, the hardware industry has obeyed the Moore’s law prophecy for processing speed and memory capacity... and the software technologies followed cheerfully! Will this evolution slow down one day soon? I doubt it, for the 50 years to come.
On top of it, the technical expertise (languages, frameworks, system) constitute only one portion of the software field. Numerous other disciplines have developed in parallel: system architecture, code design, ergonomics, security, testing, organisational methodologies...
The obvious response to that diversity of complex disciplines could consist in considering each discipline in total isolation, and creating silos of activities... here’s coming the good old Waterfall! Hum... I won’t delve here into the limitations of this strategy.
In XP, anyone can ideally participate and bring fresh ideas to any aspect of a project. I personally welcome field specialists only if they understand the basics of other fields, and willingly participate in other problematics with the rest of the team. A truly shared vision in a team only comes at this price.
Now, I totally feel specific field knowledge is a strong asset to a team. If a teamate feel a natural inclination for a subject related to the project, investing in her knowledge is the same as investing in a financial, secure asset.
Let’s try to explore some ways an individual can accelerate her learning pace in a discipline.
Nothing’s better than actual practice, with its necessary bunch of failures. This requires a lot of personnal commitment, patience and tenacity: a genuine experience to gain decent authority in programming can sorely be acquired in 10 years minimum, I think.
One can understand why many people may find this reality too frustrating and disheartening. A few (too many, if you ask me) hide their ignorance behind a complicated vocabulary, that sound very clever and knowledgeable. Others give up hope to get one day a leadership or expertise position in the field; they stop to learn and their skills start to devaluate slowly, but inexorably until they decide to improve again.
Please, hold on, don’t lose heart! I can attest from experience that the life of software professionals can (and should) be a lot of fun. How come? Precisely thanks to the nearly infinite depth of the field, along with its exciting youthfulness and vitality.
A training program certainly provides an overview, along with some tips and tricks. Furthermore, a living expert in person (if the training is serious) can answer directly your questions.
Unfortunately, people tend to give too much credit to training courses, secretly hoping that they will be able to become specialists in a week. The sad truth is, the same people often forget 75% of the course content less than a month later, and, if they don’t practice, 95% is gone 3 months later.
Get in touch with communities through mailing lists and conferences. Networks of professionals provide a means to share opinions, or occasionally ask for advices from field experts... and it is so fortifying not to feel alone! However, don’t expect to ever become an expert this way.
Books & online tutorials
Try to learn at home from books, online resources (websites, screencasts, podcasts and so on).
The Pragmatic Programmers Andy Hunt and Dave Thomas suggest reading one book a month on average. I’m a slow reader, I read about a book every 2 months... but, even at that pace, I am sure I have been learning much more from this source than from school.
My advice: if you don’t really enjoy a book you’ve just started, put it immediately back on the shelf (or get ready for a very long, boring and useless journey!).
Look around in your circle of coworkers ; you may find someone more experienced than you and willing to share his knowledge. This person could even stand as your temporary mentor. In the long run, I believe mentoring to be a very powerful path to excellence, but it requires a win-win relationship to last: show your curiosity, share your thoughts, challenge ideas in a constructive manner! Be more than a basic apprentice.
In my (still short) career, I have met many interesting, smart people, and I learned a lot to their contact. These were not my mentors. I have been deeply impressed by no more than a handful out of them all. These were not my mentors either. One out of this small group has greatly influenced my thinking for almost the 10 past years. This is what I call a mentor.
Finally, I find mentoring great, but... there is a but! It can become unreasonably addictive (I know what I speak about ;) Be ready to “disengage”, gain your intellectual freedom.
We do not learn equally from the same sources: some prefer to experiment from examples, while others assimilate more from the theory of books. Whatever your path, hold on steadily to your goal, long enough to feel the genuine pleasure of a true improvement.