This post originated from an RSS feed registered with Python Buzz
by Carlos de la Guardia.
Original Post: The least of learning is done in the classrooms
Feed Title: I blog therefore I am
Feed URL: http://blog.delaguardia.com.mx/feed.atom
Feed Description: A space to put my thoughts into writing.
It was Thomas Merton who came up with the title for my post, though he certainly never intended this. I was reminded of this phrase when I found a post about "java schools", by Joel Spolsky while trying to get up to date with my blog reading.
Joel is worried about the prevalence of Java as the teaching language of choice in US schools, not beacause of the language itself, but because he thinks students need to learn languages that expose them to difficult-to-grasp concepts which actually can help them (and later, their prospective employers) determine if they really have what it takes to be a software developer.
The concepts he chose to make his example were C pointers and recursion, but those are just examples. His main point is not that pointers (pun was not intended) are the way to tell great programmers apart from code monkeys, but that the capacity a person has to grasp concepts like this is the real differentiator. Joel contends that schools that teach Java exclusively end up producing an unfiltered class of programmers upon graduation, since the students never really get exposed to those hard concepts and hence they may or may not be real programmers(TM).
He himself says that "I freely admit that programming with pointers is
not needed in 90% of the code written today". So, tell me, why would
schools cater to only 10% of their markets? Of course they won't, and
they never have. If at one point C and C++ were what the majority of
students wanted (because the majority of the jobs demanded it), that
was what schools taught. Like it or not, Joel, most recruiters belong
to the "recruiters-who-use-grep" club you rightly despise, and the
students want to get hired by someone, and this grep guys are their
best bet right now.
Now, for the connection of this post with the title generously provided by Merton. I think Joel is very wrong in expecting that programmers will only (or even mainly) be formed by the schools they attend. Real programmers do not need a board of school directors to decide to expose them to complicated concepts; real programmers look for these concepts for fun and expose themselves to them, whether their school's curriculum calls for it or not.
So, these programmers with the special parts of the brain that Joel needs will not be doing most of their learning in the classrooms. Perhaps Joel is right and the schools are wrong, but that really is a problem that will not be easily solved by him or any other enlightened-recruiter-who-does-not-use-grep. The school system is what it is and the bottom line is that if you want to find these special guys you will have to look at extra-curricular activity in addition to classrom work.
Some recruiters have become fans of the puzzle culture popularized by the likes of Microsoft and Google in an attempt to confront this problem. I hear Joel likes it as well. But puzzles may not test all the special parts of the brain that are really needed to be a programmer, specially if we take into account that the actual abilities needed will vary from shop to shop. Why does Fog Creek Software need so many guys skilled with pointers if their star product is basically a CRUD application?. Shouldn't they try instead to find developers who are specially skilled in the brain areas most needed by this kind of applications? Ian Bicking makes a good point about this in the comments to his own post about Joel's rant.
Ian also says that having tried and failed to complete ambitious projects can teach a developer a lot, so you would like to know about a prospect's greatest failures to see how (or if) they learn about their craft. This comes back to what I was talking about when I mentioned fun earlier. A good programmer is going to try stuff that is interesting and fun to her, and she will most likely do it outside of the classroom. She will not read about pointers and say, wow, what a great challenge pointers are, let's try that. No, she will probably stumble into a project that is interesting to her while browsing the web or reading a book and think, ok, this project uses C, maybe I should pick up a book about C programming from the library on my way home.
Joel says that "Without pointers, for example, you'd never be able to work on the Linux kernel", but I think this is backwards. A good programmer usually doesn't first learn a concept and then goes to find some project to try it; rather, he finds some fun project and then learns what he needs to try it.
In another post, I quoted Paul Graham in an article where he explains why he said at some conference that
you can get smarter programmers for a Python project than for a Java
project:
"I didn't mean by this that Java programmers
are dumb. I meant that Python programmers are smart. It's a lot of work
to learn a new programming language. And people don't learn Python
because it will get them a job; they learn it because they genuinely
like to program and aren't satisfied with the languages they already
know."
You can exchange the word "Python" in that sentence for "Smalltalk" or "Ruby" or "Scheme" and it will mean exactly the same. The point is that programmers like to program and they have to go out of their way to learn this languages, so when your prospect loves one of these you may be onto something.
So Java Schools may be where CS is at these days, but there are still some ways to find out about which programmers are for real. Do your prospects participate in open source projects? Have they created one (even a failure)? How many books not required by their courses have they read about software development subjects? Do they love some obscure or non mainstream language or tool with a passion? Which blogs do they read? Do they blog about what they do or about technologies they like? Do they make an effort to stay current in certain technologies even if their work does not require it? Do they like to go to conferences and events just to mingle with other programmers and get some t-shirts, regardless of curricular value?
The answers to those questions will vary from individual to individual and it's not some test where a good candidate has to be perfect. The idea is that finding out how a programmer thinks and acts about programming outside of work and school can be a good way to help the recruiter do the filtering that the Java Schools seem to have neglected. The least of learning is done in the classrooms.