One of the major goals that I have with researching software design is the hope that we can take people who are “bad programmers” or mediocre programmers and, with some simple education and only a little experience, bring them into being good programmers or great programmers. I want to know–what are the fundamental things you have to teach somebody to make them into a great programmer? What if somebody’s been programming for years and hasn’t gotten any better–how can you help them? What are they missing? So I’ve written quite a bit about that, particularly in some of my recent articles.

However, before somebody can even start on the path of becoming a better software developer, one thing has to be true:

In order to become an excellent programmer, you must first want to become an excellent programmer. No amount of training will turn somebody who does not want to be excellent into an excellent programmer.

If you are a person who is passionate about software development–or even just somebody who likes being good at their job–it may be hard to understand the viewpoint of somebody who simply doesn’t want to get any better. To fully grasp it, it can be helpful to imagine yourself trying to learn about some area that you personally have no desire to be great in.

For example, although I admire athletes, enjoy playing soccer, and sometimes enjoy watching sports in general, I’ve never had a desire to be a great athlete. There’s no amount of reading or education that will ever turn me into a great athlete, because I simply don’t want to be one. I wouldn’t even read the books in the first place. If you forced me to take some classes or go to some seminar, it would leave my mind as soon as I took it in, because I would simply have no desire to know the data. Even if I was playing sports every day for a living, I’d think, “Ah well, I don’t have any passion for athletics, so this information simply isn’t important to me. Someday I will be doing some other job, or some day I will retire and not have to care, and until then I’m just going to do this because they pay me and it’s better than starving.”

As hard as this can be to imagine, that is what happens in the minds of many “bad” programmers when you tell them how or why they should write better code. If they don’t sincerely want to be the best programmers that they can be, it does not matter how much education you give them, how many times you correct them, or how many seminars they go to, they will not get better.

So what do you do? To be fair, I may not be the best person to ask–if I’m going to do something, I feel that I should do my best to excel in it. Perhaps the best thing you can do is encourage people to follow that concept. You could say to them something like: “If you’re going to be doing it anyway, why not do it well? Wouldn’t it at least be more enjoyable to be doing this if you were more skilled at it? What if some other people were impressed with your work, how would that feel? Would it be nice to go home at the end of the day and feel that you had done something well? Would your life be better than it is now, even if only a little? Would your life get worse?”

At the very worst, you could ask somebody to list off all of the consequences of “being a great programmer” until they felt some relief on the subject or started to see the idea differently. You could ask them something like, “What would happen if you were a great programmer?” and keep asking for more answers to that question until they felt better about it or started really seeing how good it could be to be excellent. You don’t have to respond to their answers with any positive or negative comments, just listen and politely acknowledge the things they’re saying. The idea is to give them the chance to really examine the possibility for themselves, and maybe come to some new and interesting conclusions, by themselves–not by you telling them what to think or disagreeing with their answers, but just by communicating to you what would really happen if they became great.

However you do it, the bottom line is that people must be interested in improving themselves before they can get better. How you bring them up to that level of interest doesn’t really matter, as long as they get there before you waste a lot of time giving them an education that they’re just going to throw away as soon as they hear it.

Max, this is an excellent starting point to become a great programmer (the Desire).
So many programmers have this desire but still medicorde programmers because they don’t know the road.
I hope you publish a post about steps for beginers to become great programmers.
My suggestions are: personal projects, blog, read code, learn new lang./framework every year, …
Ahmed.

Thanks Ahmed! It’s true, many people want to be great but haven’t found out how to get there, yet! The best road that I know of is the points that I outlined in my article Why Programmers Suck. There’s a lot of information in that article, so some people miss the bullet points near the end, but those are some of the most important parts of the article!

The problem right now is that one of those points–understanding the fundamentals of software design–is nearly impossible, because they’ve never been codified! So that’s a lot of what the rest of the blog is about, but even more so, it’s going to be the subject of a book that I’m writing, so that people can really have and understand those fundamentals and go on with the rest of the road.