59

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.

Robert Harvey
  • 198,589
  • 55
  • 464
  • 673
  • 49
    The exceptional programmers don't have a try-catch block around their code. *zing* –  Sep 17 '10 at 03:15
  • 2
    More and more I think the 10x faster thing is a myth. – JohnFx Sep 17 '10 at 04:33
  • 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 '10 at 16:56
  • 10
    @fennec: Do, or do not. There is no `try`. – mmyers Sep 17 '10 at 19:14
  • 1
    @Pax - I work with a guy who can write Java classes and methods, and SQL out of verbal speech, like solving complicated problems in real time, as fast as I can say them. He's been programming Java for 18 years though. Think about it. Code writing is quick. It's thinking through the problems that takes so long. With more experience you'll know how to do everything you need on the back of your hand. I don't think that kind of speed comes until you reach at least 5 years though. – orokusaki Sep 19 '10 at 03:11
  • 29
    18 years' experience for a language invented 15 years ago is pretty darn impressive! – Ricky Clarkson Sep 19 '10 at 05:50
  • 4
    @John: Exceptional programmers write 10 times less code and they have already planned it when they sit down. They are faster because they do less with more. – Tjaart Oct 12 '10 at 12:38
  • 1
    @Tjaart - And this statistic came from where, exactly? – JohnFx Oct 12 '10 at 13:06
  • 1
    @John, it's not a solid number, it's more in line with what Pax Noctis said. "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." – Tjaart Oct 18 '10 at 10:35
  • 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). – Jon Hopkins Nov 17 '10 at 12:32
  • 3
    @Tjarrt / @John - See more here: http://blogs.construx.com/blogs/stevemcc/archive/2008/03/27/productivity-variations-among-software-developers-and-teams-the-origin-of-quot-10x-quot.aspx – Jon Hopkins Nov 17 '10 at 12:37
  • 6
    @Ricky, exceptional programmers also collect years of experience up to 10 times faster ;-) – Péter Török Feb 04 '11 at 22:31
  • 1
    I'm glad that I'm not classed ever as a 'exceptional' programmer. I was once called a 'cowboy' programmer :) – TeaDrinkingGeek Apr 05 '11 at 15:52
  • 4
    Greg Wilson's slides from Stack Overflow DevDays 2009 in Toronto: http://www.slideshare.net/gvwilson/bits-of-evidence-2338367 - Slides #13-14 talk about Sackman, Erikson, and Grant (1968), citing it as "most frequently misquoted". – Ates Goral Apr 05 '11 at 16:41
  • 2
    @Ates: If it's misquoted, then what is the real quote, and the real meaning behind the real quote? (the slides don't go into this, so ultimately it's an anecdote of an anecdote). – Robert Harvey Apr 05 '11 at 16:55
  • The exceptional programmer *understands* the code. He sees the code and *knows*. That means he can fix every bug instantly. He knows that when this something happens it just can have only ONE cause.. goes there, fixes it. That saves a lot of time. Good programmer will trace the bug, but better one just "knows". The difference is that this one programmer *WANTS* to know the code. He cares. He thinks about progr. problems in his dreams. He just *IS* exceptional programmer by nature... by passion. – Dalibor Filus Dec 09 '11 at 22:54
  • @NoICE - and you've experienced this personally? –  Dec 09 '11 at 23:12
  • 1
    The exceptional ones are those who survive after 20 years. – NoChance Dec 09 '11 at 23:39
  • @Tjaart: it only looks like it was planned before they sit down. Great programmers write and edit code about as easily as most people talk. Many write code like a sculptor wields clay; start with a quick hack at part of the problem, refine, refactor, some of it happening on the keyboard, some in their head. Either way, it happens quickly. In the day it takes an ordinary programmer to get an initial solution working, the rockstar has written that solution and made a hundred little improvements to arrive at the cleanest possible code. – kevin cline Dec 14 '11 at 23:49
  • Well, everyone but me simply sucks. That is the differentiator. – Job Dec 15 '11 at 05:45
  • 3
    @kevin : Better explanation of what I was trying to say: Exceptional programmers find solutions before they sit down to code. Eventualities and corner cases are often catered for from the moment actual coding begins. Exceptional programmers imagine whole systems in their minds and figure out what to do to make it happen in a clean and simple way. They meditate on the design. It's not so much about code. I'ts more about good structure and design. Even a good programmer struggles to edit and work on code that is badly designed. – Tjaart Dec 20 '11 at 14:41
  • see also (duplicate): [How do you go from a so so programmer to a great one?](http://programmers.stackexchange.com/questions/7749/how-do-you-go-from-a-so-so-programmer-to-a-great-one) – gnat Jul 26 '13 at 06:21

19 Answers19

88
  • 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.).

