• I have found this out more recently. Perhaps I have devolved as a programmer. Based on the description, I believe that at least at some point I could have been considered a guru. I still do many of the things that seem to fit into that category, but I have learned something very enlightening over the last few years.

    In the past, I have worked with programmers at the 2nd and 3rd levels and I could definitely see, at that time, the differences between the way I coded and the way that they coded. I enjoyed improving the efficiency of the programs and making the programs relate more easily to the users. I enjoyed problem solving and was pretty good at it. I made plenty of mistakes, but corrected them all quickly. I've learned to prevent a great number of mistakes.

    At one point, I found myself as a lone developer again. Here is what I found. When I was with a team of developers, those 2nd and 3rd level programmers, some of whom really didn't even seem all that interested in programming, were still much faster at coding than I was. I tend to get bogged down in details, and occasionally attempt to solve problems that don't need solving. This was not a problem for these developers. They weren't interested in doing any more work than was actually needed to solve the problem. As a team we worked well together. They did most of the actual programming, and whenever we had a particularly difficult problem, I would step in and either show them how to solve it, or create a solution that could be replicated by them in various places where it was needed. We worked extraordinarily fast. When I became a lone programmer, I found that my development speed had become seriously crippled.

    I feel bad that I devalued some of the other developers that I have worked with. Now that I don't have them, I realize what I have lost. I don't know that it is good to have ratings for developers based on the criteria indicated.

    Instead, I think it is better to consider that there are different people who are particularly good at different types of things and getting the right combination of those people can make all the difference.

    So rather than labeling programmers as basic and guru, it might be better to separate them as coders, specialists, solvers/engineers, etc. Supply and demand may make some of these positions seem more valuable than others, however, without a good combination, I feel like development can severely suffer from being unbalanced in these.