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 many friends that see what I do, find it interesting and ask me the question

Do you think I could be a programmer?

My response is

...   ummm  ...  do you like math?

I'd like to have a helpful response, so I didn't know if anyone knew of a fairly decent aptitude test for someone that would be starting from square one, but has critical thinking and problem solving skills?

share|improve this question

closed as not constructive by Mark Trapp, Walter, ChrisF Jan 2 '11 at 21:35

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.If this question can be reworded to fit the rules in the help center, please edit the question.

    
I propose BuzzFizz: Given three different executables, can they run them and identify which one is "FizzBuzz"? –  Macneil Dec 31 '10 at 3:09
15  
Don't mix math and programming. I work as a programmer for years. I hate math. Another example: Jeff Atwood is an excellent programmer. He hates math (see codinghorror.com/blog/2007/01/…, point 3). –  MainMa Dec 31 '10 at 3:14
2  
@MainMa I can't emphasize how true this. I am in the exact same boat. Math has never been a passion of mine, or even a strong point, for that matter. That being said, many who know me will attest to my extreme aptitude (read: obsession) for programming. Math can be a major part of programming, but one does not necessarily beget the other. –  Nathan Taylor Dec 31 '10 at 3:21
1  
maybe when I say, "do you like math?", I mean to say "do you respect math?", I actually suck at math by hand, which is why I like making the computer do the math for me, but I respect and understand the finite principles of math which I believe help me in my logical thinking processes. –  jondavidjohn Dec 31 '10 at 5:38
2  
"apptitude" is a really cool typo in this context :-) –  Ferruccio Jan 1 '11 at 1:36

10 Answers 10

up vote 11 down vote accepted

"Liking math" is a bad test. I never liked math (mostly because 90% of math teachers in high school sucked).

When you say "math", most people think you mean "carefully solving an equation according a very strict set of rules". Programming is not like that at all.

Programming is more like drawing, in that what you can achieve is only restricted by what you can imagine.

What matters is the ability to imagine a system and see how it works.

  • Do you think about how things work?
  • Do you think about ways to improve everyday things?
  • Can you visualize how to build something out of simpler building blocks?
share|improve this answer
    
Is it more like geometry? –  Gulshan Dec 31 '10 at 5:46
    
it's an applied science, so it doesn't really have a pure science "equivilent" per se. –  jondavidjohn Dec 31 '10 at 6:43
1  
Programming is more like carpentry, you first visualize the solution, select your tools, apply your craft carefully using the best TDD wood. Jesus would have been a programmer if the commodore 64 had been invented a little earlier. –  Will Dec 31 '10 at 15:27
2  
Actually what you described sounds a lot like math -- as opposed to what passes for math ins schools. –  uman Jan 1 '11 at 2:03
1  
@Brennan: The only math I found similar to programming was Discrete Math in university. Most other math we studied was about mindlessly applying rules and formulas to solve some sort of an equation. You can argue that's not true math, but it doesn't matter to this discussion. –  hasenj Jan 1 '11 at 7:14

I think the liking math is important. Not from the standpoint of do you enjoy rigorously proving stuff, which would be required to be a serious mathematician. But, given a problem that is important to you, can you formulate the issues involved in solving it in a mathematical way. I claim, everything a computer does is math, it takes symbolic data of some sort, and performs some sort of operation on it. That is the essence of math. So you gotta be able to abstract things into some sort af mathematical like structure, and reason about the steps forward. Lacking that, you are just hacking, throwing out some code, and hoping it does what you want. Being able to solve complicated algebra without making typos and getting lost, is probably not so needed. But being able to formulate a plan, is important. I often write ten line programs to verify that my not too complicated math has been doen right. Combining computers with math, for purposes of verification, discovery, and yes to work out the details, when there are a lot of them, is the real key.

share|improve this answer

Just like the Gusteau, a character from the movie Ratatouille said:

Anyone can cook.

In the same way, anyone can program. But, not everyone will be great at it. Most programming jobs require an average level of aptitude and competency.

Just answer yes. Why? Because most people just want to feel appreciated by someone who they think is smart.

share|improve this answer
2  
I strongly disagree that anyone can program. It sucks, but that's life. –  uman Jan 1 '11 at 2:04

I think a better question is "Do you like building things with lego blocks?"

share|improve this answer

