10 ms·
Tell HN: UC Berkeley's CS61A/B/C are the best courses to learn CS and coding
I have dabbled with many resources before in hope of learning to program and learn basics of CS. I have looked at intro course sequences of schools like MIT, CMU, Stanford, etc. Most have partial resources locked down. I have dabbled with books and they felt like shit. Even the book Think Python by Allen Downey was all over the place.
The books and blogs at least taught me basic syntax constructs like variables, function definition, loops, etc. But I couldn't understand how to package them up (compose) to use them in solving problems.
Then I started studying through Berkeley's 3 course intro CS61A, CS61B, CS61C. They have all materials in the open and if you are following the most current iteration of the course, they even post solutions to the problems. It was godsend for me.
Now, I am confident to learn more CS topics using courses from CMU, MIT, Berkeley, Stanford, etc. The thing that was holding me back was the lack of confidence of programming and understanding really what a program was doing.
- realjohng 3y agoDisagree too. These courses were also known as “weeder” courses so less students do the major, which can’t support all the interested students, so they’re overly difficult. Anyone learning, I would start with JavaScript and make small fun stuff.
- jedberg 3y agoThey weren't overly difficult. They were just the same difficulty as the rest of the CS classes at Cal. If you couldn't pass these you wouldn't pass any other CS course.
- aripickar 3y agoI don’t think they were the same difficulty at all as some of the upper divs. Classes like CS 170 (Efficient Algorithms), Cs 189 (ML) and CS 182 (Deep Neural Networks) were all significantly more difficult than any 61 series class.
- jedberg 3y agoOf course a computer scientist would call out my imprecise language. :) What I meant was that it's difficulty was in line with expectations for a lower division course given the difficulty of the upper div courses in the same major.
- fdye 3y agoI once saw a young lady in the lab in Soda hall getting obviously frustrated. A few moments later she exclaimed, "Why is it so f**ing hard!" and then as if in a cartoon slammed her forehead into the lab computers keyboard repeatedly before a TA noticed and came over to help. It was like something out of a cartoon. I've taken CS/Programming courses at a few institutions and never seen quite that level of despair/frustration. Maybe its just a CAL thing, I didn't end up transferring to CAL in the end so CS61A was the only class I did on campus, so can't really say.
- gamblor956 3y agoThe CS61 series was excessively difficult compared to the upper-level material, and it was absolutely because it was intended to weed people out of the major. I got A's in all of my upper-level CS courses at Cal. Cryptography and compilers were a breeze compared to the CS61 courses. My average grade in the CS61 series was a B-. The semester I took CS61B (data structures), my grade on the final was 21, out of 100. The average grade was 16, and the highest score was 35. (The 35 is a VC now and is fairly active on HN.)
- jdale27 3y agoThe semester I took CS61B (data structures), my grade on the final was 21, out of 100. The average grade was 16, and the highest score was 35. Hilfinger?
- mng2 3y agoCalls to mind a Hilfinger quote from my CS61A experience: "Mike Clancy makes the tests; I make them harder."
- gamblor956 3y agoLol yes, it was Hilfinger. He originally tried to flunk the entire class until the administration forced him to use a curve.
- peterleiser 3y agoI took CS61B with Hilfinger in '96. That guy was a character. In one lecture he didn't let a person answer a C++ question because he said "no, you already learned C++ in highschool. I want a virgin". People tried to avoid his classes, but you learn a lot from Hilfinger.
- aoki 3y agoI avoided his classes like the plague. His name was already a verb in the 80s. Which is not to say that I ever held that against him personally. It was kinda cool that you’d be in Evans at 2am and he’d still be randomly wandering the halls.
- gnulinux 3y agoI personally had a blast and absolutely incredible time in both CS 61A and 61B. That they're "weeder" classes can be considered true only from the perspective that they're challenging classes but note that almost all CS/Math classes in Berkeley are highly challenging and these weren't outliers at all. Before coming to college I had tons of programming experience and two interships. I wrote websites, backends, real life applications shipped to customers, school club websites, I even taught C++ in my high school's IEEE chapter. CS 61A completely changed my perspective on how to think about code, I found it so valuable that I could graduate just with 61A, study everything else (algorithms, data structures etc) myself and be fine with it (this is likely an exaggeration of course, there is some value to finishing a traditional CS curriculum).
- peterleiser 3y agoThis. I went into the CS program cold, no prior programming experience at all. After CS3 and CS61A/B/C my relationship with my brain changed entirely. My approach to deconstructing and then solving problems, of any kind, radically improved.
- theak 3y agoHad a similar experience. Came in to college with very little programming background and wasn't sure if CS was right for me. Truly enjoyed CS61A and how simply it worked up from primitives to explain more complex concepts over time in an approachable way. The best part was no hand waving and everything was fully explained. I had previously tried to learn Java as my first language and never could make sense of all of the "public static void main(String[] args)" and handwaving involved to write a simple hello world.
- gnulinux 3y agoBefore coming to college I had tons of programming experience and two interships. I wrote websites, backends, real life applications shipped to customers, school club websites, I even taught C++ in my high school's IEEE chapter. CS 61A completely changed my perspective on how to think about code, I found it so valuable that I could graduate just with 61A, study everything else (algorithms, data structures etc) myself and be fine with it (this is likely an exaggeration of course, there is some value to finishing a traditional CS curriculum).
- deleted 3y ago[deleted]
- dsingh 3y agoI agree although at the time these classes seemed so unnecessarily hard. I was fortunate to take - - CS60A with Stuart Russell - CS60B with John Ousterhout (now Stanford) - CS60C with Paul Hilfinger - CS150 with Randy Katz I believe (after watching videos online) that CS10 The Beauty and Joy of Computing is also a wonderful intro course to take before the CS61 series. My daughter took CS61B with Paul Hilfinger and he was so gracious to take a picture with the 3 of us together. I have it here on my office desk!!!
- terrycody 3y agoHave you checked CS50?
- rajeshmr 3y agoCould you please post urls for the courses so it would be helpful to the community?
- trollied 3y agohttps://cs61a.org https://cs61a.org should get you started.
- matt3210 3y agoWhat about calc 1/2/3 ? I use those skills all the time in optimization work. Linear algebra? These are important skills that self teachers often forget
- arctic_relegate 3y agoProfessor Leonard on Youtube got me through calc 1/2/3 just last year. I will forever worship the ground that man walks on for his mathematics help.
- jstx1 3y agoMIT 18.01, 18.02 and 18.06
- fsckboy 3y agoand 6.007 and 6.041
- drcwpl 3y agoTry these: An interactive website https://seeing-theory.brown.edu https://seeing-theory.brown.edu that takes you through some of the most critical probabilities and statistics concepts. Statistics 110: Probability If you want a more advanced overview of Probabilities and Statistics, this course from Harvard University is an excellent introduction: https://www.youtube.com/playlist?list=PL2SOU6wwxB0uwwH80KTQ6ht66KWxbzTIo https://www.youtube.com/playlist?list=PL2SOU6wwxB0uwwH80KTQ6... This is MIT Course 18.06, taught by Professor Gilbert Strang. https://ocw.mit.edu/courses/mathematics/18-06-linear-algebra-spring-2010/ https://ocw.mit.edu/courses/mathematics/18-06-linear-algebra... One of the best linear algebra courses that you’ll ever find. Essence of Calculus This is Grant Sanderson’s excellent take on calculus: https://www.youtube.com/playlist?list=PLZHQObOWTQDMsr9K-rj53DwVRMYO3t5Yr https://www.youtube.com/playlist?list=PLZHQObOWTQDMsr9K-rj53...
- beeburrt 3y agoIs Strang that guy that just retired?
- Cjcrew 3y agoCS61A Lectures Playlist: https://www.youtube.com/@JohnDeNero/playlists https://www.youtube.com/@JohnDeNero/playlists
- throwaway71271 3y agoOne person's best learning resource is another person's nightmare. We still have not understood how to tach coding. The subject seems to be completely non linear, and some people get stuck and cant move on and the teachers cant figure out why and they cant figure out why, it could last 1 month or could last 5 years, and at some point some random thing they read or watched completely unlocks them. (For me the thing that helped me was Richard Buckland's Higher Computing lectures: https://www.youtube.com/watch?v=hE7l6Adoiiw&list=PL6B940F08B9773B9F https://www.youtube.com/watch?v=hE7l6Adoiiw&list=PL6B940F08B...) The best way to learn is to keep trying and particularly trying to understand what you do not understand. As Feynman said on his last board: What I can not create, I do not understand. So if you are one of those people who is stuck, or you watch CS61A/B and it does not work for you, just keep looking and trying.
- _xivi 3y ago> We still have not understood how to tach coding. The subject seems to be completely non linear, and some people get stuck and cant move on The same can be said about any subject or skill. If you go to any class, you'll find some people are interested, others aren't. No matter the subject, be it sport, physics, math, chemistry, art, history, etc. Same teacher, same material, different reaction from students. There's no artificial "ceiling" at play that's specific to coding.
- throwaway71271 3y agoI think the problem with coding is that people who are very interested still get stuck, I suspect this happens less often with people interested in chemistry/math etc. (possibly because of survivor bias because people drop out of it sooner, because there is no money in it) There are countless reports of people 'not getting it' after studying for 4 years, they cant make fizzbuzz, and I dont mean they dont get some nuance of it, they literally cant even start typing. I dont think there is artificial "ceiling" to coding, I think we still have to learn how to teach it, and particularly how to teach it to a mass of people.
- x1f604 3y ago> The subject seems to be completely non linear Is this not the nature of learning in general? Why is it supposed that learning things in the linear A-B-C-D fashion is even possible for most humans, rather than supposing that most people would need to revisit certain topics before learning new topics, e.g. A-B-A-D-C instead of A-B-C-D?
- sgloutnikov 3y agoCS61A - https://cs61a.org https://cs61a.org CS61B - https://sp23.datastructur.es https://sp23.datastructur.es CS61C - https://cs61c.org https://cs61c.org
- deleted 3y ago[deleted]
- Ryoung27 3y agoPeople like you are the best type of people out there.
- trelliscoded 3y agoCS61A in particular is important for understanding the nuts and bolts of how programming works. The people who tended to do well in the course had little prior exposure to specific programming languages outside the prerequisite class. I think that all the abstraction that other programming languages do get in the way of understanding why the languages made some of those design choices, which is why throwing all the abstraction out the window is important to understand what's really going on. I'm reminded of an experiment I was told to do when I was learning how to be a better cook, and I complained that I didn't understand what bay leaf was adding to a dish. Someone suggested cooking some plain white rice with some bay leaf, and I could finally taste the peppery notes it added. Sometimes you need a neutral substrate to see the details of the thing you're trying to learn.
- talldatethrow 3y agoI went to Cal but for MechE. Im also a totally self taught full stack web developer, although just on a personal miniSaas with 34 paying companies. I think you'll learn tons by starting a personal project, tiny, small, daunting, whatever your appetite for pain is, and just doing that. I thrashed away on my crm like saas for 6 months before the first demo customers were using it. And then worked on it for another year till it was sellable to less friendly companies. Recently I picked up a JavaScript book and read it. While I learned a few things, I was shocked how much I knew from what I learned from stack overflow and just random reading and thinking during the time of building that CRM.
- flappyeagle 3y agoI learned nothing in 61A — because I was a dumbass kid and didn’t take it seriously. 61B made me feel like I knew how to program. 61C taught me how computers work. A decade or so later 61A is actually the most useful of the 3 courses now that I’m mid career. I might recommend that you take 61b first before the other 2 if you’re just starting out
- golly_ned 3y agoAgreed on 61A. I took it when it was still just SICP in scheme. I saw much of the rest of the curriculum as a variation on the themes I learned in 61A.
- pharmakom 3y agoI think that a pure programming course must be taught in Lisp since that is closest to the essence of computation with minimal syntactic overhead. once that is mastered, switching to an industrial language is just a matter of mapping a particular syntax to a subset of lisp concepts. The old MIT courses follow this approach and are on youtube.
- Already__Taken 3y agomapping knowledge is a learning antipattern IMO. It gets you very far, a good primitive more-so, but you fundamentally struggle to learn new paradigms.
- mdorazio 3y agoGoing 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.
- jedberg 3y agoI 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.
- enjoylife 3y ago> 61C taught me how computers actually work and simultaneously made me quit the major I'm genuinely curious, why did the course make you quit? Was it the material or the professor, or something else entirely?
- teleforce 3y agoNot 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): https://www2.eecs.berkeley.edu/Courses/CS61C/ https://www2.eecs.berkeley.edu/Courses/CS61C/
- itissid 3y agoReading other projects code(especially their unit tests to figure out code) is an invaluable time tested skill I learnt. Once you have learnt the basics of coding getting into doing this is what I highly recommend.
- whatsup7123 3y agoCS61A was great when they taught via LISP (Scheme). Have they switched to Python? Probably still good but would be nice to have LISP.
- phforms 3y agoYou probably know this already, but if anyone wants to learn “old-school” SICP with Scheme via video lectures, I recommend MIT 6.001 (taught by Abelson and Sussman themselves): https://ocw.mit.edu/courses/6-001-structure-and-interpretation-of-computer-programs-spring-2005/ https://ocw.mit.edu/courses/6-001-structure-and-interpretati... The book is amazing, but it is also very extensive/overwhelming and I found that the lectures provide a better guiding structure for myself and the lecturers are also quite entertaining at times. The website also provides additional material related to the course such as exams, projects and lecture notes.
- pamelafox 3y agoIt now starts in Python and ends with Scheme (building a Scheme interpreter in Python). Source: I lectured 61A in 2021
- aabhay 3y agoI did not appreciate it at the time but CS 61 abc absolutely transformed by foundational understanding of computer science and the concepts they push are absolutely and non-negotiably important for someone to learn. My only recommendation is to learn programming in a more useful and productive language like C++, as the thing you do not want to do in CS61A is to simultaneously learn to program and learn the concepts in those courses. The right way to think about it is those courses are trying to make you go “ohh that’s how things actually work”.
- mistrial9 3y agosome people could not stand these classes (in a previous incarnation) and found an assembly language class at a community college instead, at that age.
- debanjan16 3y agoDifferent things workout for different people. I was overwhelmed by so many ways to do things in Python and everybody teaching their own favourite way of doing things. Similarly, all I was learning was the syntax and no problem solving skills. Then I cam across the book How to Design Programs aka HTDP. I was skeptical at first. But I eventually started and worked through the second edition of the book available freely at https://www.htdp.org https://www.htdp.org . It was so beautiful. The teaching languages and writing examples before writing code. It made me really understand programming. Now I can pick up any language (not that I become a language expert overnight) in a short time. I only need to map the concepts to this new language. And that's that. I can even pattern match my ideas from higher order functions to imperative looping constructs. I have another book in to TDR list. It is Norvig's Paradigms of Artificial Intelligence Programming.
- ah27182 3y agoI went to Cal, so I took these classes. 61A and B we’re both amazing, but I always felt like the material for 61C wasn’t laid out well. I’ve heard a lot of good things about Harvards CS-50, not sure how that compares.
- pamelafox 3y agoI was a CS61A lecturer for 3 semesters. I thought that we covered very valuable content, but also did not think that it was appropriate for new programmers. I encouraged students to enroll in a true intro class, like CS10, before embarking on the 61A journey. Here’s my post about how to audit 61A : http://blog.pamelafox.org/2022/07/how-to-audit-cs61a.html?m=1 http://blog.pamelafox.org/2022/07/how-to-audit-cs61a.html?m=...
- fdye 3y agoTook CS61AL (Lab version) about a decade ago. Even knowing how to program and working in industry for several years it was not easy. I think my class was one of the last to use Scheme before they switched towards Python and was entirely taught with SICP Book. Probably the biggest difference between sort of traditional programming courses and CS61AL is you have to essentially understand and do recursion day one. It sort of blew my mind compared to the way I learned because generally you do simple statement programs, then functions, then for, while, do while, etc. Then finally around maybe chapter 10 in a traditional book you get to recursion. CS61AL, SICP, and its lots are great, but they very quickly touch on discrete math and calculus concepts and how they relate to programming/CS. Ditto for first-class functions and Lambda's, all introduced very soon in CS61A. Great course though, was a serious challenge from something I thought I would skate through. Definitely made me a better programmer.