CS50 Week 0 - Scratch!
Published: 2020-07-02 20:17:32

This post is edited from my [original blog post](https://kewbish.github.io/blog/posts/200629/). Find it, and other posts by me on [kewbish.github.io/blog](https://kewbish.github.io/blog/).

If you'd like to check out my first blog post about CS50:
{% link https://dev.to/kewbish/i-m-starting-cs50x-6jn %}

## 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 learning this first week of CS50.

And by the way, no notes this week - but there will be in the future! I'm not planning on becoming a Scratch guru anytime soon, so I didn't really see the point of making complex notes this week. 

## 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 from CS50 - 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](https://scratch.mit.edu/projects/405376909/), 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, I *did* make it all from *scratch*. Pun intended!) But I like getting guided a little, and then figuring things out by myself. It's pretty fun!

On its own, my game looks alright. Nothing special, but it works. 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 to GitHub 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 much 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 have started 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.

## 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. 

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 the production efforts that have gone into it - 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.

## Conclusion
This has been a great introduction to CS50, and I can tell I'll be having tonnes of fun over the next few months! I can't wait to explore the world of C, and then web programming. 

What are your thoughts on CS50, if you've taken it? And what are your opinions for a 'first language': C or Python?