7 ms·
A strong computer science department would have enough different types of academics to support multiple undergraduate specializations. I think that means that a
by enasterosophes 2y ago
A strong computer science department would have enough different types of academics to support multiple undergraduate specializations. I think that means that a great computer science degree can't actually be pinned down to a single syllabus, because a single syllabus implies a lack of breadth and flexibility in the academic environment.
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?
- andrewstuart 2y agoI thought a computer science degree would teach from the ground up so the student would understand the computer from first principles. 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.
- ggm 2y agoThey used to. CS 1st year used to include constructing circuits from base gates and driving hex LED displays, simple calculator, Carnot maps, flow diagrams, stuff which goes strongly to boolean logic and gates. Plus machine code, and one higher level language. 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.
- fragmede 2y agomy degree is in computer engineering, which was half a CS degree and half a EE degree, but the operating systems class was in the CS side if iirc. The low level class was on the EE side.
- ggm 2y agoit's not a bad model. I went to a uni with no engineering school (it was one of the expansion red-brick uni's of the 1950s in the UK, it took until the 1990s for them to "grow up" and get engineering, medical and other schools attached) and so this wasn't an option. If I'd gone to Leeds uni 40 miles away they were doing Meade-Conway student LSI with very low yield but none the less, the students got to debug chips they'd made from traces in Magic and other design tools. My mind was officially blown (I worked there in computing support after I graduated)
- Two4 2y agoDo you mean Karnaugh maps?
- romanhn 2y agoMost of these (except maybe OS specifics) were taught in my CS degree two decades ago. I'd be surprised to see the curriculum change drastically since then, as these are pretty foundational topics. That said, different universities have different approaches, so perhaps worth it to keep looking. 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.
- enasterosophes 2y agoYeah, I see. I think a lot of that more hardware-focused stuff will be found in engineering courses like electronic engineering, computer engineering, network engineering and mechatronic engineering. CS tends to be more theoretical: the science of computation, eg comparing the performance of different algorithms. 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.
- daemonologist 2y agoThe CS program at the school I went to only a few years ago was exactly what you imagined. Electronics and boolean logic, computer architecture, assembly language, operating systems, models of computation, data structures, algorithm analysis. I think we only had twelve hours (1-2 semesters, if taking them alongside gen eds) on industry things like UI, specifications, and software development. Even things like networks, databases, and ML were all electives for upperclassmen rather than part of the core curriculum (being less fundamental), along with specializations like compilers and more advanced math. I would've expected to see a program focused on "practical outcomes" only at a university which offered both CS and SWE degrees.
- matrix87 2y agoMy degree (somewhat recent, CS) had a more top-down approach and started from programming DS/A, then you could branch outward into OS fundamentals and hardware knowledge. 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
- vunderba 2y agoThat doesn't match my experience, but I graduated over a decade ago, so maybe things have changed? 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.