Hacker News new | ask | show | jobs
by yessql 3379 days ago
I haven't experienced it, but I've only had a couple interviews/jobs as an electrical engineer before switching to software, where they happen almost every time.

I think it's a sign that universities are failing to be trusted as credentialing institutions. You should be able to verify a degree and conclude from that the person learned the material.

I guess this is why the professional engineering exams exist.

5 comments

Completely just my opinion, but I think this is because most people (both employers and potential employees) are focusing on the more vocational aspects of programming, whereas university is more theory-based.

I know that I would not have gotten as much out of my degree if I hadn't had prior experience with programming prior to university. It's tough to appreciate why complexity analysis is important if you've never personally experienced a program running slow because you chose a poor algorithm.

And most employers aren't looking for that level of theoretical knowledge. They're looking for people who can quickly get up to speed with the development environment, who can break down a problem into smaller logical chunks, and who can translate those chunks into working code.

If neither employers nor students care about the theoretical knowledge, then what is the point of going for that degree? (IMO, the best course of action would be a few years of on-the-job training, then going to university once you have enough experience to appreciate the theoretical stuff. But that would be a huge culture clash with how things are currently done).

> If neither employers nor students care about the theoretical knowledge, then what is the point of going for that degree

Because you occasionally (but often enough to get a reputation for it) get to look like a god when you pull stunts letting them shut down 30% of the app server fleet by just adding one multi column index to the db...

It was probably 5-10 years into my career when realised I occasionally pulled out knowledge or techniques from 2nd year CS courses - which other people (even ones with way more university than me) didn't even understand when I explained what was going wrong and how we could fix it.

The old comp.lang.perl.misc gag saying "There are people with 10 years programming experience, and people with one years programming experience 10 times over" has a deep kernel of truth to it. 10 years of CRUD apps or Wordpress extentions or Django sites is unlikey to have prepared you to be Netflix's platform architect (to be fair though, neither has a mid to late 1980's vintage CS education - I don't get to show off my Pascal chops much professionally... ;-)

I could not disagree more strongly that university is theory-based. The three-class theory sequence I took was a mildly annoying sideshow. The meat of my university's CS program was in Networks and Distributed Systems, Database Systems, Operating Systems, Programming Languages, Functional Programming, Computer Security, Parallel Computing, Sensing and Perception, Machine Learning, Graphics, Scientific Visualization, etc.

Each had a lecture/exam component, but it was minor. The classes mostly centered on a set of programming projects, implementing foundational components in the topic area from a specification and a skeleton. (IRC server, TCP stack, IP router, Paxos, Byzantine Generals, Raft, b-trees, query parser, thread scheduler, syscalls, filesystem, interpreter, RSA, D-H key exchange, authenticated encrypted channel, concurrency primitives and then concurrent algorithms that use them, sensor fusion, geometric transformations, shading, texture mapping, ray tracing, etc). No one I know took all of these classes, but we all took most of them.

Proofs are theoretical knowledge. Hobbes, Locke, and Rousseau are theoretical knowledge. I did plenty of that too. This isn't theoretical knowledge, it's breadth. It's knowing what's involved in the systems adjacent to the code we write, inside the libraries we rely on. It's an understanding of what problems they're solving internally, why they might be acting up, and what to do about it. It's demystifying the rest of the computing environment, pulling back the curtain on abstractions. It's a whole bunch demonstrated ability to write complex programs for complex purposes subjected to rigorous test suites, under far more realistic conditions than any whiteboard interview.

A few years of on-the-job training will teach you what matters for your specific job, right now.

Though we didn't have such a class, a degree capstone might have been "given a CPU emulator, write a secure distributed database engine on your network stack in your SML interpreter on your operating system." It wouldn't have the performance optimizations that modern, widely-used components have accumulated over the last half-century, but it would work.

jeez, what uni is this? I kind of like the sound of it.
i'm doing my MSc now at a decent uni, i kind of wish i did my undergrad at a decent one too.

oh well.

Unlike electrical engineers, not all software developers have degrees in CS. More than half of the best programmers I know don't have formal education in CS, so it would be a foolish hiring practice to rely on institutional credentials.
It has probably changed a little, and varies between schools and educational systems in different countries, but back in my days, some things I learned in university was pure anti-pattern.

Especially the "coder culture" which was obviously not part of the curriculum, but not negligible.

As there seems to be no end of the stream of jerks and increased misogyny, I doubt that it's gotten that much better though.

Edit: I also did a couple of courses that were eye-openers, including a introductory course based on the wizard book (SICP), but it probably was an eye-opener only to the few hobbyist with some previous experience.

There's a couple of issues, I think:

- you can get a degree from a lot of universities without learning what you should

- schooling is no substitute for work experience

- software hiring is still generally broken

On top of those, you've got to keep learning when you're out of school. A university degree doesn't remotely guarantee that you'll be suitable for even an entry-level developer job right at graduation, and the correlation between time and skill gets looser as time goes on.
There's more to judging a candidate than whether they learned the material. A mastery of CS material does not make a candidate perfect -- I'm still very interested in their problem solving skills and their ability to communicate. For all the problems with whiteboarding they're still the best way to test for those attributes.
It's not about the medium (whiteboard or similar) but the kind of questions/problems you ask. When you have a CRUD app developer opening and you're asking the candidate to come up with Knuth-Morris-Pratt efficient substring search algorithm on spot, whereas it took months of research for Knuth, Morris and Pratt...
The whole idea of having education coupled with evaluation is misguided to begin with. All it causes is anxiety and loss of internal motivation.