- Notifications
You must be signed in to change notification settings - Fork353
An organized learning path on Clean Code, Test-Driven Development, Legacy Code, Refactoring, Domain-Driven Design and Microservice Architecture
joebew42/study-path
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
This study path is released under theCC BY-SA 4.0 license
Welcome to this study path, or if you like, the learning path. Is a path aboutsoftware development practices and design principles. It's open and freely accessible to everyone who wants to dig into topics likeClean Code,Test-Driven Development,Refactoring,Clean Architecture,Legacy Code,Domain-Driven Design,Microservices, and much more.
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 to this project by submitting any material you believe will improve it.
Why this study path? Few years ago I worked as a mentor for an intern in Agile Software Development, and I wanted to provide a clear path to follow. At that time, the study was covering Clean Code, Test-Driven Development, and other few topics. By the time, with the support of other people, we enhanced the study path with more and more content!
Enjoy!
- Get familiar withthe Pomodoro Technique (read thepaper)
- Read theManifesto for Agile Software Development
- Read thePrinciples behind the Agile Manifesto
- Read theManifesto for Software Craftsmanship
- WatchCore Design Principles for Software Developers
- Read theSOLID principles
- Exercise: Look at theRacing Car Katas
- Try to find where the SOLID principles are violated
- Read theClean Code
- Chapter 1: Clean Code
- Chapter 2: Meaningful Names
- Chapter 3: Functions
- Chapter 6: Objects and Data Structures
- Chapter 7: Error Handling
- Chapter 10: Classes
- ReadThe Pragmatic Programmer
- Chapter 2: A Pragmatic Approach
- Chapter 5: Bend or Break
- Chapter 6: While You Are Coding
- ReadThe Art of Enbugging: Tell, don't ask / Law of Demeter
- ReadYAGNI
- ReadTDD by example
- Study the
Part I: The Money Example
- Exercise: Try to repeat it with a programming language at your choice.
- Study the
- ReadGrowing Object-Oriented Software, guided by tests
- Chapter 1: What is the point of Test-Driven Development?
- Chapter 2: Test-Driven Development with Objects
- Chapter 4: Kick-Starting the Test-Driven Cycle
- Chapter 5: Maintaining the Test-Driven Cycle
- Unit Tests
- Read Chapter 9: Unit Tests ofClean Code
- WatchThe Clean Code Talks - Unit Testing
- ReadEffective Unit Testing
- Part 1: Foundations
- Part 2: Catalog
- Readdesirable properties of tests
- Watchthe video playlist
- WatchWorkflows of Refactoring
- ReadRefactoring: Improving the design of existing code
- Chapter 1: Refactoring, a First Example
- Try to repeat theexample code
- Chapter 2: Principles in Refactoring
- Chapter 3: Bad Smells in Code
- Chapter 1: Refactoring, a First Example
- Exercise: Try to find and refactor the code smells in these Code Katas:
- Tennis Refactoring Kata
- Gilded Rose Kata
- What Code Smells you have found?
- What steps you followed to remove them?
- What difficulties you have faced?
- ReadWorking Effectively with Legacy Code
- Chapter 1: Changing Software
- Chapter 2: Working with Feedback
- Chapter 4: The Seam Model
- Chapter 8: How Do I Add a Feature ?
- Chapter 13: I Need to Make Changes, but I Don't Know What Tests to Write
- Chapter 25: Dependency-Breaking Techniques
- ReadWorking Effectively with Legacy Tests
- Exercise: Try theGilded Rose Kata
- Add code coverage
- Add the new feature
- Refactor the code
- Watch how other tackled the Gilded Rose Kata:
- WatchAll the Little Things
- Watch "Writing test cases using Approval Tests" (Part I,Part II,Part III)
- WatchTesting and Refactoring Legacy Code
- Exercise: Try to repeat theCode Kata
- Read more aboutApproval Testing and some examples:
- Characterization Testing
- Mutation Testing
- Golden Master and Sampling
- Exercise: Try to test and refactor theUgly trivia game
- Which is the approach you prefer to apply? Why?
- WatchSurviving a legacy codebase: tactics and tools
- Read theSlides of the talk
- Have access to theexample code for further practice
- WatchThe deep synergy between testability and good design
- WatchHow to Write Clean, Testable Code
- WatchTDD and Software Design
- ReadGood Design is Easily-Learned
- Exercise: Try to learn and repeat these Code Kata autonomously
- WatchUnit Testing
- ReadGrowing Object Oriented Software, Guided by Tests
- Chapter 6: Object-Oriented Style
- Chapter 7: Achieving Object-Oriented Design
- Chapter 8: Building on Third-Party Code
- ReadClean Code
- Chapter 8: Boundaries
- WatchThe Magic Tricks of Testing
- ReadMocks Aren't Stubs
- Exercises:
- Try theString Calculator Kata
- Withinteractions
- Try theGame Of Life Kata
- Try theTic Tac Toe Kata
- Try theString Calculator Kata
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.
Now that you have learned something aboutthe 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:
- Fizz Buzz Kata
- The Bowling Game Kata
- String Calculator Kata
- The Roman Numerals Kata
- Game Of Life Kata
- Tic Tac Toe Kata
- Opening Hours Kata
- Racing Car Katas
- Repeat the Money Example of TDD by Example
- Gilded Rose Kata
If you are looking for more Code Katas to learn and practice with your new programming language, try to give a look atKata-Log.
- ReadHexagonal Architecture
- ReadThe Onion Architecture
- ReadThe Clean Architecture
- WatchClean Architecture and Design
- WatchLean Agile Scotland "Crafted Design"
- WatchJax London 2014 "Crafted Design"
- WatchSpring I/O 2019 Clean Architecture
- Exercises:
- Try theSocial Networking Kata
- Try theGreeting Service Kata
- Once you have done one of the previous Code Kata, try to build and deploy your application
- ReadThe Twelve-Factor App
- Publish the code on a
GitHub
repository - Setup a CI environment (e.g. Travis/CircleCI/CodeShip)
- Deploy your application automatically (e.g. Heroku)
- Write a suite of tests to check the deployed application is working as expected
- Take a look at thisreference implementation on Clean Architecture
- WatchTackling Complexity in the Heart of Software
- ReadDomain-Driven Design Quickly
- Chapter 1: What Is Domain-Driven Design
- Chapter 2: The Ubiquitous Language
- Chapter 3: Model-Driven Design
- Chapter 4: Refactoring Toward Deeper Insight
- Chapter 5: Preserving Model Integrity
- ReadDDD: Putting the Model to Work
- ReadHow to write a Repository
- WatchDDD and Microservices: At last, some boundaries!
- Recommended readings:
- ReadMicroservices: A Definition of This New Architectural Term
- WatchMicroservices
- WatchPrinciples Of Microservices
- ReadMicroservice Trade-Offs
- ReadMicroservice Architecture: Aligning Principles, Practices, and Culture
- Chapter 1: The Microservices Way
- Chapter 2: The Microservices Value Proposition
- Chapter 3: Designing Microservice Systems
- Chapter 4: Establishing a Foundation
- Chapter 5: Service Design
- ReadBuilding Microservices: Designing Fine-Grained Systems
- WatchPractical Considerations For Microservice Architecture
- WatchMicroservices Antipatterns
- ReadSeven Microservices Anti-patterns
- Transactions and consistency in distributed systems
- Access to moreexamples and resources
- Simple Design
- ReadBeck Design Rules
- ReadEmergent Design
- ReadThe Four Elements of Simple Design
- ReadPutting An Age-Old Battle To Rest
- Read Chapter 12 ofClean Code: Emergence
- Watch Outside-in TDD (part I -part II -part III)
- ReadTDD by example
- Patterns for Test-Driven Development
- CQRS and Event Sourcing:
- Exercises:
- Try theSalary Slip Kata
- Try theBank Account Kata
- Try to implement a variant using a CQRS/ES approach
This section provides a list of recommended books readings that have not been mentioned directly in this study path, but of significant importance.
- The Nature of Software Development
- Extreme Programming Explained: Embrace Change (2nd Edition)
- The Agile Samurai: How Agile Masters Deliver Great Software
- Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation
- Release It!: Design and Deploy Production-Ready Software
- Beyond Legacy Code: Nine Practices to Extend the Life (and Value) of Your Software
- The Phoenix Project: A Novel about IT, DevOps, and Helping Your Business Win