The assertion that those things must be taught/learned within the confines of a CS degree is a little silly.
The assertion that those things must be taught/learned within the confines of a CS degree is a little silly.
I was very interested in math and theoretical CS. It took the whole batch of students, including the ones in honors math bachelor a good 2 years of daily intense study alone to get the basic feeling for math straight (I was part of the IDEA league program in Europe and I would consider my CS studies among the best in Europe, especially when I see what students come out of Berkeley and Toronto). Then it took at least another year or two of algorithm studies to properly deal with algorithms and data structures. Also note the exam failure rate of about 90%.
Sure, you can hack some knowledge together in 9 months. But it is biologically impossible for the brain to properly learn these things in 9 months. If you can do it, you are a genius and your talents are completely wasted in this bootcamp. You should instead apply for a PhD in astrophysics at MIT or something and start contributing to mankind...
Also, what is the baseline you're starting at, before you start the timer?
Maybe I'm just arguing about what you call a genius, but I think it's totally biologically possible for many students to learn CS fundamentals beyond the capabilities of the average CS major, in 9 months.
The baseline is high-school.
Well "the average CS major" is also a very broad statement :D. I have no good overview of what an average CS major is, to be honest.
I think we are talking about different things. Let's say you learn how to build a hashmap, how to solve TSP with dynamic programming. Conceptually, this is possible to learn in 9 months if you are a good student (and therefore, your are talents are already wasted in this bootcamp). But what if I ask you some follow up questions? Modify the problem. Will you be able to explain how perfect hashing works or what the runtime of a hashmap is if the hashing function is not O(1). How different hashing procedures lead to different qualities for different implementations of hash maps?
We are not talking about knowing that hashmap give you O(1) lookup if you are lucky. If that is the skill you want to learn, sure, 9 months will do. But truly understanding what you are talking about and being able to explain, augment, modify/improve data structure and suit algorithms to your needs... Proving that they still work correctly after your modification. Understanding how that damn distributed consensus algorithm works that seems to have a bug that fucks up your database every now and then.
Yes agreed. You don't need to know that for 99% of CS jobs. But we are not talking about whether bootcamps can prepare you for work in average code mills, we are talking about whether they can replace CS education.
As a matter of fact I DO believe that bootcamps solve a critical purpose in filling the vast amount of gaps in our IT market. But I am always surprised again and again why "the new kid on the block" always needs to attack other completely valid paths (like CS major). They are completely different things made for a different purpose.
I think people need to realize that CS major is NOT the right choice for most coding jobs. But that does not mean that a bootcamp can replace a CS major, it just means that a bootcamp can be an efficient shortcut to hit the job market running.
We're discussing "what happens to tech workers when their skills become obsolete." If being able to contribute to a scaled system as a great software engineer at Google or Amazon is not a sufficient measure of "Knowing CS well enough," I'm not sure we're talking about the same thing.
Is it enough CS to do fundamental AI research? Eh probably not. Is it enough CS to do pretty much any other job out there? Yes.
Also, it's far easier to grasp the basics of AI from a course than to reconstruct "basic body of knowledge" just from reading arxiv. As a matter of practical considerations, I just don't believe anybody can become an expert by reading only the research, without going first through the basic training. It's too damned difficult, too much work (and pointless, too - people did that work for you already and built great courses with the summaries, why not take advantage of that?
Impressive. (TSP is NP-hard. Not even NP-complete because you can't verify the solution in polynomial time... or at least, I don't know how to do it and would love to see a solution with dynamic programming)
Edit: it's 3/2 for Christofides' algorithm. Native dynamic is bad speed but gives accurate solution. It's no good for more than 24 nodes or so.
Usually it is good enough, other similar and better attempts try to tighten that bound with more admissible heuristics. E.g. for metric spaces solution is possible to tighten a lot. (Like shortest travel without weights.)
https://undergrad.soe.ucsc.edu/sites/default/files/curriculu...
It'd be intensive; but doable.
Even if you could take them all at the same time, maybe 2 or 3% of students would have been capable of completing those courses in that time frame at my University.
You're also cutting out 5 classes because they are called electives. In most programs electives are structured so that you're going to get exposure to certain topics no matter which electives you take, so randomly cutting out 5 classes just because there is some choice doesn't make sense.
Of course it is possible, a few people throughout history have done it, but it is rare enough that I would claim that anyone who thinks they did are deluding themselves unless they can come up with further proof.
To quote my prior comment, this basically says it takes more than reading. But reading is the root of it. These days “reading” encompasses everything from books, internet, and even YouTube style videos. Basically individual leaning content.
It’s very possible if you’re motivated and put in the time. College is forced motivation.
Lets take an example from the subject at hand, series in calculus: we want to prove that the sum of a series converges, how to you verify the proof without an instructor? Check that it is the same as the book? Most likely it wont be the same, proofs can come in many different ways. So either students start discarding their correct solutions thinking they are wrong or they fail to discard wrong solutions. Either case they fail to fully grasp the material.
You need to be a genius to properly root out all the errors in your head on your own, doesn't matter how many videos or books or tutorials you go through they can't evaluate your creative solutions like a real person can. Of course the need for instructors mostly disappear as you reach mathematical maturity, but to get there without help is extremely hard.
Why? Because learning to take tests and learning are two different things. And nothing is permanently learned. Except maybe how to ride a bike.
* Machine learning is nothing but multivariate calculus.
* Analyzing network traffic is all queueing theory which is based on calculus.
* Even the simple data structures proof that no comparison-based sorting algorithm can run faster than n log n requires calculus.
And all those older programmers doing machine learning when they haven't had any CS courses on the topic.
Obviously a degree helps, but it doesn't stop someone suitably motivated and capable.
[citation needed]
I've been doing self-studying for the past few years and there's no way I could possibly truly learn the bulk of CS in only nine months. Every skill needs many hours of practice and the brain needs time to process information. Unless you're part of the 1% of people who are extremely quick learners and have profound memory retention skills, most people need a lot of time to comprehend complex topics. It's not pure coincidence that some of the best performers of a lot of subjects started when they were young: by the time they were in college/adulthood they already had thousands of hours of practice.
Could you learn the necessary CS fundamentals that are included in a CS degree in nine months?
Nine months of Lambda School full-time is virtually equivalent to the amount of time you'd spend in the CS portion of a four-year CS degree.
https://lambdaschool.com/courses/full-stack-web-development
Also notable that the CS block is last, right before interviews. It would have made more sense if you put that first and then refereed to that knowledge in the other parts, but now it looks like Lambda school just treats CS fundamentals as interview prep instead of necessary building blocks.
Yes. "Biologically impossible" is quite the high standard to meet.
I think that is horrible advise. They will pay you peanuts and abuse you. Instead go found a startup and make lots of money. Then you can fund interesting research that contributes to humanity, if you want. Or you could get a PhD once you've gotten your money.
This is all assuming that said person is a genius, of course. Otherwise disregard this advise.
I value CS degrees and value mine, but reality is, not everyone that writes code, need a CS degree from MIT or Stanford. Bootcamps serve their purpose and I have worked with many self taught and Bootcamp grad developers who went on to be exceptional developers. I myself was self taught before I entered into a CS program and honestly I wish I would have went into applied mathematics. Everything I learned in school I could have self taught by already having a base in programming. I also never use anything I learned in school at my day job since I left AI and 3D dev.
More relevant to the story, aging techs can actually be quite lucrative once you pass the curve of no new people are learning it, and all the skilled workers have left for greener pastures and are not looking back. I have taken some gigs for IBM Universe, VB 6, and COBOL JCL that have been quite lucrative because no one wants to touch them and most of the talent has retired out of the field.
2000 hours is a LONG time to do something, you will certainly have a grasp of the fundamentals after 2000 hours. Will you be a master? No, but did you stop learning when you got your first engineering job?
Hell, most traditional CS degrees (at least their core credit requirements) can be completed within 9 months if you crunch
How many jobs require a knowledge of “CS fundamentals”. The typical development job are basically the “dark matter developers” writing yet another software as a service CRUD app or bespoke internal app that will never see the light of day outside of the company.
Why would you want to confine yourself to working on CRUD apps instead of working on cool tech?
In given week, I’m up and down the stack from the web to the infrastructure (AWS). I found all of the things that AWS enabled that took literally months to provision in the old world “cool” for about a year and then it became just another means to an end.
I was thinking about attending to a CS undergrad course some time ago, but since I'm full-time employed at a very big ("unicorn") startup - an opportunity too good to be wasted -, I opted to take some classes on advanced topics such as Discrete Optimization and Automata theory on Coursera . It has been the best use of my spare time ever.
Hopefully changing technology will be learned on the job as needed.
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.
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.
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.
A bootcamp is not a substitute for a CS degree.