59
votes

You know who they are. They are the rock stars of programming:

  • They code 10X faster.

  • Their code just works.

  • They not only know their primary language inside and out, but they also know how it works under the hood.

  • They know the answer to most any question before you ask it.

  • A few of them invented the programming principles we all use.

  • And they tend to be uncharacteristically humble, as well.

What is it about these folks? Is there something about their thought process that is fundamentally different from the above-average programmer? Or are they simply very talented people that work hard?

To put it another way: How can I be like them? I know what I think I need to learn to be that good, but it seems like it will take me the next ten years to learn it, and then my knowledge will be obsolete.

22
  • 49
    The exceptional programmers don't have a try-catch block around their code. zing
    – user2348
    Sep 17, 2010 at 3:15
  • 11
    @John: I totally disagree, I've seen the 10x thing in play again and again and it seems to hold true, sadly enough. I think a lot of the problem is that most professional programmers can't really program, and some can't even program simple things. It's not that a godlike coder is 10x above a good coder, but rather a godlike coder is 10x above the worst other coder in his organization or team.
    – Pax Noctis
    Sep 17, 2010 at 16:56
  • 10
    @fennec: Do, or do not. There is no try.
    – mmyers
    Sep 17, 2010 at 19:14
  • 29
    18 years' experience for a language invented 15 years ago is pretty darn impressive! Sep 19, 2010 at 5:50
  • 15
    @Tjaart - No, it is a solid number and studies since the 1960s have shown this. The original study was conducted in the late 1960s by Sackman, Erikson, and Grant. They studied professional programmers with an average of 7 years’ experience and found that the ratio of initial coding time between the best and worst programmers was about 20 to 1; the ratio of debugging times over 25 to 1; of program size 5 to 1; and of program execution speed about 10 to 1. They found no relationship between a programmer’s amount of experience and code quality or productivity. (Thanks to Steve McConnell). Nov 17, 2010 at 12:32

19 Answers 19

