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.  

    76 thoughts on “The Top 10 Attributes of a Great Programmer

    1. gozh2002
      #

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

      10…
      11.sense of humor

      Reply
      1. sorin7486
        #

        +1

        Reply
      2. Prashant
        #

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

        Reply
    2. 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 :)

      Reply
    3. Rob Dickens
      #

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

      Reply
    4. Sailor Girl
      #

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


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

      Reply
      1. 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

        Reply
    5. Steve Stone
      #

      The Top 10 Attributes of a Great Programmer:

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

      Reply
      1. 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!

        Reply
        1. DonBarry
          #

          i agree Pete. lol.

          Reply
    6. 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

      Reply
    7. 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!

      Reply
    8. Bob
      #

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

      Reply
    9. Mike
      #

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

      Reply
    10. Eric
      #

      11. A teensy bit of modesty.

      you lose. ;)

      Reply
    11. Steve Riley Post author
      #

      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:)

      Reply
    12. 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! :)

      Reply
    13. Ashish Mohta
      #

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

      Reply
    14. Arvin Jayson Tamayo Castro
      #

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

      Reply
    15. 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.

      Reply
    16. Randolpho
      #

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

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

      Reply
    17. Programmer
      #

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

      Reply
    18. raetsel
      #

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

      Reply
    19. 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.

      Reply
      1. mircea
        #

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

        Reply
    20. 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!

      Reply
      1. 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…)

        Reply
        1. 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! :) :) :)

          Reply
    21. 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.

      Reply
    22. 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.

      Reply
    23. Mitch Garnaat
      #

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

      Reply
    24. Pingback: Pedro Newsletter 16.05.2011 « Pragmatic Programmer Issues – pietrowski.info

    25. steven
      #

      how about always being self critical of their own work

      Reply
    26. 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.

      Reply
    27. 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.

      Reply
    28. 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.

      Reply
      1. Rick
        #

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

        Reply
      2. Arun
        #

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

        Reply
      3. josphat
        #

        Ya list is open source

        Reply
      4. 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

        Reply
    29. 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!

      Reply
    30. 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…

      Reply
    31. SmokeyBear
      #

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

      Reply
      1. 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.

        Reply
    32. woot
      #

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

      Reply
    33. 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!

      Reply
      1. 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.

        Reply
    34. 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

      Reply
    35. 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?

      Reply
    36. 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?

      Reply
      1. mircea
        #

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

        Reply
    37. 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

      Reply
    38. Oscar
      #

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

      Reply
    39. Ricardo Santos
      #

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

      Reply
    40. MartyTInOZ
      #

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

      Reply
    41. BigChris
      #

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

      Reply
      1. Michael
        #

        ;)

        Reply
    42. Aldrin
      #

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

      Reply
    43. 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.

      Reply
    44. 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!

      Reply
    45. 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.

      Reply
    46. Michael
      #

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

      Reply
    47. 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 ?

      Reply
    48. Dan Oyuga
      #

      10. Be able to daydream!

      Reply
    49. Pingback: Всем сотрудникам отдела! «

    50. 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.

      Reply
    51. 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)

      Reply
    52. 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.

      Reply
    53. jeff
      #

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

      Reply
    54. 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

      Reply
    55. Pingback: The Top 10 Attributes of a Great Programmer - The Pragmatic Craftsman

    56. 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.

      Reply
    57. Paul Gehrman
      #

      11. Understand the limitations and detriments of OOP.

      Reply
    58. 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.

      Reply
    59. Pingback: The Top 10 Attributes of a Great Programmer « Raz-Tech

    60. 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! ;)

      Reply

    Leave a Reply