I'm starting CS50x!
Published: 2020-06-25 16:08:49

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

## Introduction
What's this *secret thing* you keep mentioning in your [various blog posts](https://kewbish.github.io/blog/posts/200607/), you ask. (Probably not, but hey, roll with it.) Well... I'm doing [CS50x](https://cs50.harvard.edu/x)! Yes, the infamous course that many self-taught developers have taken, and the one you've probably heard of, somewhere. I'm not entirely sure why I decided that doing this course was a good idea, especially trying to finish it in 10 weeks instead of 12. But hey, I'd like to get more acquainted with the mysterious things known as algorithms, and I've found a great community to learn with me and support me through the summer.

## CS50
CS50 is Harvard (and Yale)'s introductory course in computer science. Over 12 weeks, it covers Scratch, C, Python, SQL, and four tracks of real-life development experience. Along the way, students pick up algorithms, data structures, and time complexity - among other programming concepts. It's famous for being a great starter for non-programmers, and a rite of passage, almost, for other devs. 

I definitely need to brush up on my nearly nonexistent knowledge of algorithms, and I've tried to start with [some Khan Academy research](https://github.com/kewbish/ka-algorithms). As well, I'd like to investigate C, even if I'm only going to use it for this course. I've heard it'll help build an appreciation for how high-level languages work, and even by just skimming some of the notes and starter videos, I can tell I'll be wishing for the sweet syntactic sugar that Python provides. I'm also excited to learn more advanced data structures, and algorithms - and I can see the problem sets are going to be a *fun time*. Most of all, I'm looking forward to the SQL and web part of the course, which is the track I plan on taking. I've heard so much about these technologies through dev Reddits and posts, and I'd like to see what all this RDBMS hype is all about.

At the end of the course, it all culminates in the *final project*. Through dev media, I've found many amazing projects, and it's only now occurred to me that CS50 was a *course*, not some qualification or technology. The things you learn. I plan to use this final project to build my first *proper* full stack webapp, or at least, focus on reworking one of my older ones.

## My Expectations
I've skimmed through the problem sets and a couple paragraphs of the notes for now, and I have a couple of predictions for the course trajectory. First off, I can tell that Week 0 will be tedious torture, having to relearn Scratch, but I think it'll be relatively easy to debug. Weeks 1 - 3 seem doable with my current skillset and a couple of scrolls through StackOverflow, but I'm sure they'll still teach me how to use better programming patterns. Weeks 4 - 5 seem like the most difficult, and this corresponds to what I've read through Reddit and testimonials. The Speller problem set seems especially scary - though I'm sure I'll *eventually* figure it out. Right? Week 6 is when I can finally go back to Python, and I expect after implementing algorithms in C, I'll be able to complete the problems more easily. Weeks 7 - end will be mostly new knowledge, but I think that my experience with HTML, CSS, and other web technologies will come in handy.

I already have a cadre of classmates that I'll be working alongside for this journey, but I expect the past posts and resources people have created will be extremely useful. I'll have to be careful not to try to run through too much at a time, and try to sit and absorb the material properly. The data structures and algorithms taught (that I've seen) seem extremely useful in my programming career.

## My Workflow
I might write a separate post about this, but I've essentially started trying to utilize Trello and other 'productivity tools' more often, because my scatterbrained self cannot figure out how to keep a journal and development workflow together. I have an overview board, with a proper KanBan workflow, as well as some other notes. I'm also experimenting with Zapier and IFTTT to create scheduled cards for recurring events, like my scheduled work sessions for each topic.

Speaking of work sessions, that's also another part of how I work. It's kind of like pomodoro, but with longer breaks. As everyone says - we need less screen time. Hopefully I'll be able to reduce the amount of break while maintaining my eye health, but y'know, if not, that's fine too. I'm trying to find ways to work offscreen, such as *writing by hand* (what a concept), but that's a little difficult when all the materials and resources are online. However, I've found a couple people who write initially by hand and transcribe to a digital notebook of some kind, which is what I also plan to do.

## Conclusion
Consider this CS50 Week -1. I'll be posting every week on my blog and on Dev.to with recap thoughts and my review notes, but not my code. I don't think that's allowed, at least. This blogging will definitely help me learn, and anyhow, people can read through my lack of understanding and be amused! That's a start, at least. 

For any of you who have done CS50, what's your opinion on the course? What did you find difficult, and what resources helped you overcome your obstacles? Please comment with any thoughts!

---

*Little aside - thank you all so much for your positive feedback on my last post! It means a lot, and y'all have truly made my day!*