views:

697

answers:

13

How do you identify who can be potential programmer from people like students?

Is it going to take like two weeks? You give them some ideas of programming and test them.

Or is it going to be a 3 months? You give them a lot of ideas about programming and test them to see who can perform better in average?

Any other methods or views?

Response on the answer

The age of the students are around 16 - 20.

To summarize

Four points to identify : Interest plays an important part but also must come with certain prerequisite like problem-solving ability. Preferably if they are able to perform well in Math and Physic. They also must take initiative and hardworking

Ways to identify : By giving them test that's not previously taught and observe what they do in their normal times (in my context, this is quite impossible for me to do)

+2  A: 

I would look for problem solvers. People who can use their creativity to design or build things usually turn out to be good programmers since essentially you construct a working system out of practically nothing (except frameworks =P ).

Tests can give you a good indication, but I would suggest testing them on problem solving, not specifically programming.

Topher Fangio
+4  A: 

Pretty simple really. Programmers are natural problem solvers and problem solvers gravitate towards math, physics and programming. Give someone an abstract problem and see how they solve it. If they solve it, they will probably make for a good programmer. If they solve it in a way you never imagined, they will probably make an excellent programmer.

You should be able to detect a student with programming potential in a matter of hours.

Serapth
I disagree with one point. A good programmer doesn't necessarily have any interest in math and physics. I will grant that they are likely reasonably capable of understanding those topics.
TokenMacGuy
I really should have addressed desire and ability as two separate aspects. A good programmer generally has a natural aptitude for math and physics. That by no means means they are actually interested in any of those subjects. How to tell if someone could be interested in programming, thats a whole different thread. I agree with your disagreement however, I should have worded better.
Serapth
+2  A: 

I can usually pick them out by, when I'm walking around looking at people doing the exercise or whatever, they're the ones who have modified it to do something else.

Tom Ritter
I'd like to avoid people that cannot follow requirements :)
willcodejavaforfood
It's not about following the requirements - it's about the people who breezed through the normal stuff (or maybe got stuck on one part) and started experimenting around and seeing what they could do. The explorers, experimenters, tinkerers - the hackers.
Tom Ritter
+17  A: 

There was a study that Jeff reported on a while back which basically states that if students are capable of modeling what they see consistently, they are going to be capable of understanding programming; whereas students who aren't capable of doing this naturally, no matter how much they learn, probably will never get it.

It's a very interesting read and I suggest everyone check it out.

Welbog
I remembered that and was searching it. Good answer
Artur Soler
Good answer because it links to an academic study, not a subjective opinion.
Szere Dyeri
+9  A: 

I think you're missing one crucial step...

  1. Identify those people INTERESTED in becoming Programmers/Developers

  2. Teach them the basics...then give them time to learn some stuff on their own.

  3. Test them at a level higher than that which you taught them. This way, you'll find out the ones that are willing and able to learn concepts on their own without structured teaching. Those are going to be the ones (as long as they stay interested and keep up the studying) that will result in the most efficient people in the long run.

That being said...there's really no formula. They're all going to be hit or miss. You just have to take some chances now and again.

Justin Niessner
Test them at a level higher than what you tested them? That's not really fair. If you went to any university and you tested on Chapter 4 when only Chapter 1-3 was assigned, you'd have an entire class of Fs.It's not realistic to test on what wasn't taught...
samoz
Testing on what isn't taught is really common in Math as it isn't like the tests will match exactly what the teacher did on the board. You have to be able to follow the instructions and deal with different numbers and sometimes letters to get the question done. Or do you think it is fair to teach strictly things to memorize in a Math class?I can understand Justin's idea of seeing who would read ahead or just in general know things that others don't know as the test could just be general knowledge that some didn't need to study.
JB King
@samoz - If you were to give me the choice between a developer that memorized only what I taught him, and a developer who took what I taught him, applied it, and learned more on his own...I'm going to take the later every time. In the real world...there's not going to be anybody standing there teaching you everything you need to know.
Justin Niessner
+1  A: 

I know some programmers who are "naturals"---they were good at programming from the moment they first opened up a BASIC interpreter. You can tell who these guys are in about a minute.

But some programmers are equally good, and you can't tell it by looking at them. They spend years working away, taking all the courses, practicing, and eventually some of them succeed--and big time. Just because it takes them longer doesn't mean they're any worse at it. But how can you tell whether someone will be willing to invest the effort required to make themselves good at a skill they don't naturally have? And how can you know if they'll succeed once they do?

Please don't assume that the only good programmers are the "naturals". Some of the best programmers got to where they are with hard work and elbow grease. Clearly there are important aptitudes---can they understand abstraction, are they good at modelling, do they think logically---but these skills aren't always immediately evident.

Jacob B
It's quite hard for me to identify also. Students may perform well in the first few tests but can't do well after that.
henry
+2  A: 

