Ask HN: What do you think should be taught in a great Computer Science degree?
And I discovered that Computer Science degrees don't seem to teach quite what I would have expected.
What do you think should be in a great computer science degree?
And I discovered that Computer Science degrees don't seem to teach quite what I would have expected.
What do you think should be in a great computer science degree?
I think the disconnect between what CS programs teach and how the real world operates is growing. Look at how the hiring process is broken. Anyone with a good CS degree should pass through that process. However, even if you are a really good engineer and graduated in a good CS program, there is no guarantee you will pass the interviews (primarily talking about the US market and in particular big tech). On top of that you have endless frameworks and tools for which the relevancy is a few years.
The question to ask is, do you REALLY want to study CS or are you just doing it for the money? When I studied CS I thought I would have "social standing" and would have a great career paying top dollar. Later on I realized there are lots of positions where people do not work as hard as engineers and where they make good money as well if not more than in a CS career. The exception might be if you have equity that suddenly becomes very valuable. But how many times does that really happen? Most startups go nowhere.
I thought having studied CS I would not just have to be an engineer. I think the reality is that that is what most people end up doing for the rest of their careers. And you might realize later on you don't actually like doing that every single day.
For the first two years, before specialization is locked in, I think the usual staples of at least two programming languages, and some mathematics and statistics leading into algorithms & data structures and machine learning (respectively) is sufficient.
Prescribe more than that and you close off flexibility. Some people going into CS will want to take a more theoretical route and will pick up more pure mathematics on the side, some more AI and machine learning, some more hardware-focused (maybe taking CS as an aside to a mechatronic engineering double-degree), and so on.
Can you explain more about what you expected and how it didn't match up?
I had imagined:
- what's in a computer?
- what is the CPU and how does it work?
- what else is in a computer aside from the CPU?
- what's the electronics behind computing?
- how networks work - from hardware, local and wide area, protocols/routing
- programming - in depth with multiple languages
- operating systems - Linux/Windows and a look at the various other flavors of OS
- data structures and algorithms
- databases
But as far as I can tell the courses don't seem to really emphasise "knowing the machine". They seem to be focused on much more practical outcomes that will get you a job.
I think now there is a stronger tendency to partition the space into hard ware and soft ware and so the hard ware courses are electrical engineering not computer science, and the computer scientists are taught an ideal machine abstraction.
That said, the order of courses wasn't "from first principles". We shared with programming foundations (via SICP), then data structures, and only then machine structures.
That said, iirc the final year will often offer lots of the stuff that you have in mind, like a subject on network programming, a subject on how operating systems work under the hood, advanced database theory, etc. You wouldn't get to cover every single topic, but you would get to cover whatever you're interested in.
Also, a lot of the stuff you mentioned is expected to be picked up as a side-effect doing practical assessments and group work. Eg learning Linux might not be a subject, but labs will often involve preparing and submitting work on Linux systems; there might not be a class on mysql, but a class which requires writing a web application will require knowledge of at least one database backend.
It's like how a physics degree doesn't teach you how to repair cars, but that doesn't mean that a physicist doesn't know more than the average person about how a car works. Still, I wouldn't go get a physics degree in order to deeply understand and learn how to design automotive technology, instead I'd focus my decision on whether to do a mechanical apprenticeship or a mechanical engineering degree.
I would've expected to see a program focused on "practical outcomes" only at a university which offered both CS and SWE degrees.
End result was probably similar, but starting from user-level programming gives people the freedom to specialize in other things.
Seems like age is positively correlated with lower level knowledge which makes me worry who will be doing all of that kind of development in the future when the greybeards retire
My CS program did not include a single class on frameworks or tools. Any experience we got on those was tangential to the primary goal of the class which was algorithms, data structures, maths (discrete, linear algebra), etc.
What they taught was good - theory of computation, graph theory, data structures and algorithms, (DBMS) databases, computer architecture etc. I took an AI class, not all that many years ago, but the field has progressed so fast, most of what I learned is no longer in vogue - we certainly weren't programming neural networks with weights and biases that used backpropagation.
It did strike me that some of the brighter seniors had no idea what git was, or even software version control. Applying early for summer internships is a must, or at least learning this type of thing after school.
As is often said, probably the least important thing to learn is whatever the current fad hottest computer language is. College is not a vocational school.
I've found the more academic universities focus on teaching you the theory of computer science. They're not preparing you for the job market or even teaching you how to code well. You can technically learn computer science without ever coding. So in those programs, you need to use the assignments as excuses to learn how to program well and then get more experience through side projects and internships.
Other universities will focus more on job training. They'll teach you how to code and how to code well. They'll give you assignments that more mimic what you might do in actual development job.
To answer your question more precisely, I consider the SICP as one of the most important book in my life and if you are asking about great course on the forum of Lisp lovers this answer got to be among others.
That about covers it for the first 2 years. There needs to be some room for electives as well!