Pete Goodliffe, the author of Code Craft, is promoting his book this week at the JavaRanch. During the promotion, he's answering all kinds of questions about his book and software development in general in the process forum.
In one thread, Pete is describing attitude towards programming as the differentiating factor between "adequate" and "exceptional" programmers:
My observation is that there is one thing that sets "exceptional" programmers apart from merely "adequate" (let alone "poor") programmers.
It's this: their attitude.
They *care* about programming. They *care* about programming well. [...] If a programmer has the correct attitude to the task, all other things will follow.
Think about the great programmers you've met along the way. I think you'll see what I mean.
I'm with Pete 100% on the importance of the craft attitude. And I strongly believe that a beginning programmer needs to have contact with great programmers in order to become a great programmer himself.
What bugs me about this is that I don't think too many beginning programmers have that contact and those who do don't have nearly as much of it as they should.
I started my commercial programming career working on dynamic web front-ends. As such, my world consisted of a connected network of other "web programmers" and artsy types with job titles ending with "designer". In that environment, I was somewhat exposed to a number of senior programmers who I could observe along the way. There was the usual distribution of skills and personalities, including the hardcore C/C++ programmer who had written an in-house PDF generator and the jack-of-all-trades all-round guy who had his fingers in every system, effectively keeping the systems together.
Looking back, I learned a lot during those times. I got enough space and responsibility to stretch my know-how and was constantly pushed for learning new things. And I continued pushing myself at home--the classic late night code fest wasn't exactly a rare occurrence (which didn't do good to my relationship with the girlfriend).
Frankly, however, none of the individuals I encountered during the first couple of years into my career were what I would--in hindsight--consider great programmers.
Now don't get me wrong. Some of those individuals really knew their stuff in some aspects. For example, the C/C++ guy who wrote the PDF generator did some serious magic. The problem was that nobody understood his code. In fact, looking at that particular code base today I'd probably rate it far below acceptable. Back then, however, that guy was looked up as a "great programmer". And I'm afraid the same phenomenon is taking place still today in many corporate environments.
Think about an imaginary enterprise, Big Corp Ltd. Big Corp's HR strategy for the past decade has been to hire fresh graduates straight from the university and shove them into a process-heavy production pipe. The fundamental idea being resource thinking and process-substitutes-competence.
Sound familiar?
The problem with such an environment is that the average developer in the system does not have the great programmer sitting next to him. There's nobody to learn from, other than those who've survived the environment longer than you have. Not exactly a system that cultivates learning and continuous improvement. Certainly not a system that's competitive with those of smaller, more open companies where developers are actively looking outside for help and insight. Plus, I'd claim that the developers in those smaller companies are more likely to have that great programmer sitting on the next seat. Just like I used to have in some projects at my previous employer and like I have every day here at Reaktor.
I don't have a solution to offer. I just felt like pouring out some thoughts on the topic. Maybe I'll manage to affect someone's life and career.
If we ask: "why are there just so few great programmers", we should then ask: "well, why SHOULD one want to become a great programmer anyway?"
Is everyone doing the best they can in their jobs? Surely not. At least I've met many people who have given enough evidence for me to say that they could do much better than what they do. I may have found myself in the same situation sometimes. Well then, why don't we do better?
Maybe there were times when people thought that just having a job is a reason enough to try to do it as well as possible. It's like confining the consciousness to the immediate tasks at hand, kind of assuming it's just a game. It's always fun to win in a game.
Today, the phenomenon still lives, for example in some factories in far east where people (usually women) have to do, say, 14 hour days, starving and fainting, just to survive. They may have no other option than to try to excel. They don't consider it a game, though.
But I think that the following phenomenon happens to at least some percentage of population, when we move to societies in which life gets "better" (on some scale, at least) and people get more freedom to choose their efficiency. Those people begin to think of the bigger picture. "If I do this well, I only get small amount of the money. What is being done with the rest of the money? Say, if I get 15% and try to use it wisely according to MY values, is the rest 85% used to more than cancel my efforts?" Say, that I invent a marvelous stock exchange software with which stocks can be bought and sold faster, maybe even automatically based on some wicked heuristics. I get huge amounts of money for that. Then, in the hands of the lemmings who use this software, it causes yet another massive financial catastrophe somewher in the world. Even if I had used all my money to counteract this, things would still be more f*cked up than before.
OK, I finally get to my point. If we want more people who actually *care* what they do and try to excel, the companies should make sure and clear that they have all the reasons to do it. Like, when a new employee joins the company, she is told: "when you do this, you get this amount of money. The company gets the rest. We have this set of values, which you also share because you joined us. Therefore, the money is used in this fashion. If we make this kind of profit, we well spend it like this..."
Maybe those companies of tomorrow which are the most effective, ride on the fact that time is precious, and that the employees must have also other reasons to be proud of their work, than just doing some technological, artificial mumbo jumbo stuff really well. These kinds of companies surely exist already today, at least if I include non-profit organizations, but there isn't yet any big "movement" along these ideas yet -- or is there? A quick answer would be "employee owned", but that's just a small ad hoc step, and does not guarantee all that I'm asking.
Maybe then we would find that -- whoa -- there are suddenly great programmers everywhere, a lot more than before! Where did they come from??
I'd appreciate a lot to hear your comments on this!







