Skip to content

A curated, open, and ever-evolving learning path focused on practices of software development, principles of software design, and software architecture.

Notifications You must be signed in to change notification settings

joebew42/study-path

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

This study path is released under the CC BY-SA 4.0 license

Introduction

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.

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.

The study path is organized into themed sections. There is no strict order to follow, you are free to:

  • Browse through all the sessions
  • Dive into topics that interest you most
  • Follow the entire path from start to finish

How you use it is entirely up to you.

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.

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!

Enjoy the journey, and happy learning!

🧭 Getting Started

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.

πŸ“ Session 1: SOLID and Clean Code

Discover the core design principles that help you write code that is easy to understand, change, and grow: the building blocks of sustainable software

πŸ”΄πŸŸ’πŸ”΅ Session 2: Test-Driven Design (TDD)

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.

🌱 Session 3: Refactoring

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.

πŸ§“πŸ» Session 4: Working with Legacy Code

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.

πŸ”„ Session 5: Testing, Design and Test-Driven Development

Explore the deeper relationship between testing and good design. Learn how testability often leads to better architecture, modularity, and clarity.

🧸 Session 6: Practice with a new Programming Language

Apply your design and testing skills in a fresh language to reinforce your understanding and build true language-agnostic thinking.

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 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:

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.

🧼 Session 7: The Clean Architecture

Explore architectural choices that emphasize independence from frameworks, user interface, and databases, enabling a long-term flexibility and testability.

πŸ—£οΈ Session 8: Domain-Driven Design (DDD)

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.

πŸ”Œ Session 9: Microservices

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.

πŸ”­ Session 10: Further topics

Explore advanced techniques and design philosophies, from Event Sourcing to Simple Design, and more.

πŸ“š Recommended Readings

This section provides a list of recommended books readings that have not been mentioned directly in this study path, but of significant importance.