{"id":20631260,"url":"https://github.com/fuad1502/self-study-cs","last_synced_at":"2026-02-04T01:09:48.292Z","repository":{"id":227631561,"uuid":"769055703","full_name":"fuad1502/self-study-cs","owner":"fuad1502","description":"Self Study CS: A self study guide to CS mastery 🧙‍♂️","archived":false,"fork":false,"pushed_at":"2024-04-18T00:49:35.000Z","size":29,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-15T18:47:59.112Z","etag":null,"topics":["computer-science","study"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fuad1502.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2024-03-08T08:53:01.000Z","updated_at":"2024-03-18T06:36:13.000Z","dependencies_parsed_at":"2024-03-18T05:27:13.909Z","dependency_job_id":"067a9a0e-3962-4d1f-a282-fc3fd62984f3","html_url":"https://github.com/fuad1502/self-study-cs","commit_stats":null,"previous_names":["fuad1502/self-study-cs"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/fuad1502/self-study-cs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fuad1502%2Fself-study-cs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fuad1502%2Fself-study-cs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fuad1502%2Fself-study-cs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fuad1502%2Fself-study-cs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fuad1502","download_url":"https://codeload.github.com/fuad1502/self-study-cs/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fuad1502%2Fself-study-cs/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263370148,"owners_count":23456420,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["computer-science","study"],"created_at":"2024-11-16T14:11:42.749Z","updated_at":"2026-02-04T01:09:48.251Z","avatar_url":"https://github.com/fuad1502.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Self Study CS: A self study guide to CS mastery 🧙‍♂️\n\n * [What's this repository for?](#whats-this-repository-for)\n * [Background](#background)\n * [Specialization Plan](#specialization-plan)\n * [Self Study Curriculum Overview and My Progress](#self-study-curriculum-overview-and-my-progress)\n * [Projects \u0026 Exercises](#projects-exercises)\n    + [Projects](#projects)\n    + [Exercises](#exercises)\n * [Topics Breakdown](#topics-breakdown)\n * [Reference](#reference)\n\n## What's this repository for?\nOriginally, I created this repository to show potential recruiters what I've\nbeen doing in my ~7 months career gap. However, I quickly realized that this\nwould also be useful to anyone out there who also found themselves wanting to\nstudy everything there is in the computer science field of study by themselves.\n\n\u003e ⚠️ **Disclaimer**: I am by no means an expert in Computer Science, in fact, as you\nwill soon read, I am meerly a novice. Any advice should be taken with a grain\nof salt.\n\n## Background\nI am an Electrical Engineering graduate and have been working in the hardware\n(*RF / electronics / embedded*) industry for over 4 years. However, after\nfinally getting my dream job abroad at *Keysight Technologies* Malaysia, I\nresigned after only working for a shy of 2 years due to some personal reasons.\nAt that point, I also realized that I am more suited to pursue a career that\nallows me to work remotely. Along with [other reasons]() that I wont be\ndiscussing here, **I realized that I want to be in the computing industry.**\n\nHowever, scrapping away (almost) all of my previous knowledge and 4 years of\nexperience to start from basically \"zero\" is not easy. Moreover, I don't want\nto only have practical skills that would get me an interview quickly without\nhaving a solid understanding of the fundamentals. From my experience, having a\nholistic view of your field of study is the upmost important thing in mastering\nyour field of study. That's why I searched for a \"self study CS curriculum\".\nAnd if you're like me, you'll stumble upon [**Teach Yourself Computer\nScience**](https://teachyourselfcs.com/). **That is the main source for my self\nstudy journey.**\n\n[**Teach Yourself Computer Science**](https://teachyourselfcs.com/) seems\nperfect for me at first. However, I quickly realized that I lack some knowledge\nthat are not listed there. Moreover, I also still need some practical knowledge\non current technologies to understand how the industry is running today. **With\nthat additions, I came up with this self study checklist.**\n\n## Specialization Plan\nSince the beginning of my journey, I have determined to at least scratch the\nsurface of every sub domain there is in Computer Science. And I encourage you\nto do so to. The reasons are:\n- To remove bias when you have to make a decision on which specialization path to\n  choose. \n- You might found yourself needing to draw knowledge from multiple domains to\n  craft a solution / product.\n- It simply is intelectually interesting to see how each of the specialization\n  are related and interacts with one another from a holistic view.\n\nHowever, of course once you feel *confident* that you know the *crux* of each\nsubdomain, you have to make a decision on what to focus on if you want to be\ntechnically successful. ***For me, I would like to focus on Systems***.\n\nThe reason why I love *Systems* the most throughout my study, is because of my\ndeep curiosity on seeing what's behind the abstraction, to see the complex\nmachinery that make the systems that we all have taken for granted *just work*.\nThat's actually the reason why 10 years ago I chose EE, but let's not [get into\nthat]() here. There are of course further specialization down this road, but\nfor now, one level of specialization below *Computer Science* is good enough\nfor me.\n\n## Self Study Curriculum Overview and My Progress\nHere is an overview of what I have and will learn throughout my self study\njouney up till now (March 2024). Started studies with progress above 75% are\nmarked with 🟢, started studies with progress above 25% and below 75% are\nmarked with 🟡, while studies with progress below 25% or not yet started are\nmarked with ⚫.\n\n**Note that some topics might get more sub topics with more knowledge acquired.**\n\n| ID    | Topic                             | [Reference](#reference)\\*                     | Dependencies | Progress   |\n|-------|-----------------------------------|-----------------------------------------------|--------------|------------|\n| 0     | **Computer Science Fundamentals** |                                               |              |            |\n| 0.0   | Algorithms*                       | Algorithm Design Manual                       |              | 🟡         |\n| 0.1   | Computer Systems                  | Computer Systems: A Programmer's Perspective  |              | 🟢         |\n| 0.2   | Computer Networks                 | Computer Networking: A Top-Down Approach      |              | 🟡         |\n| 0.3   | Computer Architecture             | Computer Architecture: A Quantitative Approach|              | ⚫         |\n| 0.4   | Discrete Mathematics              | Mathematics for Computer Science              |              | 🟡         |\n| 0.5   | Programming                       | SICP                                          |              | ⚫         |\n| 0.6   | Automata Theory                   | Introduction to Automata Theory               |              | ⚫         |\n| 1     | **Software Engineering**          |                                               |              |            |\n| 1.0   | Object Oriented Programming       | Head First Java                               |              | 🟢         |\n| 1.1   | Design Patterns                   | Head First Design Patterns                    | 1.0          | 🟢         |\n| 1.2   | Database Application              | Database Management Systems                   | 0.2          | 🟢         |\n| 1.3   | Software Craftmanship             | Clean Code                                    | 1.1          | 🟡         |\n| 3     | **Advanced Computer Systems**     |                                               |              |            |\n| 3.0   | Operating Systems                 | Operating Systems: Three Easy Pieces          | 0.1          | 🟡         |\n| 3.1   | Systems Programming               | Advanced Programming in the UNIX Environment  | 0.1          | ⚫         |\n| 3.2   | Linux Kernel                      | Understanding the Linux Kernel                | 3.0          | ⚫         |\n| 3.3   | Database Implementation           | Database Management Systems                   | 1.2          | ⚫         |\n| 3.4   | Distributed Systems               | Designing Data-Intensive Applications         | 1.2          | 🟡         |\n| 4     | **Embedded Systems**              |                                               |              |            |\n| 4.0   | Embedded Systems Fundamentals     | Making Embedded Systems: Design Patterns      | 1.1          | 🟡         |\n| 4.1   | Real Time Operating Systems       | MicroC/OS-III The Real Time Kernel            | 0.1, 1.1     | ⚫         |\n| 4.2   | Embedded Linux                    | Embedded Linux Primer                         | 0.1, 1.1     | ⚫         |\n| 5     | **Computer Hardware**             |                                               |              |            |\n| 5.0   | RTL Design                        | RTL Modeling with SystemVerilog               |              | 🟢         |\n| 5.1   | RTL Verification                  | SystemVerilog for Verification                | 5.0          | ⚫         |\n| 5.2   | Modern Processor Design           | Modern Processor Design                       | 0.1, 0.3     | ⚫         |\n| 6     | **Computer Languages**            |                                               |              |            |\n| 6.0   | Introduction to Interpreters      | Crafting Interpreters                         |              | 🟡         |\n| 6.1   | Compiler Theory                   | Compilers: Principles, Techniques, and Tools  | 0.6, 6.0     | ⚫         |\n| 7     | **Computer Security**             |                                               |              |            |\n| 7.0   | Computer Security                 | Computer Security: Principles \u0026 Practice      | 0.1, 0.2     | ⚫         |\n| 8     | **Computer Graphics**             |                                               |              |            |\n| 8.0   | Computer Graphics                 | 3D Computer Graphics: A Mathematical Intro    |              | ⚫         |\n| 9     | **Technologies**                  |                                               |              |            |\n| 9.0   | *Programming Languages*           |                                               |              |            |\n| 9.0.0 | HTML / CSS / JS                   | MDN Learning Area                             |              | 🟢         |\n| 9.0.1 | Rust                              | The Rust Programming Language                 |              | 🟢         |\n| 9.0.2 | C++                               | Tour of C++                                   |              | 🟡         |\n| 9.0.2 | C                                 | The C Programming Language                    |              | 🟢         |\n| 9.0.3 | Go                                | A Tour of Go                                  |              | 🟢         |\n| 9.0.4 | Java                              | Effective Java                                |              | 🟡         |\n| 9.0.6 | Any FP Language                   |                                               |              | ⚫         |\n| 9.1   | *Library / Framework*             |                                               |              |            |\n| 9.1.0 | React                             | Learn React                                   | 9.0.0        | 🟢         |\n| 9.1.1 | Zephyr                            | Zephyr Docs                                   |              | 🟡         |\n| 9.2   | *DevOps Tools*                    |                                               |              |            |\n| 9.2.0 | Docker / Podman                   | Docker Guides                                 |              | 🟢         |\n| 9.2.1 | Make                              | Makefile Tutorial By Example                  |              | 🟢         |\n| 9.2.2 | CMake                             | CMake Tutorial                                |              | 🟢         |\n\n\\* *Notice that most of my references are books. If you like online courses\nbetter, unfortunately you'll need to look it up yourself.*\n\n\\* *Algorithms is not listed in any of the dependency lists, altough it is\nassumed that the Algorithms reference is already read with at least 50%\nprogress before moving on to other topics.*\n\n## Projects \u0026 Exercises\n**To really solidify the knowledge of what you've learned**, you'll have to use\nthat knowledge to solve problems by writing some code. I categorize two ways\nthat you can do this, by doing projects and exercises. \n\n**Projects** are usually larger, strikes close to what you might actually do in a\nspecific target industry, and requires knowledge on various technologies.\n\n**Exercises** on the other hand are small close ended problems that are\nspecifically designed to test and solidify your knowledge on a very specific\ntopic, sometimes in a *prepared* learning environment. In contrast to projects,\nthe resulting code itself *usually* don't have much practical use outside of\nthe learning environment.\n\n**Both are essential for learning**. Most of the time, you need to do some\nexercises before diving into a project. Just doing exercises will deprive you\nof a holistic view and practical skills, but just doing projects will deprive\nyou of really understanding specific things that might otherwise be lost in\nabstractions, and therefore hinder your ability to tackle the project.\n\n### Projects\nStarted and finished (is it ever finished?) projects have an entry in the\nrepository column.\n\n| Project Problem Statement                              | Repository                            | Related Topics                           | Target Industry           |\n|------------------------------------------------------- | ------------------------------------- | ---------------------------------------- | ------------------------- |\n| Develop a typing test Web Application                  | \u003chttps://github.com/fuad1502/kibi\u003e    | 9.0.0, 8.1.0\\*                           | Frontend Web Development  |\n| Develop \u0026 deploy your own Social Media Web Application | \u003chttps://github.com/fuad1502/bilbob\u003e  | 0.2, 1.2, 9.0.0, 9.0.3\\*, 9.1.0\\*, 9.2.0 | Backend Web Development   |\n| Implement a pipelined RISC-V CPU                       | \u003chttps://github.com/fuad1502/rvsv\u003e    | 0.1, 5.0                                 | Hardware                  |\n| Implement an out of order RISC-V CPU                   |                                       | 0.3, 5.2                                 | Hardware                  |\n| Implement a RISC-V Assembler                           | \u003chttps://github.com/fuad1502/rubbler\u003e | 0.1, 6.0, 9.0.1\\*                        | Systems, Languages        |\n| Implement your own RISC-V Kernel                       |                                       | 3.0                                      | Systems                   |\n| Implement your own Relational Database                 |                                       | 3.2                                      | Systems                   |\n| Design a GPS Running Watch                             |                                       | 4.0, 4.1, 9.1.1                          | Systems                   |\n| Implement Lox in a language other than Java\\*          | \u003chttps://github.com/fuad1502/ceplox\u003e  | 6.0, 9.0.2\\*                             | Languages                 |\n\n\\* *You can use any programming language of your choosing.*\n\n### Exercises\n\n| Exercise                                                      | Repository                                             | Related Topics    |\n| ------------------------------------------------------------- | ------------------------------------------------------ | ----------------- |\n| Wrote Design Pattern examples in a language other than Java\\* | \u003chttps://github.com/fuad1502/head_first_rust_patterns\u003e | 1.0, 1.1, 9.0.1\\* |\n| Solve LeetCode problems using multiple languages              | \u003chttps://leetcode.com\u003e                                 | 0.0, 9.0.\\*       |\n| Participate in *Advent of Code* using multiple languages      | \u003chttps://github.com/fuad1502/advent_of_code_2023\u003e      | 9.0.\\*            |\n| Do the lab assignments from the Computer Systems reference    | \u003chttps://github.com/fuad1502/csapp\u003e                    | 0.1               |\n| Do the *projects* from the Operating Systems reference        | \u003chttps://github.com/fuad1502/ostep\u003e                    | 3.0               |\n| Do the *exercises* from each book references                  | \\*                                                     | \\*                |\n\n\\* *A repository containing my solutions to selected exercises from several book references is given below*\n\n| Book Reference                               | Repository                           |\n|--------------------------------------------- | ------------------------------------ |\n| Algorithm Design Manual                      | \u003chttps://github.com/fuad1502/skiena\u003e |\n| Computer Systems: A Programmer's Perspective | \u003chttps://github.com/fuad1502/csapp\u003e  |\n| Operating Systems: Three Easy Pieces         | \u003chttps://github.com/fuad1502/ostep\u003e  |\n\n## Topics Breakdown\n\n## Reference\n- [The Algorithm Design Manual](https://www.amazon.com/gp/product/3030542556/ref=as_li_tl?ie=UTF8\u0026camp=1789\u0026creative=9325\u0026creativeASIN=3030542556\u0026linkCode=as2\u0026tag=algorist-20\u0026linkId=00b8675b374dcd56244e23efeecc80b0)\n- [Computer Systems: A Programmer's Perspective](https://www.amazon.com/Computer-Systems-Programmers-Perspective-3rd/dp/013409266X)\n- [Computer Networking: A Top-Down Approach](https://www.amazon.com/Computer-Networking-Top-Down-Approach-7th/dp/0133594149)\n- [Computer Architecture: A Quantitative Approach](https://www.amazon.com/Computer-Architecture-Quantitative-John-Hennessy/dp/012383872X)\n- [Mathematics for Computer Science](https://ocw.mit.edu/courses/6-042j-mathematics-for-computer-science-fall-2010/93cad640cf3ed0b23ef70688f452d4d5_MIT6_042JF10_notes.pdf)\n- [SICP](https://web.mit.edu/6.001/6.037/sicp.pdf)\n- [Introduction to Automata Theory, Languages, and Computation](https://www.amazon.com/Introduction-Automata-Theory-Languages-Computation/dp/0321455363)\n- [Head First Java](https://www.amazon.com/_/dp/1491910771?smid=ATVPDKIKX0DER\u0026_encoding=UTF8\u0026tag=oreilly20-20)\n- [Head First Design Patterns](https://www.amazon.com/Head-First-Design-Patterns-Object-Oriented-dp-149207800X/dp/149207800X/ref=dp_ob_title_bk)\n- [Database Management Systems](https://www.amazon.com/Database-Management-Systems-Raghu-Ramakrishnan/dp/0072465638)\n- [Clean Code](https://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882)\n- [Operating Systems: Three Easy Pieces](https://pages.cs.wisc.edu/~remzi/OSTEP/)\n- [Designing Data-Intensive Applications](https://www.amazon.com/Designing-Data-Intensive-Applications-Reliable-Maintainable/dp/1449373321)\n- [RTL Modeling with SystemVerilog for Simulation and Synthesis](https://www.amazon.com/RTL-Modeling-SystemVerilog-Simulation-Synthesis/dp/1546776346)\n- [SystemVerilog for Verification](https://www.amazon.com/SystemVerilog-Verification-Learning-Testbench-Language/dp/1461407141)\n- [Modern Processor Design: Fundamentals of Superscalar Processors](https://www.amazon.com/Modern-Processor-Design-Fundamentals-Superscalar/dp/1478607831)\n- [Crafting Interpreters](https://craftinginterpreters.com/)\n- [Compilers: Principles, Techniques, and Tools](https://www.amazon.com/Compilers-Principles-Techniques-Tools-2nd/dp/0321486811)\n- [Computer Security: Principles and Practice](https://www.amazon.com/Computer-Security-Principles-Practice-4th/dp/0134794109)\n- [3D Computer Graphics: A Mathematical Introduction with OpenGL](https://www.amazon.com/3D-Computer-Graphics-Mathematical-Introduction/dp/0521821037)\n- [MDN Learning Area](https://developer.mozilla.org/en-US/docs/Learn)\n- [The Rust Programming Language](https://doc.rust-lang.org/book/)\n- [Tour of C++](https://www.amazon.com/Tour-C-Bjarne-Stroustrup-dp-0136816487/dp/0136816487/ref=dp_ob_title_bk)\n- [The C Programming Language](https://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628)\n- [A Tour of Go](https://go.dev/tour/welcome/1)\n- [Effective Java](https://www.amazon.com/Effective-Java-Joshua-Bloch/dp/0134685997)\n- [Learn React](https://react.dev/learn)\n- [Docker Guides](https://docs.docker.com/get-started/)\n- [Makefile Tutorial By Example](https://makefiletutorial.com/)\n- [CMake Tutorial](https://cmake.org/cmake/help/latest/guide/tutorial/index.html)\n- [Advanced Programming in the UNIX Environment](https://www.amazon.com/Advanced-Programming-UNIX-Environment-3rd/dp/0321637739)\n- [Zephyr Docs](https://docs.zephyrproject.org/latest/)\n- [Understanding the Linux Kernel](https://www.amazon.com/Understanding-Linux-Kernel-Third-Daniel/dp/0596005652)\n- [Making Embedded Systems: Design Patterns for Great Software](https://www.amazon.com/Making-Embedded-Systems-Patterns-Software-dp-1098151542/dp/1098151542/ref=dp_ob_title_bk)\n- [MicroC/OS-III Real Time Kernel](https://www.amazon.com/uC-OS-III-Real-Time-Jean-Labrosse/dp/0982337531)\n- [Embedded Linux Primer](https://www.amazon.com/Embedded-Linux-Primer-Practical-Real-World/dp/0137017839)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffuad1502%2Fself-study-cs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffuad1502%2Fself-study-cs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffuad1502%2Fself-study-cs/lists"}