Self-taught Computer Science
- File size
- 17.7KB
- Lines of code
- 242
Self-taught Computer Science
Anyone can learn Computer Science.

Introduction
I based the curriculum on this reference material.
It does not cover all that a CS degree in school will give you, but I found the below topics essential in getting me up and writing code as quickly as possible.
This syllabus might work for you, it might not.
Go as deep as you want and stop when you want.
Do not be afraid to google.
All the best.
Curriculum
1. Foundations
- Python: a soft introduction to programming concepts
- C: program with only the basics
- Java: object-oriented programming
- JavaScript, HTML and CSS: front-end development
- PHP: traditional server-side programming
- SQL: interacting with relational databases
- Go: modern server-side programming
- Markdown: not a programming language but essential for writing documentation
2. Algorithms and Data Structures
- CS61B Data Structures, Spring 2019 by Josh Hug
- Data Structure Visualizations by David Galles
- Stanford Coursera course: Graph Search, Shortest Paths, and Data Structures by Tim Roughgarden
- Analysis of Algorithms Lectures by Steven Skiena
- Big-O Cheat Sheet
- Grokking Algorithms: An Illustrated Guide For Programmers and Other Curious People by Aditya Y Bhargava
- Introduction to Algorithms by Thomas H Cormen, Charles E Leiserson, Ronald L Rivest, Clifford Stein
- Algorithms for Competitive Programming by Jakob Kogler, Oleksandr Kulkov, Rodion Gorkovenko
- Stanford Coursera course: Divide and Conquer, Sorting and Searching, and Randomized Algorithms by Tim Roughgarden
- Stanford Coursera course: Greedy Algorithms, Minimum Spanning Trees, and Dynamic Programming by Tim Roughgarden
- Stanford Coursera course: Shortest Paths Revisited, NP-Complete Problems and What To Do About Them by Tim Roughgarden
- Computer Science Distilled: Learn the Art of Solving Computational Problems by Wladston Ferreira Filho
- Dynamic Programming by learnxinyminutes
3. Command Line
- CLI
- Version Control
- Git CLI
- Github (git client)
- Learn how to use Git for free by DeployHQ
- Text Editors
- Linux
4. Mathematics for Computer Science
- How to Count by Steven Frank
- What Every Programmer Should Know About Floating-Point Arithmetic by Michael Borgwardt
- Number Theory by CodeChef
- Category Theory in Life Lecture by Eugenia Cheng
- Discrete mathematics
- Linear algebra
- Real analysis
- Differential equations
- Probability & Statistics
5. Languages and Compilers
- Crafting Interpreters by Robert Nystrom
- Writing an Interpreter in Go by Thorsten Ball
- Writing a Compiler in Go by Thorsten Ball
- Growing a Language Lecture by Guy Steele
- Inventing on Principle Lecture by Bret Victor
- No Silver Bullet: Essence and Accidents of Software Engineering by Frederick P Brooks Jr
6. Distributed Systems
- Understanding Distributed Systems: What every developer should know about large distributed applications by Roberto Vitillo
- Designing Data-Intensive Applications by Martin Kleppmann
- Designs, Lessons and Advice from Building Large Distributed Systems by Jeff Dean
- Programming Paradigms for Dummies: What Every Programmer Should Know by Peter Van Roy
- Professor Frisby's Mostly Adequate Guide to Functional Programming by MostlyAdequate
7. Mindset
- Teach Yourself Programming in Ten Years by Peter Norvig
- The mythical 10x programmer by antirez
- The Ten Rules of a Zen Programmer by Christian Grobmeier
8. Uncategorised but important
- What every programmer should know about memory, Part 1 by lwn.net
- The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) by Joel on Software
- Latency Numbers Every Programmer Should Know by Colin Scott
- Learn Regular Expressions with simple, interactive exercises by RegexOne
Practice
I had to practise lots to become a better programmer. Here are some resources I used.
- Advent of Code
- LeetCode
- Codewars
- HackerRank
- Codility
- CodeChef
- CodeForces
- Codemia
- Sphere Online Judge (SPOJ)
- ProjectLearn.io
- project-based-learning Github repository
Not covered
These are important topics that have not been included above for brevity. Please look into them as well.
- Operating Systems
- Computer Networking
- Computer Architecture
- Computer Memory
- Cybersecurity
- UX/UI Design
Final words
Learn as much as you can, across as many disciplines as you can.
Think about what's fun, not what's easy.
Follow your nose, stay curious and be excited.
More on
Many people on the internet have made awesome resources free and publicly available.
Reference material
- OSSU: Computer Science Github repository
- OSSU: Mathematics Github repository
- Teach yourself Computer Science by Oz Nova and Myles Byrne
- Self-learning Computer Science by PKUFlyingPig
- Open-source CS by ForrestKnight
- The Missing Semester of Your CS Education by Elaine Mello, Jim Cain and MIT Open Learning
- Learn X in Y minutes by Adam Bard
- Hyperpolyglot by Clark Grubb
Supplementary reading
- Vim Fundamentals: Making vim approachable! by ThePrimeagen
- How to self study pure math - a step-by-step guide by Aleph 0
- How to learn machine learning as a complete beginner: a self-study guide by Aleph 0
- My (5 + 5)-step self-taught CS curriculum Reddit post
- Can Computer Science be self-taught without going to a University or College? Quora article
- How do you learn Data Structures and Algorithms? Reddit post
- Linux Ricing by Baiaphilia
- The Art of Linux CLIs by Mults
- r/unixporn
- How far can self-taught Mathematics take you? Reddit post
- Mathematics for the adventurous self-learner by Neil Sainsbury
- Explaining Gojo's Infinity with Calculus by Phanimations
- OSSU: Data Science Github repository
- awesome-falsehood Github repository
- papers-we-love Github repository
- system-design-primer Github repository
- Computer Science Roadmap by Developer Roadmaps
- Map of Computer Science by Domain of Science
- 40 Key Computer Science Concepts Explained In Layman’s Terms by carlcheo.com
- regexhq Github organisation
- Time, Clocks and the Ordering of Events in a Distributed System by Leslie Lamport
- There is No Now: Problems with simultaneity in distributed systems by Justin Sheehy
- Fallacies of Distributed Computing Explained (The more things change the more they stay the same) by Arnon Rotem-Gal-Oz
- Don't Make Me Think, Revisited: A Common Sense Approach to Web Usability by Steve Krug
- What Every Programmer Should Know About SEO by Kate Matsudaira
- Evolutionary Software Architectures Lecture by Neal Ford
- Programming Principles Wiki
- The Debugging Mindset: Understanding the psychology of learning strategies leads to effective problem-solving skills by Devon H O'Dell
- The Art And Craft of Problem Solving by Paul Zeitz
- How to Solve It: A New Aspect of Mathematical Method by G Pólya
- notes-to-cs-freshmen-from-the-future Github repository
- The Bulk of Software Engineering in 2018 is Just Plumbing by r/programming
- Difference between frontend, backend, and middleware in web development by Stack Overflow
- How To Become A Hacker by Eric Steven Raymond