4 ms·
Imo the issue is undergrad cs programs have an identity crisis. Are they the entry into the world of computer science. Should they teach set theory, computer o
by dartos 2y ago
Imo the issue is undergrad cs programs have an identity crisis.
Are they the entry into the world of computer science. Should they teach set theory, computer organization, language theory, etc.
OR
are they trying to prepare the new wave of workers. Should they teach protocols like http, industry tools like Java and python, and good test practices?
A well rounded engineer should have a grasp on it all, but with only 4 years, what will attract more funding and more students?
- VyseofArcadia 2y agoI've been advocating for years that CS departments need to bifurcate. Actual CS classes, the theory-heavy kind, need to be reabsorbed into math departments. People who want to study computer science academically would be better served by getting a math degree. The "how to write software" courses need be absorbed into engineering departments, and maybe the extra discipline gains from actual engineers teaching these courses can start turning software engineers from computer programmers with an inflated job title into actual engineers. Students can then make a choice. Do I get a degree in computer science and be better prepared for academia, essentially being a mathematician who specializes in computation? Or do I get a degree in computer engineering and be better prepared to write reliable software in industry? Of course this distinction exists today, and some universities do offer separate CS and CE degrees, but in practice it seems more often to be smashed together into a catch-all CS degree that may or may not be more theory or practice focused depending on the program.
- molteanu 2y agoJust to add another angle to this: of course you can have CS classes and all that good stuff, but would the businesses only employ these kind of graduates? Or would they spread even thinner to grab market share or increase profits and hire non-experts as a result, for which "easy" and intuitive tools have to be developed and employed? I mean, I see this problem with abstraction, maths, compilers, Lisp, etc, you know, the fundamental stuff. That is, the deeper you go it will become that much harder to find people willing or able to dive deep. So eventually you run out of manpower and that what? Use these "intuitive" tools, probably.
- VyseofArcadia 2y agoI mean, this is already a thing today. Programmers who can hack together a CRUD app in <insert popular web dev stack> are a dime a dozen. People who know more about compilers than "oh yeah I got a C in that class" are pretty hard to find. At some point businesses who need "deep experts" have to hire non-experts and invest in training them. This is what I have seen in practice. You don't use the "intuitive" tools, you hire people who are willing to learn and teach them the other tools.
- scott_s 2y agoFirst, "computer engineering" is already a name for an established discipline. And regarding academic computer scientists, a significant amount of them are on the "systems" side; it would be inaccurate to call their work a specialization of math.
- erik_seaberg 2y agoAt my university, "computer science" and "computer engineering" were under different departments, and the latter focused less on algorithms and more on embedded digital hardware.
- dartos 2y agoAt mine they were the same department and degree, but different course “tracks”
- mardifoufs 2y agoThat's still the case for a lot of CS programs. At least mine is still part of the maths department. We also had a distinction between CS and Software engineering, and even between normal CS and a hybrid program between CS and Software engineering.
- blacklion 2y agoIMHO, it is University-level vs College (vocational college) difference. Industry should not require University-level training from workers. Academy should. Plumber or electrician don't need university degree, only professional training till you design whole sewer system or power grid for city. So, yes, bifurcate CS to science and trade. And fight requirements for Bachelor/Major degree in jobs offerings.
- fn-mote 2y ago> Industry should not require University-level training from workers. > Plumber or electrician don't need university degree, only professional training [...] Oh come on, this is ridiculous. Sure you might be able to do good programming without a college degree. The typical student? I give them very little chance. Here's what I think you would see: * Students trapped in small skill-set jobs, struggling to branch out. * Poor ability to manage complexity. The larger the system, the worse an ad-hoc job is going to be. * Lack of awareness of how much tools can help. "Make impossible states not representable?" Write a DSL with a type system so another department stops making so many errors? * Even more incompetence. Had to learn to recognize an O(N^2) algorithm on the job, but you didn't even know what asymptotic complexity was? People are going to end up believing ridiculous cargo cult things like "two nested loops = slow". * Less rigorous thinking. Do you think they're even going to be able to pick up recursion? Have you watched a beginner try to understand something like mergesort or quicksort? Imagine that they never had a class where they programmed recursively. Is depth first search taught on the job? Sure, but... how deeply. * Even less innovation. Who is going to be making the decisions about how to manage state? Would you ever see ideas like Effect? I'm not saying that a university education is a cure-all, or that it is essential to the jobs that many of us do. I AM saying that if you look at the level of complexity of the work we do, it's obvious (to me) that there is something to study and something to gain from the study.
- PaulHoule 2y ago20 years ago I found CS students at my Uni usually didn't know how to do version control, use an issue tracker, etc. Today they all use Github. Remember computer science professors and grad students get ahead in their careers by writing papers not by writing programs. You do find some great programmers, but you also find a lot of awful code. There was the time that a well-known ML professor emailed me a C program which crashed before it got into main() and it was because the program allocated a 4GB array that it never used. He could get away with it because he had a 64 bit machine but I will still on 32 bits. Early in grad school for physics I had a job developing Java applets for education and got invited to a CS conference in Syracuse where I did a live demo. None of the computer scientists had a working demo and I was told I was very brave to have one.
- ykonstant 2y agoWhen I was a student in Crete, the nearby CSD was a gorgeous example of doing both competently. They had rigorous theory courses (like mandatory DS, Algos, logic, compilers etc) as well as hardcore applied stuff. Side-knowledge like source control, Unix systems and utilities, editors/IDEs were supposed to be picked by students themselves with the help of lab TAs, because assignments were to be delivered over ssh through specific channels etc. Sometimes, the quirky teacher would not give precise instructions for certain projects, but tell the students to find the documentation in the departmental network directories for the class and decrypt them with their ID numbers. So the students would go on to crawl the unix and windows nodes for the relevant info. A "good" (7.5+/10) graduate from the CSD of the University of Crete could do rigorous algorithmic analysis, hack system stuff in C and time in Verilog. OOP was hot at the time, so it also meant students were expected to produce significant amounts of code in Java and C++. Specializations abounded: networks and OSs, theory, arithmetic and analysis, hardware (including VLSI etc. at the undergraduate level, with labs). I won't even go into the graduate stuff. And although this curriculum was quite demanding and onerous (the number of projects in each class was quite crazy), it was just something students dealt with. Heck, this was not even the most famous CS school in Greece: the elite hackers mostly went to the National Technical University of Athens. I am not sure what the situation is now, but at least at the time, graduates were ready both for academic and serious industry careers. It is a 4 year curriculum, though many if not most students went on for 5 or 6 years. Of course, free.
- FredPret 2y agoIn my traditional-engineering education, we spent a ton of time on the basic science and theory, with a super broad overview of actual methods used in practice. The expectation was that you graduate and you're then equipped to go to a company and start learning to be an engineer that does some specific thing, and you're just barely useful enough to justify getting paid.
- mrkeen 2y agoOn one end, if you get good fundamentals, you'll understand the practical side too. On the other end, most of engineering knowledge is from experience. Switching undergrad courses to be about understanding THE DOM so we can drive browsers to render our printed-paper skeuomorphs isn't going to drive any kind of innovation. It's not going to put you in a good position to generalise to other work. Furthermore, if you aspire to centering divs and tweaking webpack, you don't need a CS course for that.
- dartos 2y agoTbf, having more higher end engineers center divs did lead us to better div centering methods.
- School-Cotton 2y agoI think using lisp vs other languages is pretty much completely orthogonal to whether the degree is theoretical or practical.
- dartos 2y agoI strongly disagree. Idk if lisp is the perfect language to teach, but the choice in language absolutely flavors a student's understanding of computing, especially early on. I think “lighter” languages with fewer built in abstractions would allow students to better understand the theoretical backing of what they’re doing. Like what’s the difference between and class and a closure? It doesn’t really matter for the practical day to day work, but certainly does to compiler designers and programming language theory folks. You wouldn’t really get a sense for that in Java or python, but you might in a lisp or maybe js.