88
votes
  • Humble: An exceptional programmer will never claim their code is the best, in fact they will always be looking for a better way (Every chance they get.).

  • Patient: An exceptional programmer will have boundless patience (This does not mean they will waste days on a problem. See: Troubleshooter).

  • Troubleshooter: An exceptional programmer will be able to solve a problem in minutes that may take days for your average programmer.

  • Curious: An exceptional programmer will be unable to resist trying to figure out why something occurs.

  • Engineer: An exceptional programmer will engineer systems rather than hobble together a mishmash of frameworks (This does not mean they won't use frameworks.).

11
  • 5
    I like your "engineer" point !
    – Cedric H.
    Sep 17, 2010 at 11:05
  • 1
    @Chaos - The fastest programmer I know built his own web framework. Things like that I think are what make somebody better and faster. Thanks for your answer. It makes me feel less helpless in always wanting to re-engineer things.
    – orokusaki
    Sep 19, 2010 at 3:12
  • 11
    "Engineer" is a crucial point. Every line of code will create a solid foundation, rather than adding to a rickety Jenga-like creation. Sep 20, 2010 at 14:07
  • 5
    I won't -1 but as a counter-point, I qualify for all of these; and I still suck. (Unless the average programmers to my exceptional that I compare against are actually terrible) Sep 27, 2010 at 22:14
  • 1
    @Chaos, "Curious" but only to a point.
    – user1249
    Nov 14, 2010 at 21:15
28
votes

You hit on a lot of it in your very last bullet point:

"And they tend to be uncharacteristically humble, as well."

I think it's a combination of humility -- not just outward but also inside their minds. They accept being wrong, making a mistake, and have a very quick turn around from frustration. A lot of programmers will try something, fail, and then get very emotionally wrought pretty quickly, a state that is anathema to writing good code. You have to accept that you're not perfect, and that you're going to screw up (often!), and that the best thing you can do is learn how to quickly recover when you do screw up. It's a humble confidence, like "I know I'm going to mess up, but I also know if I keep trying, I'll get there eventually."

There's a saying in NLP, "There is no failure, only feedback." To be a rock star programmer, I think you have to embrace that. There is nothing you can't code. You might be slow at it, at first, but if you just keep trying and refuse to stop when you fail or screw something up, you'll deliver. And in that process you'll learn all the mental tricks you need to become one of the best.

Advice is, of course, only as good as its source, so... all just my opinion.

2
  • “I haven't failed, I've found 10000 ways that don't work” - Thomas Edison
    – ninjalj
    Sep 27, 2010 at 21:35
  • 1
    The only way to be able to learn fast, is to accept that you can improve and want to.
    – user1249
    Nov 14, 2010 at 21:16
25
votes

They care deeply about their code.

3
  • 2
    Undoubtedly true. Sep 17, 2010 at 6:38
  • 3
    Can't a poor programmer care deeply about their code? Eventhough it may not be as good?
    – Walter
    Sep 17, 2010 at 11:31
  • 2
    @Walter they could but I just haven't ever seen that. The closest I've seen is newbie programmers who deeply cared about their code but still made newbie mistakes (nobody is immune). When those mistakes were pointed out though they were fixed speedily and rarely repeated.
    – JaredPar
    Sep 17, 2010 at 17:17
15
votes

Personally, the best programmers I know/knew understood the basics and were NOT the expert in any given language. They simply had sufficient experience on just about everything. The canonical "Jack of All Trades."

It is more than foundational science, there is significant value in experience in actual operations. Examples, those that understand the Unix Philosophy and thus could solve unknown problems with various tools given (IOW they knew where to look) far out-value the Java expert who coded a threaded and parallel solution.

The outstanding programmers also respect those who came before them. They don't hate relational data models or cringe when they see SQL as a formal API, nor balk at FORTRAN in maths. They know that OO is not the end-all, and above all else understand that programming is an ART, not a science.

2
  • 2
    For text-files grep, awk, sort, and uniq can answer a LOT of questions. If you have perl too, even more!
    – user1249
    Nov 14, 2010 at 21:18
  • 2
    I think it's a handcraft, not science nor art. Apr 5, 2011 at 17:04
11
votes

When I first started, I was working with this guy who I thought was absolutely brilliant at everything he did in terms of programming. He quite possibly still is, but he's moved up to be the director of a company in SE Asia now.

Anyways, he kept things simple, and the simple stuff works. Never wanting to write more lines of code than necessary, everything he did just worked. I was playing catch up for a year just to get near his level. The other thing though, is time. He had been doing things for a lot longer than I had at the time, and he'd had the chance to ask these exact questions over and over, until he knew (seemingly) all the answers.

He wasn't afraid to ask questions either. I think that's the biggest thing.

4
  • It sounds like i am all set (see my question count on SO)
    – user2528
    Sep 18, 2010 at 6:43
  • 2
    @acidzombie24 - Or... you've just begun.
    – orokusaki
    Sep 19, 2010 at 3:16
  • haha orokusaki. +1
    – user2528
    Sep 19, 2010 at 5:46
  • "Keeping things simple" is one of the beauties of Test Driven Development. I cannot recommend it highly enough.
    – user1249
    Nov 14, 2010 at 21:19
10
votes

Programmer Competency Matrix

Many topics to help identify what's your level on programming topics.

2
  • Knowledge of stackoverflow: 2^n: Never heard of it O(n^2): Regularly poses some easy questions on SO O(n): Poses interesting questions and is aware of programmers.SE O(log(n)): Top user on a CS-related SE site. ;-)
    – shuhalo
    Dec 10, 2011 at 1:08
  • Thanks so much for this link! It gave me confidence regarding what I know and pointed me to what areas I should improve.
    – oksayt
    Jan 26, 2012 at 9:55
7
votes

I learned the answer to this question in a book about Texas Hold'em poker, but it applies to all frustrating endeavors. The best coders never go on tilt. Going on Tilt is the time when something doesn't work as you expected, and you respond in a way that creates exponential mistakes in the overall application. In tournament poker it causes you to place bad bets and get knocked out.

In programming, tilt causes you to pull out your hair and write ridiculous patches of code that only work in certain instances of your application. Tilt causes programmers to ignore the needs of the project as a whole, grasping for instant gratification to solve the immediate problem now. Often times the problem gets solved today, but the application suffers tomorrow.

The best coders take the tilt concept and manage it in a way that allows them to look at problems from an outside perspective, always. If that fails drink some caffeine.

2
  • what do you suggest doing as an activity to overcome "tilt" while programming? I get it all the time, and end up recoding stuff all the time.
    – orokusaki
    Sep 19, 2010 at 3:18
  • @orokusaki - The easiest activity to avoid tilt is to change a fundamental question that programmers ask themselves everyday. When tasked with a problem, Instead of thinking: "Why should I solve the problem this way?" ask: "Why should I avoid solving it this way?" Often the answer to why you should not solve a problem with a particular solution will give you a set of pointers for finding a better solution.
    – JMC
    Sep 21, 2010 at 4:01
6
votes

Exceptional programmers:

  • Care about their code
  • Care about the users who use their code
  • Care about the people who will maintain their code
  • Care about productivity
  • Care about the process, not just the product

