Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I am not convinced by the idea that developers are either born with it or they are not. Where’s the empirical evidence to support these types of claims? Can a programmer move from say the 50th to 90th percentile?

However, most developers are not in the 99th or even 90th percentile (by definition), and thus still have room for improvement in programming ability, along with the important skills. The belief in innate talent is “lacking in hard evidence to substantiate it” as well. So how do I reconcile these seemingly contradictory statements?

I think the lesson for software developers who wish to keep on top of their game and become experts is to keep exercising the mind via effortful studying. I read a lot of technical books, but many of them aren’t making me better as a developer.

share|improve this question

closed as not a real question by Thomas Owens Jul 5 '12 at 21:37

It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, visit the help center.If this question can be reworded to fit the rules in the help center, please edit the question.

This is a monologue. What is your question? – Job Feb 6 '11 at 19:02
@Job: there are two questions in there. – Peter Mortensen Feb 18 '11 at 16:59
up vote 8 down vote accepted

In Ten Tips on Improving Your Programming Skills, "Practicing" is emphasized. Going through source code in an open source library can be very helpful. Writing comments for that code, and most importantly, making changes to that code can help you gain more understanding of powerful techniques.

I really support the idea of going through libraries. After 6 months of using Struts 1.3, I sat down and went through the Struts source code and even downloaded a copy of Tomcat's source code. Examining this framework and Java Servlet container helped me understand what was going on under the hood. It helped me make better use of the frameworks I needed to use, and it helped me find and fix those pesky bugs that occurred in the software.

In this Stack Overflow post,, some of the respondents suggest learning a new language every year. I'm a fan of this one. When I learned a little bit of Python and Django, I felt like some of the concepts of the request/response cycle from Java Servlets was similar to what was happening in Python. Realizing that many of the frameworks we use in different languages are just abstractions that share similar concepts reinforced what I already knew about the Web and helped make it easier to visualize once again what happens under the hood.

In this article, they suggest analyzing what you've done in the past. Code I wrote a year ago just isn't as good as code I write today. I've gone back and reviewed code I've written previously and have been able to improve it thanks to both new experiences as well as seeing the code from a different perspective after not thinking about it for awhile.

In summary, the only limits on us are those we place upon ourselves. You can do anything that you put your mind to. If you've hit a plateau, it's most likely because you are burned out. If you're not burned out, then perhaps your learning techniques are flawed, and the information in the above resources may help you discover techniques that pull you out of your funk.

share|improve this answer

As the previous answers point out, programming skill is part talent we are born with, and part lots of practice and hard work.

A couple of notes and links to this:

  • Malcolm Gladwell in his book Outliers argues that you need ten thousand hours of practice to become a master in any field.
  • an article by Joel mentions that a large proportion of (would-be) programmers seem to never fully comprehend pointers and/or recursion.
  • the "talent" mentioned above is actually a lot of different talents. Even if one doesn't have one (say, understanding recursion), (s)he may still have others (like elephant memory, excellent communication skills, or being a "team catalyst") which makes him/her invaluable in a specific project/team. And note that these three example skills can make one useful in very different kinds of software projects and development roles.
share|improve this answer
My french-ness on pointers and recursion: The pointer is an address. So imagine a french bakery, and in the french bakery they make awesome croissants that you can eat. If you're not there but you have the address, you can go there and eat the croissant. You can also give the address to your friend while you are not at the bakery but at your friend's house. Just like passing a pointer. Now your friend can go to the bakery by himself and get the croissant. – Christopher Mahan Feb 18 '11 at 18:19
@Christopher, but what if your friend then finds the bakery closed? Does that result in undefined behaviour? ;-) – Péter Török Feb 18 '11 at 20:22
He's gonna throw a "Croissant not found" Error. – Christopher Mahan Feb 18 '11 at 21:11

Some just have a natural affinity for programming, some don't. But as long as one is dedicated and passionate to this (and not just "do it" because they are told or some other reason like this), one will get better and better over time (and getting better NEVER STOPS, because technology always goes up)

share|improve this answer

Given no one is born as an excellent programmer and yet we have excellent programmers amongst us, the programming clearly is not an inborn skill and it must be learned.

My take is, that "innate talent" is more about really liking/loving something so much, that you can't help yourself from doing it and you keep doing it for thousands of hours (or something like that), which it take to master something (like playing tennis or violin).

And in this scenario learning is more about "joyful playing" than "effortful studying" (ie. learning is an exothermic not an endothermic process).

Edit: About reading books. It's far more nutritious to read books focusing on Why than How.

share|improve this answer
Sorry, but no matter how much practicing of tennis, basketball or football that most people do, they will never be in the top 90% or for many in the top 50%. Because they were not born with the athletic skills. The same goes for any talent, including programming. It has little to do with how much you like it, with the exception that people tend to like to do what they are good at. – Dunk Feb 18 '11 at 22:12

You know what, every one just keeps thinking that, One is a born programmer and some one is not.

If you absolutely love to program and enjoy it... who cares if you are a born programmer or not. Just keep coding.

As Maglob said "joyful playing" than "effortful studying"... it absolutely makes sense. Why think every time if we are going to become Linus or Bill or Stallman...

Just do it for the fun of it as Feynman says...

Maglob - your comment helps some one who is enthusiastic to become a better programmer...

share|improve this answer

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