A better question than "Do you like math" is "Do you like to solve logical puzzles"? This is things like Sudoku, etc, or figuring out the answer to conundrums such as "John, Anne, Peter, Mary and Brittany are neighbours. John has a white car, Brittany lives to the left of Anne, blah blah, in which order to they live?"

Because that is what programming is: One huge logical puzzle.

share|improve this answer
1  
I (somewhat) like maths, but puzzles are just needless bashing of one's head against walls. I think the you need motivation to create something useful -as opposed to mental gymnastics for the purposes of showing off how smart you are. –  Omega Centauri Jan 1 '11 at 3:36
    
Well, OK, you don't need to like it, just be good at it. :-) –  Lennart Regebro Jan 1 '11 at 7:23

There's a chance that there's a good one already out there.

See for example the discussion on Separating Programming Sheep from Non-Programming Goats:

All teachers of programming find that their results display a 'double hump'. It is as if there are two populations: those who can [program], and those who cannot [program], each with its own independent bell curve. Almost all research into programming teaching and learning have concentrated on teaching: change the language, change the application area, use an IDE and work on motivation. None of it works, and the double hump persists. We have a test which picks out the population that can program, before the course begins. We can pick apart the double hump. You probably don't believe this, but you will after you hear the talk. We don't know exactly how/why it works, but we have some good theories.

What the test identifies is how consistent people are with operationalizing a sequence of instructions. What that means is they can build models (abstractions) in their minds and work with them.

share|improve this answer

"Do you like math?" is not a bad start. Maths is critical, after that...

It is advisable to see if they can take a problem and start breaking it in to blocks, just in speech, whether they can walk step-by-step through a basic problem is a good initial start.

  • How would you tell a robot how to make a cup of tea? Be as specific as possible.
  • Ordering a meal at McDonalds, what steps are involved in handling the order, from initially being told to giving change/food.
  • How does the telephone system work?

If they can answer them well, in the analytical and deep fashion that a programmer has to day by day, they can probably handle it.

share|improve this answer

I remember from back as a kid doing a Brainbench Aptitude Test; I still have the certificate stored away somewhere...

The test outline:

Abstract Thinking
    Process Flow
    Spatial Manipulation
Analytical Reasoning
    Inductive Reasoning
    Logic Application
    Word Problems
Attention to Detail
    Following Instructions
    Reading Comprehension
    Rule Interpretation
    Writing Analysis
Mathematical Problem-Solving
    Word Problems
Process Mapping
    General Processes
    Letter Manipulation Processes
    Number Manipulation Processes
    Shape Manipulation Processes
share|improve this answer
1  
+1 Good list, all vastly important traits. –  Orbling Dec 31 '10 at 3:04
1  
That's a very complicated test. If someone told me to take the test before delving into programming I would've been scared off. OK, maybe I wouldn't care, but anyone who would take the test seriously would be scared off. –  hasenj Dec 31 '10 at 5:53
2  
So? Programming can be a complicated field (like may others). If you are scared off that easily, maybe it isn't for you. Imagine if you were asked if someone wanted to be a Doctor, what should they be good at? I don't think you would care that it scared some people off... Life's hard & complex, they should get used to it. –  Dan McGrath Dec 31 '10 at 6:32
2  
Well, it's a complicated field, if you approach it head on you will fail. Everyone who started programming started with easy stuff, and believed that it's really easy. That belief will likely be maintained through out their learning experience. You never realize how complicated it is until you look back, or watch someone struggle with something that you find very basic. –  hasenj Dec 31 '10 at 10:42
    
Sorry, by the list above are essential skills you will use as a programmer. I think you are been scared by their names, rather than the questions that would fall under them. It isn't like it asking you any complex concepts used in programming. In other words, aptitude tests have nothing to do with how much you understand programming concepts which you can learn, it is about aptitude, so the comment about "starting with easy stuff" isn't really relevant here –  Dan McGrath Jan 1 '11 at 4:29

I think a more important "test" would be to show them a simple programming language / environment that they can play around with. For example, processing or python. If they can learn and enjoy using such a language - maybe while solving a simple task or two - then that is probably the best "aptitude test" you could ask for.

share|improve this answer

Once you're exposed to coding, you either have a compulsion to do it or you don't. Aptitude is just one factor on whether or not you'll be good at it. Exposure to good examples, instruction, time on task, effort are others. Really wanting/needing to do something makes it much easier to take advantage of the other factors.

share|improve this answer

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