Around the beginning of 2018, I began self-teaching Computer Science. Although I understood the basics of CS, I realized I would need to dive deeper and strengthen my CS fundamentals.
I’ve made steady progress through a course list that is a combination of Open Source Society University (OSSU) and Teach Yourself Computer Science.
When I talk about my self-learning at work or meetups, many people ask, “What courses have you completed?”
So, inspired by Quentin Donnellan’s CS Transcript, I’ve created my own transcript to capture and share my progress.
Although it was strange to take an introductory course after having worked in Web Development, it turned out to be beneficial for two reasons. First, there were many topics I hadn’t been exposed to previously (eg, memory management). Second, relearning familiar topics in a more structured, formal process deepened my understanding.
|CS50: Introduction To Computer Science||HarvardX via edX||Completed|
I thought I understood programming. But similar to my experience with the Introduction course, I discovered how shallow my understanding had been after completing these courses. In particular, Brian Harvey’s CS61A helped me realize I’d only seen the tip of the iceberg. Plus, I’d never programmed in a functional language like Scheme or Racket.
|CS61A: Structure and Interpretation of Computer Programs||UC Berkley via recorded lectures||Completed|
|Structure and Interpretation of Computer Programs||Course Book||In Progress||Completed 3 out of 5 sections|
|How to Code: Simple Data||UBCx via edX||Completed|
|How to Code: Complex Data||UBCx via edX||Completed||Certificate|
|Software Construction: Data Abstraction||UBCx via edX||Completed||Certificate|
|Software Construction: Object Oriented Design||UBCx via edX||Completed|
|Build a Modern Computer from First Principles: From Nand to Tetris (Part 1)||Hebrew University of Jerusalem via Coursera||Completed||Course Book: The Elements of Computing Systems|
|Build a Modern Computer from First Principles: From Nand to Tetris (Part 2)||Hebrew University of Jerusalem via Coursera||Completed||Course Book: The Elements of Computing Systems|
|Mathematics for Computer Science||MIT OpenCourseware||In Progress||I have not completed assignments yet|
|Mathematics for Computer Science||Course Book||In Progress|
|A Programmer’s Introduction to Mathematics||Book||On Hold||I’d started this book, but found it too advanced. I plan to revisit after “Math for CS”|
|Divide and Conquer, Sorting and Searching, and Randomized Algorithms||Stanford via Coursera||Completed||Course Book: Algorithms Illuminated Part 1|
|Graph Search, Shortest Paths, and Data Structures||Stanford via Coursera||Completed||Course Book: Algorithms Illuminated Part 2|
|Greedy Algorithms, Minimum Spanning Trees, and Dynamic Programming||Stanford via Coursera||Not Started||Course Book: Algorithms Illuminated Part 3|
|Shortest Paths Revisited, NP-Complete Problems and What To Do About Them||Stanford via Coursera||Not Started||Course Book (Algorithms Illuminated Part 4) not yet released|
The course was previously offered on Stanford’s MOOC platform Lagunita. Because it no longer is, much of the course needs to be pieced together from other resources.
|CS144: Introduction to Computer Networking||Stanford via YouTube||Completed||Recorded lectures available on YouTube|
|CS144: Labs||Completed Labs 1-4||Labs associated with CS144|
|Computer Networking: A Top-Down Approach||Course Book||Not Started||Course Book for CS144|
|Assignment: Virtual Machine Setup & Socket Programming||Completed (C implementation only)||Assignment recommended by OSSU|
|Assignment: Data Communication Fundamentals||Completed||Assignment recommended by OSSU|
|Wireshark Lab: TCP||Completed||Assignment recommended by OSSU|
Languages and Compilers
- Most of these “courses” are a collection of resources (videos, books) rather than provided via a MOOC. As such, there are no certificates available.
- For courses which are provided via a MOOC, I had upgraded to the paid version of courses with the goal of receiving a certificate and gaining access to grading. However, I quickly learned that the grading is usually via automated testers or self-grading. As such, I didn’t find much value in upgrading for a certificate.
- Some courses are partially complete due to time constraints. I also attempt to balance depth and breadth by not diving too deep on a topic. I’ve noted these cases and plan to revisit in the future.