views:

2131

answers:

18

If you are a thriving/budding programmer, what are the signs that you may have a gift/talent?

For example, in snooker (or billiards as you guys in the USA call it) a sign of talent is that you can play with both hands, make the white do all sorts of things with a lot of cue power and spin.

In programming, what would be the equivalent signs of talent? Would it be the ability to program in multiple languages? Extremely quick at problem solving? Ability to write very robust code very quickly?

Thanks

+42  A: 

The biggest talent is the talent to learn. For example, I don't judge on what languages somebody knows - what is more important is that they are actively learning and trying new things. Playing with new tools. Regularly.

It is very easy to find somebody who is very very good at what they do today, but can't translate those skills to something new. Unfortunately, this business moves frighteningly quickly at times.

Marc Gravell
Good programming talent also needs ability to solve problems and come up with novel solutions to issues. If you can think out of the box, it'll help.
Cyril Gupta
I do not like the phrase, 'think out of the box'. It is usually used by managers who don't know how to define the problem.
Arthur Thomas
I can certainly relate to that. I had to jump from a familiar language (.NET) and work in other languages and also PHP with CMS-specific development in a job.
dotnetdev
@Arthur Thomas: I agre, "thinking outside of the box" is one of those cliches I'd like to see outlawed in the English language. No one has pure "rigid" thinking and no one has pure "flexible" thinking. We all solve problems out of our past experience and that's it.
omgzor
@Arthur Thomas: Many times there isn't even a box to think outside of... :(
mpeterson
One of my standard interview questions was intended to gauge this quality. After talking to them about their current/previous project, I would ask a question that amounted to, "If you had to do it all over again, what would you do differently?" Sometimes it's tools, sometimes it's coordination (often my answer to this question). Once it was "nothing at all". Needless to say, that guy didn't get the job.
Jason
+2  A: 

First, a deep understanding of the language, framework and platform they use -- not just the knowledge of, say, the language syntax -- but a deep understanding of how that language/etc. is different from others and how to use it most effectively.

Second, architecture: knowing when and where to bifurcate or combine elements, when to use abstractions and when not to. Bad programmers have no sense of architecture, average programmers often overuse architecture and patterns, and great programmers have the ability to use just the right amount, changing as the application expands.

David Broderick
+3  A: 

The ability to think ahead and enumerate possibilities. How might someone use this software? What might they do that I'd never do? How might this software need to change? What's going to make this software easier to maintain in the future? What could happen outside my control that could make my code fail?

John D. Cook
+20  A: 

I feel there are three related qualities which make a talented programmer. These are managing complexity, delivering quality, and forward thinking. These may not seem like quantitative attributes but I think they can be.

First, the ability to break a problem into small, manageable parts. A problem can be anything- from a feature request for a product to a complex algorithm. The idea is a programmer doesn't get lost in the complexity. They can break the problem into small, manageable pieces which can be done incrementally or concurrently with a group of people. This should be easy to measure- if you can understand a complex problem then it's broken down enough.

The second quality is the ability to deliver a "thing" to a "user" efficiently and with a positive result. A user can be another programmer, a product owner, even a business. The "thing" can be an class, framework, a website, or even an answer to a simple "Is this possible?" question. If you're impressed with the end result in an expected timeframe it's good. If it's an overkill solution or it took too long, then the problem wasn't broken down correctly! Why shouldn't you be impressed with a software product?

Third, a developer must have vision which is aligned with goals. Foresight is extremely important. Systems are organic and must grow. If something is done quickly and fancy, but is full of bugs or can't be changed, then shortcuts were taken and a bad product was built. If something was done that doesn't get the group to where they need to be, then the programmer isn't really helping anybody. What positive value is being added for the end result? This should be explicit and visible.

To gauge these qualities quickly (as in an interview) simply do some role playing games. Propose a complex problem and see if it can be broken down effectively. Ask how it will be done. See if long term problems can be solved or the system has extensibility points for growth.

mhamrah
+4  A: 

All good programmers are able to make sense of and be comfortable with a system which is beyond their understanding. All software systems are now to complicated for a single person to understand, so the best programmers are those who can craft elegance and simplicity out of what is really hopelessly complex.

There's been some research which says that you can give people a test who have no programming knowledge which predicts whether or not they'll be able to become a good programmer in the future.

http://www.boingboing.net/2008/12/12/comfort-with-meaning.html

Now the best way to see if somebody IS a good programmer is to look at the open source software they've released or contributed to. Good programmers care about the stack they use, and therefore want to improve it. So good programmers have almost by definition released or contributed to free / open source projects.

rabble
+2  A: 

I think the biggest talent is to learn quickly. If you have a new programmer on board, and you only have to explain him once, that is a talent.

Alternative sign: he understands Java generics. :-)

LiorH
Q: Why is a drum machine better than a drummer? A: You only have to punch the information in once. :-P
j_random_hacker
+1  A: 

Mathematics, and human languages.

In the old days, when only big companies and governments had computers, and you couldn't study them in school, I think that they used to recruit mathematicans (and, I think, people with a gift for languages) to train as programmers.

