I liked the article at first because it was pointing out the flawed hypocrisy in the education/job market, where you are expected to learn and show knowledge of something you're not likely to use. Moreover, I want to be the lazy programmer. The lazy programmer does more with less lines of code in addition to using the IDE more effectively. One paragraph in particular that I agreed with was:
You were lazy. Now, laziness is said to be a virtue in a programmer. And if you want to be one of those super-smart programmers who can tell me why the only birds you need are Starlings and Kestrels, you might start a company that we buy for big bucks. But quite honestly, we don't appreciate laziness in someone we are hiring to toil away in the bowels of our enterprise application code.
I agree totally. Clearly the problem is that it is necessary to "toil away". Now the example used was recursion, and I totally understand the need to know recursion and data structures, but it could easily be extended to databases or networking protocols. To expect someone to know a skill which is not going to be needed on the job is unfair.
So what is my problem with the article? In the comments, the author is totally bashing this programmer. The failure does not lie with the programmer, but with the system.
Putting it in harsher terms, when a candidate puts a degree on their resume, they are making a claim. Are they claiming that they did just enough to obtain the required marks and no more, or are they claiming to know the material that was taught to them? If it is the latter, then as an employer I am being perfectly fair in testing their claims, whether or not the material has direct relevance to their initial job assignment.
Okay, but earlier in your post, you said:
I know that you learned your stuff in Java instead of in Scheme or--and this would make you instantly unemployable here at BigCo--in Haskell. But they still teach you about recursion.
Now to me, that's a big case-in-point of why the candidate would not really learn recursion. Recursion these days is a 2-week segment in an Intro to Programming sequence, typically taught with trivial examples like, "Take this iterative algorithm and rewrite it to be recursive." The only time recursion would actually seem useful is when used to define a structure like a binary tree, but then again, that might be a lecture or two, followed by, "but all you really need to know is
BinaryTree t();
t.insert(foo);
[or whatever the syntax is] since Java defines a tree in its library."
In other words, the poor student who is taking 4 or 5 other classes in addition to this one receives maybe 2-3 weeks worth of exposure to recursion, learns enough to pass the test, and moves on to the next topic. You really expect this person to be able to whip out recursion at a moment's notice, when he believes that it is just another way to do the same thing?
This part in particular bothered me:
The reason we expect you to know these things is that they were subjects you claim to have studied when you got your Computer Science degree. Don't argue with me
This is exactly the kind of conformist establishment thinking that makes corporate jobs dull and chases away the best minds. A Computer Science degree is largely a formality: perhaps two or three of my classes actually taught me something worthwhile, while most of what I actually learned I picked up on my own. The saying, "Those who can't do, teach," really is quite accurate in the CS field. At my college in particular, what I did in my classes is so far from anything I've done in the real world (i.e. full mathematical specs for every module, etc.) that I feel that most of my classes were basically worthless. The two main exceptions were my honors algorithms/data structures class and my Lisp class, and that was because I had great teachers who really taught me something new. So, as I was saying, getting that degree is largely just a formality for someone who wants to get a job programming. God forbid that student actually be someone who came in with an interest in programming, because multiple courses in Java (and nothing else, in some instances) followed by a corporate job is sure to kill any passion that was there.
So, considering that the degree is only a means to an end,
You tried to optimize your time to spend as little as possible on the things that you thought we wouldn't ask you to know.
and
We know you took shortcuts in school, you did just enough to get through without actually learning anything about the stuff you figured you didn't need to get a job here.
seem like the rational thing for a student these days to do. Someone who simply plods through the work without any thought at all to why may be the stereotypical corporate drone you're looking for, but that is also what makes it necessary to go out and acquire startups in the first place. You summed it up best yourself, though:
Quite honestly, we don't appreciate laziness in someone we are hiring to toil away in the bowels of our enterprise application code.
Count me as glad that I am not working that job. I'd much rather be lazy, write my higher-order code, be as productive as 5-10 of your drones, and reap the majority of the benefits, all while being able to take pride in my accomplishments. Ask for people who don't question the status quo and you're asking for the same people who will spend thoughtless hours writing the same code over and over instead of using abstraction, who will never use their IDEs properly, and who will never bring true innovation to your company.
You were lazy. Now, laziness is said to be a virtue in a programmer. And if you want to be one of those super-smart programmers who can tell me why the only birds you need are Starlings and Kestrels, you might start a company that we buy for big bucks. But quite honestly, we don't appreciate laziness in someone we are hiring to toil away in the bowels of our enterprise application code.
I agree totally. Clearly the problem is that it is necessary to "toil away". Now the example used was recursion, and I totally understand the need to know recursion and data structures, but it could easily be extended to databases or networking protocols. To expect someone to know a skill which is not going to be needed on the job is unfair.
So what is my problem with the article? In the comments, the author is totally bashing this programmer. The failure does not lie with the programmer, but with the system.