ChaosPandion
  • 6,305
  • 2
  • 33
  • 33
  • 5
    I like your "engineer" point ! – Cedric H. Sep 17 '10 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 '10 at 03: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. – Alex Feinman Sep 20 '10 at 14:07
  • @Alex - The Jenga analogy made me laugh. – ChaosPandion Sep 20 '10 at 17:01
  • 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) – Steven Evers Sep 27 '10 at 22:14
  • @Snorfus - The items I described are a general metric but I can't help but wonder why you think you suck. Heck as long as you were a curious troubleshooter I would say you can be a good programmer. – ChaosPandion Sep 28 '10 at 00:25
  • 1
    @Chaos, "Curious" but only to a point. –  Nov 14 '10 at 21:15
  • 1
    I understand the humble part from a teammate, plays nice with others, and always trying to improve, but at some point, the better developers have better answers, stand behind them and will substantiate their value. – JeffO Apr 05 '11 at 17:07
  • @SnOrfus - as long as you think like that, you'll try to get better. I try to work where I feel like the class dummy; brings my game up tremendously. – DaveE Dec 09 '11 at 23:20
  • You might want to add "business conscious" to that list. A programmer who builds something nobody needs or ends up wanting is a waste of resources. – anon Dec 10 '11 at 00:48
  • I don't know... I've personally known a couple people who were very much in the top echelon of programmers, and one of them was really, really far from humble, and wasn't particularly patient. – Bryan Oakley Dec 15 '11 at 00:37
28

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.

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

They care deeply about their code.

JaredPar
  • 997
  • 6
  • 12
  • 2
    Undoubtedly true. – Robert Harvey Sep 17 '10 at 06:38
  • 3
    Can't a poor programmer care deeply about their code? Eventhough it may not be as good? – Walter Sep 17 '10 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 '10 at 17:17
15

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.

Jé Queue
  • 3,937
  • 2
  • 29
  • 37
11

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.

10

Programmer Competency Matrix

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

Maniero
  • 10,826
  • 14
  • 80
  • 133
  • 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 '11 at 01: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 '12 at 09:55
7

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.

JMC
  • 131
  • 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 '10 at 03: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 '10 at 04:01
6

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.
darreljnz
  • 1,077
  • 1
  • 7
  • 9
3

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

RPK
  • 4,378
  • 11
  • 41
  • 65
3

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

2

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

Ates Goral
  • 1,090
  • 8
  • 9
0

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.

Kevin
  • 1,341
  • 8
  • 12
0

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.

Kyle
  • 2,773
  • 17
  • 24
0

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.

Joonha
  • 89
  • 2
0

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.

Gaurav
  • 567
  • 5
  • 14
  • 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. – Robert Harvey Sep 17 '10 at 06: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 '10 at 03: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 '10 at 16:19
  • @Robert Harvey, I tend to agree with Gaurav that Resig might actually be a great example of "self-promotion" being tied to success (although I'm not sure self-promotion is the right answer for the original question). – Nicole Sep 28 '10 at 00:07
  • 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 05 '11 at 17:11
  • Dunk, Robert: sometimes the *best* way to promote yourself is to write a piece of software so awesome that everybody who uses or modifies it goes, "Woah - who wrote *this*?!". My point is only that if you're the type who goes "Aw, shucks, it was nothing", you're probably not going to pierce the "rock star" sphere of influence - I'm not at all implying that somebody uses self-promotion *instead* of actual programming skills, but a symbiotic intermingling of both. – Gaurav Apr 11 '11 at 15:46
  • 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 '11 at 19:32
0

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

John Shaft
  • 2,527
  • 2
  • 21
  • 30
  • Undoubtedly true for people with experience in any occupation, not just programming. What differentiates the exceptional *programmers* specifically? – Robert Harvey Apr 05 '11 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 05 '11 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 05 '11 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 06 '11 at 08: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 06 '11 at 19:05
  • @Pablo : Also your guitarist analogy doesn't work either. The exceptional guitarists are thinking many notes and even bars ahead of what they are currently playing. They aren't playing notes as they feel it at the moment. I can feel and play the notes at the moment and I certainly don't even qualify as a good guitarist. Putting together a well crafted and flowing entire piece takes planning and practice, you can certainly tell who is just playing random phrases and those who create a musical work. You can bet those creating the musical work have planned it. – Dunk Apr 06 '11 at 19:11
  • @Dunk - I'm might be going a bit out of the realm of 'programmers' here. I completely agree that there is a lot of planning that goes into creating a musical work (any piece of work) but I think that a good competent musician, programmer or whoever works like that. I think the exceptional people started like that but they get to the point where their sub conscious is wired for the task so well that it's instinctive and they just flow. I'm not one of these people so this is just speculation and likely different for different people and dependent on your background (experience and cultural). – John Shaft Apr 07 '11 at 07:31
0

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.

JeffO
  • 36,816
  • 2
  • 57
  • 124
0

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

Gedean Dias
  • 111
  • 2
0

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.

Nicole
  • 28,111
  • 12
  • 95
  • 143
  • Doesn't say much about why. But yes, these are the people I'm talking about. – Robert Harvey Sep 28 '10 at 04: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."* – Robert Harvey Sep 28 '10 at 04:16