login
Blurts on the Art of Software Development

Today | RSS | RDF | Atom | Other Tags
Categories : All | All | CI | .NET | General | Humour | Java | Personal | Reviews | Ruby | SW Eng

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.


I can say I've observed this a few times myself. At startups you can run into 'great programmers' and occassionally in corporate IT worlds. Corporate IT often has the issue of not having the rock star programmers to learn from. If you're a beginner there's often people who seem like rock stars, but that's because the beginner doesn't know much yet. I love learning from people who know a lot more about development than I do, but I rarely get to pair up with a rock star. My tradeoff is you can learn a lot by mentoring/teaching people, but for your own stretching you often need exposure to something else. I don't really claim to have a solution to this either.
That's a bit harsh to differentiate between Exceptional Programmer and Adequate Programmers. Are we missing some level in between or what ? :) Anyhow, i don't think that it is justifiable to make this kind of assessment on the quality of a professional - Exceptional or Adequate. It is true there are various degrees of competences no matter what the profession but to say that someone who cares is exceptional is a bit baseless. We all care as professionals (or should) and yet there are very few exceptional professionals. So, caring is not enough. i strongly believe that our PDF hacker above is an exceptional programmer if i examine his work in certain context and light. So, caring does not make you exceptional. The level of mediocrity around you makes you exceptional ! However, i have to agree that the business of software development does not have this structure of smoothing fresh graduates. True, there is lack of mentoring but it is more apparent in Big Corp. because Big. Corp deals with larger volumes, larger projects and huge amount of money. And at the level of business of Big Corps, the currency of success is time and therefore no time for noobs (which is sad).
If we assume that the attitude is the key factor, then the next logical question is how to change the attitude of people, so that they would really care about programming -- or in fact whatever they are doing in their work. Programming is just one part of our work (the best part, of course).

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!

Life is what you should do better. Or live, as other say. Coding and doing it for work comes after. That 15% is something you can’t buy with money … no matter what company you are.


Add a comment

Title
Body
HTML : b, i, blockquote, br, p, pre, a href="", ul, ol, li
Math Quiz 1 + 2 = (Helps stop blog spam)
Name
E-mail address
Website
Remember me Yes  No 

E-mail addresses are not publicly displayed, so please only leave your e-mail address if you would like to be notified when new comments are added to this blog entry (you can opt-out later).

TrackBack to http://radio.javaranch.com/lasse/addTrackBack.action?entry=1172061746948