Hacker News new | ask | show | jobs
by lazulicurio 3379 days ago
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).

2 comments

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