Going to hard disagree here and say this is extremely person-specific. I already knew how to code in C++ and Python from high school AP classes. CS61A was awful for me and made me hate computer science. I tested out of 61B. 61C taught me how computers actually work and simultaneously made me quit the major.
Here's my take: if you are interested in computer science, the combination of these classes is great. If you are interested in being a software developer or building things quickly to solve problems there are far better resources out there.
I would contend that you can't be great at being a software developer or building things quickly to solve problems if you don't understand the computer science taught in these courses.
You might be good, you might get some stuff done, but you won't be great.
I say this as someone who has been around this industry a while. You don't need a fancy degree from a fancy school, but you do need a solid basis in theory. Some of the best developers I know never went to college, but they did learn the theory on their own.
And some really poor developers did go to college, but their college didn't emphasize theory, and so they aren't very good when something happens just outside of what they learned, or a new problem presents itself.
Yeah it’s important to point out that programming is not software engineering is not computer science.
Computer science mostly requires a pencil and a piece of paper.
Programming is the act of making a computer do what you’ve written down on that paper.
Software engineering is figuring out what do you need the pencil for and once you’ve done it, making sure computers are doing what programmers think they told them to.
Programming is like 20% of senior+ software engineer time, on a good day. The rest is spent all sorts of communicating - emails, presentations, specs, docs, figuring out incidents, in general trying to make sure the team is building what should be built - or efforts which support the business and/or the team, like fixing or optimising CI/CD, monitoring, hiring, reviewing backlogs (note plural), mentoring juniors, helping out sales or support with customer issues, working with support of your service providers, etc. This is especially true in big orgs with many teams, in smaller ones you might see a bigger share of pure coding-related work depending on a week... or coding overtime because there simply isn't enough hours in a day to open the IDE normally and these guys still like to code something every now and then.
Computer sciency stuff is maybe 1% on a good year (obviously there will be exceptions depending on the products you're building).
SE is a project management discipline. CS is a logic/math discipline.
SE gets you to think about what the customer needs, what sort of performance or regulatory constraints may be in the loop, how you can design for teams and the future, etc (i.e., do you need a pencil or a pen, and how the factory is set up to make that happen at the rate and in the time required by the customer).
CS is about algorithms and logic, performance optimization, etc. It's the step where you build the machine that cuts the pencil blank, puts the graphite in, adds an eraser... and the conveyers/etc. that transfer the bits to the appropriate place for them to be useful.
I would assume they mean gathering requirements, aligning with other team goals, etc. before picking up the pencil. Which I agree, is a huge part of “engineering” vs. “programming”
> CS61A was awful for me and made me hate computer science.
Valid criticism. Think for most students, 61A has too steep of a learning curve for an introductory class. For people without any programming experience, it’s a bit too much too fast and with a class size of 2000+, you struggle for resources.
For those with prior experience, it feels like unnecessary training wheels. You learn a little bit of Python, SQL, and Scheme. You have to do environment diagrams (What Would Python Do) on paper, and learn how to use a debugger. Projects and tests have mad-libs style fill in the skeleton code.
In my experience, 61A is a tasting menu of computer science: you take it for the experience, and leave hungry and confused – but excited.
> I tested out of 61B.
OP, you really missed a lot by testing out. This class is half theory, half learn by doing. For example, you learn about red-black trees or Dijkstra's in lecture and then go to lab and implement it.
Favorite aspect of this class was designing and then writing a smaller version of git. You had to write a design spec that was checked off, and then your implementation had to pass a test suite.
If that’s not software development, then I don’t know what it is.
> 61C taught me how computers actually work and simultaneously made me quit the major.
61C was not one of my favorite classes because of how low level it is (compilers, RISC-V, concurrency, etc.). But if you stopped taking classes before upper division, you missed out on a whole gamut of “practical” classes like algorithms (CS170) and operating systems (CS162).
Given your testimony, I trust you that it's person-specific – especially since my experience at Berkeley, back in the CS60A-CS60C days (with Scheme) was almost diametrically opposite.
My 80s high school had no programming classes to speak of, but in my own tinkering, I'd done a lot of BASIC & Hypercard Hyperscript tinkering, & I'd looked over enough assembly & Pascal to get the gist. I felt, "I'm good at computers, I can learn what I need there on demand, I've got to major in college in other deeper subjects that I can mainly learn from those departments." And, "being a software developer" alone seemd too narrow an ambition - I thought I'd instead be "someone-good-at-software" in some other kind of innovative industry.
Still, I took CS60A because I didn't want whatever watered-down stuff they'd provide to non-majors – Pascal, I think, at the time. Within a week or 2, CS60A convinced me: there's more interesting depth to 'Computer Science' worth learning.
That continued through CS60B, and by the time I'd done CS60C & the combined EE intro theory & lab course – EE1(?) then, I think, unsure its current equivalent – I'd felt like a circle had been closed on my understanding of how it all works, from logic gates (which I'd understood since a 5th-grade science project & then "Rocky's Boots") through to high-level stack-based languages.
I was hooked, & then knew CS would be at least one thing I'd major in. I ultimately double-majored it with Economics.
Then once out in paid employment, I'd work with people with Bachelors or even Masters degrees from schools not quite-as-famous for their Computer Science programs, and those people would be missing basic knowledge & intuitions about algorithms, data-structures, & OSes that'd been well covered way back in the Berkeley CS60A/B/C intro series.
Of course, the depth of tools & experience available to kids through high school age is wildly different, & better, now. And, if your highest goal is professional training as a software developer, college itself (& college-style courses) may not be ideal, compared to just doing as much as you can, as fast as you can, in the most-challenging workplace that'll take you, filling in gaps with self-study as needed.
But if you want a high-quality college-style education in Computer Science, with the breadth & depth for lots of possibility-frontier work – not just the surface stuff evident to a younger or outside view – Berkeley's curriculum was an excellent eye-opener for me. For precocious students, it should probably replace any "Python & C++" coding in AP high school classes.
Not the guy you asked, but my guess is that they're are not interested in how and why the computer works [1].
They probably more interested on how the computers can work for them. These students most likely to work in the banking or finance sectors where the payments are good and bonuses are awesome. Don't got me wrong though, they are good students and engineers, but under-the-hood of computers are not their main interests or passions. For example, someone can become a car enthusiast but can't be bother to open the engine bonnet or pump the tires.
[1]CS 61C. Great Ideas of Computer Architecture (Machine Structures):
It sounds to me like the original poster is saying they're the best courses for them because all the resources are available and up-to-date rather than because the content is superior.
Here's my take: if you are interested in computer science, the combination of these classes is great. If you are interested in being a software developer or building things quickly to solve problems there are far better resources out there.