tilly recently shared a quote with me that I think serves as a good starting point for some interesting discussion regarding differing levels of ability regarding programmers:
First-rate mathematicians want to hang around first-rate mathematicians. Second-rate mathematicians want to hang around third-rate mathematicians.
$quote =~ s/mathematicians/programmers/g;
I should perhaps amend the first line to read "First-rate programmers and those who aspire to be first-rate programmers...".
As for myself, a quick read of the Seven Levels of Perl Mastery reveals that I am somewhere between Expert and Hacker, but with some glaring omissions in both categories. However, knowing Perl does not make me a first-rate programmer. I can know everything there is to know about Perl and still write bad code. I claim to be a second-rate programmer, but I aspire to be a first rate programmer.
Recently, our company hired two more programmers. One of them doesn't know Perl very well, but he knows programming theory very well (to be fair, his work rarely involves Perl). The other programmer knows programming theory well and I think falls in the Guru category.
Prior to their being hired, I was the top Perl dog. Everyone came to me with questions about Perl specifically and programming in general. I found myself terribly bored at work and I was stagnating in my development as a programmer.
Now, I am very clearly second choice for Perl questions and third choice for general programming questions. At first, this was a huge blow to my ego. I felt challenged by them and tried very hard to overcome my resistence to what they had to say. However, in trying to be a first-rate programmer I discovered something interesting: I was learning again and enjoying my job. I probably could not have written Sub::NamedParams and I certainly wouldn't be doing automated testing. Even now, I can look at code I wrote only a couple of months ago and point to all sorts of issues that I would probably mark "wrong" on a code review.
To my coworkers: thank you. To everyone else: swallow your pride and learn. Learning to program well means taking the time to care about your work and learn "quality" programming. I would much rather maintain a well-written, but broken program, than a working mess of spaghetti code (which I probably wrote, though my code isn't quite that bad :)
Join the Perlmonks Setiathome Group or just click on the the link and check out our stats.