Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I have a friend who asked me whether I can be her mentor as a programmer. I had to tutor several junior programmers in the past so I have experience working with / tutoring people on different skill levels.

This is the first time however when there was no pre-filtering and the future programmer is an absolute beginner. Is there a method that has a chance to work in order to tell someone's innate talent level?

share|improve this question

closed as primarily opinion-based by gbjbaanb, MichaelT, gnat, Martijn Pieters, Bart van Ingen Schenau Feb 22 at 12:28

Many good questions generate some degree of opinion based on expert experience, but answers to this question will tend to be almost entirely based on opinions, rather than facts, references, or specific expertise.If this question can be reworded to fit the rules in the help center, please edit the question.

27  
The 64-million-dollar question, right there. Answer that one and we GIVE you the internet. –  pdr Feb 21 at 16:49
2  
It's much much worse. –  ratchet freak Feb 21 at 16:50
2  
Everyone has their own techniques. But a proven method? In my experience, the best recruiters (who you would hope are the best at identifying inate ability) couldn't tell you how they do it. And if they could, they probably wouldn't. –  pdr Feb 21 at 16:52
2  
This assumes that programming (or some subset of programming) can have innate talent in the first place. Personally, I think it does, but even that is far from an answered question. –  Telastyn Feb 21 at 16:57
3  
A programmer looks both ways before crossing a one-way street. –  user61852 Feb 21 at 17:58

8 Answers 8

up vote 8 down vote accepted

Short answer:

A programmer looks both ways before crossing a one-way street. -- Doug Linder

Long answer:

Make them take An hour of Code tutorial. It doesn't need the person to "write" code. They would only need to put blocks that fit together and that represent a program's steps.

At the end of the tutorial, if the person is able to program a cartoon character out of a maze, chances are he/she has what it needs to be a programmer.

Observe, and see whether she/he:

  • can split a big problem into repeatable smaller steps instead of a long, specific sequence of steps.
  • understands that computers are not smart and that when programming, you usually have to check if something can be done before attempting it, otherwise the program will produce an error.
  • understands that some blocks are more complex under the hood but you don't have to think of that just yet.
  • is patience and doesn't give up after trying many times.
  • realizes that even when the tutorial is a game, the programming behind the internet, Angry Birds or Windows is basically the same process of solving small parts of a problem and glueing them together.
  • likes to programm, because people who doesn't like to program is not likely to become a good programmer.

This tutorial is an effort the software industry is making in order to get children interested in programming at an early age, because there's a shotage of programmers in the USA.

enter image description here

In the image, sample "code" in the Hour of Code "IDE"

share|improve this answer
    
An hour of Code is just the thing I need, thanks! –  Adam Arold Feb 22 at 11:11

Check out this paper called "The camel has two humps". It talks about a very simple example of what people intuitively understand at the start of their first computer science class (Top of Page 6). If they fail to grasp how a computer thinks at the start of the class, they tend to not understand at the end of the class. It's a really interesting read. Credit to Coding Horror. I've copied out the question:

1.Read the following statements and tick the correct answer.

int a = 10;
int b = 20;
a = b;

The new values of a and b are:
[ ] a=30 b=0
[ ] a=30 b=20
[ ] a=20 b=0
[ ] a=20 b=20
[ ] a=10 b=10
[ ] a=10 b=20
[ ] a=20 b=10
[ ] a=0 b=10
If none, give the correct values:
a=     b=  
share|improve this answer
1  
This is a good test for imperative programming. We should have the equivalent for declarative. ;) –  Rob Y Feb 21 at 18:35
2  
Its not so much "how the computer thinks" but rather that "have a consistent mental model of how a program works (even if the model is wrong)" The students that were consistent but had the wrong model were able to be corrected to use the proper model. –  MichaelT Feb 21 at 18:39
    
@MichaelT Well put. I'm more meh with language, and just aim for basic ideas rather than well-good phrasing. See? –  Kieveli Feb 21 at 19:21
    
You linked to one of the best pieces of text about this subject I've ever read. +1 :) –  Radu Murzea Feb 21 at 22:03
1  
This question assumes that people intuitively understand that = in programming is used for assignment and not boolean equals the way it's traditionally used in Arithmetic. As far as I'm concerned, all this test measures is confirmation bias that programmers understand the most basic of programming. –  Evan Plaice Feb 22 at 11:22

I'm assuming you want to identify who would make a good programmer, so innate ability is only part of the puzzle. "Smart" people who don't put in the time or have a willingness to learn don't get very far. Are there brilliant people who are so stuck in their ways of doing things they never expand their skill set?

Why can't we evaluate programmers by programming? If variable declaration just blows their mind, you can stop right there. Probably much faster than giving an IQ test.

Don't confuse what you're doing with the same process as evaluating job candidates. If I have to hire just one programmer, I can risk missing out one someone as long as, I manage to find another qualified candidate. Granted, when supply is short, there may only be one qualified candidate, so you better get it right.

So what if you spend a little extra time with this person and conclude she doesn't have it? Maybe you could recommend trying some online tutorial and do some follow-up. This could be a way to discover there isn't enough interest and/or ability if she just gives up.

share|improve this answer
    
and conclude she doesn't have it? this last paragraph seems a bit pessimistic to me. I don't know yet whether she is programmer material or not. I'm looking for a way to determine it. –  Adam Arold Feb 21 at 17:25
    
It's very hard to believe that the majority of people don't understand variable declaration. Considering how many people pass basic algebra, if the failure rates are that high I'd look to the test itself as the culprit. –  Evan Plaice Feb 22 at 11:14
    
