Hacker News new | ask | show | jobs
by stegosaurus 3702 days ago
Sure. I know what a list, a hash table, a tree are because I looked it up whenever I saw someone mention it, and eventually internalized it.

But before that, I'd used them for 10-15 years without knowing the name because it doesn't matter. Take a hash table. Python calls it a dict. C++ calls it an (unordered) map. Java calls it.. whatever it calls it. It's nice to have that 'hash table' google term to find the thing you want in a new language, but otherwise they're just words.

Actually in usage I type {} in Python and it is what it is.

I'm not arguing that these things aren't useful at all.

I'm arguing that the distinction between the CS-ified person that has spent the effort to learn what the words mean to pass interviews is not substantially more knowledgeable or useful than the version of that person that will have to find it out in the future. It's marginal.

Basically it feels like a sort of 'table manners' test. You've put the fork on the wrong side of the plate, so you can't eat dinner with us today, you scoundrel.

Don't take this to mean that I think that computer science is useless. Far, far from it. It is simply that I think that relying on jargon is testing whether someone genuinely has a CS degree (or equivalent without certification). It's not testing whether someone is a good programmer.

If that's what you want, just ask for it. Let's not waste each other's time and money.

The anger here exists because people want good faith interviewing, and instead they get "bloody hell the last 20 people were crap I can't be bothered any more" interviewing.

2 comments

>> Java calls it.. whatever it calls it. It's nice to have that 'hash table' google term to find the thing you want in a new language, but otherwise they're just words.

Actually, they are more than just words. Try not to conflate the abstract data structure itself with the language-specific implementations which can vary quite significantly. Also your flippant, dismissive attitude on quite important CS concepts wouldn't take you far. It's better to frame your argument like this ... "There's no point in testing for X or Y because ... e.g. we won't need X or Y to perform the job we are being tested for" which is quite reasonable as most devs CS-minted or otherwise will agree with you. & also while it might not be useful to rote memorize every single CS concept, it's sensible to at least have a passing familiarity. Why? Well, not being able to recognize what BFS even stands for in the first place is enough to raise a red flag anywhere.

>> Also your flippant, dismissive attitude on quite important CS concepts wouldn't take you far.

Please try to avoid this. We can discuss without resorting to attacks.

>> "There's no point in testing for X or Y because ... e.g. we won't need X or Y to perform the job we are being tested for"

That's what most people are arguing for I think, so I agree with you there.

>> not being able to recognize what BFS even stands for in the first place is enough to raise a red flag anywhere.

By doing this you are throwing away developers that have made their respective companies millions in revenue. It's not hypothetical. One day, a non-CS trained developer will come across a tree and use it. And then they'll learn.

You seem to be arguing that non-CS trained devs can learn these things when they come across them. I wouldn't disagree with that.

I think what I see as the real concern is a case of "not knowing what you don't know." If you aren't exposed to at least the fundamentals of this broad base of CS knowledge you aren't going to know that they are available to you when you need them. Learning about a tree when you first read about it is great. But that person will still have huge gaps in their CS knowledge compared to someone who systematically studied it.

I also don't think this is so much about having a CS degree, as it is simply having studied CS in some fashion. I've worked with plenty of talented self-taught developers who took the time to learn these things on their own.

Sort of, but not really.

I think really what we're arguing about now is the distinction between hiring for a Google position (pushing the absolute state of the art) and hiring for a position creating accounting software or something.

I don't think that it's reasonable to expect to be hired into a top tier position as a kernel hacker at RedHat or a database expert at Google with an English degree and a few weeks of github commits.

I think that most software development jobs don't need the level of technical chops that are being asked for - and that many of the developers that actually have this level of ability just don't need the company (this post might be an example of that).

Some of the job requirements I've seen make me think along the lines of - 'hell, if I can do all of that, why would I work for you for peanuts?'.

> C++ calls it an (unordered) map.

Hey, whoa, stop right here. std::map and std::unordered_map are not at all the same thing, and if you're going to be using them in a manner beyond "trivial" it's important to know the difference between them.