GithubHelp home page GithubHelp logo

joebew42 / study-path Goto Github PK

View Code? Open in Web Editor NEW
2.7K 115.0 332.0 566 KB

An organized learning path on Clean Code, Test-Driven Development, Legacy Code, Refactoring, Domain-Driven Design and Microservice Architecture

clean-code clean-architecture hexagonal-architecture solid-principles tdd refactoring legacy-code microservice-architecture cqrs-es learning

study-path's Introduction

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

Introduction

Welcome to this study path, or if you like, the learning path. Is a path about software development practices and design principles. It's open and freely accessible to everyone who wants to dig into topics like Clean 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!

Getting Started

Session 1: SOLID and Clean Code

Session 2: Test-Driven Development

Session 3: Refactoring

Session 4: Working with Legacy Code

Session 5: Testing, Design and Test-Driven Development

Session 6: Practice with a new Programming Language

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

Session 8: Domain-Driven Design

Session 9: Microservices

Session 10: Further topics

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.

study-path's People

Contributors

fsquillace avatar joebew42 avatar matteopierro avatar neman avatar pdincau avatar rudelafuente avatar xpepper avatar zilnik avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

study-path's Issues

Redistribute the Code Katas to provide a more linear learning experience

After reading this article A coding dojo exercises plan towards refactoring legacy code I noticed that could be useful to distribute the Code Katas accordingly:

In the section about Test-Driven Development we could add:

  • The Fizz Buzz
  • The Bowling Game
  • The Roman Numerals

And remove them from the section TDD & Friends, where we can add:

  • The Mars Rover
  • Poker Hands
  • Trading Card Game

The idea is to provide a more linear learning experience, from the basics to design.

Missing license

Under which license this is released? Without license specified nobody can use that information for teaching anyone, except for the author.

I am not sure which license would suite it better, maybe one of Creative Commons..

Small introduction for each topic

It would be great to have an introduction for each topic so I can understand why that topic is relevant e why I should spend time studying it.

Add wedotdd.com as a follow up

It could be useful to add WeDoTDD as a reference for everyone who find this study path useful and want to find companies where they can continue to improve and practice all the topics presented here

Review The Clean Architecture section

Recommended books

  • The Clean Architecture - Uncle Bob
  • Growing Object Oriented Software guided by Tests - Freeman, Price
  • Object-Oriented Software Engineering, A use Case Driven Approach - Ivar Jacobson

Additional videos

Additional readings

Session 9 about DDD and Microservices

I would like to create a the 9th session that will cover the part about Domain-Driven Design and Microservices.

I think I'll go to use these references for the main theory section:

Then, I would like to add some videos, also, in order to give a more comprehensive description and explanation of the theory.

I want to keep focus about the practice, too. So, I'm going to think about some exercises to suggest during the study.

I am a bit confused and right now I have no idea if topics regarding DDD (domain driven design) can be added in this session. Microservices inherits concepts from DDD, like Bounded Context and others. What do you think? Can we use the session about Microservices to give some insights on DDD also?

Any ideas about the organization of this week are welcome! Thank you all ๐Ÿ˜„

Real life examples

Can you add real life examples about where and when you should/can use the knowledge acquired in each topic?

Session 6 should be more generic

The hands-on session should be more generic and agnostic from programming language. The basic idea is to give to reader useful hints to do practice with a programming language that he/she wants to learn.

Some proposals are:

  • Find a set of emerging programming languages (Go, Scala, Elixir, Haskell, Clojure, etc ...)
  • Propose a list of step to follow in order to learn a programming language by doing exercise (something like koans)

Feedbacks are welcome

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.