├── .gitignore ├── assets └── cirillo-pomodoro-technique.pdf └── readme.md /.gitignore: -------------------------------------------------------------------------------- 1 | scratchpad.txt 2 | -------------------------------------------------------------------------------- /assets/cirillo-pomodoro-technique.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joebew42/study-path/1de1946237bdc04178a352d4db3d2cf4a98f4010/assets/cirillo-pomodoro-technique.pdf -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | _This study path is released under the [**CC BY-SA 4.0**](https://creativecommons.org/licenses/by-sa/4.0/) license_ 2 | 3 | ## Introduction 4 | 5 | Welcome to this **Study Path on Software Development**: a curated, open, and ever-evolving learning path focused on practices of software development, principles of software design, and software architecture. 6 | 7 | Whether you are interested in **Clean Code**, **Test-Driven Development**, **Refactoring**, **Clean Architecture**, **Legacy Code**, **Domain-Driven Design**, **Microservices**, or other essential topics, I hope you will find structured, high-quality resources here to guide with your growth. 8 | 9 | The study path is organized into themed sections. There is no strict order to follow, you are free to: 10 | 11 | - Browse through all the sessions 12 | - Dive into topics that interest you most 13 | - Follow the entire path from start to finish 14 | 15 | **How you use it is entirely up to you.** 16 | 17 | This project started years ago when I mentored an intern in Agile Software Development. At that time I wanted to offer a clear, practical roadmap for learning foundational concepts, like clean code and TDD. Over time, with the support of other people, this study path has grown - and continues to grow - into a broader resource for developers at all levels. 18 | 19 | I am committed keeping this path up to date and valuable. If you have suggestions or resources to contribute, your input is more than welcome! 20 | 21 | **Enjoy the journey, and happy learning!** 22 | 23 | ## 🧭 Getting Started 24 | 25 | > _Kick off your journey by learning how to stay focused, work iteratively, and embrace the mindset of continuous improvement through Agile values and time management techniques._ 26 | 27 | - Get familiar with [the Pomodoro Technique](http://pomodorotechnique.com/) (read the [paper](assets/cirillo-pomodoro-technique.pdf)) 28 | - Read [TODO List: One thing at a time!](https://joebew42.github.io/2020/07/08/todo/) 29 | - Read the [Manifesto for Agile Software Development](http://agilemanifesto.org/) 30 | - Read the [Principles behind the Agile Manifesto](http://agilemanifesto.org/principles.html) 31 | - Read the [Manifesto for Software Craftsmanship](http://manifesto.softwarecraftsmanship.org/) 32 | 33 | ## 📐 Session 1: SOLID and Clean Code 34 | 35 | > _Discover the core design principles that help you write code that is easy to understand, change, and grow: the building blocks of sustainable software_ 36 | 37 | - Watch [Core Design Principles for Software Developers](https://www.youtube.com/watch?v=llGgO74uXMI) 38 | - Read the [SOLID principles](http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod) 39 | - [SRP: Single Responsibility Principle](https://docs.google.com/open?id=0ByOwmqah_nuGNHEtcU5OekdDMkk) 40 | - [OCP: Open-Closed Principle](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgN2M5MTkwM2EtNWFkZC00ZTI3LWFjZTUtNTFhZGZiYmUzODc1&hl=en) 41 | - [LSP: Liskov Substitution Principle](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgNzAzZjA5ZmItNjU3NS00MzQ5LTkwYjMtMDJhNDU5ZTM0MTlh&hl=en) 42 | - [ISP: Interface Segregation Principle](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgOTViYjJhYzMtMzYxMC00MzFjLWJjMzYtOGJiMDc5N2JkYmJi&hl=en) 43 | - [DIP: Dependency Inversion Principle](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgMjdlMWIzNGUtZTQ0NC00ZjQ5LTkwYzQtZjRhMDRlNTQ3ZGMz&hl=en) 44 | - Exercise: Look at the [Racing Car Katas](https://github.com/emilybache/Racing-Car-Katas) 45 | - Try to find where the SOLID principles are violated 46 | - Read the [Clean Code: A Handbook of Agile Software Craftsmanship](https://www.goodreads.com/book/show/3735293-clean-code) 47 | - Chapter 1: Clean Code 48 | - Chapter 2: Meaningful Names 49 | - Chapter 3: Functions 50 | - Chapter 6: Objects and Data Structures 51 | - Chapter 7: Error Handling 52 | - Chapter 10: Classes 53 | - Read [The Pragmatic Programmer: From Journeyman to Master](https://www.goodreads.com/book/show/4099.The_Pragmatic_Programmer) 54 | - Chapter 2: A Pragmatic Approach 55 | - Chapter 5: Bend or Break 56 | - Chapter 6: While You Are Coding 57 | - Read [The Art of Enbugging](http://www.ccs.neu.edu/research/demeter/related-work/pragmatic-programmer/jan_03_enbug.pdf): Tell, don't ask / Law of Demeter 58 | - Read [YAGNI](https://martinfowler.com/bliki/Yagni.html) 59 | - Watch [SOLID for functional programming](https://www.youtube.com/watch?v=rmftOs2BzgU) (a case study of SOLID principles applied in Elixir) 60 | 61 | ## 🔴🟢🔵 Session 2: Test-Driven Design (TDD) 62 | 63 | > _Learn how tests can help to drive the design of your code, how tests can lead to a better feedback loop, and less code! A key skill in modern development workflows._ 64 | 65 | - Read [Test-Driven Development: By Example](https://www.goodreads.com/book/show/387190.Test_Driven_Development) 66 | - Study the `Part I: The Money Example` 67 | - Exercise: Try to repeat it with a programming language at your choice. 68 | - Read [Growing Object-Oriented Software, Guided by Tests](https://www.goodreads.com/book/show/4268826-growing-object-oriented-software-guided-by-tests) 69 | - Chapter 1: What is the point of Test-Driven Development? 70 | - Chapter 2: Test-Driven Development with Objects 71 | - Chapter 4: Kick-Starting the Test-Driven Cycle 72 | - Chapter 5: Maintaining the Test-Driven Cycle 73 | - Unit Tests 74 | - Read Chapter 9: Unit Tests of [Clean Code](https://www.goodreads.com/book/show/3735293-clean-code) 75 | - Watch [The Clean Code Talks - Unit Testing](https://www.youtube.com/watch?v=wEhu57pih5w) 76 | - Read [Effective Unit Testing](https://www.goodreads.com/book/show/17282399-effective-unit-testing) 77 | - Part 1: Foundations 78 | - Part 2: Catalog 79 | - Read [desirable properties of tests](https://medium.com/@kentbeck_7670/test-desiderata-94150638a4b3) 80 | - Watch [the video playlist](https://www.youtube.com/playlist?list=PLlmVY7qtgT_lkbrk9iZNizp978mVzpBKl) 81 | - Read [Working Effectively with Unit Tests](https://leanpub.com/wewut/read) 82 | 83 | ## 🌱 Session 3: Refactoring 84 | 85 | > _Sharpen your ability to improve the design of your code without changing its behavior. Recognize code smells, apply refactoring techniques, and keep your systems clean over time._ 86 | 87 | - Watch [Workflows of Refactoring](https://www.youtube.com/watch?v=vqEg37e4Mkw) 88 | - Read [Refactoring: Improving the design of existing code](https://www.goodreads.com/book/show/44936.Refactoring) 89 | - Chapter 1: Refactoring, a First Example 90 | - Try to repeat the [example code](https://github.com/joebew42/refactoring-day/tree/master/movie-rental/java) 91 | - Chapter 2: Principles in Refactoring 92 | - Chapter 3: Bad Smells in Code 93 | - Exercise: Try to find and refactor the code smells in these Code Katas: 94 | - [Tennis Refactoring Kata](https://github.com/emilybache/Tennis-Refactoring-Kata) 95 | - [Gilded Rose Kata](https://github.com/joebew42/GildedRose) 96 | - What Code Smells you have found? 97 | - What steps you followed to remove them? 98 | - What difficulties you have faced? 99 | - Try the [Refactoring Golf](https://github.com/daviddenton/refactoring-golf): Explore your IDE to see what's really possible using shortcuts and automation. 100 | 101 | ## 🧓🏻 Session 4: Working with Legacy Code 102 | 103 | > _Master strategies and techniques to safely work in large, untested, or unfamiliar codebases. One of the most valuable real-world development skills for people who are dealing with legacy code at daily basis._ 104 | 105 | - Read [Working Effectively with Legacy Code](https://www.goodreads.com/book/show/44919.Working_Effectively_with_Legacy_Code) 106 | - Chapter 1: Changing Software 107 | - Chapter 2: Working with Feedback 108 | - Chapter 4: The Seam Model 109 | - Chapter 8: How Do I Add a Feature ? 110 | - Chapter 13: I Need to Make Changes, but I Don't Know What Tests to Write 111 | - Chapter 25: Dependency-Breaking Techniques 112 | - Read [Working Effectively with Legacy Tests](http://natpryce.com/articles/000813.html) 113 | - Exercise: Try the [Gilded Rose Kata](https://github.com/joebew42/GildedRose) 114 | - Add code coverage 115 | - Add the new feature 116 | - Refactor the code 117 | - Watch how other tackled the Gilded Rose Kata: 118 | - Watch [All the Little Things](https://www.youtube.com/watch?v=8bZh5LMaSmE) 119 | - Watch "Writing test cases using Approval Tests" ([Part I](https://www.youtube.com/watch?v=zyM2Ep28ED8), [Part II](https://www.youtube.com/watch?v=OJmg9aMxPDI), [Part III](https://www.youtube.com/watch?v=NADVhSjeyJA)) 120 | - Watch [Testing and Refactoring Legacy Code](https://www.youtube.com/watch?v=_NnElPO5BU0) 121 | - Exercise: Try to repeat the [Code Kata](https://github.com/sandromancuso/trip-service-kata) 122 | - Watch the alternative version [Testing and Refactoring Legacy Code - The Trip Service Kata - Part I](https://www.youtube.com/watch?v=pmoLmjirmTk) 123 | - And [Testing and Refactoring Legacy Code - The Trip Service Kata - Part II](https://www.youtube.com/watch?v=P1S9E_-yKBE): on OCP, Seam Model, and DIP. 124 | - Read more about [Approval Testing](http://www.methodsandtools.com/archive/approvaltest.php) and some examples: 125 | - [Characterization Testing](https://michaelfeathers.silvrback.com/characterization-testing) 126 | - [Mutation Testing](https://www.guru99.com/mutation-testing.html) 127 | - [Golden Master and Sampling](https://blog.thecodewhisperer.com/permalink/surviving-legacy-code-with-golden-master-and-sampling) 128 | - [How Not To Write Golden Master Tests](https://blog.thecodewhisperer.com/permalink/how-not-to-write-golden-master-tests) 129 | - Exercise: Try to test and refactor the [Ugly trivia game](https://github.com/jbrains/trivia) 130 | - Which is the approach you prefer to apply? Why? 131 | - Watch [Surviving a legacy codebase: tactics and tools](https://www.youtube.com/watch?v=NGfvguzMjqw) 132 | - Read the [Slides of the talk](https://www.slideshare.net/pierodibello/surviving-to-a-legacy-codebase-codemotion-berlin-2018-edition) 133 | - Have access to the [example code](https://github.com/xpepper/fifty-shades-of-legacy-goose-game) for further practice 134 | 135 | ## 🔄 Session 5: Testing, Design and Test-Driven Development 136 | 137 | > _Explore the deeper relationship between testing and good design. Learn how testability often leads to better architecture, modularity, and clarity._ 138 | 139 | - Watch [The deep synergy between testability and good design](https://www.youtube.com/watch?v=4cVZvoFGJTU) 140 | - Watch [How to Write Clean, Testable Code](https://www.youtube.com/watch?v=XcT4yYu_TTs) 141 | - Watch [TDD and Software Design](https://www.youtube.com/watch?v=ty3p5VDcoOI) 142 | - Read [Good Design is Easily-Learned](http://blog.scottbellware.com/2009/01/good-design-is-easily-learned.html) 143 | - Exercise: Try to learn and repeat these Code Kata autonomously 144 | - [The Bowling Game Kata](http://butunclebob.com/ArticleS.UncleBob.TheBowlingGameKata) 145 | - [The Roman Numerals Kata](http://www.codekatas.org/casts/roman-numerals-kata-with-audio-commentary) 146 | - Watch [Unit Testing](https://www.youtube.com/watch?v=wEhu57pih5w) 147 | - Read [Growing Object-Oriented Software, Guided by Tests](https://www.goodreads.com/book/show/4268826-growing-object-oriented-software-guided-by-tests) 148 | - Chapter 6: Object-Oriented Style 149 | - Chapter 7: Achieving Object-Oriented Design 150 | - Chapter 8: Building on Third-Party Code 151 | - Read the [Clean Code: A Handbook of Agile Software Craftsmanship](https://www.goodreads.com/book/show/3735293-clean-code) 152 | - Chapter 8: Boundaries 153 | - Watch [The Magic Tricks of Testing](https://www.youtube.com/watch?v=URSWYvyc42M) 154 | - Read [Mocks Aren't Stubs](http://martinfowler.com/articles/mocksArentStubs.html) 155 | - Exercises: 156 | - Try the [String Calculator Kata](http://osherove.com/tdd-kata-1/) 157 | - With [interactions](http://osherove.com/tdd-kata-2/) 158 | - Try the [Game Of Life Kata](https://kata-log.rocks/game-of-life-kata) 159 | - Try the [Tic Tac Toe Kata](https://kata-log.rocks/tic-tac-toe-kata) 160 | 161 | ## 🧸 Session 6: Practice with a new Programming Language 162 | 163 | > _Apply your design and testing skills in a fresh language to reinforce your understanding and build true language-agnostic thinking._ 164 | 165 | Principles and Practices are not dependent on any particular programming language, rather they act as support or enabler to learn and get comfortable with programming languages and tools we never used before. 166 | 167 | Now that you have learned something about _the good principles and practices of software development_, try to grab a new programming language which you never used before and try to repeat some of the Code Katas you already have done previously: 168 | 169 | - [Fizz Buzz Kata](http://codingdojo.org/cgi-bin/index.pl?KataFizzBuzz) 170 | - [The Bowling Game Kata](http://butunclebob.com/ArticleS.UncleBob.TheBowlingGameKata) 171 | - [String Calculator Kata](http://osherove.com/tdd-kata-1/) 172 | - [The Roman Numerals Kata](http://www.codekatas.org/casts/roman-numerals-kata-with-audio-commentary) 173 | - [Game Of Life Kata](https://kata-log.rocks/game-of-life-kata) 174 | - [Tic Tac Toe Kata](https://kata-log.rocks/tic-tac-toe-kata) 175 | - [Opening Hours Kata](https://github.com/christian-fei/opening-hours-kata) 176 | - [Racing Car Katas](https://github.com/emilybache/Racing-Car-Katas) 177 | - Repeat the Money Example of TDD by Example 178 | - [Gilded Rose Kata](https://github.com/joebew42/GildedRose) 179 | 180 | If you are looking for more Code Katas to learn and practice with your new programming language, try to give a look at [Kata-Log](https://kata-log.rocks/). 181 | 182 | ## 🧼 Session 7: The Clean Architecture 183 | 184 | > _Explore architectural choices that emphasize independence from frameworks, user interface, and databases, enabling a long-term flexibility and testability._ 185 | 186 | - Read [Hexagonal Architecture](https://web.archive.org/web/20090122225311/http://alistair.cockburn.us/Hexagonal+architecture) 187 | - Read [The Onion Architecture](https://jeffreypalermo.com/2008/07/the-onion-architecture-part-1/) 188 | - Read [The Clean Architecture](https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html) 189 | - Watch [Clean Architecture and Design](https://www.youtube.com/watch?v=2dKZ-dWaCiU) 190 | - Watch [Lean Agile Scotland "Crafted Design"](https://vimeo.com/107963074) 191 | - Watch [Jax London 2014 "Crafted Design"](https://vimeo.com/128596005) 192 | - Watch [Spring I/O 2019 Clean Architecture](https://www.youtube.com/watch?v=cPH5AiqLQTo) 193 | - Exercises: 194 | - Try the [Social Networking Kata](https://github.com/sandromancuso/social_networking_kata) 195 | - Try the [Greeting Service Kata](https://github.com/joebew42/greeting-service-kata) 196 | - Once you have done one of the previous Code Kata, try to build and deploy your application 197 | - Read [The Twelve-Factor App](http://12factor.net/) 198 | - Publish the code on a `GitHub` repository 199 | - Setup a CI environment (e.g. Travis/CircleCI/CodeShip) 200 | - Deploy your application automatically (e.g. Heroku) 201 | - Write a suite of tests to check the deployed application is working as expected 202 | - Take a look at this [reference implementation on Clean Architecture](https://github.com/ivanpaulovich/clean-architecture-manga) 203 | 204 | ## 🗣️ Session 8: Domain-Driven Design (DDD) 205 | 206 | > _Dive into modeling complex business domains with more clarity. Learn how to make your code to speak the language of the business and build software that truly reflects it._ 207 | 208 | - Watch [Tackling Complexity in the Heart of Software](https://www.youtube.com/watch?v=dnUFEg68ESM) 209 | - Read [Domain-Driven Design Quickly](https://www.infoq.com/minibooks/domain-driven-design-quickly) 210 | - Chapter 1: What Is Domain-Driven Design 211 | - Chapter 2: The Ubiquitous Language 212 | - Chapter 3: Model-Driven Design 213 | - Chapter 4: Refactoring Toward Deeper Insight 214 | - Chapter 5: Preserving Model Integrity 215 | - Read [DDD: Putting the Model to Work](https://www.infoq.com/presentations/model-to-work-evans) 216 | - Read [How to write a Repository](http://philcalcado.com/2010/12/23/how_to_write_a_repository.html) 217 | - Watch [DDD and Microservices: At last, some boundaries!](https://vimeo.com/125769142) 218 | - Recommended readings: 219 | - [Domain-Driven Design: Tackling Complexity in the Heart of Software](https://www.goodreads.com/book/show/179133.Domain_Driven_Design) 220 | - [Implementing Domain-Driven Design](https://www.goodreads.com/book/show/15756865-implementing-domain-driven-design) 221 | - [Domain-Driven Design Reference: Definitions and Pattern Summaries](https://www.goodreads.com/book/show/23322716-domain-driven-design-reference) 222 | - [Domain Modeling Made Functional](https://www.goodreads.com/book/show/34921689-domain-modeling-made-functional) 223 | - [Domain-Driven Design Starter Modelling Process](https://github.com/ddd-crew/ddd-starter-modelling-process) 224 | - A step-by-step guide for learning and practically applying each aspect of Domain-Driven Design (DDD) - from orienting around an organisation's business model to coding a domain model. 225 | 226 | ## 🔌 Session 9: Microservices 227 | 228 | > _Understand how to better split systems into independently deployable services. Learn the benefits, trade-offs, and patterns that enables distributed architecture that better reflects business domains and support autonomous teams._ 229 | 230 | - Read [Microservices: A Definition of This New Architectural Term](https://martinfowler.com/articles/microservices.html) 231 | - Watch [Microservices](https://www.youtube.com/watch?v=wgdBVIX9ifA) 232 | - Watch [Principles Of Microservices](https://www.youtube.com/watch?v=PFQnNFe27kU) 233 | - Read [Microservice Trade-Offs](http://martinfowler.com/articles/microservice-trade-offs.html) 234 | - Read [Microservice Architecture: Aligning Principles, Practices, and Culture](https://www.goodreads.com/book/show/30827276-microservice-architecture-aligning-principles-practices-and-culture) 235 | - Chapter 1: The Microservices Way 236 | - Chapter 2: The Microservices Value Proposition 237 | - Chapter 3: Designing Microservice Systems 238 | - Chapter 4: Establishing a Foundation 239 | - Chapter 5: Service Design 240 | - Read [Building Microservices: Designing Fine-Grained Systems](https://www.goodreads.com/book/show/22512931-building-microservices?) 241 | - Chapter 1: Microservices 242 | - Chapter 2: The Evolutionary Architect 243 | - Chapter 3: How to Model Services 244 | - Chapter 4: Integration 245 | - Chapter 5: Splitting the Monolith 246 | - Chapter 6: Deployment 247 | - Chapter 7: Testing 248 | - Chapter 8: Monitoring 249 | - Chapter 11: Microservices at Scale 250 | - Watch the Book Reading Club ([part I](https://www.youtube.com/watch?v=Caj-qCOniXM) - [part II](https://www.youtube.com/watch?v=zS57uYLzF1I) - [part III](https://www.youtube.com/watch?v=DAVMB_Tc00w)) 251 | - Watch [Practical Considerations For Microservice Architecture](https://vimeo.com/105751281) 252 | - Watch [Microservices Antipatterns](https://www.youtube.com/watch?v=I56HzTKvZKc) 253 | - Read [Seven Microservices Anti-patterns](https://www.infoq.com/articles/seven-uservices-antipatterns) 254 | - Transactions and consistency in distributed systems 255 | - Watch [Using sagas to maintain data consistency in a microservice architecture](https://www.youtube.com/watch?v=YPbGW3Fnmbc) 256 | - Watch [Applying the Saga Pattern](https://www.youtube.com/watch?v=xDuwrtwYHu8) 257 | - Access to more [examples and resources](https://gist.github.com/pdincau/8e6d42dfc44cf158e70293604bae0c17) 258 | - The other way around: [Monolith to Microservices: Evolutionary Patterns to Transform Your Monolith](https://www.goodreads.com/book/show/44144499-monolith-to-microservices) 259 | - Watch [Monolith Decomposition Patterns - Sam Newman](https://www.youtube.com/watch?v=64w1zbpHGTg) 260 | - Watch [microXchg 2016 - Rodrigue Schaefer : From monolith to microservices](https://www.youtube.com/watch?v=I9zpROdDf48) 261 | 262 | ## 🔭 Session 10: Further topics 263 | 264 | > _Explore advanced techniques and design philosophies, from Event Sourcing to Simple Design, and more._ 265 | 266 | - Simple Design 267 | - Read [Beck Design Rules](https://martinfowler.com/bliki/BeckDesignRules.html) 268 | - Read [Emergent Design](http://ronjeffries.com/xprog/classics/expemergentdesign/) 269 | - Read [The Four Elements of Simple Design](http://blog.jbrains.ca/permalink/the-four-elements-of-simple-design) 270 | - Read [Putting An Age-Old Battle To Rest](http://blog.thecodewhisperer.com/permalink/putting-an-age-old-battle-to-rest) 271 | - Read Chapter 12 of [Clean Code](https://www.goodreads.com/book/show/3735293-clean-code): Emergence 272 | - Read [Understanding the Four Rules of Simple Design](https://leanpub.com/4rulesofsimpledesign) 273 | - Watch Outside-in TDD ([part I](https://www.youtube.com/watch?v=XHnuMjah6ps) - [part II](https://www.youtube.com/watch?v=gs0rqDdz3ko) - [part III](https://www.youtube.com/watch?v=R9OAt9AOrzI)) 274 | - Read [Test-Driven Development: By Example](https://www.goodreads.com/book/show/387190.Test_Driven_Development) 275 | - Patterns for Test-Driven Development 276 | - CQRS and Event Sourcing: 277 | - Watch [CQRS and Event Sourcing](https://www.youtube.com/watch?v=JHGkaShoyNs) 278 | - Watch [CQRS with Erlang](https://vimeo.com/97318824) 279 | - Watch [A Decade of DDD, CQRS, Event Sourcing](https://www.youtube.com/watch?v=LDW0QWie21s) 280 | - Read [CQRS Journey](http://cqrsjourney.github.io/) 281 | - Exercises: 282 | - Try the [Salary Slip Kata](https://github.com/sandromancuso/salaryslipkata) 283 | - Try the [Bank Account Kata](https://github.com/sandromancuso/Bank-kata) 284 | - Try to implement a variant using a CQRS/ES approach 285 | - Watch [The Many Meanings of Event-Driven Architecture • Martin Fowler • GOTO 2017](https://www.youtube.com/watch?v=STKCRSUsyP0) 286 | - Read [Growing systems towards DDD, Event-Sourcing and Event-Driven architecture](https://joebew42.github.io/2025/04/06/growing-systems-towards-ddd-event-sourcing-and-event-driven-architecture/) 287 | 288 | ## 📚 Recommended Readings 289 | 290 | > This section provides a list of recommended books readings that have not been mentioned directly in this study path, but of significant importance. 291 | 292 | - [The Nature of Software Development](https://www.goodreads.com/book/show/23016056-the-nature-of-software-development) 293 | - [Extreme Programming Explained: Embrace Change (2nd Edition)](https://www.goodreads.com/book/show/58699420-extreme-programming-explained) 294 | - [The Agile Samurai: How Agile Masters Deliver Great Software](https://www.goodreads.com/book/show/8248700-the-agile-samurai) 295 | - [Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation](https://www.goodreads.com/book/show/8686650-continuous-delivery) 296 | - [Release It!: Design and Deploy Production-Ready Software](https://www.goodreads.com/book/show/1069827.Release_It_) 297 | - [Beyond Legacy Code: Nine Practices to Extend the Life (and Value) of Your Software](https://www.goodreads.com/book/show/26088456-beyond-legacy-code) 298 | - [The Phoenix Project: A Novel about IT, DevOps, and Helping Your Business Win](https://www.goodreads.com/book/show/17255186-the-phoenix-project) 299 | --------------------------------------------------------------------------------