This learning path is released under the CC BY-SA 4.0 license
Welcome to this organized learning path and resource collection.
The materials are all organized in sections based on specific topics. There is no order to follow. You can skim through all the sections, look for anything specific, follow only a few sections, or just start reading from the very beginning to the end. It's your choice!
I am willing to keep this study path always updated, and I would invite you to contribute by submitting any material you believe will improve it.
- Design Patterns: Elements of Reusable Object-Oriented Software | Gamma, Helm, Johnson, Vlissides
- Patterns of Enterprise Application Architecture | Martin Fowler
- Domain-Driven Design: Tackling Complexity in the Heart of Software (2003) | Eric Evans
- Implementing Domain-Driven Design | Vernon Vaughn
- Domain-Driven Design Distilled | Vernon Vaughn
- Extreme Programming Explained: Embrace Change - first edition | Kent Beck
- Extreme Programming Explained: Embrace Change - second edition | Kent Beck
- Continuous Delivery: Reliable Software Releases Through Build, Test, and Deployment Automation | Jez Humble, David Farley
- Refactoring: Improving the Design of Existing Code | Martin Fowler, Kent Beck
- Clean Code: A Handbook of Agile Software Craftsmanship | Robert C. Martin
- The Clean Coder: A Code of Conduct for Professional Programmers | Robert C. Martin
- Clean Craftmanship: Programming with Pride | Robert C. Martin
- Test Driven Development: By Example | Kent Beck
- Unit Testing: Principles, Practices, and Patterns | Vladimir Khorikov
- Building Microservices: Designing Fine-Grained Systems | Sam Newman
- Monolith to Microservices: Evolutionary Patterns to Transform Your Monolith | Sam Newman
- Microservices Patterns | Chris Richardson
- Building Evolutionary Architectures: Support Constant Change | Ford, Parsons, Kua
- Clean Architecture: A Craftsman's Guide to Software Structure and Design | Robert C. Martin
- Functional Design and Architecture | Alexander Granin
- Programming in Haskell 2nd Edition | Graham Hutton
- Learn You a Haskell for Great Good! | Miran Lipovaca
- Haskell in Depth | Vitaly Bragilevsky
- CIS 194: Introduction to Haskell | Joachim Breitner
- Functional Programming in Haskell: Supercharge Your Coding | Jeremy Singer
- The Simple Haskell Handbook | Marco Sampellegrini
- Haskell Programming From First Principles | Christopher Allen, Julie Moronuki
- Finding Success (and Failure) in Haskell | Chris Martin, Julie Moronuki
- What I Wish I Knew When Learning Haskell | Stephen Diehl
- Programming Rust: Fast, Safe Systems Development | Jim Blandy, Jason Orendorff
- The Rust Programming Language | Steve Klabnik, Carol Nichols
- Programming WebAssembly with Rust: Unified Development for Web, Mobile, and Embedded Applications | Kevin Hoffman
- Zero To Production In Rust | Luca Palmieri
- Learning Python | Mark Lutz
- Fluent Python: Clear, Concise, and Effective Programming | Luciano Ramalho
- Elm in Action | Richard Feldman
- Head First Java | Kathy Sierra, Bert Bates
- Effective Java | Joshua Bloch
- Functional Programming in Scala | Paul Chiusano, Runar Bjarnason
- Programming Elixir ≥ 1.6: Functional |> Concurrent |> Pragmatic |> Fun | Dave Thomas
- Programming Phoenix ≥ 1.4: Productive |> Reliable |> Fast | Chris McCord, Bruce Tate, Jose Valim
- Property-Based Testing with PropEr, Erlang, and Elixir: Find Bugs Before Your Users Do | Fred Hebert
- Genetic Algorithms in Elixir | Sean Moriarity
- Testing Elixir: Effective and Robust Testing for Elixir and its Ecosystem | Andrea Leopardi, Jeffrey Matthias
- Elixir in Action, Second Edition | Saša Jurić
- Designing Elixir Systems with OTP: Write Highly Scalable, Self-Healing Software with Layers | James Edward Gray, II and Bruce A. Tate
- Metaprogramming Elixir: Write Less Code, Get More Done (and Have Fun!) | Chris McCord
- Programming Phoenix LiveView | by Bruce A. Tate, Sophie DeBenedetto
- Functional Web Development with Elixir, OTP, and Phoenix | Lance Halvorsen
- Concurrent Data Processing in Elixir | Svilen Gospodinov
- Programming Ecto | Darin Wilson, Eric Meadows-Jönsson
- Craft GraphQL APIs in Elixir with Absinthe | Bruce Williams, Ben Wilson
- Real-Time Phoenix | Stephen Bussey
- The Little Elixir & OTP Guidebook | Benjamin Tan Wei Hao
- Erlang and OTP in Action | Martin Logan, Eric Merritt, Richard Carlsson
- Programming Erlang (2nd edition) | Joe Armstrong
- Learn You Some Erlang for great good! | Fred Hebert
- Designing for Scalability with Erlang/OTP | Francesco Cesarini, Steve Vinoski
- The Go Programming Language | Donovan, Kernighan
- Get Programming with Go | Youngman, Peppe
- Introducing Go: Build Reliable, Scalable Programs | Caleb Doxsey
- Learning Functional Programming in Go | Lex Sheehan
- Artificial Intelligence for Humans, Volume 1: Fundamental Algorithms | Jeff Heaton
- Artificial Intelligence for Humans, Volume 2: Nature-Inspired Algorithms | Jeff Heaton
- Artificial Intelligence for Humans, Volume 3: Deep Learning and Neural Networks | Jeff Heaton
- Realm of Racket | Matthias Felleisen, David Van Horn, Conrad Barski, M.D., and Eight Students of Northeastern University
- Beautiful Racket | Matthew Butterick
- UNIX System Administration Handbook | Evi Nemeth, Garth Snyder, Scott Seebass, Trent Hein
- Understanding the Linux Kernel | Daniel P. Bovet, Marco Cesati
- A Programmer's Introduction to Mathematics | Jeremy Kun
- A Brief Course in Modern Math for Programmers | Vlad Patryshev
- To Mock a Mockingbird and Other Logic Puzzles | Raymond Smullyan
- Grokking Algorithms | Aditya Y. Bhargava
- Algorithms Illuminated: Part 1: The Basics | Tim Roughgarden
- Algorithms Illuminated: Part 2: Graph Algorithms and Data Structures | Tim Roughgarden
- Algorithms Illuminated: Part 3: Greedy Algorithms and Dynamic Programming | Tim Roughgarden
- Algorithms Illuminated: Part 4: Algorithms for NP-Hard Problems | Tim Roughgarden
- Algorithms (4th Edition) | Robert Sedgewick, Kevin Wayne
- LaTeX Beginner's Guide | Stefan Kottwitz
- Agile Technical Practices Distilled: A learning journey in technical practices and principles of software design | Pedro M. Santos, Marco Consolaro, Alessandro Di Gioia
This section provides a list of recommended book readings that have not been mentioned directly in this learning path but are of significant importance.
- How to Communicate Like a Buddhist | Cynthia Kane
- Mindfulness in Plain English | Bhante Gunaratana
- Effective Remote Work | James Stanier