(This is a snapshot of my old weblog. New posts and selected republished essays can be found at raganwald.com.)

Thursday, July 13, 2006
  Aptitude? We don't need no stinkin' aptitude!

Here's an academic paper: The Camel has Two Humps. The authors analyzed programming skills and have come up with an aptitude test that correlates with the success or failure of college students in programming course.

Better than Thailand

I found the paper's central idea interesting: That the three skills of understanding state change over time (they call it sequence and assignment), recursion, and concurrency are three of the central skills of programming and are ranked in that order of scarcity.

(Revelation: instead of thinking about something as being hard, consider it scarce instead. It's a significant change or perspective).

I expect immediate refutations from people who resist the idea that programming is hard or that programming skill is scarce:
What does this mean for you?

Even if you agree with the dissenters, read the paper with an open mind. One benefit you (I am speaking directly to you, not making a grand rhetorical gesture) can take from this is to organize your own self-development along these lines.

Consider athletics. You read a paper saying that future aptitude for sports can be measured at an early age on the basis of running speed, jumping ability, and weight lifting strength. We could drink beer and have a huge argument about their applicability to a specific sport. Maybe fencers would say that heavy bench presses are useless predictors.

But for all round athletes, those three areas are a great foundation for training. Our experience with athletics is that athletes who mix sport-specific skills training with work on speed, leaping, and strength out-perform athletes who just train skills.

So consider this: go out of your way to practice your skills the next time you are writing some code. Use iterators in places where you'd normally use a for loop. Use recursion in places where you'd normally use an iterator. And find a way to decompose operations into parallelizable components.





why are you still reading this blog post? hup! hup! get down and give me one recursive routine, then follow the instructions in this paragraph! and I mean all of you, do it at the same time!



Comments on “Aptitude? We don't need no stinkin' aptitude!:
That all sounds great, and I don't disagree...

...but the paper doesn't give what Dehnadi's test is?
I expect IQ would to predict programming ability better than Dehnaldi's test.
Programming skills practice and training... Sounds kinda like PragDave's Kata exercises.
"...but the paper doesn't give what Dehnadi's test is?"

http://www.cs.mdx.ac.uk/research/PhDArea/saeed/ is where you can find the test and scoring matrix.

"I expect IQ would to predict programming ability better than Dehnaldi's test."

The paper itself explores the reasons for the high failure rate in computer science courses, and there is little correlation between IQ and success in programming.

<< Home
Reg Braithwaite

Recent Writing
Homoiconic Technical Writing / raganwald.posterous.com

What I‘ve Learned From Failure / Kestrels, Quirky Birds, and Hopeless Egocentricity

rewrite_rails / andand / unfold.rb / string_to_proc.rb / dsl_and_let.rb / comprehension.rb / lazy_lists.rb

IS-STRICTLY-EQUIVALENT-TO-A / Spaghetti-Western Coding / Golf is a good program spoiled / Programming conventions as signals / Not all functions should be object methods

The Not So Big Software Design / Writing programs for people to read / Why Why Functional Programming Matters Matters / But Y would I want to do a thing like this?

The single most important thing you must do to improve your programming career / The Naïve Approach to Hiring People / No Disrespect / Take control of your interview / Three tips for getting a job through a recruiter / My favourite interview question

Exception Handling in Software Development / What if powerful languages and idioms only work for small teams? / Bricks / Which theory fits the evidence? / Still failing, still learning / What I’ve learned from failure

The unary ampersand in Ruby / (1..100).inject(&:+) / The challenge of teaching yourself a programming language / The significance of the meta-circular interpreter / Block-Structured Javascript / Haskell, Ruby and Infinity / Closures and Higher-Order Functions

Why Apple is more expensive than Amazon / Why we are the biggest obstacles to our own growth / Is software the documentation of business process mistakes? / We have lost control of the apparatus / What I’ve Learned From Sales I, II, III

The Narcissism of Small Code Differences / Billy Martin’s Technique for Managing his Manager / Three stories about The Tao / Programming Language Stories / Why You Need a Degree to Work For BigCo

06/04 / 07/04 / 08/04 / 09/04 / 10/04 / 11/04 / 12/04 / 01/05 / 02/05 / 03/05 / 04/05 / 06/05 / 07/05 / 08/05 / 09/05 / 10/05 / 11/05 / 01/06 / 02/06 / 03/06 / 04/06 / 05/06 / 06/06 / 07/06 / 08/06 / 09/06 / 10/06 / 11/06 / 12/06 / 01/07 / 02/07 / 03/07 / 04/07 / 05/07 / 06/07 / 07/07 / 08/07 / 09/07 / 10/07 / 11/07 / 12/07 / 01/08 / 02/08 / 03/08 / 04/08 / 05/08 / 06/08 / 07/08 /