@AdamArold - If someone struggles to learn programming for whatever reason (especially the basics), that determines it. –  JeffO Feb 25 at 16:19
    
@EvanPlaice - I agree. I was just trying to come up with an obvious indication that someone "probably isn't going to be a good programmer" rather than indicating they "will be a good programmer" because they're capable of something very basic. –  JeffO Feb 25 at 16:20

If you're just looking for programming talent sans coding skills. Have them play SpaceChem and observe how they approach problem solving.

That game has a seriously steep learning curve that includes the logic of computer programming with the science of chemistry; yet, it requires zero actual coding skills.

Programming analogues include:

  • in-order execution
  • loops
  • branching
  • synchronization primitives
  • subroutines

Source : SpaceChem Official Site

You start by building basic molecules from primitive elements and quickly advance to complex molecules. Just when you think you get the hang of building complex molecules, conditional branching, path synchronization, and handling random inputs; they add a higher level of abstraction. The next step is to create multiple reactors to construct the correct molecules by breaking down, combining, discarding, rearranging, bonding, existing molecules to be passed down the chain for the processing again in other reactors.

It's easy to brute-force solutions at the beginning. As the problems start to become more complex the player will have to figure out how to optimize their solutions to fit within the finite space/time requirements. Optimization, requires a greater understanding of the whole as well as the individual working parts. Eventually, the problems become complex to the point where the ability to manage complexity becomes as important as raw problem solving skill.

I have never encountered a game that models programming composition so well without having to write any actual code. Solving problems requires extensive testing, experimentation, optimization, tweaking.

Programmers will quickly and intuitively discover that there's no 'right' answer. While it's fast/easy to bang out a brute force solution in the beginning, taking the time to go back to decompose and optimize simple problems leads to insight that pays off when the complexity increases. A non-programmer will simply give up and write off the game as 'too hard' and give up before attempting to gain a deeper understanding.

Like programming, it requires the player to simultaneously manage many different levels of abstraction. The sheer number of possible correct approaches combined with the different levels of optimization leave a lot of room for creativity and craftsmanship. Sometimes the best answer is the result of a perfectly arranged, timed, synchronized arrangement. Other times it can be a result of thinking outside of the box and applying a non-conventional approaches.

share|improve this answer
    
This is a really cool idea. I actually have SpaceChem from gog! –  Adam Arold Feb 22 at 10:56

A lot of younger kids are starting out programming using the Alice programming language. It is a point, click, and drag that teaches the basics of loops, conditionals, and declarative programming. It can also go as advanced a multi-threaded programming model. Try if this new developer grasps those concepts easily then move into a more mature language.

share|improve this answer

"How can I determine the level of talent a prospective programmer has?"

Assuming she is literally a beginner who doesn't even know what a program is.

First and foremost she has to be able to translate real problems into abstract things and solve them there. IOW, she must be able to solve a real problem involving real buses, people, and stations by manipulating busVar, peopleVar, and stationVar.

Assuming she can do that, and can enjoy it, she must possess the ability to keep working until the job is done. Talent is 99% perspiration and 1% inspiration. She must be a natural hard worker.

share|improve this answer

Assessing potential in an employee situation is much more difficult than assessing existing knowledge in a contract situation. There are things one is looking for though. An ability to discuss abstract concepts, an ability to read and comprehend, persistence, a constructive personality, an ability to work in groups. Some of this is difficult to be objective about but one does get a good idea from the traditional sequence of interviews based on resume (Persistence, working with others) and observing a candidate in a group task. Basic arithmetic and written skills are required and can't even be assumed after reading some resumes.

For the comprehension of code and ability to discuss abstract concepts the best I have been able to do (and again it isn't easily quantifiable) is to show somebody 500 lines of code in a language they do or do not know and in a similar way to a UI workshop encourage them to speak their thoughts aloud as they read and try to understand the code. Repeat the test if you need confirmation. The range of ability to respond to this is far wider than you would expect and does give a good impression of what the challenges are going to be in turning them into a programmer.

There is however still no quantified test of ability that is going to help you prove to your manager that a single person you are handed is not going to make it or that will politely turn your friend away for you. After all it is just a matter of choosing the candidate who offers the best starting point. If you already have your friend then yes you can tutor her to some good effect with some degree of success.

share|improve this answer

Point her to some tutorials that she can start with on her own. Once she's had sufficient time to go through the tutorials (a day or two) talk to her about the tutorials. Did she actually go through them? What did she learn? Did she have to google for additional help to troubleshoot? Did she give up? Was she easily distracted? Is she excited by the potential uses of the tutorial's result? Did she go in to more tutorials?

Coding skill is learned, people don't necessarily have innate ability. We have different capacity for abstract thought, but for those of us who may start with "less" capacity, we can expand that capacity through training. We can learn anything we put our minds to.

So really the question you should be asking yourself is how dedicated to this idea of becoming a coder is she? Not "how can I gauge her 'innate' coding abilities".

The good news is that you can get to this point of your evaluation without actually giving up any of your time. If she impresses you with her diligence then start worrying about how good she is at abstracting solutions and all the other stuff that everyone has mentioned here.

A self starter who dives in and is willing to teach themselves is a better candidate than one who may display "better" coding ability but is content to sit on their butt.

share|improve this answer
2  
"Coding skill is learned, people don't necessarily have innate ability" - is this only your personal opinion, or you can back it up somehow? –  gnat Feb 22 at 6:54

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