This is CS50 (part 2 of 3)
10 days since my last entry and I have zoomed through another 4 weeks of CS50 content. This section had some of the easiest moments and the ones which most made me want to tear my hair out. I learned a ton and am increasingly grateful for the efforts of David Malan and the incredible team behind him. This is by far the best learning experience I’ve had across a number of different MOOCs in my time. The dedication, knowledge and brilliance of all involved really shines through.
Distilled down, the previous 4 weeks (weeks 4–7 for those keeping track) is where the course begins to evolve from logic and action to data and manipulation. With the introduction of concepts like linked lists & hash tables as well as the literal functions of malloc & free, CS grows dimensions beyond the implementation of scalable logic into a space where information exists through time. The idea of pointers for example, seems so simple on the surface, instead of actually being a thing, it simply refers the program to the thing, but really blows the walls off the room we were operating in to at a layer of dynamism previously unseen. During the discussion of linked lists I pictured a great chaotic library, millions of books covering thousands of shelf all flying around with a frantic energy but completely accessible with the right pointer. I know this sort of implies you'd have to read the books in a specific order, but you get the idea.
This section also prompted the odd realization that while prof. Malan covers a lot of ground in the 80–100 minutes of a given lecture, many of the specific techniques explored won’t actually need to be used by a given student. I can’t really recall another course where knowledge was relayed that wasn’t then specifically used for an exam or project. I understand that as an introductory course, the concepts and what could be possible is more important at times than the literal complete understanding and application of every aspect explored, but is strange to learn all about tries, and then not do anything with it. I value the commitment to the higher level here, but I wonder if a students ability to have a more robust understanding of a concept is hindered by not being put through an exercise and playing around with it.
For the first time we left the bubble of C and forayed into the worlds of TCP/IP, HTTP, HTML, CSS & Python. I finally felt competent again having worked with those languages before. Well at least I felt competent for a minute or two before realizing how superficial my knowledge of these languages really is. It is so invigorating to have an expert pull the curtain back and effortlessly demonstrate what can be possible with these amazing tools. As a result of this familiarity, and the absence of any problem sets, I was able to quickly glide through these videos, but not without learning a ton. I wish we stayed on HTTP a little longer as I would like to learn a bit more about how it is the various layers of the internet work, but I think I will have to go deeper at a later date.
I encountered some of my toughest roadblocks in this section. There were at elast two nights where I huddled over my monitor past midnight, tweaking a bit, entering make, running the program and not getting what I wanted. These psets forced me out into the community to get help and man is the community awesome. In no other content area that I know of is there such a wide group of people committed to creating resources, educating and helping each other. Shout out toe CS50 reddit in particular. I hope one day to be the guy on the other side of the connection guiding some noobie through the bugs in her else statement.
I can begin to see the interconnection of the concepts David has been rolling out week after week and it is exciting. This complex web of ideas and applications holds so much possibility I can’t wait to go deeper.