If you go into your CS degree as a young hacker, adept at *nix with a penchant for assembly language, with enough experience to appreciate the CS concepts, you're going to be disappointed. There's a strong chance that you'll know more than the professors.
Alternatively, if you go in knowing nothing and really work hard to sponge up everything the degree program wants to teach you, you're going to think you've learned something but you won't actually leave with any useful knowledge. You'll have dated and often half-baked understandings about how computer systems should theoretically be designed. You might have an idea how a basic OS kernel works from your OS class, or how to write a sorting algo from your data structures class, or maybe a parser from a language design class. None of that is useful at all, other than maybe to get you interacting with your machine, in the hopes that you'll learn how to use a computer (which is a completely different set of knowledge) by the time you graduate. And if you did ever want to write your own programming language, you can throw out everything you learned in class and start over by Googling it and following the best practices of today, like we do for everything else.
The only point I can see is to be able to say you have a CS degree, and hopefully that's losing value.
(This was slightly longer ago than I'd care to admit, so maybe things have changed... I would expect it's still something of a case of "YMMV", as we used to say.)
For people who can't afford that, there are usually some forms of getting it for free.
Higher education really shouldn't be a matter of personal finances.
Yep, everything newer is automatically better. No need to have any grounding in objective utility as long as you're up-to-date on the latest web framework!
> You might have an idea how a basic OS kernel works from your OS class, or how...or maybe...None of that is useful at all, other than maybe to get you interacting with your machine, in the hopes that you'll learn how to use a computer (which is a completely different set of knowledge)
Any decent computer science program is both theoretical and hands-on. Projects where you get hands-on experience with the concepts you just learned. Not all of us can read Data Structures and Algorithms and implement a search algorithm as an 18 year-old. No, not everyone needs to know this. Yet, some people do. For those people who do need to know, their work wouldn't be possible without it.
> If you go into your CS degree as a young hacker, adept at nix with a penchant for assembly language, with enough experience to appreciate the CS concepts, you're going to be disappointed. There's a strong chance that you'll know more than the professors.
True, but (especially now) I'd be surprised if this is <2-3% of the CS undergrad freshmen population. I personally switched from pre-med to CS as a junior in college with only a single QBasic high school class under my belt.
Finally, as others have pointed out, (and as much as I hate admitting to this phrase that was so often spouted out by my college professors, perhaps I have drank the Kool-Aid), you're learning how to learn. That is, you're practicing juggling abstract concepts in your head, making connections and weighing solutions. I found my CS classes were 10x better at making me a general problem solver than my pre-med classes (mostly my discrete math/logic classes).
I didn't say newer is better, I'm saying that your recollection of how a compiler worked in university will not be of any use to you if you need to write your own language for production today. I've also never heard anyone say "oh yeah, I did this once in college, here's how you do that".
> For those people who do need to know, their work wouldn't be possible without it.
Who? Seriously, who would ever be employed to author search algorithm using the knowledge they obtained in a 4 year computer science program? Extremely few people are involved in the work of implementing anything that low level, and thinking you understand what's going on under the hood is just tricking yourself. For example, your 4-year CS degree holder would surely understand the trade-offs between a linked list and an array, right? Then you find out none of that is true in practice: https://dzone.com/articles/performance-of-array-vs-linked-li...
> I personally switched from pre-med to CS as a junior in college with only a single QBasic high school class under my belt.
I'm not saying only the l33t can do CS, I'm just giving the example that if you actually do know what's going on and you have to take all those classes, it's very obvious that the professors have nothing of value to add that you can't learn faster by yourself online. I grew up cracking windows software for fun and I had to watch a professor stumble through the basics of x86 assembly. It was an obvious waste of time for all parties. Educational resources today are vast, and if people want to learn something, they can just go learn it.
Also, have you looked at professor salaries vs engineer salaries? I know there are some people who teach at night or do it for the passion of it, but the reality is that it's not going to attract the most ambitious minds in our society. Meanwhile, so many major pieces of software are available for free online, and you can actually talk to the teams doing the work, and they'll let you contribute and give you feedback... for free!
> Finally, as others have pointed out, (and as much as I hate admitting to this phrase that was so often spouted out by my college professors, perhaps I have drank the Kool-Aid), you're learning how to learn. That is, you're practicing juggling abstract concepts in your head, making connections and weighing solutions.
This is my primary objection, and perhaps you have drank the Kool-Aid. If you get a CS degree at any major institution, you are not learning how to learn. You're both preventing learning and picking up bad learning habits. Doing a pre-built lab in a CS course is so much worse than contributing to literally anything on github. Studying how algorithms used to work in the 70s is useless compared to diving into any modern piece of code and benchmarking and learning how to optimize.
Look at what is actually in a CS program from a respected school: https://cse.engin.umich.edu/wp-content/uploads/sites/3/2019/...
There's a 4th-year course just called "Algorithms", check it out: http://www.eecs.umich.edu/courses/eecs477/f02/syl.html
They might as well have called it "Inefficient implementations of already solved problems".
I can't imagine why there's a "Databases" class and "Web Databases" class, but I think you see my point. Nobody is implementing a database with anything they learned in uni, and nobody is doing a better job of learning how to use a database in school than they would with experimentation and online explanation.
Maybe the fact that you're graded on learning these things, coupled with the enormous price, drives a student to independently research each of the topics presented throughout your 4-years? Then through research and play, they would gain understanding of each topic. But if the school is simply serving as an extremely expensive prompt for self-learning, then what value is the school really adding?
> I found my CS classes were 10x better at making me a general problem solver than my pre-med classes (mostly my discrete math/logic classes)
Every time I hear that reasoning, I think it's a rationalization for spending huge amounts of time and money doing something pointless. I also like "the college experience" as a good reason it was valuable.
Maybe general problem solving is being taught and is valuable, but that's not what these CS degrees are being sold as. To pick on umich again, look at the "Student outcomes": https://cse.engin.umich.edu/academics/undergraduate/computer...
So if you graduate with this program, you'll be able to "Analyze a complex computing problem and to apply principles of computing and other relevant disciplines to identify solutions" and "Apply computer science theory and software development fundamentals to produce computing-based solutions"? Maybe if you study independently while also stressing about passing your exams and doing your homework, then you'll be able to do those things, but it'll happen at a slower rate than if you just started building software and researching as you went. I just looked at a few of the syllabuses for this program as an example, and there's no way it's going to deliver what they're promising.
What planet am I on right now?
So I would say solid math base is what you get at university that allows to work at more challenging/interesting projects.
Unfortunatelly most unis exept top ones are waste of time at least in my country.
If you spent time looking at how much time students spent (in and out of class) on CS and math topics, it's way less than you'd assume.
FWIW, I assume little. I have a degree and know the effort that went into it, and am well versed in how courses are distributed in and out of your major over 4 years of study. I'm not engaging in this discussion to say one is better than the other... I'm saying they are different. Different schools, for different purposes, serving different people.
It's also known in layman terms as practice. 9 months of cramming is not good enough. Neither is 4 years of tests without actually using the taught things in practice and laboratory exercises. And preferably also homework.
Source: SuperMemo research, Piotr Woźniak and his citations. No reason why it wouldn't apply to CS or programming.
The amount of information useful requires essentially lifelong interleaved focused learning at least hour a day. You can also maybe pick some things up in a job, but these have stricter limits.
This isn’t true. People forget the most advanced skills they learned unless they use them regularly but they don’t forget the ones that are necessary for that last skill. If you ever knew calculus you’ll remember algebra after decades without using it. I haven’t spoken German in most of a decade but I can still read it fine. Spaced repetition is the most efficient way to durably learn something but it’s not necessary.
People tend to forget unpracticed skills, not oldest, and most complex parts (least compressible, biggest) first, not necessarily hardest. And the forgetting is exponential, depends on how well the material is presented (cohesion specifically).
Exponentials flatten a whole lot.
You do forget a little still over time. Ask a 40 year old who knew algebra and calculus really well and does not use it often if at all. (I do sometimes, so I don't count.)
Stability and accuracy are also separate variables.
Algebra is not one thing, it's thousands of memory chunks. As a probe, think if you remember Fundamental Theorem of Algebra which is a keystone, but slightly tricky. Compare to whether you can solve ordinary differential equations of second kind, and whether you can solve an equation involving logarithms of rational non-negative numbers. (I picked random not absolute basics from high school, 101 and 202. Bonus points if you spot the stinker.)
--
I always thought of even latest versions of SuperMemo like Antikythera mechanism for learning. It's a great model even if principle is not yet properly researched.
Harry P Bahrick, Lynda K Hall Journal of experimental psychology: general 120 (1), 20, 1991 An analysis of life span memory identifies those variables that affect losses in recall and recognition of the content of high school algebra and geometry courses. Even in the absence of further rehearsal activities, individuals who take college-level mathematics courses at or above the level of calculus have minimal losses of high school algebra for half a century. Individuals who performed equally well in the high school course but took no college math courses reduce performance to near-chance levels during the same period. In contrast, the best predictors of test performance (eg, Scholastic Aptitude Test scores, grades) have trivial effects on the rate of performance decline. Pedagogical implications for life span maintenance of knowledge are derived and discussed.
So my question is what level of calculus is retained, and if students who take calculus then advanced calculus or introductory analysis or whatever you’d call it retain more.
Related knowledge strengthens already known things, and once critical maximum stability/retrievability is reached (optimally 7 or so precisely spaced rehearsals) it is pretty much cemented. Without optimal spacing, probably quite a few more repeats. At maximum stability/retrievability the exponential maintains "flat" form for a very long time. A refresher may be needed to get facile again, otherwise it may take a short while to remember and there may be mistakes. Even a trivial refresher will work though, chances to use basic algebra are many.
Principles SuperMemo SM-17 algorithm puts in quantification. Here's a link with all the history and references to some other research: https://www.supermemo.com/en/articles/history
Thanks for the paper, though it's slightly wish washy, but still useful.
The introduction of the ECTS was however highly controversial at least in Germany. Before the Bologna Process German universities had the "Diplom" taking no less then 4,5 years for CS. The introduction of the bachelor with down to only 180ects, so only 3 years, was seen as cheapening the education severely. Universities generally dont see themselves as preparing you for the job market, but instead provide you with the prerequisites to enable you to contribute novel ideas to your field in form of a doctoral degree. That almost every CS job requires at least a bachelor degree is just an side effect from the point of view of the university. An often mentioned criticism was the government selling out the education system so companies could quicker get new employees. Quantity over quality. As a result, you still find a high percentage of students automatically adding a masters to get the equivalent of a "real degree", with some universities not changing much in the structure of their diplom curriculum, awarding you a bachelors degree after 3 years but expecting you to finish the rest.
There is however also the opposite in the form of an (payed, but badly payed) 3 year apprenticeship training after school. You can become an "IT specialist" without going to university and even without the prerequisite school years to start university (normally successfully finishing grade 13 and thus getting your "Abitur"). You can start the training once you successfully finished your 10th schoolyear and thus getting your "Realschulabschluss". The 3 years are 50/50 professional school and working in a company. Looking at the curriculum of one of the first schools in google, they have in total between 880 and 960 school hours. Depending on your focus, 300-400 hours of "Information and telecommunication systems", 200-300 hours of application development, 200 hours of econ and business processes and ,due to accepting people who finished with 10th grade, 60-100 hours of English lessons. IT specialist here means either becoming a sysadmin or a coder.
I think bootcamps actually demand a far higher rate of output and often at a very high level within specializations. The problem is I don't want to hire someone who can crank out bleeding edge framework code 20 hrs/day for 6 months.
University level work in physics, literature and chemistry are so different as to have basically no overlap. University level is as meaningful as high school level in a world where Calclulus II tells you the course covered calculus and is otherwise uninformative.