When new developers come on board or are simply asking advice one of the things I am asked about are “the secrets to becoming a good/better developer”. That simple question is enough to trigger multiple follow up questions. Is developing software a talent, an aptitude or maybe a skill acquired by practice? I spend countless hours honing my skillset at work, at home and on this blog, but can I get better? Reading this article from Joel on Software seems to indicate that your skills are somehow set and unchangeable:
While I recognize the brilliance of this piece, in hindsight I do not agree with Joel’s premise that somehow pointers are an ideal way of capturing whether a developer has the chops to take on and produce quality code. The substantive moves to frameworks that hide the notion of references and pointers tells me that those concepts were never the point (pardon the pun) to begin with. So for me the question becomes what are the tools that provide us with the best possible chance of success and do you have practical and successful experiences with those tools?
Is this the fundamental difference between an engineer and a scientist? The principles and tools verses the pure academic pursuit of knowledge? I will leave that specific discussion for another day.
“It is not the spoon that bends only yourself”
During a recent Hanselminutes podcast the comparison was made with Michael Jordan’s relatively unsuccessful venture into baseball, basically put, if an athlete in the order of MJ could not switch sports and become a great baseball player then no amount of training can help a poor developer become an average one. There is so much fail in this statement I do not know where to start. MJ had not played baseball for over 12 years which was probably the root of the problem, he then only played baseball for about 9 months. Even when he got back to playing basketball he looked almost human for about a year. In both cases a lack of targeted practice made one of the greatest athletes of all time look less than average in two sports.
One achieves intellectual work by engaging and internalizing content through practice. In truth it is a combination of things (aptitude, skill, practice, etc), some people get recursion and pointers as soon as you show them an example, for some people it may as well be discussion in the Special Theory of Relativity, so practice in this indirect method of thinking is required. No one is suggesting that you can teach “height” (to push the basketball analogy a bit further), but you could teach almost anyone to become a great spot up shooter.
Put even more simply I do believe you can overcome any basic deficiencies with practice and a commitment to your craft. It only rarely result in you becoming the Michael Jordan of your field, but you could become a successful role player.