Hacker News new | ask | show | jobs
by tycho77 5298 days ago
This seems... really simple. Basic algorithms, data structures, and theory that I learned in second-year comp sci.

Knowledge on these subjects is easy to pick up, taking you a few days of study at the most. Knowing this stuff doesn't mean you can program for shit (see: academic coding horror). Best to build a portfolio as dpritchett said, with a few "lessons I learned from experience when working on this project" anecdotes ready to go.

That's just personal experience though, and I competed in the ICPC during my university career so I never worry about the problem solving questions.

2 comments

Knowledge on these subjects is easy to pick up, taking you a few days of study at the most.

I doubt you can pick up a solid understanding of just the first 15 or so chapters of CLRS in a few months, let alone days.

Coming from a pure math background, I find CLRS to be very easy to read. YMMV based on prior experience, but it's not at all unreasonable to learn the basics in a week or two if you're studying it full-time.
I'm not talking about "picking up the basics". I doubt that level of knowledge will get you a job offer from Google.

I'm extremely skeptical about your claim. Just reading through the chapters will take the better part of a day. Working through the exercises and thinking about what each of these algorithms will take much longer.

For reference, MIT has two undergrad courses - 6.006 and 6.046 - which use CLRS, covering about half the book each. An undergrad course at MIT is expected to take up about 140 hours, including lectures, reading, and assignments. So, working for 10 hours per day, one could theoretically complete each course in two weeks.

There are a few other things to consider. One is that it's probably not necessary to go through all of the material to be able to manage interview-type questions. (It would obviously be best to undertand CLRS from cover to cover for the purpose of becoming a better engineer, but that's not what's under discussion.)

Second, it's really questionable whether someone can effectively work for 10 hours per day on this sort of material. My guess is that people fall into two categories - those who are not used to algorithmic thinking, and those who are. People from the first category would not be able to absorb that much new information that quickly, so for them, what I said is inaccurate. However, people in the second category would not only be able to process CLRS in large batches, but would need much less than 140 hours to work through half the book; someone familiar with the underlying concepts (basic programming, probability, etc.) and with a background in proofwriting could very well get through enough information to answer interview questions twice as fast or faster, so in about a week or less.

This argument is ridiculous.

I don't doubt your claims about the amount of the work the two courses at MIT require. However, you're forgetting that for some of those 140 hours you're being lectured by the top professors in the area. You're unlikely to have a question that they can't answer. Other parts of those 140 hours are spent talking with some of the smartest students on the planet. Some more of those 140 hours are spent solving problems carefully designed to maximize understanding. If you can't figure something out, you have fellow students, TAs and professors to harass. Somebody studying alone at home doesn't have this environment.

And then you need to take into account the fact that if you're undergrad at MIT you're already smarter than 95% or so of the population. Basically, the takeaway here is that your 70/140 hour number applies to something like 0.1% of the population under the assumption that they're studying CLRS at home.