My guess as to the reason for this isn't only that people who are proficient in Mathematics and in language translation have demonstrated an interest and ability to learn new things ... it's also that they know something about substituting symbols, for example:

  • Maths: (x == y) => (x^2 == y^2)
  • Languages: The cat sat on the mat => Le chat s'assit sur le tapis.
  • Compters: x = y++; => mov ax,[y]; inc [y]; mov [x],ax;
ChrisW
+4  A: 

I think you can tell talented programmers by the way they solve problems. Anyone can solve a problem given a long enough time but really talented programmers will build tools around the problem to not only solve it, but to make make solving it in the future more efficient.

bkildow
+3  A: 

Talented programmers enjoy problem solving (with or without code) and take pride in improving their skills.

The best programmers are also willing to act as a resource for others, sharing their knowledge while being patient with the people they help.

David Crow
+34  A: 

0) Understands programming is problem solving. The better you get at solving problems in general, the better programmer you will be.

1) A beautiful mind. An ability to quickly, clearly understand how the data in the system is interacting with each other.

2) Hobbyist - solves problems of all kinds in his spare time. Learns to apply the different ways

3) Loves to develop software - Painters love painting, writers love writing, musicians love making music..

4) Constant learner - never knows enough. Instead of "I don't know", the first thought in their mind is "I want to know how".

Jas Panesar
0-indexes all his lists :)
Oliver N.
Ha, that's the first thing I noticed
Carson Myers
+1 for the above. But the most important quality is the nature of their hobbies. What kind of work the programmer does in his/her spare-time is IMHO the best indicator of their potential.
Mikos
Some of us use zero-indexing as a way of adding a first point to a list already written, without re-numbering all the list items!
Arafangion
+6  A: 

An enthusiastic ability:

  • to learn
  • to ask why things are
  • to ask why things are not
  • to think outside the current norms
  • to check that you're trying to solve the correct problem
  • to not get bogged down in the sme set of technologies
  • to play when something new comes along
  • to break the established rules when looking at the usual uses of a technology

Maybe read Steve Yegge's excellent blog article "Done and Gets Things Smart". If you recognise yourself in that article then you're off to a good start.

cheers

Rob

Rob Wells
+7  A: 

Signs of a good programmer:

  • Ability to break down a problem into tasks.
  • Ability to estimate the time it takes to program and finish the tasks.
  • Actual time spent on tasks matches estimates very accurately. Personally I think this might be one of the strongest signs of talent in programming; it also reflects the reality that a "good programmer" is only good if he knows the tools he's working with.
  • Ability to adjust their style of programming, from quick & dirty to fully thought-out and documented (both styles have their time and place).
  • Related to the previous point is the ability to avoid overkill solutions, to know when a problem is best solved by programming in repetitive laundry lists, or when to build tools and additional complexity to handle the repetitive tasks for you.

This goes for everyone who needs to collaborate, but is vital also for programmers:

  • Ability to ask for advice, and quickly and understandably explain problems to others who have no clue about the context of the problem

Pretty much on the same lines with @mhamrah.

Niko Nyman
+1 For "ability to avoid overkill solutions".
Chris O
+5  A: 

The talented programmers who come to mind have this in common: they can surprise me (in a good way). They sometimes write much simpler programs than you'd expect from your first look at the problem. They're fluid about what the problem is. Once they're satisfied with their solution, it's expressed clearly: it's hard for me to clear it up much further. They can write. (Programming is writing made runnable.)

A lot of the responses here seem to be about what makes a good programmer. 'Talent' suggests something extra -- even if innate talent is a myth, if I have to use the word, that's what it looks like to me.

Darius Bacon
+1  A: 

Signs of talents in programming

a) Given a problem , using the right set of tools/language/architecture to solve the problem.

b) Getting things done.

c) Document what you code or if you reading other code (which many think is not a true programming talent, but be able to clearly document what you code is also a great programming talent).

kal
A: 

They are Smart, and Get Things Done.

Wayne Koorts
A: 

adult programmers:

1) A good portion of the items they use daily (cell phone, car, notebook, software, digital camera, home theater, LP records player) should be of an advanced variety and highly customized.

2) If you talk fuzzy logic ("is eating fish considered vegetarian? how about eating eggs?") -- their natural reaction should be to build a consistent system of definitions drawing well-defined borders between the categories. Or at least they should point at apparent difficulties of building one.

3) Watch them using computer -- they should be very fast and efficient with keyboard and mouse. If you're not a programmer yourself, you shouldn't be able to follow.


in early childhood:

Give them gadgets they've never seen before. Don't set a fixed goal though. Just spread the gadgets out, give them an hour to play, and then ask each one (in isolation from each other) what tricks s/he discovered.

A child with talent for programming should discover more tricks and more complex tricks (i.e. by combining features) than a mediocre one.

Several precautions. Make sure they're not under pressure. Make sure they don't know the point of the exercise.

zvolkov
A: 

understands pointers

RN
A: 

Links and References (this can be made community wiki for ease if you want)...

What skills doth a good developer possess?

A Field Guide to Developers

Finding Great Developers

The Duct Tape Programmer

Ein2015