EN A curated and opinionated list of resources (English & Russian) for Backend developers that will help you organize & structure your learning path and knowledges. Inspired by Awesome CTO.
RU Структурированный список ресурсов для изучения Backend разработки, который поможет систематизировать свои знания и составить план обучения. Основан на личном опыте и самостоятельном изучении данной области. Вдохновлено Awesome CTO.
- Basics
- Computer Science
- Programming Languages
- Operating Systems & Linux
- Version Control
- Web Development & Networking
- API Design
- Databases
- Security
- Testing
- Design Patterns
- Architecture & Infrastructure
- DevOps & CI/CD
- System Design & Interviews
- Newsletters, Podcasts & Blogs
- Related Links
- Books
- Developer Roadmap
- How to Become a Good Backend Engineer (Fundamentals)
- Learn to become a Backend Developer (2018)
- Advice for beginner backend engineers who just started their new jobs in software companies
| Main topics | Основные темы |
|---|---|
| What is a computer and how it works? | Что такое компьютер и как он работает? |
| Why do we need programming languages? What types of programming languages are out there? | Зачем нужны языки программирования? Какие типы бывают? |
| Algorithms & Data Structures | Алгоритмы и структуры данных |
| OOP | Объектно ориентированное программирование |
| Concurrency & Parallelism | Конкурентность и параллелизм |
- What is Computer Science
- Map of Computer Science
- CS50 by Harvard. EN / RU
- Computer Science Crash Course
- How do computers read code?
- The Forgotten History of OOP
- Concurrency is not Parallelism
- Структуры данных для самых маленьких
- Алгоритмы и структуры данных. Подготовительный курс (весна 2016)
- ООП в картинках
- Многопроцессность, многопоточность, асинхронность в Python и не только. Что это и как работает?
- Конкурентность и Параллелизм. Просто о сложном
- ШАДовский курс по Concurrency (RU)
- The Coder Cafe
| Main topics | Основные темы |
|---|---|
| Which language should you pick as a backend engineer? | Какой язык выбрать backend-инженеру? |
| Trade-offs between compiled vs interpreted, typed vs dynamic | Компромиссы: компилируемые vs интерпретируемые, типизированные vs динамические |
| Language-specific backend ecosystem (frameworks, package managers, tooling) | Экосистема бэкенд-разработки для конкретного языка (фреймворки, пакетные менеджеры, тулинг) |
- Backend Roadmap (roadmap.sh)
- Go: A Tour of Go, Effective Go, Go by Example, Go Roadmap
- Python: Python Roadmap, Real Python, Full Stack Python
- Java: Java Roadmap, Baeldung, Spring Guides
- Node.js: Node.js Roadmap, Node.js Best Practices
- Rust: The Rust Book, Rust by Example, Rust Roadmap
| Main topics | Основные темы |
|---|---|
| Processes, threads, memory management | Процессы, потоки, управление памятью |
| File systems, I/O, syscalls | Файловые системы, I/O, системные вызовы |
| Linux fundamentals for backend engineers | Основы Linux для backend-инженеров |
| Shell scripting | Shell-скриптинг |
- Operating Systems: Three Easy Pieces (OSTEP) — free OS textbook
- The Linux Command Line — free book by William Shotts
- Linux Journey
- Beej's Guide to Network Programming
- Missing Semester (MIT) — shell, Git, editors, debugging
- Linux Performance (Brendan Gregg)
| Main topics | Основные темы |
|---|---|
| Git fundamentals: commits, branches, merge, rebase | Основы Git: коммиты, ветки, merge, rebase |
| Git workflows (trunk-based, GitFlow, GitHub Flow) | Git-воркфлоу (trunk-based, GitFlow, GitHub Flow) |
| Resolving conflicts and undoing mistakes | Разрешение конфликтов и отмена ошибок |
- Pro Git Book — free, the canonical reference
- Learn Git Branching — interactive tutorial
- Oh Shit, Git!?! — fixing common mistakes
- Atlassian Git Tutorials
- Trunk Based Development
| Main topics | Основные темы |
|---|---|
| What is client-server architecture and HTTP? | Что такое клиент-серверная архитектура и HTTP? |
| What is TCP/IP? | Что такое стек TCP/IP? |
| What is DNS? | Что такое DNS? |
| How authorization & authentication works? What is JWT? | Как работает авторизация и аутентификация? Что такое JWT? |
| Proxy & Reverse Proxy | Прокси и обратный прокси |
| Web servers. Nginx. | Веб-сервер. Nginx |
| REST API Design Principles | Принципы проектирования REST API |
- Web Development In 2021 - A Practical Guide
- What is TCP/IP?
- Hyper Text Transfer Protocol Crash Course - HTTP 1.0, 1.1, HTTP/2, HTTP/3
- HTTP Crash Course & Exploration
- TCP vs UDP Crash Course
- REST API concepts and examples
- RESTful API
- 2 Hours NginX Crash Course + Bonus Content
- JWT - JSON Web Token Crash Course (NodeJS & Postgres)
- Proxy vs Reverse Proxy Server Explained
- How HTTP/2 Works, Performance, Pros & Cons and More
- How DNS Works - Computerphile
- gRPC Crash Course - Modes, Examples, Pros & Cons and more
- Курс. Языки веб-программирования
- 6. Web-технологии. Протокол HTTP | Технострим
- Веб-разработка для начинающих 🚀 Как устроены веб-приложения? (Frontend/Backend)
- Архитектура Web Приложений / от простых до высоконагруженных
- Аутентификация в Веб-Приложениях 👨💻JWT и Сессии
- Введение в REST API — RESTful веб-сервисы
| Main topics | Основные темы |
|---|---|
| REST API design principles and maturity model | Принципы проектирования REST и модель зрелости |
| GraphQL: when to use, trade-offs | GraphQL: когда использовать, компромиссы |
| gRPC and Protocol Buffers | gRPC и Protocol Buffers |
| API versioning strategies | Стратегии версионирования API |
| OpenAPI/Swagger for documentation | OpenAPI/Swagger для документации |
| Idempotency and error handling | Идемпотентность и обработка ошибок |
- Best Practices for Designing a Pragmatic RESTful API
- Google API Design Guide
- Microsoft REST API Guidelines
- Zalando RESTful API Guidelines
- How to GraphQL — free fullstack tutorial
- gRPC Docs — official guide
- OpenAPI Specification
- Idempotency in REST APIs (Stripe Engineering)
| Main topics | Основные темы |
|---|---|
| What are database and DBMS? | Что такое база данных и СУБД? |
| What is a relational database? What is SQL? | Что такое реляционная БД и SQL? |
| What are indexes & transactions? | Что такое индексы и транзакции? |
| What are ACID properties? Which Isolation levels are out there? | Что такое свойства ACID? Какие есть уровни изоляции транзакций? |
| What are NoSQL Databases? What are the differences between NoSQL & SQL? | Что такое NoSQL? Какие различия между NoSQL и SQL? |
| What is databases normalization? | Что такое нормализация БД? |
| What is Caching? What is Redis? | Что такое кэширование? Что такое Redis? |
| What are replication and sharding? | Что такое репликация и шардирование? |
| How to read query plans (EXPLAIN/ANALYZE)? | Как читать план запроса (EXPLAIN/ANALYZE)? |
| What is Change Data Capture (CDC)? | Что такое Change Data Capture (CDC)? |
| What are vector databases and when do you need them? | Что такое векторные БД и когда они нужны? |
- What is a Database?
- What is Database & SQL?
- SQL Tutorial - Full Database Course for Beginners
- Database Design Course - Learn how to design and plan a database for beginners
- Database Indexing Explained (with PostgreSQL)
- SQL vs NoSQL or MySQL vs MongoDB
- Introduction to NoSQL databases
- MongoDB Basics
- MongoDB for SQL Pros
- ACID
- 🔥Разбираем SQL на примере PostgreSQL — SELECT, JOIN, GROUP, HAVING, Coalesce и др.
- Курс "Использование баз данных" (2019)
- Курс "Базы данных. Лаборатория Tarantool" (2018)
- Руководство для начинающих: ACID и транзакции БД
- Как бы я сейчас объяснил молодому себе зачем существуют требования ACID для баз данных?
- Основы правил проектирования базы данных
- Нормализация отношений. Шесть нормальных форм
- Руководство по проектированию реляционных баз данных (1-3 часть из 15)
- Redis Crash Course
- Redis in 100 Seconds
- Use the Index, Luke! — a guide to SQL indexing and performance
- PostgreSQL EXPLAIN — Understanding Query Plans
- Database Replication Explained
- Database Sharding Crash Course
- Change Data Capture (CDC): What it is and how it works
- What is a Vector Database?
- Things You Should Know About Databases
| Main topics | Основные темы |
|---|---|
| What is HTTPS and how does it work? | Что такое HTTPS и как он работает? |
| What are main types of attacks and vulnurabilities in web applications? | Какие существуют основные типы атак и уязвимостей в веб-приложениях? |
| What is SQL Injection? How to prevent it? | Что такое SQL инъекция? Как ее предотвратить? |
| What is XSS Attack? How to prevent it? | Что такое XSS атака? Как ее предотвратить? |
| How to store passwords/secrets in web app? | Как хранить пароли/секреты в веб приложении? |
| How do OAuth2 and OpenID Connect work? | Как работают OAuth2 и OpenID Connect? |
| What is CSRF and how to prevent it? | Что такое CSRF и как его предотвратить? |
| How to manage secrets (Vault, KMS, env vars)? | Как управлять секретами (Vault, KMS, env vars)? |
| Rate limiting as a defense against abuse and DoS | Rate limiting как защита от злоупотреблений и DoS |
- 9. Securing Web Applications
- How does HTTPS work? What's a CA? What's a self-signed Certificate?
- Password Cracking - Computerphile
- Running an SQL Injection Attack - Computerphile
- How NOT to Store Passwords! - Computerphile
- Cracking Websites with Cross Site Scripting - Computerphile
- Cross-Site Scripting (XSS) Explained
- Why LocalStorage is Vulnerable to XSS (and cookies are too)
- OWASP Cheat Sheet
- Как работает HTTPS?
- Безопасность интернет-приложений (2020)
- Как хранить пароли и ключи в коде проектов? Всё о переменных окружения. Пример с Django
- SQL-инъекция. Оборона и нападение (часть 1)
- Что такое XSS-уязвимость и как тестировщику не пропустить ее
- OWASP Top 10 — the standard awareness document for web app security
- OAuth 2.0 Simplified — free online book by Aaron Parecki
- OpenID Connect Explained
- CSRF Explained (OWASP)
- HashiCorp Vault — Intro
- Rate Limiting Strategies and Techniques (Cloudflare)
- Dependency Scanning & SBOM (Snyk)
| Main topics | Основные темы |
|---|---|
| The test pyramid: unit, integration, e2e | Пирамида тестирования: unit, integration, e2e |
| Test-Driven Development (TDD) | Разработка через тестирование (TDD) |
| Mocks, stubs, fakes — when to use which | Mocks, stubs, fakes — когда использовать что |
| Contract testing for microservices | Контрактное тестирование для микросервисов |
| Property-based testing | Property-based тестирование |
| Load and performance testing | Нагрузочное и performance тестирование |
- The Practical Test Pyramid (Martin Fowler)
- Test Driven Development: By Example (Kent Beck)
- Testing Microservices, the sane way
- Pact — Contract Testing
- Property-Based Testing in Python with Hypothesis
- k6 — Modern Load Testing
- Google Testing Blog
| Main topics | Основные темы |
|---|---|
| SOLID principles | Принципы SOLID |
| GoF patterns: creational, structural, behavioral | GoF паттерны: порождающие, структурные, поведенческие |
| Enterprise application patterns (PoEAA) | Паттерны корпоративных приложений (PoEAA) |
| Anti-patterns and when NOT to apply a pattern | Антипаттерны и когда НЕ нужно применять паттерн |
- Refactoring.Guru — Design Patterns — EN/RU, excellent illustrations
- SOLID Principles Explained
- Patterns of Enterprise Application Architecture (Fowler)
- Design Patterns: Elements of Reusable OO Software (GoF)
- Refactoring.Guru на русском
| Main topics | Основные темы |
|---|---|
| What are distributed systems? | Что такое распределеные системы? |
| What is scaling? Horizontal vs Vertical scaling? How to scale web apps and databases? | Что такое масштабирование? Горизонтальное vs Вертикальное масштабирование? Как масштабировать веб-приложения и базы данных? |
| What is CAP Theorem? What are CP and AP systems? | Что такое CAP теорема? Как выглядят CP и AP системы? |
| What are Microservices? What patterns do they use? How to design microservices architecture? | Что такое микросервисы? Какие паттерны они используют? Как их проектировать? |
| What is Event-Driven Architecture? | Что такое Event-Driven архитектура? |
| What is Clean Architecture? How to implement it using your programming language / framework? | Что такое Чистая Архитектура? Как имплеменировать ее в вашем ЯП / фреймворке? |
| How to deploy web applications? What is VPS? What is SSH? | Как развертывать веб-приложения? Что такое VPS? Что такое SSH? |
| What is Docker? Why do we need it? | Что такое Docker? Зачем он нужен? |
| What are cloud providers? How do you use them? | Что такое клауд провайдеры и зачем они нужны? |
| How to automize testing & deployment? What is CI/CD? How to implement it? | Как автоматизировать тестирование и деплоймент? Что такое CI/CD и как его настроить? |
| What is SSL Certificate? How to set it up for your web app? | Что такое SSL сертификат? Как его настроить? |
| What is Kubernetes? When should you use it? | Что такое и зачем нужен Kubernetes? |
| What is DDD? | Что такое Domain Driven Design? |
| What are Message Queues? What is Kafka? | Что такое очереди сообщений? Что такое Kafka? |
| What is Observability? What are logs, metrics and traces? | Что такое наблюдаемость? Что такое логи, метрики и трейсы? |
| What are Saga, Outbox, CQRS, Event Sourcing patterns? | Что такое паттерны Saga, Outbox, CQRS, Event Sourcing? |
| What is idempotency? Why does it matter in distributed systems? | Что такое идемпотентность? Почему она важна в распределённых системах? |
| What are circuit breakers, retries, timeouts, bulkheads? | Что такое circuit breaker, retry, timeout, bulkhead? |
- Approaching Distributed Systems
- Scalable Web Architectures Concepts & Design
- How to Scale SQL and NoSQL Databases
- Scaling Your Web Application
- CAP Theorem in Distributed Systems
- How to Design a Web Application: Software Architecture 101
- Introduction to Microservices
- Microservice Architecture at Medium
- Mastering Chaos - A Netflix Guide to Microservices
- GOTO 2020 • When To Use Microservices (And When Not To!) • Sam Newman & Martin Fowler
- Modern Banking in 1500 Microservices
- Managing Data in Microservices
- What is DDD - Eric Evans - DDD Europe 2019
- The Clean Architecture
- Learn Docker in 12 Minutes 🐳
- Docker Tutorial for Beginners - A Full DevOps Course on How to Run Applications in Containers
- What is a Multitenancy Architecture and Why Is it becoming popular?
- The Twelve-Factor App
- Блог HighLoad
- Архитектура высоких нагрузок
- CAP-теорема простым, доступным языком
- Создание архитектуры программы или как проектировать табуретку
- Как получить и настроить LetsEncrypt SSL сертификат для сайта?
- Поднимаем Debian сервер для Python/Django — установка и настройка с нуля. Как настроить сервер?
- 🚀 Деплой Fullstack Приложения [Golang+JS]. СI/CD, DigitalOcean, Github Actions
- Чистая архитектура
- Основы Docker. Большой практический выпуск
- Артём Антоненко «Domain Driven Design»
- Настраиваем авторизацию SSH по ключу в Linux / Unix
- 🚀Собираем масштабируемую архитектуру веб-приложения. Горизонтальное и вертикальное масштабирование
- TFTDS Теория и практика построения отказоустойчивых распределенных систем (RU)
- Message Queues and Kafka Crash Course
- Apache Kafka Crash Course
- Prometheus and Grafana Crash Course
- OpenTelemetry Crash Course
- Pattern: Saga (microservices.io)
- Pattern: Transactional Outbox (microservices.io)
- CQRS (Martin Fowler)
- Event Sourcing (Martin Fowler)
- Designing robust and predictable APIs with idempotency (Stripe)
- Circuit Breaker Pattern (Martin Fowler)
- Release It! patterns summary
- Awesome Scalability — huge companion list
| Main topics | Основные темы |
|---|---|
| What is DevOps? What does a DevOps culture look like? | Что такое DevOps? Как выглядит DevOps-культура? |
| Infrastructure as Code (IaC): Terraform, Pulumi, Ansible | Инфраструктура как код (IaC): Terraform, Pulumi, Ansible |
| CI/CD pipelines: GitHub Actions, GitLab CI, ArgoCD | CI/CD пайплайны: GitHub Actions, GitLab CI, ArgoCD |
| GitOps principles | Принципы GitOps |
| Cloud providers: AWS, GCP, Azure fundamentals | Клауд-провайдеры: основы AWS, GCP, Azure |
- The DevOps Handbook
- Google SRE Book (free)
- Terraform Up & Running
- GitHub Actions Documentation
- Argo CD Documentation
- GitOps Principles (OpenGitOps)
- AWS Well-Architected Framework
- Google Cloud Architecture Framework
- CNCF Landscape
| Main topics | Основные темы |
|---|---|
| How to approach a system design interview | Как подходить к system design интервью |
| Designing for scale: back-of-envelope estimates | Проектирование под нагрузку: оценки «на салфетке» |
| Common building blocks: LB, cache, queue, DB, CDN | Типовые строительные блоки: LB, кэш, очередь, БД, CDN |
| Trade-offs and capacity planning | Компромиссы и планирование ёмкости |
- System Design Primer — the canonical free resource
- ByteByteGo YouTube — Alex Xu
- ByteByteGo Newsletter
- High Scalability blog
- "System Design Interview" Vol I & II — Alex Xu
- Grokking the System Design Interview
- System Design Cheatsheet
- ByteByteGo — Alex Xu on system design
- The Pragmatic Engineer — Gergely Orosz
- High Scalability
- StatusCode Weekly
- Pointer
- Martin Fowler
- Hussein Nasser (YouTube)
- Uncle Bob — Clean Coder
- Netflix Tech Blog
- Uber Engineering Blog
- Stripe Engineering
- Good enough engineering to start an Internet company
- The boring technology behind a one-person Internet company
- API as a product. How to sell your work when all you know is a back-end
- Front End Developer Roadmap
- UML for beginners
- The other side of technical skill: domain knowledge and long-term vision
- Going from Developer to CTO
- What Truly Makes a Senior Developer
- Что стоит за простой загрузкой веб-странички в браузере
| 📚 | 📚 |
|---|---|
| Grokking Algorithms | Грокаем Алгоритмы |
| "Clean Code" by Robert Martin | "Чистый Код" Роберт Мартин |
| "Clean Architecture" by Robert Martin | "Чистая Архитектура" Роберт Мартин |
| "Code Complete" by Steve McConnell | "Совершенный Код" Стив Макконелл |
| "Building Microservices" by Sam Newman | "Создание Микросервисов" Сэм Ньюман |
| "Microservices Patterns" by Chris Richardson | "Микросервисы. Паттерны разработки и рефакторинга" Крис Ричардсон |
| "Designing Data-Intensive Applications" by Martin Kleppmann | "Высоконагруженные приложения" Мартин Клеппманн |
| "System Design Interview" Vol I & II by Alex Xu | — |
| "Database Internals" by Alex Petrov | — |
| "Release It!" by Michael Nygard | — |
| "The Pragmatic Programmer" by Hunt & Thomas | "Программист-прагматик" |
| "Understanding Distributed Systems" by Roberto Vitillo | — |
| "Fundamentals of Software Architecture" by Richards & Ford | — |