To become a programmer / developer you would need the following:

  • Desire to be a programmer
  • Ability to think for self
  • Logical approach to problems

Also, I have found that a healthy desire to question is helpful.

All of this can be found out in a 10 minute chat. The actually ability to write in any language is not actually that important if you are looking at something long term.

Desire to be a programmer is quite a simple thing to ascertain. Just ask the question.

Ability to think for self: If you have to spoon-feed answers then it is unlikely that they will be any good. This also leads to someone who can argue a point... doesn't matter what the point is, just that they can argue it. Hopefully this will lead you to realise this person has the "Strong opinion weakly held" position on beliefs. I have found these people to be most productive to work with.

A logical approach to problems is easy to see when they talk you through solving a problem... are they making great leaps and assumptions etc.

Finding someone who will tell you (Their boss) that you are wrong is like gold dust. And this is relatively easy to work out. Simply tell them something which you know is wrong, and also that you know they know is wrong. Will they tell you that you are wrong, and what is their reaction like.

As I mentioned earlier, actually knowing a language is never on my radar when looking at new employees

Xetius
+3  A: 

Stating that you should look for students that are good at math or physics sounds fine but from my experience, even at university level, it just does not cut it. I've had classmates that had straight A's in almost everything except programming. There seems to be something else lurking there.

You could go the Joel-route and teach them pointers and recursion and see who gets it. I actually think it's enough to teach them any (high level) language for a couple of weeks and then give them some easy problems to solve (in a couple of hours, and not on paper).

The questions does not need to be hard (the first one is from an actual exam I had 16 years ago):

1) Draw a christmas tree like this:

   *
  ***
 *****
*******

Restriction: You can only have one single * in your code.

2) Count the words in this silly question.

3) What is a stack overflow? Write some code that causes one.

Jonas Elfström
/* This program is meant to draw a Christmas tree using only one... oh crap!
Serapth
That's when you should be using //, D'UH! ;)
Spoike
+2  A: 

Someone said "problem solvers," but I think you can generalize it it "puzzle solvers." In my experience, you'd be hardpressed to find an enthusiastic developer that doesn't enjoy riddles, video games that involve puzzles (unless they strictly don't like video games), or really any system that is seemingly obscure but has an underlying structure that with work can be discovered and mastered.

JoeCool
+3  A: 

IMHO potential programmers:

  1. Are self-motivated to learn;
  2. Are generally rational (and often judgmental);
  3. Learn to program long before they ever get taught it;
  4. As children, favour toys where some imagination or abstraction is required. Models, Lego, that sort of thing. Anything where you have to take simple pieces and make something from them (which ultimately is what programming is); and
  5. Play games of any sort, be it cards, computer games (requiring some form of strategy typically), board games, etc. Particularly when such games tend to be more skill-based than luck-based.
cletus
All 5 must go together? One of them will do the job?
henry
No. They're all indicators and thus not reliable on an individual level but will be apparent in larger groups. On an individual level, the more of the above you can check off the higher the likelihood but even with all five nothing is certain.
cletus
A: 

From my experience this is going to take 4 years for bachelor's degree in field of Software Engineering and additional two years for master's degree ;)

Most of "non programmers" students are going out after the first year. (This includes general courses problems as well as programming courses)

Speaking of "short test", it could only show if this person is ready to become programmer "here and now". Like new job interview.

vpolozov
I disagree with your first paragraph. University does not filter out bad programmers. I have worked alongside too many bad graduates both in school and out to believe that. Though it is true that education filters out some bad apples, it leaves too many in for me to consider it a good filter.
Welbog
That's true, university does not filter out all bad programmers. But actually I will prefer to hire graduate from well-known university/faculty/chair with after completing test task. And most likely I will hire graduate from the chair, where I'm teaching, with speak interview only.
vpolozov
A: 

You only need to look for two things.

  1. Desire
  2. Basic Knowledge

As much as we like to think so programming isn't rocket science. It's a field that is both joyfully complex and easily picked up, with millions of people working on vastly different projects, with a range of skills and abilities. Hell, it's even built some of the strongest communities on the Internet!

You could use a number of tests to discover the best programmer, their intellects or any other metric to measure, but these mean very little in the grand scheme of things. As already mentioned you'll benefit far more from someone who is passionate about the role and someone who knows how to program to an acceptable level.

The tests people give on this website and the related blogs are attempts to gauge who is a fantastic programmer, the kind that could walk into the Google's and the Microsoft's of the world and reinvent the field. We'd all love to have these people on our teams but it simply isn't happening. If you push back every acceptable candidate because they're not perfect then you'll have no one.

Look for desire and basic knowledge. You need a programmer that'll do a job for you and I'm sure any number of the tests presented here will help you find that person. Give them some programming to do and see who does the job, but also see who was excited to work on the problem and was interested in the role.

EnderMB
A: 

See my answer to this question.

zvolkov

related questions