‹ go back

CS50: Week 0.

Published 28 June 2020 at Yours, Kewbish. Also published on Dev.to. 1,159 words. Subscribe via RSS.


This post is unlisted and has been archived. This doesn't represent my best work; please check out the posts listed here instead.

Introduction

For the past couple days, I’ve been attempting to relearn Scratch, and getting familiar with the CS50 development environment and submission routines. I really like David Malan’s teaching style, and the following will be an attempt to categorize all my learnings this first week.

And by the way, I don’t think there’ll be notes this week. I’m not planning on becoming a Scratch guru anytime soon, so I didn’t really see the point of making notes. And besides, this was supposed to be an introduction for non-technical beginners, and I would consider myself a technical beginner(?), so I kind of disregarded it.

Scratch

I think the first time I used Scratch was sometime quite recently, actually. I didn’t learn to program with Scratch, or anything, so it’s hard to get nostalgic for something you’ve never really cared about. However, when I came back, I realized that Scratch is really user friendly. And it should be, right? It’s made for kids to learn how to program, but it can also get really advanced, really fast.

Take the first few example programs - little snippets explaining how to make a sprite say something, or change a costume. You’d think just snippets thrown together would make for an easy game, but it does take more than just a ten-block script to make a proper game. My game is absolutely terrible - here’s a link, if you’d care to find out. (Please don’t check it out, it’s just a terrible clone of Piano Tiles that usually breaks about 4 rounds in. But then again, it’s also approximately the average of the quality of Scratch games, I guess. And I did make it all from scratch.1) But I like getting guided a little, and then figuring things out by myself. It’s pretty fun!

You see my game, right? And then you see the absolute masterpieces that others have made. It’s kind of crazy how good Scratch games can be, especially with custom blocks and all the functionality. It’s probably a good competitor for Unity2D, at this point. I’m only half-joking.

What I Learned

I was pretty surprised that Scratch was so full-featured, and that I was able to get a project started so quickly. (To be honest, I kind of spedrun the problem set while listening to the lecture, so maybe that wasn’t the best idea) Any bugs I found were really easy to look up on the forums, and whatever I wanted to implement, I found guides to on the interwebs.

Something kind of strange was that the lecture seemed to cover a bunch of slightly irrelevant information in the beginning. I wondered why we were covering RGB and binary, when I didn’t find any use for it during the Scratch problem set, and even from what I’ve seen, problem sets one and two. Kind of interesting, but I supposed they’re considered the ‘foundations of computer science’.

While some of my esteemed classmates were a little confused with how the GitHub submission systems worked, I found the submission processes extremely fun! It was a little weird to have that one commit lingering around (I have a bit of a 4-commit-a-day streak going at the moment), and I’m kind of confused as to why check50 uploads code first and then checks it, but I like it. It’s easy to use, and focused on the command line.

I was also a little confused as to why we started just with Scratch - we’re not going to use this information in the rest of the course really. I saw a couple ’translation’ images in the notes for problem set one, which I assume would be good for people to understand, but why would we start with Scratch to translate from? I thought we’d start with Python, actually. Going from Python to C seems a little more intuitive, because Python would be a little easier to get started with, I suppose. Python’s syntax is a little less verbose and strict, which would probably be easier to start with. I don’t know - just my thoughts. (And also because I don’t want to learn C scree)

Teaching Style

Malan’s teaching style is incredibly fast-paced - and that’s great! For now, at least, it’s nice to be able to speedrun and cram information quickly. Now, I can still understand mostly how to make these programs (referencing week 1, at least). However, I’ll see how it’ll pan out in the future - will the speed be too much to handle?

As well, Malan’s teaching is as clear as it is speedy. His examples (ripping a phone book - big dedication) really do stick in your brain. It’s so memeable as well, mostly because of the very interesting examples. :binary_leds:

One of my favourite parts about CS50 is how the lectures are mostly transcribed into notes, and a text format. Text is easier for me to scan and learn from, and audio can be a little difficult to parse. The entire contents of the lecture is there, but I can read and understand it a lot faster. It’s less tedious to just reread a couple paragraphs than rewinding video over and over again. I really appreciate whoever decided to do that - it’s a lifesaver.

In addition, I love how all the example code is provided in ZIPs and studio links, and the uploaded slides as well. For once, I don’t have to rely on video content! Now, if only Khan Academy transcribed each lecture into an article, without those disgusting timestamps…

Open Source Tools

Both check50 and submit50, among a host of other CS50-related tools are available for offline or at least, local use, so of course, I downloaded them. Surprisingly, it was pretty painless. Big props to the CS50 team for completely open sourcing so many things - and making them multipurpose as well. It’s easier for me to check my cases manually from the source of check50 sometimes, and I like digging around the source code.

check50’s kind of reminded me that I really do need to test my code with actual unit tests, and I honestly might get started with check50 test cases for smaller scripts that I do. There’s always pytest and unittest, but check50’s input and output mocking seems a lot easier to get working.2 That reminds me, I should really get into TDD sometime.

Conclusion

It’s been a great week - winning the GFTW hackathon with a super tiny project, and getting tonnes of users for diveintoht.ml. Oh, and also CS50 Week 0. It’s been great. I’ll be working on diveintoht.ml a little more, adding some more content, and that’ll be my summer project aside from CS50. It’s weird without school and Zoom, but I guess I’ll try to make the best of my summer time.


  1. Pwn Intended. [sic] ↩︎

  2. Edit - my esteemed colleagues have reminded me that pytest and unittest both have input mocking. But then again, it’s annoying to set up. ↩︎


‹ go back