- it's not about learning a language
- I don't think it's crammed either - it covers a lot but everything is explained in a very accessible way from first principles
- if an introductory course was using only one language, you still wouldn't master the language
- being exposed to different ways to do the same thing is very valuable and very underrated for beginners imo because it teaches you to abstract over concepts - when you learn how to read a file, write a loop, sort an array in each one of C/Python/JS, you develop better understanding of the concept of reading/looping/sorting instead of thinking that the only way to do it is the way your first language does it; you begin to develop a sense of which concepts are language-specific and which ones carry over across languages. I think it's better if this understanding happens early instead of late.
This is one of the most common misconceptions in general with educational institutions and the general software engineering job market.
Programming is not Computer Science.
Computer science teaches you how computers work, concepts of how encryption works, concepts of security, concepts of memory management, and so forth. More recently computer programming has been added as a part of Computer Science degrees, but actually just a decade or so ago (when I was going through it), you could graduate with Computer Science degree without programming experience at all.
There is no doubt that learning computer science makes you a better programmer, but it is different and it is possible to be a good programmer without it.
Programming is one of the practical applications that benefit from strong computer science knowledge. Just like how taking a human anatomy course or a biology course doesn't train you to become a doctor. But it's pretty important knowledge needed for doctors to be good at their jobs (so much so that we don't let people practice medicine without it).
> Harvard’s course seems to be aimed at people who are coders or want to be better at coding, so you learn about different languages, algorithms/data structures, SQL and such.
CS50 is definitely somewhere between "comp sci course" and a "get coding quick" bootcamp.
The future has pointers and memory allocation, even if you want to pretend it’s to there and leave the complexity to other smart folks.
> You don't need low level details to program well--you need a good language like APL, to truly learn how to program
We’re not talking about a programming degree. We’re talking about a computer science degree.
This is exactly the point of any introductory college level course. They're never intended to be the end of your education, they're designed to be a broad introduction to most of the different concepts that you will be learning throughout the program.
Even if you're not taking the rest of the program, having a broad overview as a starting point is valuable. You won't "master" anything in 3 months no matter what you do, so starting by going deep just needlessly limits your perspective on how much there is to learn.
Master of a single programming language is a moot concept, it either boils through to other languages or you just memorized the syntax really well.
Learning Programming != Learning CS
CS50 got me interested enough in programming to pursue it as a career. I have a CS degree now, and work at a well known tech company.
I don’t think the audience is “people who know some programming already.” It is designed for absolute beginners and assumes very little about your prior programming knowledge. I recommend it to any beginner looking to see what computer science is about.
In my own experience working with a lot of brand new programmers, making the subject entertaining is 80% of the battle. Most introductions to CS are unbearably dry and do a very very poor job of motivating further study. The job of an introductory course is to give an overview of what you'll learn going forward and make you want to learn those things, and by all accounts (even yours) CS50 does that.
In other words, CS50 is probably great if it is the one and only course a new person would take. This is due to the broad focus on so many concepts.
However, if it is the first out of many courses, I would not choose such broad focus. I would (and have done many times) create a curriculum based on the student's needs and desires.
That's why I don't like CS50. It's not because I'm not the target audience necessarily, it's that CS50 is overhyped and, in my humble opinion, not suited to be the first course for serious self learners.
By not suited, I mean that there are a number of specifications on Coursera that are a) also free, and b) will lead one better to the goal if the goal is known (which is where most newbies need a mentor). I do not mean that CS50 is unsuitable; I mean that it is suboptimal. In my experience, that is.
I think you may be right about it being suboptimal for self learners. It was, after all, not really designed for that. I disagree that the breadth of the course is a flaw.
One major problem I consistently see with self-taught individuals (including myself before college) is that they have major blind spots, places where they don't know what they don't know. A broad introductory course that intentionally doesn't restrict itself to topics the student is already interested in is the best way I know to quickly turn those unknown unknowns into known unknowns. Whether or not the student chooses to fill those gaps in later with further courses, they'll be better for knowing where the gaps are.