Two things about the "10x" factor:

  1. It has to be applied end-to-end. It is no good writing code 10x faster if it takes 10x longer to test, rework and maintain.
  2. I believe the "10x" factor is a reflection of how poor a high number of programmers are rather as opposed to how good a small number of programmers are.
3
votes

most of them look reserved and nothing special.. some of them look super-smart.. they prefer to check/debug things twice from all possible points of view, their software is the bugless in world :p IMO some programmers may be slower, but the quality is better, even ordinary people can understand how their software works!

i have a friend who wrote his first ASM program at the age of 10, now he is 24, didn't finish university, but that didn't stop him from creating his own company, making millions :) but from what i see he is dexterous in everything :)

exceptional programmers would most likely say this code can be coded in another- better way rather than saying its totally wrong an lower other programmers reputation :)

"What is it about these folks? Is there something about their thought process that is fundamentally different from the above-average programmer? Or are they simply very talented people that work hard?"

i think they are born that way, its inside their DNA :p i don't know about their thought process, but the best programmer i ever knew had epilepsy

3
votes

Few things differentiate an exceptional with a typical.

Exceptional:

  1. Highly passionate about his work and strive to deliver a master-piece.

  2. Performance and quality is the big picture in their mind even before coding starts.

  3. They think of continuous improvement after each release.

  4. They keep strict vigil on the alternatives and are early adopters.

  5. Their theme in professional life is: "Write less convey more".

  6. They keep thinking about logical perspectives even when not coding.

Typical

  1. Sometimes somewhat passionate but strive to deliver because it is a job after all. If it is not a masterpiece, its OK. At least delivered on time.

  2. Will think of the performance later, anyway PCs are fast enough these days.

  3. Improve only when there is no option left to save a job.

  4. No time to dig into other technologies. Stick to what your job demands now. Will learn other things when the need arises.

  5. Their theme is: "Do what is asked and reach home in time".

0
2
votes

Exceptional programmers apply Spartan Principles.

Attention-grabbing image:

enter image description here

This article: http://willcode4beer.com/design.jsp?set=codeReduction

And this quote:

Any fool can make things bigger, more complex, and more violent. It takes a touch of genius - and a lot of courage - to move in the opposite direction. - Albert Einstein

1
  • 5
    image is illustration of Big-O notation.
    – user1249
    Aug 24, 2011 at 13:33
0
votes

Self-promotion, and I mean that in the best way possible. Having a job like programming, especially in a team, means it's not immediately obvious where your personal contribution fits in to the large picture, or who was responsible for which bit. The people we hear about and learn about as "great programmers" are IMO those who have mastered the art of making their contributions known without sounding egotistic or self-centered about it. In many cases, this is by creating the tools, libraries and software the rest of us rely on to earn our daily bread.

7
  • 3
    Perhaps, but I believe John Resig is well-known for his remarkable accomplishments with Javascript and jQuery. His stuff is widely used because it is great, not because John has great marketing skills. Sep 17, 2010 at 6:38
  • @Robert Harvey - Or, is it? He is no doubt a great programmer, but perhaps what made him from really good to "exceptional" was the fact that his stuff took of in popularity and he was a victim of his own success, having to keep up with the rising demand? When you really like a shirt, but it's too big, don't try to grow into it before you buy it. It'll be gone by then. Buy it, and then try your hardest to grow into it.
    – orokusaki
    Sep 19, 2010 at 3:21
  • Robert: Definitely. But if he'd just shared jQuery with a few friends and at work, we'd might never know about him at all. We know him as a great programmer precisely because he had the courage, not just to share jQuery with the world, but also to actively promote it as a better way to do Javascript. I'd like to see more programmers (including myself) learning how to do that effectively.
    – Gaurav
    Sep 19, 2010 at 16:19
  • 1
    -1 While this may be true in the eyes of managers when it comes to self promotion, I've never seen it work amongst other developers. Amongst developers, it doesn't take long at all to figure who is good, who is average and who sucks. Self promotion is not even part of the equation.
    – Dunk
    Apr 5, 2011 at 17:11
  • 1
    @Gauruv - I think the "rockstar" programmers are the ones that are able to take hard problems and make them really simple. Thus, I would not think a piece of code is awesome if I looked at it and said "Woah - who wrote this"? While I thought otherwise out of school, real world experience has taught me that cleverness in code is not a virtue. I'm more impressed with the people that I don't need to worry about whether their stuff works or not because I already know that it works without ever having to look at it. Those people are few and far between and are the real rock star programmers.
    – Dunk
    Apr 15, 2011 at 19:32
0
votes

1st - They know what cut off when face the dead line.

