I've been a zone leader with DZone since 2008, and I'm crazy about community. Every day I get to work with the best that JavaScript, HTML5, Android and iOS has to offer, creating apps that truly make at difference, as principal front-end architect at Avego. James is a DZone Zone Leader and has posted 639 posts at DZone. You can read more from them at their website. View Full User Profile

Making the Good Programmer ... Better

  • submit to reddit

One of the hardest questions to answer in our industry surrounds the issue of what qualities differentiate a 'good' programmer from the rest? I just read Eran Galperin's "What makes a good programmer?"  post on the subject today, and thought that I would share my list of those essential skills and traits that I would look for in anyone on my team.

Adaptable and Flexible

It's always been the case that you need flexible developers on your team, but at no other time in the short history of software development  has it been so important. If you're usually the person that does the UI coding, we'll want you to dig into the persistence layer. We might even want you to go do some testing, which you'd usually run a mile from. You may have been hired as a Java programmer, but we want you to write our next application in .NET, and maybe it's best to accept that. It's the world we live in, and you'll be all the better for it. Multi-tasking is as important as being an expert in one narrow field. At the time it might not be pleasant, but your CV will impress as your next employer sees what you're willing to do.  


Maybe you went to university and studied computer science because you heard that was where the money is. A few years in, maybe it was not as rewarding as you expected, and you start getting disillusioned. A great programmer will love coding - maybe not the code their working on right now - but in general you should be someone who enjoys building something to solve a problem for someone. When you get a chance to have a cup of coffee at the desk you'll be going to sites like JavaLobby, and finding how to improve. When you hear about Google's latest move, or the newest web framework that everyone's talking about you're interested. After all, why wouldn't you be - any ripples in the software development and IT landscape are going to reach you eventually. 

A Pragmatic Thinker With a Scientific Mind

The Pragmatic Programmer is one of the most important books in the software industry. Not only is it timeless in the way that it doesn't tie itself down to one language, but it provides a great set of guidelines. Thinking about the consequences of your actions is essential when working in a team, and my favourite metaphor is "No Broken Windows". Maintain a consistently high standard in all your work - testing, coding and documentation alike - and others are likely to follow your lead. Let that slip however, and things can take a turn for the worse.

The best way to stay fresh, despite what programming language is currently in fashion, is to keep thinking scientifically. Any problem can be broken down and all languages have a similar set of a characteristics. While this may be natural to some and not to others, the main thing to do is to keep questioning yourself. Can you write this piece of code better? Could I present this information in a more structured way? Mind you, the answer is almost always yes, so use pragmatism to find a reasonable end to this questioning! 

Well Organised

When I started programming I would just dive right into my latest task. And that was fine back then, as I was just beginning to get assigned tasks. A few months later, I went to a talk on time-keeping, and learnt a lot that I still utilise today. A good programmer will be well organised, perhaps sitting down at the end of every day to list out the tasks for tomorrow. If someone needs something else done, at least I can refer to this list and see where I can fit it in, or what else will get affected. A useful tool for this is Mylyn, a task based Eclipse plugin.

It pays to be organised on the code and documentation side of things too. An organised approach to packaging, class and variable naming and design, makes everything much easier to follow for others on your team, and for you when you look back at something after a few months. 

Reasonable and Approachable

The majority of us work in team environments, so we have to possess people skills. All the great programmers who have respect are those who are approachable. You need to make time for those who feel they need your help, whether that's a developer with a code problem or a project manager wondering about your estimates. Along with these skills, you should endeavour to be clear in all your communications - the worst thing that can happen after any meeting is that all parties walk out more confused than before.

Being reasonable can't be underestimated. No matter what your position in the organisation, some negotiation will always be required. Maybe something can't be done that way you know is right, but in the interests of moving forward, it's good to be able to find some half-way point, rather than being too head strong. 

Takes Chances

You can't assume that someone else will tell you what the right thing to do is, and when. Maybe you need to move to the latest version of a framework even if you're close to a release -especially if you feel there's some benefit there. If you're enthusiastic about your job, then you've probably been keeping up to date with what's available. And if you're flexible, you won't mind sacrificing part of your lunchtime, or your spare time at home, to prototype and see if it works. Every chance has it's costs, but all need some investigation rather than charging in blindly - be prepared to take that time. 

Taking chances applies to your career too. Maybe this new startup is worth joining? Maybe you're just comfortable in your job right now and you need to challenge yourself. You'll notice there's a common theme in any success story - the chance was worth taking, and the chances that were wrong calls help you learn.

Takes Pride In Their Profession

If there's one point that you can take away and implement from this article it's this one. Take pride in what you do.  Everything else falls into place, and you will become a great programmer if you take this advice. It's a lesson learned from all professions - the people we regard as great are those who feel that their industry is the most important, the ones that want to believe that the world needs great programmers.

It's difficult to do if you don't love programming, but it's still possible. You've to ask why you don't like your job right now and find ways to address it. If you're writing tedious code in the day job, maybe joining an open source project will kick off the spark for you again? You can spot developers who take pride in their profession a mile off, from the quality of the code they write, to their enjoyment at being given a difficult task.

 This is just my opinion, and it doesn't hit any of the real technical aspects of a developers job. Are there any other points here that I've missed that help produce the Über-programmer? From the great developers that you have known, what would you describe as their outstanding traits?


Lieven Doclo replied on Fri, 2009/07/24 - 8:23am

I truly agree with your article. Programming should be seen as a craftsmanship, and programmers should as such uphold the same standards as craftsman.

