

Lazy Evaluation in Java - raganwald
http://weblog.raganwald.com/2008/01/lazy-evaluation-in-java.html

======
BrandonM
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.

~~~
raganwald
"To expect someone to know a skill which is not going to be needed on the job
is unfair."

 _Complete rewrite_

I am going to respond on the post, this is a very good question that deserves
the widest possible audience.

~~~
BrandonM
_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.

------
Hexstream
I thought that article was about the _other_ kind of lazy evaluation...

------
michaelneale
Maybe the coffee has not kicked in yet, but I don't get it.

