From junior to senior
My study plan for going from junior to senior software developer (i. e. from level 1 to level 3 of the Programmer Competency Matrix). Inspired by Google Interview University.
This study plan attemts to cover a lot of topics related to math and theoretical computer science, but it can miss some applied topics, like mobile or frontend development. Also this plan doesn't (and never will) include something related to SEO, advertising, marketing etc.
Usage
- Fork this repo
- Mark all items as undone
- Add missing topics (optional)
- Study!
Table of contents
- Calculus
- Functional Analysis
- Geometry
- Linear Algebra
- Abstract Algebra
- Category Theory
- Combinatorics and Probability
- Discrete Mathematics
- Type Theory
- Lambda Calculus
- Data Structures
- Algorithms
- Programming Languages
- Programming Paradigms
- Design Patterns
- Computer Architecture
- Systems Programming
- Networks
- Web Development
- Databases
- Concurrent Programming
- Security
- Testing
- Source Code Version Control
- Build Automation
- See also
- Resources
- Online Tools
Calculus
- 📝 Articles
- An Intuitive Introduction to Limits by Better Explained
- 📖 Books
- 🇷🇺 Курс дифференциального и интегрального исчисления в 3 томах. Том 1 by Grigorii Fichtenholz
- 🇷🇺 Курс дифференциального и интегрального исчисления в 3 томах. Том 2 by Grigorii Fichtenholz
- 🇷🇺 Курс дифференциального и интегрального исчисления в 3 томах. Том 3 by Grigorii Fichtenholz
- 🇷🇺 Краткий курс Математического анализа by Lev Kudryavtsev
- 🎓 Courses
Functional Analysis
- 📝 Articles
- An Interactive Guide to the Fourier Transform by Better Explained
- 📖 Books
Geometry
Analytic Geometry
- 🎓 Courses
- Analytic Geometry by Khan Academy
Linear Algebra
Abstract Algebra
- 📖 Books
- Algebra: Chapter 0 by Paolo Aluffi
Category Theory
- 📖 Books
- Basic Category Theory for Computer Scientists by Benjamin C. Pierce
Combinatorics and Probability
- 🎓 Courses
- Basic Theoretical Probability by Khan Academy
Discrete Mathematics
Graph Theory
- 🎓 Courses
- Graph Theory by Tutorialspoint
Type Theory
- 📖 Books
- Homotopy Type Theory by Vladimir Voevodsky
- Types and Programming Languages by Benjamin C. Pierce
Data Structures
- 📝 Articles
- Data Structures Basics by Algosaurus
- 🎓 Courses
- Data Structures by UC San Diego and HSE
Algorithms
- 📖 Books
- The Art of Computer Programming by Donald E. Knuth
- Structure and Interpretation of Computer Programs by Harold Abelson, Gerald Jay Sussman and Julie Sussman
Basic algorithms
Sorting
- 📎 Cheat Sheets
- Sorting Algorithms Animations by Toptal
- 📝 Articles
- Sorting Algorithms by Better Explained
Complexity
- 📎 Cheat Sheets
- 📝 Articles
- Algorithmic Complexity by Algosaurus
Programming Languages
Assembly
- 📎 Cheat Sheets
- 📖 Books
- 🇷🇺 Ассемблер в Linux для программистов C by Wikibooks
C/C++
- 📎 Cheat Sheets
- 📝 Articles
- What Every C Programmer Should Know About Undefined Behaviour by Chris Lattner
- 📖 Books
- The C Programming Language by Brian W. Kernighan and Dennis M. Ritchie
- C Primer Plus by Stephen Prata
- C Programming Absolute Beginner's Guide by Greg Perry and Dean Miller
- Object-Oriented C
- The C++ Programming Language by Bjarne Stroustrup
- C++ Primer Plus by Stephen Prata
- 🎥 Videos
- 🇷🇺 Использование C++ для низкоуровневой платформозависимой разработки by Kirill Lashkevich
- 🇷🇺 Модель памяти C++ by Andrey Yankovsky
Java
- 📎 Cheat Sheets
- JVM Anatomy Park by Alexey Shipilev
Haskell
- 📖 Books
- 🇷🇺 Haskell Book by Anton Kholomiov
Rust
- 📝 Articles
- Wrapper Types in Rust: Choosing Your Guarantees by Manish Goregaokar
- 📖 Books
Programming Paradigms
Object-Oriented Programming
- 📝 Articles
- Retracing Original Object-Oriented Programming by A. T. Herlangga
- 📖 Books
- A Theory of Objects by M. Abadi, L. Cardelli
Functional Programming
- 📝 Articles
- 🎥 Videos
- Immutable data structures for functional JS by Anjana Vakil
Actor Model
- 📝 Articles
- Why has the actor model not succeeded? by P. Mackay
- 📖 Books
Computer Architecture
- 📎 Cheat Sheets
- 📝 Articles
- What Every Programmer Should Know About Memory by Ulrich Drepper
- 🎓 Courses
- Computer Architecture by Princeton University
Systems Programming
Operating Systems
- 📝 Articles
- Writing an OS in Rust by Philipp Oppermann
- 📖 Books
- Modern Operating Systems by Andrew S. Tanenbaum
- IntermezzOS
- The little book about OS development by Erik Helin and Adam Renberg
Linux
-
📝 Articles
- Writing Device Drivers in Linux: A Brief Tutorial by Free Software Magazine
-
📖 Books
- Linux From Scratch by Gerard Beekmans
- The Linux Kernel Module Programming Guide by Peter Jay Salzman
Embedded Programming
-
📝 Articles
- Rust your ARM microcontroller! by Jorge Aparicio
- Fearless concurrency in your microcontroller by Jorge Aparicio
- Understanding the STM32F0's GPIO part 1 by Hertaville.com
- Understanding the STM32F0's GPIO part 2 by Hertaville.com
-
📖 Books
- Discover the world of microcontrollers through Rust! by Jorge Aparicio
Compilers and Interpreters
Compilers
- 📖 Books
- Write You a Haskell by Stephen Diehl
Interpreters
- 📖 Books
- Crafting Interpreters by Bob Nystorm
- Beautiful Racket by Matthew Butterick
- Write Yourself a Scheme in 48 Hours by Jonathan Tang
Garbage Collectors
- 📝 Articles
- Garbage Collection with LLVM
- JVM Anatony Park: GC Design and Pauses by Alexey Shipilev
- Immix: A Mark-Region Garbage Collector with Space Efficiency, Fast Collection, and Mutator Performance by Stephen M. Blackburn and Kathryn S. McKinley
- Rust as a Language for High Performance GC Implementation
- Designing a GC in Rust by Manish Goregaokar
- 📖 Books
Networks
- 📖 Books
- Computer Networks by Andrew S. Tanenbaum
Web Development
Server-side
Client-side
Databases
SQL Databases
Concurrent Programming
POSIX Threads
- 📖 Books
- Programming with POSIX Threads by David R. Butenhof
SIMD
- 📎 Cheat Sheets
Security
Cryptography
- 🎓 Courses
- Journey Into Cryptography by Khan Academy
Web Applications Security
See also
- Teach Yourself Programming in Ten Years
- Teach Yourself Computer Science
- Become a Programmer, Motherfucker
- Project Based Learning
- Open Source Society University
- Free Programming Books
- Google Interview University
- Machine Learning for Software Engineers
- Awesome Compilers
- What happens when...
Resources
You can find more courses, articles, videos etc here:
Online documentation:
Wikimedia Foundation projects:
Forums, Q&A:
- StackOverflow
- 🇷🇺 Toster
- 🇷🇺 dxdy
Online Tools
- Math
- Wolfram Alpha — a computational knowledge engine
- Symbolab — a step by step calculator
- Coding
- Cloud9 — a development environment in the cloud
- Codepen — a playground for the front end side of the web
- Compiler Explorer — an interactive online C, C++, D, Rust and Go compiler
- Ideone — a free online IDE, compiler and debugging tool
- Repl.It — a REPL, compiler & IDE
- RunKit — a Node prototyping tool
- Reepl — an online ClojureScript REPL