0
votes

Very good related article: The Free Electron (from randsinrepose.com)

I apologize for not summarizing the article here, but the points are not easily separated from the prose.

2
  • Doesn't say much about why. But yes, these are the people I'm talking about. Sep 28, 2010 at 4:14
  • Quoting from the article: "A Free Electron can do anything when it comes to code. They can write a complete application from scratch, learn a language in a weekend, and, most importantly, they can dive into a tremendous pile of spaghetti code, make sense of it, and actually getting it working. You can build an entire businesses around a Free Electron. They’re that good." Sep 28, 2010 at 4:16
0
votes

They program purely on intuition. No need to think it just flows.

7
  • Undoubtedly true for people with experience in any occupation, not just programming. What differentiates the exceptional programmers specifically? Apr 5, 2011 at 15:42
  • Well, I'm not one of them so I definately can't answer this question with 100% certainty but I don't think it's not about knowledge but rather thought process (sub consciously). I think people that are exeptional at anything have an ability to clear out any interference in their thoughts and see something in a very simple form. The simpler something is the easier it is to process.
    – John Shaft
    Apr 5, 2011 at 16:04
  • 3
    -1 That is SO WRONG in every possible way. I wish I could -100. I would say exactly the opposite. THEY DO THINK THROUGH and solve the problem before they begin.
    – Dunk
    Apr 5, 2011 at 17:14
  • @Dunk - I disagree. With what you wrote I would say is what a normal programmer does. There's nothing exceptional about that. I compare exceptional programmers to exceptional guitarists. They're not thinking about the notes they're playing, they just feel it.
    – John Shaft
    Apr 6, 2011 at 8:45
  • @Pablo - I guess our experiences differ. In my experience normal developers go by intuition and mistakingly think it just flows. Thus, they create a lot of garbage. Exceptional developers take the time to understand where they are going. Just because someone can show you on the fly how you should be designing your component doesn't mean they are doing it out of intuition. I'll bet they've either done it before or they have the big picture view of the system already crafted in their mind, if not in documentation. Thus, what you call going on intuition is really following a thought out plan.
    – Dunk
    Apr 6, 2011 at 19:05
0
votes

Exceptional coders have influence on a project beyond the scope of their own code and spot problems before they happen because of their experience. They make everyone on the team better and save their projects from bad design and management.

They've actually created something that is exceptional.

0
votes

but it seems like it will take me the next ten years to learn it, and then my knowledge will be obsolete.

It will. You've already established that these guys are 10x faster, which is why they learn it in 1 year and it takes you 10. For the serious part of the answer I think it's that they're already super smart (could be very successful at anything), they love coding, and they for some reason have (or find) an abundance of free time to practice coding or work on personal projects.

If you're asking this question here you probably don't have what it takes (don't worry I'm answering here so I probably don't either). Don't fret though you can still get to be crazy good if you love coding.

0
votes

There are lots of well intentioned posts here about Humility, Engineering, Passion, Patient, Troubleshooter. IMO these are all required. However, they describe the top 30% of programmers.

I think you're asking about the truly exceptional programmers, the top 1%.

One of the things that I envy about the occasional very rare talent I work with is their ability to keep a very large amount of detail about a complex system in their head at one time, and to be able to recall it quickly. I think that I can do this on occasion, maybe once a month, when I'm truly in the zone. This feeling is wonderful. The developer I'm thinking of seems to be able to be in that zone most of the time.

It is this one trait, IMO, in addition to the Humility, Curiosity, Engineering, Passion, Patience and Troubleshooting ability that make them truly exceptional.

0
votes

Having the quality of self motivation and self determination as well having the willingness to go into an abyss of the unknown and being comfortable with being absolutely confused as part of the process is huge. Its not so much about initial smarts as you would think because the brain becomes much better at things its always doing and thinking about. I came from nothing in college and then became very well off just by sheer persistence, never giving up, being that guy that kept at a problem when all others got tired of trying to figure it out. After that type of persistence, problems became easier and easier and coming from being the noob in college to putting most of them to shame at this point. Sheer talent is not enough and can sometimes lead to resting on your laurels.

Also, to Robert Harvey, you keep doinking my posts when I mention anything to do with my CMS that I wrote from scratch. You see several others listing links that they may or may have not written. You are pushing people down that are self motivated which is ironic that you posted this. You are "the man" in this small universe and not reading things on their merit, rather just doinking and deleting at your whim. You also love Star Wars way too much and probably wave your hand at the automatic opening doors at the grocery store kind of believing you have the force.

Not the answer you're looking for? Browse other questions tagged or ask your own question.