However, the pragmatism you're promoting (improving code and quality) has a potential for hindering one of the other (more important) traits: gets things done. If be constantly reviewing code you've written in order to improve quality you won't get anything done. Sure, the things you have might be top-notch, but the client couldn't care less if his product isn't ready.

I'd like to add one as well: Doesn't always uses the latest and greatest. It's a pitfall many programming come across. How tempting as it may be to do a new project in a brand-new technology, a good programmer takes a step back and decides whether the cost of using the new kid on the block weighs less than what you can get out of it. Sure, it's easy to say 'Everyone will use it in the future' because there is a hype, but a good programmer takes future as well as present work into consideration.  

James Sugrue replied on Fri, 2009/07/24 - 9:23am in response to: Lieven Doclo

Good point, getting things done is very important.

And about  latest & greatest, it definitely is a case of taking the chance, putting in the time to research and have a good reason before going for the next big thing 



Joe Neuhaus replied on Fri, 2009/07/24 - 9:47am

A great topic, as I have often asked myself, "Are the traits that make a great scientific programmer the same as a great Web-Application programmer?" I think in large part, yes. And there is one trait in particular this topic implied, but didn't discuss head-on, and that's problem solving. I've found that someone who is both a good problem solver, and is excited by challenge, is a "good programmer" from the point of view of getting things done. This is why I'll tend to hire physists, chemists, and mathmaticians for programming jobs (when possible), because they see information technologies as simply another tool to solve a problem.

Peter Morris replied on Fri, 2009/07/24 - 12:38pm

The point about flexibility, yes, I can partially agree.

 But, you will not become more valuable because of it.

The job market is such that as long as you meet the requirements of the job, and give good interview you will be considered, but if you try to pad your rate because you have all these other skills, not applicable to the job, you will price yourself out of the market.

Alex(JAlexoid) ... replied on Fri, 2009/07/24 - 6:17pm in response to: Lieven Doclo

I'd like to add one as well: Doesn't always uses the latest and greatest.

Yeah... Ironically,  that was the exact reason quoted by an incompetent project development lead that desided to go with EJB 2.1 insetead of Hibernate for persistence layer. I am thankul that I left that project.

Alex(JAlexoid) ... replied on Fri, 2009/07/24 - 6:29pm

I'd like to add to the "A Pragmatic Thinker With a Scientific Mind" part, particulary about the sciennce:

The scientist within a programmer should always be aware of the past, current and currently developing future.  Without the past, every single programmer will definitely implement his own ORM framework, MVC or similar framework and the whole bunch of similar frameworks. Without being aware of current technologies, there are no possibilities of doing things in the most appropriate way. Without keeping track of the developing future, a programmer will be doing work that may be obsolete in just a month. Being an expert is not required, but knowing that one or the other thing has been already practiced somewhere and/or someone resolved a silimar technological problem, or there was a research done in the field.
Scientific knowledge is an extreemely valuable resource in making good decisions, persuading other people with argumets beyond "It's teh best thing EVAR! Dis tech pwnz!". And making more pragmatic decisions based on just over 4 decades of cumputers, not the latest release of CIO magazine.
And above all, correct use of a search engine is one of the most essential elements.

Dennis G. replied on Sat, 2009/07/25 - 7:26am


these are all good points, but one of the most important skills is, IMHO, being able to pay attention to detail. If you aren't able to pay attention to detail (and a lot of people just don't care), you won't be able to improve and fix all those small quality, usability and performance issues that influence how users perceive software systems.


Tools for Software Teams
Test Case Management, Java Tracing

Jakob Jenkov replied on Mon, 2009/07/27 - 2:52am

Nice post, James :-) 

I think it is hard to write down the full set of traits that make up a greate developer, but this list is definately part of this set. Of couse, as always it depends on the concrete situation whether a certain trait is beneficial or damaging, but that shouldn't stop us from trying to define the traits.

 Interestingly, these traits would probably also be beneficial in other industries than IT. They seem to be general human traits describing how a human being approaches his/her profession.

Lieven Doclo replied on Tue, 2009/07/28 - 6:28am in response to: Alex(JAlexoid) Panzin

That's the difference between not using the latest and just being stubborn by sticking to what you know. There are project managers out there that jump on everything new they read on TheServerSide, here or some other Java tech blog. That's not only a recipe for disaster, it only annoys your programmers extremely... Taking risks whilst choosing a technology should only be done if you're prepared for the fact it might just blow up in your face.


Ibrahim Levent replied on Tue, 2009/07/28 - 8:33am

(Plus) Complies with the facts and avoids the fallacies described in the following book:

Facts and Fallacies of Software Engineering

Billy Echlin replied on Thu, 2013/01/24 - 5:40am

In line with your point about being reasonable and approachable I think the ability to work well with testers is absolutely key. As a tester some of the best, and most professional, developers I've worked with are the ones that respected me as a tester. When a developer and tester work well together the combination can be quite powerful. Yet the relationship can be quite difficult. I mean from the developers perspective you have a tester that is constantly being critical of your work. That's not easy to take day in day out. 

For anyone, having a third party being critical of your work constantly can be taken personally. Yet the great developers I've worked with always seem to see the testers as a helping force not a critical force. It's a two way street though. The tester has to approach the relationship in a professional way too. However, both parties see the relationship when it works well it can be a powerful force towards improving quality and ultimately the reputation of the developer who releases higher quality code.


Test Management Tools 

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.