The Top 10 Attributes of a Great Programmer

With all the latest attention again on what does and doesn’t make a good programmer, I couldn’t help but put together my own top 10 list.

  1. Being a great problem solver.
  2. Being driven and lazy at the same time.
  3. Ability to understand other people’s code
  4. Having a passion for programming
  5. Loving learning for the sake of learning
  6. Being good at math
  7. Having good communications skills
  8. Strong debating skills
  9. Extreme optimism
  10. Extreme pessimism

     

    1. Being a great problem solver – Hopefully everyone recognizes this one. Most good programming is all about being able to find solutions where others can’t see them. If you don’t have this skill the others matter far less.
    2. Being driven and lazy at the same time – This one surprises some people. Programmers question things and are often “too lazy” to take the long route. The will spend countless cycles trying to simplify the problem and simplify their task. That said they having a burning need to get the job done, they just want to do it as efficiently as possible.
    3. Ability to understand other people’s code – This point is essential but cuts some good programmers off from being great programmers. It doesn’t matter how well you can rewrite everything yourself – you need to be able to work with other people’s code on existing projects, lean on opensource in new projects, and learn good techniques from the code base that is already out there.
    4. Having a passion for programming – on some level you have to love programming for programming’s sake. I suppose to be truly great at anything you have to love it in most cases.
    5. Loving learning for the sake of learning – Programming is a moving target. Unless you love the art of edification you will sink fast. There are no laurels to rest on and no one cares what you did yesterday. Unless you are aware of the techniques on the horizon, you won’t be ready to embrace them when they become relevant.
    6. Being good at math – Different people will have different opinions here – but at the very least having a strong grip on pre-Calculus math. I’ve never seen a great programmer without a solid grasp of at the very least algebra and trig.
    7. Having good communications skills – This doesn’t mean that they can communicate with anyone and everyone. Specifically this means that they are able to clearly express their thoughts on their own terms. I’ve met plenty of great programmers who couldn’t communicate well with the world at large. However, given someone to talk to who understands the problem domain, they were all able to clearly state the problem and the solutions proposed.
    8. Strong debating skills – This follows the same logic as #7.
    9. Extreme optimism – Great programmers I have encountered have an insane certainty they can get the job done once they have chewed on it a bit.
    10. Extreme pessimism – Great programmers I have encountered have an insane insistence that when they lack the information needed to make a good judgment that they won’t be able to make one at all.
      After putting together this list some aspects surprised me, and I was the one who put together the list. So let me explain each in detail.These attributes describe those I’ve found in pretty much every great programmer I’ve come across. There were a number that fell through the cracks and I’ll explain those later. 

      Some of the things I instinctively wanted to put on the list but couldn’t say were true of at least 95% of great programmers include the following:

    1. Being extremely organized – Understanding when and where organization is important, yes. But anal attention to detail is something present in great programmers as often as it is people in other disciplines.
    2. Being good at managing other people and or programming projects – Somehow these skill sets are wonderfully synergistic when they sit side by side, but management and programming are often completely different disciplines.
    3. Being able to write good design documents – Same as #2. This skill may make some people better programmers and I am in favor of learning it. However, plenty of great programmers I have encountered couldn’t write a coherent design doc if their life depended on it. This will know doubt be debated by heavily by some.
    4. Having an ability to estimate time frames – Once again like #2. This is an acquired skill and a very useful one. However, I have seen absolutely zero correlation between great programmers and estimation skills.
    5. Prolific reading of tech books – I do this all the time myself, but many great programmers don’t. Let me be clear though – most programmers who aren’t all that hot could definitely benefit from bootstrapping their skills with some good reading.
    6. Ability to transfer their programming skills to any programming domain – Although many can, some great programmers can’t, or refuse to, grok other programming technologies. I like to think that this is a “refuse to” situation.
    7. Write code that is correct the first time around – Many great programmers commonly have syntactic issues flagged by compilers or at runtime interpretation. Some are zealots about the details the first time out, others are much more “extreme” in this area.
    8. Having other areas of great skills – some great programmers are good at only one thing – programming.
    9. Social or antisocial – Great programmers come in both forms.
    10. Are someone you’d want on you team – Unfortunately some of them just can’t work with others well.
    11.  

    • http://gozh2002.cnblogs.com gozh2002

      The Top 10 Attributes of a Great Programmer
      1…
      2…
      ….

      10…
      11.sense of humor

      • sorin7486

        +1

      • Prashant

        “sense of humor”
        It can grow your Lady Luck” not the programming ability!
        Nice article.
        Thanks.

    • David

      re 10: I think you miss the point about pessimism. It’s not just when they don’t have the necessary information that great programmers are pessimistic. Great programers are pessimistic in the sense that they believe that if there’s even a very very small chance that something in their programs could go wrong that, sooner or later, it will. They always assume there are bugs in their code and that it won’t work first time (bitter experience). Hence they work to proactively avoid such things.

      Basically, great programmers are extremely pessimistic near term and extremely optimistic long term about their software :)

    • http://jroller.com/malformed/ Rob Dickens

      And a great tool to help with problem-solving: Emacs’s outline mode. See example.

    • http://atlanticoazul.blogspot.com Sailor Girl

      The Top 10 Attributes of a Great Programmer
      1…
      2…


      10…
      11. Sense of Humour
      12. Very good English Language Comprehension!!!…

      • say

        if you think you need english and communication skills to be a great programmer, that means you’re not a good programmer at all.maybe you could just take AB English instead of BSCS

    • Steve Stone

      The Top 10 Attributes of a Great Programmer:

      1. The ability to count.
      10. The ability to understand binary.

      • Pete

        Re: comment from Steve Stone.
        No idea if that comment is original but it’s cool.
        It deserves to be on a geek t-shirt!

        • DonBarry

          i agree Pete. lol.

    • http://www.edmblog.com James Taylor

      How about a willingness to give up control of some of the code to the business people who really “own” it? The different perspectives of programmers and the business can be a real challenge and even when technology can provide a platform for a solution, programmers must still give up a little control in order to get the right business results. Sometimes no matter how good a programmer is, there is still a problem with them.
      JT

    • http://www.devonyoung.com/name.aspx Devon

      I think I’m only weak on #3 & #8, which probably puts me in good company as a very good (if not great) programmer. WOOT!

    • Bob

      Interesting list. I’d like to hear descriptions of the great programmers you’ve met. With names.

    • Mike

      Wow, I am completely all of those….I >= “WIN”

    • Eric

      11. A teensy bit of modesty.

      you lose. ;)

    • http://eureka3d.com Steve Riley

      David – I think you`re right. Great programmers know they can get things working in the long term, but they have very sensible doubts in the short term. It really is a perfect combination.
      James Taylor – I agree with what you are saying. It also depends a little on how you define great programmer. I think there are programmers who can implement amazing solutions but can be terrible team players and certainly be very obstinate about not aligning their interests with that of the company they work for. I would still consider them great at programming, but of course not necessarily an asset to the company they work for.
      Bob – I might have to crack open that list at some point. I`d almost feel guilty not mentioning a few of the stellar project managers, business development types, etc. I have worked with as well. I`ve definitely been lucky enough to work with amazing people in all of the disciplines over the years. Now getting them in the same place at the same time is a little harder;)
      Eric – it`s funny because in this post I really was only thinking about other programmers. I may come off with a little too much conviction about what traits are important, but it`s just my humble opinion.:)
      I think that working with great programmers who you can learn from gets you so caught up you forget about egos. It might sound trite, but when you`re in the flow with a good team you really are completely absorbed on the problem at hand.
      Now I can be pretty stubborn at times – I`m sure I don`t seem modest at all then:)

    • atilaw

      11 – Imagination, most people have done something that “just worked” in the past, but it may not be the best solution and it takes imagination to see past the current solution and convince people it is worth doing!!

      12 – Filthy Rich, hopefully somewhere I hope to be in the future when I get the maths side worked out! :)

    • http://www.technospot.net/blogs/ Ashish Mohta

      Awesome tips, I am working on how to understand other code,.Thats the toughest part

    • Arvin Jayson Tamayo Castro

      thanks for the tips! they do help me on my research paper,=j thanks’

    • Angelo Rohit

      Looks like almost everyone here has #8. :D
      The part about good communication skills is very apropos. Many good programmers I know are very articulate about their field of interest. It does not matter if they speak in English. What’s more important is their expression of thoughts.

    • Randolpho

      Well done… that captures almost exactly what a great programmer is like.

      Alas that so many of us aren’t great programmers. ;)

    • Programmer

      Since most modern languages are zero indexed.. Shouldn’t the list be 0…9????

    • raetsel

      i love #10 and wish my boss could EVER comprehend that fact – i’m -not- just being difficult! ;)

    • developer

      Everything but 3. I am too lazy to understand other people’s crappy code and it’s a total waste of my time.
      Other people’s decent code is OK, but barely.

      For most things of any size I am either a consumer and just a consumer (it’s a library to me) or I rewrite it and 1) learn more and grow and 2) save time.

      This pisses some people off, especially management, but I at least am manning up to an unpleasant reality- most code is so bad, stakeholders across the board are better off if it’s rewritten.

      • mircea

        …and that’s why you are a developer, not a programmer.
        :)

    • Cindy

      I’ve found the more languages you learn, the better programmer you are. Not required but definately helps.
      Imagination and drive are both a must. Each well written program gives me the same satisfaction as creating art (photography, drawing). It’s the same thing – a creation. There are a hundred ways to code something and there is a beauty to writing something efficient and elegant.
      Be a masochistic. Enjoy the torture of the process. Each project is a logic problem to figure out. It’s fun!

      • Guy

        Definitely agree with you on this one – there is beauty in a well written program.
        Also even nowadays I come across many programmers who do not understand OOP or even know of its existence!
        So yes the more languages you learn the better and the more languages in terms of range the better (I guesss I better eat my own humble pie and go off and learn ALGOL now…)

        • mircea

          Reading & learning other languages?! The very existance of a programmer, the reason for his existance is this: Creating HIS OWN programming language!

          Reading is for noobs! :) :) :)

    • Lee Doolan

      re #3:

      I think that this should actually be #1. It is the hallmark of a professional software engineer the s/he is able to sit down and start working with a legacy code base.

    • dennis

      I don’t think anyone would disagree with any point made here. The problem I have with all this is “what is a great programmer”… sometime you need a great designer, sometimes you need a great idea man and some times you need a great closer (clean up all the crap – translate all the resources, make sure the installers work etc).

      Very rare to find someone who can come up with the ideas, code like three and then get a release ready user-ready.

    • http://www.elastician.com/ Mitch Garnaat

      I still think Larry Wall summed it up best. The three great virtues of a programmer are; laziness, impatience and hubris.

    • Pingback: Pedro Newsletter 16.05.2011 « Pragmatic Programmer Issues – pietrowski.info()

    • steven

      how about always being self critical of their own work

    • Yoda

      I’d replace the “pessimism” in #10 with “humility”. A great programmer should keep in mind that he doesn’t know everything there is to know about programming, and should realize that creating a large, bug-free and usable system with limited time and resources is very hard (even for a great programmer) and requires a great deal of effort and concentration.

    • satya

      Nice Article bro.
      From the above 10 i have at max 5 Quality(3 sure and 2 partially) thats why i am not a great Programmer but a good programmer.
      I will keep this points in mind to become a great Programmer.

    • Estevez

      1, Finishes task on time
      2, Works for low salary
      3, Works free overtime
      4, Likes to work in the evening and weekends after daily worktime.
      5, Does the job in place of at least two programmers.
      6, He alone can write a whole Win7 like OS in a week.
      7, Understands managers /leaders, and can handle their requests ;)
      8, Take a bath at least once a week, and changes his squared shirt.
      9, He repairs my son’s, daughter’s, wife’s computer for free as a hobby.
      10, He is pleased with his salary, does not ask for a raise.

      • Rick

        Boy, now there’s a manager’s list!

      • Arun

        This is the list i was looking for…….thanks bro:)

      • josphat

        Ya list is open source

      • Michael

        Great :D

        What about…
        11, Understands all my flubbery, blubbery management wishes, reads all the ‘obviously’ well defined requirements between the lines (of name dropping and buzzword throwing) and makes a perfect and easily sellable product from this. Of course including a perfect plan how to convince all our customers that they MUST have this. Besides maintenance cost is of course 0$, as this is a perfect product – and all customers can easily make customizations which also causes never any problem :D

    • Yazzie

      I enjoyed the list and the comments, too! I’ve been laughing out loud as I read through and encountered the gamut of personalities that I’ve come across in this maddening business we call programming! From arrogant to humble, they’ve all chimed in. Love it!

    • Guy

      I think I would also add experience here – great programmers are more likely to be programmers who have been programming for more than 10 years, who have learnt from their mistakes and when they find a bug are happy as there is now one les hidden error…

      I would also add that a great programmer understands the limitations of technology – in that an “automate everything” attitude can lead to more problems for users than requiring the user to actually make an effort to understand what they are doing.
      I have learned this through experience – as automating everything tends to lead to dumb users who rely on you to fix everything whereas educating users enables you to get on with development and the users to get on with doing things ‘properly’ because they understand what they are doing…

    • SmokeyBear

      1. Great programmers comment their code at least somewhat
      .
      .
      .
      n …all else follows.

      • Michael

        Normally i would totally agree.
        What about “great programmers tend to write code which comments itself”?
        Meaning everything you could name in an understandable way is named like that which makes the need for real comments very less. Of course comments for doc generation is a must if possible in the used environment.

    • woot

      Seeing how some of these traits contradict each other, having a bipolar disorder can make you a great programmer!

    • Rick

      I had to smile at 9 and 10. Only a programmer could understant that paradox! However, I also have to disagree with #6. I’ve been writing software for 35 years and have an average math backround. Applied math, really. Since I took electronics, I learned electro-physics math and not trig and I never went further than Algebra II and Statistics in college. A good grasp of logic and problem-solving is sufficient for us non-rocket scientists!

      • Nas

        True about the math, my math skills are not that great but my English is better. I think that there is a link, extending ones vocabulary in English is like extending vocabulary in a particular language.

        So learning new words or set of commands is important which does not require math.

        Also it depends on the application. I think Game programmers need math and physics, but if your doing simple things like get data from a Database and doing some processing and printing out the result doesn’t require math unless its really simple like summing up a total or using an existing formula to covert some data.

        Depends on the application I guess, most apps are text based and dont require that much calculation.

        On the other hand discrete maths can more in tune with computing.

    • Grant Anderson

      Ah, but you missed the most important thing….

      Many years ago I was told that all great programmers love….Sushi!

      So obviously that should go on the list!

      Yes, I think humor is an important trait. :)

      – Grant

    • FaiselJ

      So anyone up for designing a questionnaire for the hapless programmer job interviewee to test these points out?
      Also is there a star sign description here? I’m sure a lot of these are aquarian traits (like me) ;-)

      Back on track, the ability to understand other people’s code, #3, is a good skill, and a good teacher. I think it shows the ability to get into the other writer’s mindset and learn how to do things in other and sometimes unexpected ways. I would extend this to the skill of being able to understand, not just code but everything else around us.

      So what about imagination and creativity? Didn’t we get into programming because we thought we could create new, slick, whizz-bang and original things as expressions of the power of our imagination and understanding of the world around us?

    • Aldous

      does anyone else think it strange that a post about great programming is on a basic wordpress blog with the standard theme and no programming at all?

      • mircea

        Yeah, man, you’re right! It should’ve been in ASCII! :)

    • Gazzos DeLorena

      Wow, you hit me right on the head.

      I am all these things, and coincidentally, mildly schizophrenic.

      I guess I just needed a list on a blog which was referred to by a newsletter I subscribe to that I actually pay attention to.

      Thank you for helping to explain my condition from a beneficial point of view. Up until now I was feeling quite depressed and confused.

      Now I feel kinda smart.

      Thanks again,
      Gazzos

    • http://blog.oscarscode.com/ Oscar

      Wow, I need to start debating more lol
      Totally agree with first 5

    • Ricardo Santos

      @Estevez
      Are you describing a great progammer or a great low self esteem sucker that just happen to know how to program?

    • MartyTInOZ

      13. Ability to say “yes, I’ll do that” when what you’ve been asked to do makes you ill.

    • BigChris

      There are 3 types of progammers…..
      Programmers who can count and programmers who can’t.

      • Michael

        ;)

    • Aldrin

      Thanks for the tips… :-)
      I don’t have the well communication skill.. Sure i ‘ll get it…

    • NeoRagnarokX

      I have every one of these top 10 attributes. I’m perfectionist and I have a mania with organization and optimization, without forgetting I have a fucking bipolar disorder too.

      It’s very frustrating to have to fight yourself all the time, I’m sure I will die young.

    • Ivan Garavito

      I agree with this post, but I name this as a Developer, that makes sense for me. I think imagination is very important, and better when an stupid comment from someone else can be a great solution.

      There is no limits, and there is a great jump from programming to develpment. Programming is just a mechanic process, but Development is an art of making things do the right job as it needs to be done.

      A developer thinks not only about the current problem, (s)he foresees problems that will come across the road and makes a planning for solving them before they happen. And other people could think a developer is crazy, geek, nerd, … they (I could say us!) doesn’t care, because it feels alright when your creation works great on the way you decided to be!

    • Asif Mushtaq

      Hello, the one thing which is missed about the point “Being driven and lazy at the same time” is that the software are lazy which drives them to automate things for the end users and for themselves using scripts, automated builds, unit test, code re usability etc.

    • Michael

      Maybe i should present the list to my boss. Just to make sure he understands what the job is about…

    • Zubair

      For me, its 4 and 5 that make great programmers.

      Someone mentioned ability to comprehend english is also important as the vast majority of articles online that provide the solution to something tricky you are facing will be in English.

      Having said that, have the quality of programming books really improved in the past 10 years or am I just better at understanding what I read having done it for so long ?

    • Dan Oyuga

      10. Be able to daydream!

    • Pingback: Всем сотрудникам отдела! «()

    • http://blog.albegor.com/ Albegor

      Great tips! :)
      I agree with all points except I’d change “Being good at math” to “Being good at logic”, since in my experience logic is more useful to work with multiple abstraction levels (up to nine at the same time according to Dijkstra) any complex software has.

    • michael Grant

      Sorry, Larry Wall said it best.

      “We will encourage you to develop the three great virtues of a programmer: laziness, impatience, and hubris.” (Programming Perl – 1st Edition)

    • Bob

      Enjoyed the list and the comments. There were several comments regarding item #3. I found them interesting as I reflected on the task of converting a very large structural analysis code to operate on a new super computer early in my career. The code worked and was the foundation of the business but it was written poorly, patched often and had virtually no comments. It is always tempting to do a rewrite but it is not always feasible given cost and time constraints.

    • jeff

      great attributes
      my 2 cents
      11. great programmer hates bad code
      12. great programmer looks for the best, fastest, and most clean solution.

    • http://www.srbyte.com Robertux

      11. Hability to enjoy and survive with only tons of office-quality coffee
      12. Hability to sleep only 5 hours a day or less

    • Pingback: The Top 10 Attributes of a Great Programmer - The Pragmatic Craftsman()

    • Kayes

      11. Looking back at own code after two months break and wondering it could’ve been done more efficiently.

      12. Arriving late at office.

    • Paul Gehrman

      11. Understand the limitations and detriments of OOP.

    • LR

      0. Understand that the media and your friends will tell you only what works and will hide the failure and the pills that he/she takes.

    • Pingback: The Top 10 Attributes of a Great Programmer « Raz-Tech()

    • Brian

      I sucked at trigonometry and algebra but was good enough at integral and differential calculus. So it’s the other way around for me hehe. I liked the comment “Being able to daydream.”

      Add one more to the list — Being able to sleep, solve programming problems in your dream, wake up and write the code then wallahh.. problem solved! ;)