A friend of mine in his second year at the university asked me what it takes to be a great programmer. He had built a few Web sites and some simple VB6 applications and was interested in pursuing “something in computer science” as a career. My first reaction was to ramble off a quick list of the usual must-haves: C++/Java, networking, database design, and so on.

But a couple days later, I started reconsidering my advice. My first round of suggestions were “the basics,” and knowing the basics is essential to any developer, top-notch or otherwise. So I came up with what I think are the critical success factors for truly outstanding software engineers.

Constantly up your IT IQ
Remember that no matter how much natural ability you have, unless your IT IQ is up to par then you will never realize your potential. Choose skills updates carefully. For example, while it’s important to have a well-rounded IT education, every developer doesn’t need an MCSE 2000. Join a user group or take a class to keep on top of emerging technologies, such as XML or .NET.

Adopt a reuse mindset
Top developers have both a firm understanding of Object-Oriented Programming (OOP) and a strategic approach to solving development problems. An effective programmer can separate root problems from their symptoms; complex problems should be broken down to individual areas. The best programmers break problems down step-by-step. This approach is conducive to individual code reuse and sharing vital resources with peers. The same problem should never be solved twice.

Develop a strong grasp of OOP principles, such as inheritance. Inheritance, which allows subclasses to utilize already defined classes, is a cornerstone of software reuse. You should be up to speed with all the latest theories on software development.

Understand underlying business principles
A good programmer recognizes that no solution is effective unless it meets business objectives. Budgets, resources, and schedules play an integral role in the development of the solution. If a solution is not viable when weighed against these constraints, the solution must be revisited until it is viable. Selectively use the mantra “Cheaper, faster, better”—in the real world, you’ll end up picking two and moving on.

Have a mentor, be a mentor
The role of a mentor is integral in a top programmer’s development. A mentor motivates, directs, commends, and chastises the programmer throughout his career. Think about a boxer who goes back to his corner between rounds. The boxer is counseled, healed, and motivated by his team. This team acts as a mentor to the boxer. A good developer has a network of mentors. While you should have mentors within your organization, it’s often more important to have mentors outside of your current company.

Be your own worst critic
The idea that you must divest yourself of your ego is absolutely preposterous. Ego is not a problem, egotism is. To many, this may seem like splitting hairs, but the difference is as great as the difference between marginality and excellence. Ego drives us to be excellent; the egoless are content with being marginal.

Have you ever gone to someone for candid criticism, only to repudiate the feedback as it’s given? If so, then go back and ask for more candid feedback. You’ll find that the criticism is less candid. If you ask for candor, don’t argue with it. Contemplate it and thank the person for the help.

It’s always easier to accept criticism from others when you are your own worst critic; you’ll find that others’ criticisms are less severe than your own. If you are able to criticize your own work, you’ll find others more receptive to helping you find ways to improve.

More critical success factors

Do you want to add to Lurie’s critical success factors? Post them below or drop us an e-mail.