9 ms·
CS 61B Data Structures, Spring 2023 UC Berkeley
- deleted 3y ago[deleted]
- DesertVarnish 3y agoI took this course with Hug many years ago. He's a truly gifted educator and I learned so much from the projects.
- slyrus 3y agoI took this so many years ago I can't remember who taught it. Paul Hilfinger maybe? Microvax assembly language was a big part of the course, IIRC.
- ev7 3y agoI took it two semesters ago with Hilfinger and sadly didn’t have any Microvax in it. You might be thinking of 61C, which deals more with computer architecture.
- slyrus 3y agoquite possible! It was a long time ago :)
- er4hn 3y agoA dead assembly language sounds like a Hilfinger thing. Taking 61B with him was an experience. He started by asking us to look to our left and to our right. He told us that one of us would not make it to the end of the class, with pride in his voice. He was right about that. In his defense he would also work very long hours answering emails from students. The night before projects were due he would hang out in his office all night in case people had questions. He'd return submitted code to you with detailed comments about how to write clean, readable code. More so than data structures I learned how to write readable code in that class.
- slyrus 3y agoAnd it wasn't quite dead back then. '89 maybe? Dying, but not yet dead.
- ssbash 3y agoI also took 61B with Hug. I had Denero for 61A. Great professors. Berkeley is lucky to have to them.
- HammadB 3y agoAnnouncements!
- FuckButtons 3y agoI took it with hilfinger, solving the projects in 61b was probably the most fun I had at Berkeley (while actually working on class related things)
- adamangle 3y agogreat course
- kleiba 3y agoHere's an interesting resource for those who like it formal: https://people.mpi-inf.mpg.de/~mehlhorn/ftp/Mehlhorn-Sanders-Toolbox.pdf https://people.mpi-inf.mpg.de/~mehlhorn/ftp/Mehlhorn-Sanders...
- dataflow 3y agoCool! Peter Sanders is the same person who invented the awesome DC3 linear time suffix array construction algorithm (aka Kärkkäinen-Sanders).
- Al0neStar 3y agoMy favourite ds/algo book is "Algorithmic Thinking : A Problem-Based Introduction" [0] it was published in 2020 and it touches on competitive programming techniques in pure modern C (all the pure c ds/algo books that i know are outdated). A second edition is coming soon with 2 extra chapters [1]. [0] https://nostarch.com/algorithmic-thinking https://nostarch.com/algorithmic-thinking [1] https://nostarch.com/algorithmic-thinking-2nd-edition https://nostarch.com/algorithmic-thinking-2nd-edition
- lannisterstark 3y agoIf you're a starter, I would heavily suggest A Common-Sense Guide to Data Structures and Algorithms by Jay Wengrow instead. It's written in a fantastic, easy to understand style and actually goes over everything as it explains it, both code examples and visualizations. https://pragprog.com/titles/jwdsal2/a-common-sense-guide-to-data-structures-and-algorithms-second-edition/ https://pragprog.com/titles/jwdsal2/a-common-sense-guide-to-...
- wodenokoto 3y ago101 is a beginners course. What is 61B?
- __init 3y agoAt Berkeley, course numbers >100 are upper-division, and those <100 are lower-division, introductory classes. Especially in the CS department, the upper-division courses are far from introductory. 61B is the the second in the 61A-B-C series, which is required for all CS majors. (A fourth lower-division class, CS 70 ("Discrete Mathematics and Probability"), is also required, but is independent of the 61 series.)
- ar_lan 3y ago61B is the second beginners course of Berkeley Computer Science (61A being the first). This is essentially a 102 course.
- cobaltoxide 3y agohttps://docs.google.com/presentation/d/1dWqymxQxZrMWYl76GfJoyjP20McXIW6YLx2htZoRexM/edit#slide=id.gd3802d75dc_0_10 https://docs.google.com/presentation/d/1dWqymxQxZrMWYl76GfJo...
- bloemheuvel1 3y agocould somebody explain how to recreate his coding environment in sublime text? looks very nice for learning and following along.
- pigsinzen 3y ago> in sublime text? Not sure if you're under the impression that he is using Sublime Text or we're looking at different editors. In the video from his second class, it looks like he is using a Jetbrains[0] product. [0] https://www.jetbrains.com/ https://www.jetbrains.com/
- barbecue_sauce 3y agoIn the first class, he uses Sublime Text.
- blagie 3y agoHere's my question: This seems wonderful for 2010. It's 2023. We have 3B1B, SoME, Python Tutor (which now does many languages), and various types of fairly smart tools to support kids as they're coding (e.g. Jupyter/Pluto-notebook style system, ones like Khan Academy, and ones with a split pane). Has this progress been applied to algorithms? If not, why not?
- infocollector 3y agoI think students will benefit from an updated course for 2023 for sure. > Has this progress been applied to algorithms? If not, why not? These are fairly recent and will take time to permeate.
- ericjmorey 3y agoI don't understand what your question is? How is the 2023 course material taught at UC Berkeley being publicly accessible not exactly the thing you're asking about?
- blagie 3y agoI'll simplify. In 2023, there are much more effective ways to teach computer science than tossing lecture videos up on a web site with homework assignments. MIT pioneered that in the nineties with OCW. It was a good idea at the time. Now, we have ways of doing online learning which are an order of magnitude more engaging, and lead to much better learning outcomes. I would never use the Berkeley stuff with kids. I might use it to help inspire what I do with kids. I would use many of the more animated, interactive things with kids, if available. I was asking if anyone has done that. If not, I'm surprised no one has done it. To be clear, I'm not dissing Berkeley for what they did here. Posting this sort of thing is great. It's just a tiny fraction of the impact of a real learning experience.
- kyawzazaw 3y agoWell, Khan Academy has this: https://www.khanacademy.org/computing/computer-science https://www.khanacademy.org/computing/computer-science > It's just a tiny fraction of the impact of a real learning experience. Well, it's mostly intended for their students. The access is just open. It seems to work well for their students.
- noobdev9000 3y agoIs there a point for working programmer to learn these in 2023, rather than just treating them as abstract interfaces?
- Zvez 3y agoI guess it depends on what you do and your goals. It might be not necessary to do average developers job (and full disclosure, it wasn't necessary 10 years ago as well). But understanding fundamentals gives you insights to be better prepared to choose right 'interface' when you need to. Also you can see it as a way to stretch your 'programmer muscles'. After going through lecture topics list, I think most of those you actually need to know as a working programmer. Not because they are prerequisites, but because after couple of years in the field, you will have to touch most of those topics anyway.
- Ar-Curunir 3y agoA CS degree is meant to teach computer science, not just programming. Algorithms and data structures are the most fundamental concepts in computer science.
- Myrmornis 3y agoMuch of the industry uses algorithm and data structure problems as a way of assessing "smartness" in interviews -- the idea is that even though it's often not needed for the job, giving people the challenge of learning that area at the intersection of computer science and software engineering correlates with how strong a contributor they'll be. I.e. if you don't know it but can pick up an area like that, that's a good signal. So a course like this (doing all the homework exercises) would definitely help with interviewing and getting jobs that people are competing for, if that is something that interests you. The actual content in this data structures course obviously will mostly not appear in any interview, but the homework exercises will make you stronger in a way that is definitely desirable for interviews. And of course, interviews aside, it will all be interesting for anyone that has an intellectual interest in software engineering.
- specialist 3y ago
- markus_zhang 3y agoI have to appreciate the intelligence of top notch CS school students. I once took the equivalent class in CMU and couldn't even complete the first assignment. Forgot which one but the last problem is too hard for me. Then I realized I better just study whatever I'm interested in and go back to algo if needed.
- mdaniel 3y agoA reasonable person may ask whether a student's inability to complete the first assignment is a failure of the student, or of the support structure (materials, lecture style, any applicable TA)
- markus_zhang 3y agoI'm just using the online material, not as a student of CMU so I don't blame them.
- mailey 3y agospeaking of, are there any benefits/disadvantages of learning data structures in java/python compared to C/C++ ?
- SinePost 3y agoThis spring, I completed a data structures course at a large state school. We used Java at our university because Princeton did, and I imagine Princeton did because of the ease of segmenting concepts into classes because Java bytecode is the same between the students' devices and the machines which were used to grade their assignments (our grades were determined as a fraction of the number of test-cases our code would pass).
- alex_lav 3y agoUnsure why this is downvoted? This question seems reasonable. Personally I think Python specifically allows an easier understanding of the data structure in principal, but C/C++ would create a better understanding of data structures as they operate with constraints like memory/resource availability. Kinda depends what you’re after I think.
- cobaltoxide 3y agoThe data structures and algorithms themselves should be the same regardless of what language you are using. The bigger difference here would be C versus C++, as the language features present in the latter allow significantly more abstraction than the former. Implementing fundamental data structures in C can be very instructive but you will also spend more time on low-level details. With Java and Python you can ignore memory management to some extent, as these languages are garbage-collected. That could also be a plus or a minus depending on your point of view. When learning the subject, it might be better to be forced to do manual memory management, to learn about the pertinent issues. And then once in "production", you can appreciate the convenience of a garbage-collected language. When I studied EECS at Berkeley in the late 20th century, we used the following languages: 1. CS61A "Structure and Interpretation of Computer Programs" - Scheme/Lisp. Very highly abstracted from the machine details. 2. CS61B Algorithms and data structures - C++/Java. Allows "just enough" machine details. 3. CS61C Machine structures - MIPS assembly language and some C. All the machine details. 4. EECS 152 Computer Architecture - Implement a RISC/MIPS CPU and SDRAM controller using VHDL.
- projectileboy 3y agoIf you like this, I strongly encourage you to also check out Harvard’s CS50. Lectures are all on YouTube. https://cs50.harvard.edu https://cs50.harvard.edu
- ericjmorey 3y agoOr perhaps UC Berkeley's Structure and Interpretation of Computer Programs Course https://cs61a.org/ https://cs61a.org/
- _coveredInBees 3y agoHighly recommend CS61A. Can't say enough good things about it.
- alex_lav 3y agoI’ve been curious for a while now, if anyone’s had success completing these courses via YouTube or open courseware or whatever, and citing them as a proxy to an actual undergrad degree on a resume. The content seems great, and other than, I guess, interaction with professors and other students, I’m unsure what the difference would be in outcomes?
- projectileboy 3y agoIt’s a good question. I took it as an Extension student working on a degree, but if you made yourself do the assignments, you’d have much the same experience. The only thing you’d miss are sections with a TA, which is valuable, but I think you could replicate with a study group.
- pamelafox 3y agoFor the full CS61A course experience, you would want to do the assignments and even try the exams, which are fairly difficult (they are the grade differentiator, for the most part). I wrote up a post about how to audit 61A as an external learner: http://blog.pamelafox.org/2022/07/how-to-audit-cs61a.html http://blog.pamelafox.org/2022/07/how-to-audit-cs61a.html (I taught it for a few semesters)
- jestarray 3y agohow does it compare to princetons algorithms part 1 course: https://www.coursera.org/learn/algorithms-part1 https://www.coursera.org/learn/algorithms-part1
- Aaronstotle 3y agoGo bears
- mdaniel 3y agoWow, good for them teaching software engineering, and A++++ for the Ousterhout book <https://www.amazon.com/Philosophy-Software-Design-John-Ousterhout/dp/1732102201 https://www.amazon.com/Philosophy-Software-Design-John-Ouste...>; I wish everyone would read it
- extasia 3y agoProbably the software book that has influenced my practice the most. Fantastic writing, and not too long either.
- game_the0ry 3y agoForgive me for the ignorance (I'm a front end dev), but can someone explain to me why this made it to the front page of hacker news when there are already many resources for learning data structures? I feel like I could just go through the docs for for java / kotlin collections lib and cracking the code interview, and get a good understanding of DS / algos. What would this offer beyond that? (this is a genuine question, btw, no sarcasm, there is something here that is resonating with other folks, but not me and I would like to know what that is)
- WoodenChair 3y ago> I feel like I could just go through the docs for for java / kotlin collections lib and cracking the code interview, and get a good understanding of DS / algos. What would this offer beyond that? Reading the Java standard library documentation will teach you what pre-made data structures are available to you, but will not teach you how they work under the covers, or why they work. Reading Cracking the Coding interview will help you use data structures and algorithms specifically in the context of applying for jobs. If you want a deeper understanding you should do a course/tutorial/book that is more focused on the fundamental problem solving techniques like the linked Berkeley course. In the book realm, I recommend Grokking Algorithms for a gentle introduction, or Algorithms by Sedgewick and Wayne for a deeper understanding. My own book, Classic Computer Science Problems in Java, is a gateway to the wider world of computer science. Yet, for sure this deeper understanding is not necessary for the majority of day-to-day dev work. However, if you have a curiosity, want to work on more fundamental problems, or be sure that you are always doing things the most efficient way possible, it is necessary.
- quadrifoliate 3y ago> I feel like I could just go through the docs for for java / kotlin collections lib and cracking the code interview, and get a good understanding of DS / algos. What would this offer beyond that? It offers video lectures -- did you look at the link? Not everyone learns the exact same way. Maybe this is upvoted because people (on aggregate) prefer the course's contents over reading through Java libraries? Also, honestly, language libraries can be hit-or-miss in terms of algos since they reward optimization over simplicity. Python's standard sort (apparently Java's too?) for instance is Timsort [1] — not necessarily what you want for an introductory course. ---------------------------------------- [1] https://en.wikipedia.org/wiki/Timsort https://en.wikipedia.org/wiki/Timsort
- ulfw 3y agoOh man that brings back nostalgia from my 1997/98 student days. CS61B was okay. But I still have nightmares from CS61A which was taught in Scheme back then. I've hated recursions and using an ((excessive amount) of brackets) ever since.
- cobaltoxide 3y agoOh man I am sorry you had that experience. I look back on CS61A with SICP in Scheme (taught by Brian Harvey) as one of the most enjoyable and enlightening experiences of my college academic career.
- rtheunissen 3y agoI can't believe they still teach red-black trees. The complexity distracts so much from learning. Both AVL and weight-balanced trees are simpler to implement and easier to understand.
- deleted 3y ago[deleted]
- tptacek 3y agoRed-black trees are much more common in the industry and have the advantage of building on 2-3-4 trees (though arguably the only reason to know 2-3-4 is red-black).
- dwrodri 3y agoHas anyone had any success using course pages like this for guiding their FAANG interview prep? thinking about trying some of these projects to refresh my brain for an upcoming interview.
- tylerhou 3y agoI wouldn’t do 61B projects to learn how to interview; they aren’t too relevant because they focus more on writing software rather than data structures (and aren’t of the greatest quality IMO). The lectures on heaps, arrays, linked lists, and MST are worth reviewing. Also, I would try implementing each DS/A from scratch, and do Leetcode to brush up. If you want to learn algorithms super well, then do the first half of CS170 (stop after DP) from Berkeley, including the homeworks, which are challenging. Credentials: did undergrad at Berkeley, also worked at FAANG.
- dwrodri 3y agoThanks for the advice!