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.<p>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.<p>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.<p>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.
Going to hard disagree here and say this is <i>extremely</i> person-specific. I already knew how to code in C++ and Python from high school AP classes. CS61A was <i>awful</i> 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.<p>Here's my take: if you are interested in <i>computer science</i>, the combination of these classes is great. If you are interested in <i>being a software developer</i> or <i>building things quickly to solve problems</i> there are far better resources out there.
One person's best learning resource is another person's nightmare.<p>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.<p>(For me the thing that helped me was Richard Buckland's Higher Computing lectures: <a href="https://www.youtube.com/watch?v=hE7l6Adoiiw&list=PL6B940F08B9773B9F">https://www.youtube.com/watch?v=hE7l6Adoiiw&list=PL6B940F08B...</a>)<p>The best way to learn is to keep trying and particularly trying to understand what you do not understand.<p>As Feynman said on his last board: What I can not create, I do not understand.<p>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.
I 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.<p>Here’s my post about how to audit 61A : <a href="http://blog.pamelafox.org/2022/07/how-to-audit-cs61a.html?m=1" rel="nofollow noreferrer">http://blog.pamelafox.org/2022/07/how-to-audit-cs61a.html?m=...</a>
CS61A 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.<p>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.
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 <i>some</i> value to finishing a traditional CS curriculum).
I learned nothing in 61A — because I was a dumbass kid and didn’t take it seriously.<p>61B made me feel like I knew how to program.<p>61C taught me how computers work.<p>A decade or so later 61A is actually the most useful of the 3 courses now that I’m mid career.<p>I might recommend that you take 61b first before the other 2 if you’re just starting out
Different 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.<p>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 <a href="https://www.htdp.org" rel="nofollow noreferrer">https://www.htdp.org</a> .<p>It was so beautiful. The teaching languages and writing examples before writing code. It made me really understand programming.<p>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.<p>I have another book in to TDR list. It is Norvig's Paradigms of Artificial Intelligence Programming.
Disagree 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.
Reading 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.
I 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.<p>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”.
Had 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.<p>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.
What 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
I 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.
I 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.<p>I think you'll learn tons by starting a personal project, tiny, small, daunting, whatever your appetite for pain is, and just doing that.<p>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.<p>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.
I agree although at the time these classes seemed so unnecessarily hard.<p>I was fortunate to take -
- CS60A with Stuart Russell
- CS60B with John Ousterhout (now Stanford)
- CS60C with Paul Hilfinger
- CS150 with Randy Katz<p>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.<p>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!!!
I 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.<p>I’ve heard a lot of good things about Harvards CS-50, not sure how that compares.
some people could not stand these classes (in a previous incarnation) and found an assembly language class at a community college instead, at that age.