You need to see this in context. This is advice for CS undergrads looking for jobs. This advice is being given out on reddit. Anybody who needs this advice (and CS undergrads from MIT certainly don't) will not be able to work through CLRS in a week.

Maybe everybody's assuming people smarter than you.
You could learn it well enough to answer interview questions on it. I have my copy of CLRS here and none of the first 15 chapters are exceptionally dense.
Sure. If the questions are stuff like define O(n) notation, you can. I suspect any company worth working for will ask you a bit more than that, though.
Tech firms seem to love these kinds of questions all the time. Almost every interview I've had has had them.
It's how they get around labor laws.
I don't understand; can you elaborate on that?
Placing a particularly high value on undergraduate-level CS theory as a pre-employment hurdle provides a market advantage to people with fresh undergraduate training.

This coincidentally depresses the marketability (for a certain class of job) of older workers and demographics less likely to achieve a degree from a top N computer science program.

Certainly you could read between the lines and say that observably favoring e.g. Stanford 2012 CS majors effectively disadvantages some protected minorities (age, gender, race). By placing the emphasis on a particular credential rather than on demographics a hiring company gets a level of plausible deniability from such claims.

Disclaimer: I have an MSci in CS and I'm only 30, so I'm not too worried about the things implied above. Yet.

Another explanation is that is it very difficult to gauge someone's programming ability from a technical interview. Asking theory questions is a useful (albeit imperfect) proxy.
This coincidentally depresses the marketability (for a certain class of job) of older workers and demographics less likely to achieve a degree from a top N computer science program.

If those older workers and others are equally or more skilled than the younger ones implied by your question, smart companies will realize the discrepancy and hire them.

In addition, if older workers know that firms place a "high value on undergraduate-level CS theory," they should probably spend some time learning. . . undergraduate-level CS theory.

You can in fact see this in action in other areas—for example: http://www.economist.com/node/17311877 .

If those older workers and others are equally or more skilled than the younger ones implied by your question, smart companies will realize the discrepancy and hire them.

The invisible hand of self-interest only works if smarter contenders actually appear in the marketplace. If there is some invisible hand of stupidity (and groupthink) that affects all companies above a certain size, then we are hosed.

Why is it that all big organizations are almost universally dilbertesque? There must be some anti-nootropic effect that occurs above a certain threshold of organizational complexity.

My guess is that he subscribes to the theory that companies use questions that would normally be taught in college to filter out older applicants. Ie, some assume that time since college isa major factor in people knowing these answers.

Personally, I find it terribly unlikely that any such filtering is intentional on any level.

There are several operational benefits to fresh graduates from the perspective of the hiring organization:

- What little experience they have is effectively all relevant to the job and hence easier to justify paying for. If a neophyte can do 80% of a veteran's work for 50% of the pay, it's a tempting tradeoff. A software veteran's second decade of experience may not be worth the increased sticker price if you're asking them to perform low- and mid-level tasks.

- They are less likely to have personal entanglements (kids, family, medical).

- They are an easily appraised and substituted commodity: standard salary scales apply.

- They are less likely to know their market value and hence less likely to negotiate for increased compensation or time off.

That is simply... depressing, not to mention unwise.

The neophyte may be able to do 80% of the veteran's job, but that's the easily-replaceable 80%. If I'm hiring for a position that requires experience, I know that the last 20% is worth paying for. Someone is going to have to do that 20% and if it's not the new hire, then why are we hiring him?

Personal entanglements? I have never had any idea about the family status of anyone I've hired unless they were wearing a wedding ring. I don't need to know and I'm certainly not going to open the firm up to a lawsuit by asking. HR is the only one who will know, and HR does not get to veto what the software dev. interviewers say unless the candidate wants more $$ than the position offers. And even then, they'll come back to us and ask if we think he's worth it.

Compensation? Again, the interviewers don't care or know. And really does any company with half a brain care? If you're being hired, it's because we expect that you will make the company orders of magnitude more than we pay you. In that light, trying to push for the maximum salary in the pay band is really not a big deal. It's in the budget after all.

You should be a fly on the wall of a hiring meeting, or work in a startup whose office is open-plan.
My understanding is that according to US labor law, computer programming is not one of the limited group of employment positions for which a degree is (or can be) required. That is, coders can't be required to have a degree, so HR designs questions that are most likely to only be answerable with university-style training.
Do you have a citation for this? I can't imagine that it could ever be the case. The employer can set whatever job requirements they want as long as they do not discriminate against protected classes. Non-degree holders are not a protected class.

I'm far from an expert, but I have had to take classes in Employment Law and interviewing practices. This is not the kind of thing they would forget to mention!

I think he might be suggesting that with hiring coders-in-general, it's not necessary that the employer must only hire degree-holders. This is in contrast to hiring an elementary school teacher, where by law the applicant must possess credentials x/y/z even if the school thinks the applicant is fine without those.