Revisiting CS Bachelor
Published: 2023-01-14 11:01:58

This is a fun project. I want to revisit the Computer Science field after two years away from my graduate degree using free online materials from top universities worldwide. And I will share my journey on this blog.

Since I’m working part-time on this, I expect the duration of this project to be 1-2 years.

I initially considered the MIT curriculum but chose  [Open Source Society University (OSSU)](https://github.com/ossu/computer-science)  since its curriculum has more engaging video lectures and practice problems than MIT's. The OSSU CS curriculum meets all of the requirements from the  [Curriculum Guidelines for Undergraduate Degree Programs in Computer Science 2013](https://github.com/ossu/computer-science/blob/master/CURRICULAR_GUIDELINES.md), matching up nicely to those found on MIT OpenCourseWare. Though there are three courses offered at MIT not available on OSSU: Software Construction, Design, and Analysis of Algorithms and Performance Engineering of software systems, I'll add them to my curriculum.

One course I'm not sure about adding is Computation structures because the Core Systems section covers the course material. However, I will add it as a recap, or I might skip it altogether.

### Optional books I might read

They are not in the curriculum but are recommended reads:

-   Data-intensive applications
-   [Readings in database systems (5th edition)](http://www.redbook.io/)
-   [Transaction Processing: Concepts and Techniques](https://www.amazon.com/Transaction-Processing-Concepts-Techniques-Management/dp/1558601902)
-   Computer systems a programmer's perspective
-   Refactoring by Martin Fowler
-   Code Complete 2nd edition

### Optional courses I might take

-   [Constructive Computer Architecture](http://csg.csail.mit.edu/6.175/)  (Re-validate after taking the Advanced programming section)
-   [Great Ideas in Computer Architecture (Machine Structures)](https://inst.eecs.berkeley.edu/~cs61c/fa14/)  (Re-validate after taking the Core systems section)
-   [Artificial intelligence](https://ocw.mit.edu/courses/6-034-artificial-intelligence-fall-2010/)  (Re-validate after taking Sec: Core applications section)
-   [Computer architecture](https://www.coursera.org/learn/comparch)  (advanced) (Maybe consider after taking the Advanced systems section)

### The curriculum

This is the curriculum as of now (the content updates frequently as new courses are discovered/created), I’ve marked courses I personally added as (Personal)

**CS Core**
- Core Programming
    - [How to Code - Simple Data](https://www.edx.org/course/how-to-code-simple-data) [(textbook)](https://htdp.org/2022-8-7/Book/index.html)
    - [How to Code - Complex Data](https://www.edx.org/course/how-to-code-complex-data)
    - [Programming Languages, Part A](https://www.coursera.org/learn/programming-languages)
    -  [Programming Languages, Part B](https://www.coursera.org/learn/programming-languages-part-b)
    -  [Programming Languages, Part C](https://www.coursera.org/learn/programming-languages-part-c)
    -  [Object-Oriented Design](https://www.coursera.org/learn/object-oriented-design)
    - [Design Patterns](https://www.coursera.org/learn/design-patterns)
    -  [Software Architecture](https://www.coursera.org/learn/software-architecture)
    - [Software construction](https://web.mit.edu/6.031/www/sp22/)  (Personal)
-  Core Math
    -  [Calculus 1A: Differentiation](https://openlearninglibrary.mit.edu/courses/course-v1:MITx+18.01.1x+2T2019/about)  ([alt](https://ocw.mit.edu/courses/mathematics/18-01sc-single-variable-calculus-fall-2010/index.htm))
    -  [Calculus 1B: Integration](https://openlearninglibrary.mit.edu/courses/course-v1:MITx+18.01.2x+3T2019/about)
    - [Calculus 1C: Coordinate Systems & Infinite Series](https://openlearninglibrary.mit.edu/courses/course-v1:MITx+18.01.3x+1T2020/about)
    -  [Mathematics for Computer Science](https://openlearninglibrary.mit.edu/courses/course-v1:OCW+6.042J+2T2019/about)  ([alt](https://ocw.mit.edu/courses/6-042j-mathematics-for-computer-science-fall-2010/))
-  Core Tools
    -  [The Missing Semester of Your CS Education](https://missing.csail.mit.edu/)
-  Core Systems
    -  [Build a Modern Computer from First Principles: From Nand to Tetris](https://www.coursera.org/learn/build-a-computer)  ([alt](https://www.nand2tetris.org/))
    -  [Build a Modern Computer from First Principles: Nand to Tetris Part II](https://www.coursera.org/learn/nand2tetris2)
    -  [Operating Systems: Three Easy Pieces](https://github.com/ossu/computer-science/blob/master/coursepages/ostep/README.md)
    -  [Computer Networking: a Top-Down Approach](http://gaia.cs.umass.edu/kurose_ross/online_lectures.htm)
    - [Computations structures](https://ocw.mit.edu/courses/6-004-computation-structures-spring-2017/)  (Personal)
-  Core Theory
    -  [Divide and Conquer, Sorting and Searching, and Randomized Algorithms](https://www.coursera.org/learn/algorithms-divide-conquer)
    - [Graph Search, Shortest Paths, and Data Structures](https://www.coursera.org/learn/algorithms-graphs-data-structures)
    - [Greedy Algorithms, Minimum Spanning Trees, and Dynamic Programming](https://www.coursera.org/learn/algorithms-greedy)
    - [Shortest Paths Revisited, NP-Complete Problems and What To Do About Them](https://www.coursera.org/learn/algorithms-npcomplete)
    - [Design and analysis of algorithms](https://ocw.mit.edu/courses/6-046j-design-and-analysis-of-algorithms-spring-2015/)  (Personal)
- Core Security
    - [Cybersecurity Fundamentals](https://www.edx.org/course/cybersecurity-fundamentals)
    -  [Principles of Secure Coding](https://www.coursera.org/learn/secure-coding-principles)
    -  [Identifying Security Vulnerabilities](https://www.coursera.org/learn/identifying-security-vulnerabilities)
    - [Exploiting and Securing Vulnerabilities in Java Applications](https://www.coursera.org/learn/exploiting-securing-vulnerabilities-java-applications)
-  Core Applications
    -  [Databases: Modeling and Theory](https://www.edx.org/course/modeling-and-theory)
    -  [Databases: Relational Databases and SQL](https://www.edx.org/course/databases-5-sql)
    -  [Databases: Semistructured Data](https://www.edx.org/course/semistructured-data)
    - [Machine Learning](https://www.coursera.org/learn/machine-learning)
    -  [Computer Graphics](https://www.edx.org/course/computer-graphics-2)
    -  [Software Engineering: Introduction](https://www.edx.org/course/software-engineering-introduction)
-  Core Ethics
    -  [Ethics, Technology, and Engineering](https://www.coursera.org/learn/ethics-technology-engineering)
    -  [Introduction to Intellectual Property](https://www.coursera.org/learn/introduction-intellectual-property)
    -  [Data Privacy Fundamentals](https://www.coursera.org/learn/northeastern-data-privacy)


**Advanced programming**
-  [Parallel Programming](https://www.coursera.org/learn/scala-parallel-programming)
-  [Compilers](https://www.edx.org/course/compilers)
-  [Introduction to Haskell](https://www.seas.upenn.edu/~cis194/fall16/)
-  [Learn Prolog Now!](https://www.let.rug.nl/bos/lpn//lpnpage.php?pageid=online)  ([alt](https://github.com/ossu/computer-science/files/6085884/lpn.pdf))*
-  [Software Debugging](https://www.udacity.com/course/software-debugging--cs259)
- [Software Testing](https://www.udacity.com/course/software-testing--cs258)
-  [Performance Engineering Of Software Systems](https://ocw.mit.edu/courses/6-172-performance-engineering-of-software-systems-fall-2018/)  (Personal)

(*) book by Blackburn, Bos, and Striegnitz (compiled from [source](https://github.com/LearnPrologNow/lpn), redistributed under [CC license](https://creativecommons.org/licenses/by-sa/4.0/))


**Final project**
- [Cloud Computing (Specialization)](https://www.coursera.org/specializations/cloud-computing)

If I include the curriculum and optional courses, I will exceed the undergraduate degree requirements according to Curriculum Guidelines for Undergraduate Degree Programs in Computer Science 2013, but this is a fun project, so why not?

Throughout the curriculum, I will post weekly updates about my progress and notes from the books and courses I will take.

I will update the status on [my blog](https://www.abdullahgira.com/blog/2023-01-13-revisiting-cs-bachelor) as I go through the material.