CS 61B Data Structures, Spring 2023 UC Berkeley(sp23.datastructur.es) |
CS 61B Data Structures, Spring 2023 UC Berkeley(sp23.datastructur.es) |
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)
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.
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.
----------------------------------------
https://pragprog.com/titles/jwdsal2/a-common-sense-guide-to-...
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.
(I taught it for a few semesters)
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?
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.
> Has this progress been applied to algorithms? If not, why not?
These are fairly recent and will take time to permeate.
Not much money in academia since MooCs took a lot of the more motivated students, I reckon?
Then I realized I better just study whatever I'm interested in and go back to algo if needed.
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.
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.
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.
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.
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.
If we took more time, with dating and interviewing, we'd probably find a lot more diamonds in the rough. But ain't nobody got no time for all that.
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.
The basic list and map datatypes (array list, linked list, balanced search tree, hashtable) are good ways to get through these concepts, although hashtables and balanced search trees are in the oh-god-don't-ever-try-to-implement-these-yourself category. Graphs are also a pretty versatile data structure that has wide use, it certainly doesn't hurt to learn about all the algorithms already solved for graphs and how they might be adapted to your use cases. Tries, compression, and disjoint sets are I think a little too niche (although I do end up using disjoint sets a fair amount).
The students are learning about lists, sets, and maps. These are so common that misusing this stuff can lead to big consequences during engineering design.
Until interest rates get hiked.
Granted most students don’t attend because the lectures are diligently posted online on the website.
What’s not captured on the website are twice a week discussion small groups where one TA to 20-30 students work through problems in a group setting. There’s a lot of collaboration and interactivity here. Then there’s the once a week lab, where about 20-30 students go to a computer room and go through an interactive lab exercise.
Then, there are the projects. Every CS 61ABC course is defined by their projects. These projects are the opposite of traditional learning. And 61B has done some of the most innovative projects I’ve seen in an educational context. For example, we had one semester where students grouped up and designed a rogue-like from scratch. There was a minimum rubric, but students were given the time to be extra creative, and we definitely saw that shine. It was a nightmare to grade though, but it was experimental and cool.
So this website is just a small fraction of what the students experience. It’s really just a schedule + lecture directory.
https://docs.google.com/presentation/d/1dWqymxQxZrMWYl76GfJo...
In my mind this is the most interesting aspect of this course website - the meta reflection aspect.
The key question is suitability-to-purpose. Without the small group work and the collaboration, a web site like this isn't what I'd like to point strangers on the internet wanting to learn algorithms. Without that, something more is needed. Two decades ago, we were figuring out what that "something more" ought to be so learners can be successful independently online. Today, we know.
I'm not asking Berkeley to do that additional work. It's a ton of work (probably a half-million dollars in human time). I'm just surprised no one has done it.
To make an analogy, if someone needs a car, giving them plans to build one is less than constructive. But that doesn't take away the merits of having an open-source car. It's just a different purpose.
> 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.
It was early 2000s
https://en.wikipedia.org/wiki/OpenCourseWare#History
> The OpenCourseWare movement started in 1999 when the University of Tübingen in Germany published videos of lectures online for its timms initiative (Tübinger Internet Multimedia Server).[1] The OCW movement only took off with the launch of MIT OpenCourseWare at the Massachusetts Institute of Technology (MIT) and the Open Learning Initiative at Carnegie Mellon University[2] in October 2002.
I'm not sure that's true.
> 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.
You want to teach Data Structures and Algorithms theory to kids? With the exception of the most capable kids, I don't think that's realistic in any format.