Skip to content

Commit

Permalink
add learning paths
Browse files Browse the repository at this point in the history
  • Loading branch information
ythirion committed Dec 26, 2023
1 parent 2b4f653 commit 5c3df8b
Show file tree
Hide file tree
Showing 11 changed files with 154 additions and 25 deletions.
58 changes: 33 additions & 25 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,30 +46,30 @@ To facilitate the communication around challenges you can join us on `Discord` b
## Challenges - 2023
Here are the different challenges :

- [Day 1: Make your production code easier to understand.](exercise/day01/docs/challenge.md)
- [Day 2: One level of indentation.](exercise/day02/docs/challenge.md)
- [Day 3: One dot per line.](exercise/day03/docs/challenge.md)
- [Day 4: Identify the behavior under test and rewrite the tests.](exercise/day04/docs/challenge.md)
- [Day 5: No "for" loop authorized.](exercise/day05/docs/challenge.md)
- [Day 6: Parameterize your tests.](exercise/day06/docs/challenge.md)
- [Day 7: Simplify the run method by extracting the right behavior.](exercise/day07/docs/challenge.md)
- [Day 8: Using TDD rules, write a password validation program.](exercise/day08/docs/challenge.md)
- [Day 9: Fix the code.](exercise/day09/docs/challenge.md)
- [Day 10: Dot not use "if" statement.](exercise/day10/docs/challenge.md)
- [Day 11: Gather a dependency freshness metric.](exercise/day11/docs/challenge.md)
- [Day 12: Make your code open for extension.](exercise/day12/docs/challenge.md)
- [Day 13: Find a way to eliminate the irrelevant, and amplify the essentials of those tests.](exercise/day13/docs/challenge.md)
- [Day 14: Do not use exceptions anymore.](exercise/day14/docs/challenge.md)
- [Day 15: Put a code under tests.](exercise/day15/docs/challenge.md)
- [Day 16: Make this code immutable.](exercise/day16/docs/challenge.md)
- [Day 17: Design one test that has the impact of thousands.](exercise/day17/docs/challenge.md)
- [Day 18: Automatically detect Linguistic Anti-Patterns (LAP).](exercise/day18/docs/challenge.md)
- [Day 19: Loosing up dead weight.](exercise/day19/docs/challenge.md)
- [Day 20: No more exceptions in our domain.](exercise/day20/docs/challenge.md)
- [Day 21: Refactor the tests and production code to Output-Based tests.](exercise/day21/docs/challenge.md)
- [Day 22: Design a diamond program using T.D.D and Property-Based Testing.](exercise/day22/docs/challenge.md)
- [Day 23: Refactor the code after putting it under test.](exercise/day23/docs/challenge.md)
- [Day 24: Write the most complicated code you can.](exercise/day24/docs/challenge.md)
- [Day 1: Make your production code easier to understand.](exercise/day01/docs/challenge.md) [![Refactoring](https://img.shields.io/badge/Refactoring-blue)](learning-paths/refactoring.md)
- [Day 2: One level of indentation.](exercise/day02/docs/challenge.md) [![Refactoring](https://img.shields.io/badge/Refactoring-blue)](learning-paths/refactoring.md)
- [Day 3: One dot per line.](exercise/day03/docs/challenge.md) [![Refactoring](https://img.shields.io/badge/Refactoring-blue)](learning-paths/refactoring.md)
- [Day 4: Identify the behavior under test and rewrite the tests.](exercise/day04/docs/challenge.md) [![Clean Testing](https://img.shields.io/badge/Clean%20Testing-orange)](learning-paths/clean-testing.md)
- [Day 5: No "for" loop authorized.](exercise/day05/docs/challenge.md) [![Functional Programming](https://img.shields.io/badge/Functional%20Programming-purple)](learning-paths/functional-programming.md)
- [Day 6: Parameterize your tests.](exercise/day06/docs/challenge.md) [![Clean Testing](https://img.shields.io/badge/Clean%20Testing-orange)](learning-paths/clean-testing.md)
- [Day 7: Simplify the run method by extracting the right behavior.](exercise/day07/docs/challenge.md) [![Refactoring](https://img.shields.io/badge/Refactoring-blue)](learning-paths/refactoring.md)
- [Day 8: Using TDD rules, write a password validation program.](exercise/day08/docs/challenge.md) [![T.D.D](https://img.shields.io/badge/T.D.D-green)](learning-paths/tdd.md)
- [Day 9: Fix the code.](exercise/day09/docs/challenge.md) [![Design](https://img.shields.io/badge/Design-yellow)](learning-paths/design.md)
- [Day 10: Dot not use "if" statement.](exercise/day10/docs/challenge.md) [![Functional Programming](https://img.shields.io/badge/Functional%20Programming-purple)](learning-paths/functional-programming.md)
- [Day 11: Gather a dependency freshness metric.](exercise/day11/docs/challenge.md) [![Design](https://img.shields.io/badge/Design-yellow)](learning-paths/design.md)
- [Day 12: Make your code open for extension.](exercise/day12/docs/challenge.md) [![Design](https://img.shields.io/badge/Design-yellow)](learning-paths/design.md)
- [Day 13: Find a way to eliminate the irrelevant, and amplify the essentials of those tests.](exercise/day13/docs/challenge.md) [![Clean Testing](https://img.shields.io/badge/Clean%20Testing-orange)](learning-paths/clean-testing.md)
- [Day 14: Do not use exceptions anymore.](exercise/day14/docs/challenge.md) [![Functional Programming](https://img.shields.io/badge/Functional%20Programming-purple)](learning-paths/functional-programming.md)
- [Day 15: Put a code under tests.](exercise/day15/docs/challenge.md) [![Clean Testing](https://img.shields.io/badge/Clean%20Testing-orange)](learning-paths/clean-testing.md)
- [Day 16: Make this code immutable.](exercise/day16/docs/challenge.md) [![Functional Programming](https://img.shields.io/badge/Functional%20Programming-purple)](learning-paths/functional-programming.md)
- [Day 17: Design one test that has the impact of thousands.](exercise/day17/docs/challenge.md) [![Clean Testing](https://img.shields.io/badge/Clean%20Testing-orange)](learning-paths/clean-testing.md)
- [Day 18: Automatically detect Linguistic Anti-Patterns (LAP).](exercise/day18/docs/challenge.md) [![Design](https://img.shields.io/badge/Design-yellow)](learning-paths/design.md)
- [Day 19: Loosing up dead weight.](exercise/day19/docs/challenge.md) [![Functional Programming](https://img.shields.io/badge/Functional%20Programming-purple)](learning-paths/functional-programming.md)
- [Day 20: No more exceptions in our domain.](exercise/day20/docs/challenge.md) [![Design](https://img.shields.io/badge/Design-yellow)](learning-paths/design.md)
- [Day 21: Refactor the tests and production code to Output-Based tests.](exercise/day21/docs/challenge.md) [![Clean Testing](https://img.shields.io/badge/Clean%20Testing-orange)](learning-paths/clean-testing.md)
- [Day 22: Design a diamond program using T.D.D and Property-Based Testing.](exercise/day22/docs/challenge.md) [![T.D.D](https://img.shields.io/badge/T.D.D-green)](learning-paths/tdd.md)
- [Day 23: Refactor the code after putting it under test.](exercise/day23/docs/challenge.md) [![Refactoring](https://img.shields.io/badge/Refactoring-blue)](learning-paths/refactoring.md) [![T.D.D](https://img.shields.io/badge/T.D.D-green)](learning-paths/tdd.md) [![Clean Testing](https://img.shields.io/badge/Clean%20Testing-orange)](learning-paths/clean-testing.md) [![Functional Programming](https://img.shields.io/badge/Functional%20Programming-purple)](learning-paths/functional-programming.md)
- [Day 24: Write the most complicated code you can.](exercise/day24/docs/challenge.md) [![Refactoring](https://img.shields.io/badge/Refactoring-blue)](learning-paths/refactoring.md)
- [Day 25: Share with the world what you have learned.](exercise/day25/docs/challenge.md)

### Solutions
Expand Down Expand Up @@ -99,7 +99,15 @@ A solution proposal will be published here every day during the `Advent Of Craft
- [Day 22: Design a diamond program using T.D.D and Property-Based Testing.](solution/day22/docs/step-by-step.md)
- [Day 23: Refactor the code after putting it under test.](solution/day23/docs/step-by-step.md)
- [Day 24: Write the most complicated code you can.](solution/day24/docs/step-by-step.md)


## Learning paths 🚀
We have designed several `learning paths` based on the challenges that you can follow if you want to deep dive into a given concept:
- [Refactoring 🚀](learning-paths/refactoring.md)
- [Clean Testing 🧼](learning-paths/clean-testing.md)
- [Test-Driven Development 🔴🔵🟢](learning-paths/tdd.md)
- [Design 🏛](learning-paths/design.md)
- [Functional Programming 🌋](learning-paths/functional-programming.md)

## Contributors

<table>
Expand Down
Binary file added img/clean-testing.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added img/design.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added img/functional-programming.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added img/refactoring.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added img/tdd.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
29 changes: 29 additions & 0 deletions learning-paths/clean-testing.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
## Clean Testing 🧼
![Clean Testing Learning path](../img/clean-testing.png)

- [Day 4: Identify the behavior under test and rewrite the tests.](../exercise/day04/docs/challenge.md)
- Focus tests on behaviors (not data)
- Tests List
- Avoid duplication (Clean Code applied on tests)
- [Day 6: Parameterize your tests.](../exercise/day06/docs/challenge.md)
- Parameterized tests
- [Day 13: Find a way to eliminate the irrelevant, and amplify the essentials of those tests.](../exercise/day13/docs/challenge.md)
- Test Data Builder
- `DSL` for our tests
- [Day 15: Put a code under tests.](../exercise/day15/docs/challenge.md)
- Approval testing
- Combination testing
- Work effectively with legacy code
- [Day 17: Design one test that has the impact of thousands.](../exercise/day17/docs/challenge.md)
- Property-Based Testing
- From `Parameterized tests` to `Property-Based tests`
- [Day 21: Refactor the tests and production code to Output-Based tests.](../exercise/day21/docs/challenge.md)
- Styles of Tests
- State-Based
- Output-Based
- Communication-Based
- Refactor to Output-Based tests
- Functional Core, Imperative Shell
- [Day 23: Refactor the code after putting it under test.](../exercise/day23/docs/challenge.md)
- Code coverage
- Mutation Testing
22 changes: 22 additions & 0 deletions learning-paths/design.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
## Design 🏛️
![Design Learning path](../img/design.png)

- [Day 9: Fix the code.](../exercise/day09/docs/challenge.md)
- Command Query Separation
- Pure Function
- [Day 11: Gather a dependency freshness metric.](../exercise/day11/docs/challenge.md)
- Dependency Freshness
- LibYear
- Team Rules
- [Day 12: Make your code open for extension.](../exercise/day12/docs/challenge.md)
- S.O.L.I.D Principles
- C.U.P.I.D
- Open-Closed Principle
- [Day 18: Automatically detect Linguistic Anti-Patterns (LAP).](../exercise/day18/docs/challenge.md)
- Linguistic Anti-Patterns
- Architecture Unit Tests
- Team Rules
- [Day 20: No more exceptions in our domain.](../exercise/day20/docs/challenge.md)
- Hollywood principle / continuation
- Constrain inputs
- Referential transparency
24 changes: 24 additions & 0 deletions learning-paths/functional-programming.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
## Functional Programming 🌋
![FP Learning path](../img/functional-programming.png)

- [Day 5: No "for" loop authorized.](../exercise/day05/docs/challenge.md)
- Use Collection Functions
- [Day 10: Dot not use "if" statement.](../exercise/day10/docs/challenge.md)
- Pure Function
- Functional Map (function registration)
- Object Calisthenics
- [Day 14: Do not use exceptions anymore.](../exercise/day14/docs/challenge.md)
- Parse Don't Validate
- Use Monads instead of Exceptions
- Extend Output
- Referential Transparency
- [Day 16: Make this code immutable.](../exercise/day16/docs/challenge.md)
- Immutability
- Use `T.D.D` to refactor existing code
- Strangler Pattern
- [Day 19: Loosing up dead weight.](../exercise/day19/docs/challenge.md)
- Exceptions vs Errors
- Use error instead of exceptions
- [Day 23: Refactor the code after putting it under test.](../exercise/day23/docs/challenge.md)
- Use Monads
- Referential Transparency
26 changes: 26 additions & 0 deletions learning-paths/refactoring.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
## Refactoring 🚀
![Refactoring Learning path](../img/refactoring.png)

- [Day 1: Make your production code easier to understand.](../exercise/day01/docs/challenge.md)
- Encapsulate Conditionals
- Extract Method
- Automated Refactoring
- [Day 2: One level of indentation.](../exercise/day02/docs/challenge.md)
- Object Calisthenics
- Invert If
- Extract Method
- Guard
- Automated Refactoring
- [Day 3: One dot per line.](../exercise/day03/docs/challenge.md)
- Object Calisthenics
- Extract Method
- Law of Demeter
- [Day 7: Simplify the run method by extracting the right behavior.](../exercise/day07/docs/challenge.md)
- Reduce cognitive load by extracting methods
- More about cognitive load [here](https://speakerdeck.com/thirion/clean-code-du-point-de-vue-de-la-cognition)
- [Day 23: Refactor the code after putting it under test.](../exercise/day23/docs/challenge.md)
- Refactor Legacy Code
- Seams
- [Day 24: Write the most complicated code you can.](../exercise/day24/docs/challenge.md)
- Crappy-Driven Development
- Clean Code
20 changes: 20 additions & 0 deletions learning-paths/tdd.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
## Test-Driven Development 🔴🔵🟢
![TDD Learning path](../img/tdd.png)

- [Day 8: Using TDD rules, write a password validation program.](../exercise/day08/docs/challenge.md)
- Example Mapping
- Tests list
- Triangulation
- Baby steps
- Parameterized Tests
- Regex
- `ChatGPT` 🤪
- [Day 22: Design a diamond program using T.D.D and Property-Based Testing.](../exercise/day22/docs/challenge.md)
- Property-Based Testing
- Triangulate with PBT
- Monads
- Parse Don't Validate
- Approval Testing
- **T**est && **C**ommit || **R**evert (`TCR`)
- [Day 23: Refactor the code after putting it under test.](../exercise/day23/docs/challenge.md)
- Sprout Technique

0 comments on commit 5c3df8b

Please sign in to comment.