Skip to content

Commit 5c3df8b

Browse files
committed
add learning paths
1 parent 2b4f653 commit 5c3df8b

File tree

11 files changed

+154
-25
lines changed

11 files changed

+154
-25
lines changed

README.md

Lines changed: 33 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -46,30 +46,30 @@ To facilitate the communication around challenges you can join us on `Discord` b
4646
## Challenges - 2023
4747
Here are the different challenges :
4848

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

7575
### Solutions
@@ -99,7 +99,15 @@ A solution proposal will be published here every day during the `Advent Of Craft
9999
- [Day 22: Design a diamond program using T.D.D and Property-Based Testing.](solution/day22/docs/step-by-step.md)
100100
- [Day 23: Refactor the code after putting it under test.](solution/day23/docs/step-by-step.md)
101101
- [Day 24: Write the most complicated code you can.](solution/day24/docs/step-by-step.md)
102-
102+
103+
## Learning paths 🚀
104+
We have designed several `learning paths` based on the challenges that you can follow if you want to deep dive into a given concept:
105+
- [Refactoring 🚀](learning-paths/refactoring.md)
106+
- [Clean Testing 🧼](learning-paths/clean-testing.md)
107+
- [Test-Driven Development 🔴🔵🟢](learning-paths/tdd.md)
108+
- [Design 🏛](learning-paths/design.md)
109+
- [Functional Programming 🌋](learning-paths/functional-programming.md)
110+
103111
## Contributors
104112

105113
<table>

img/clean-testing.png

546 KB
Loading

img/design.png

694 KB
Loading

img/functional-programming.png

351 KB
Loading

img/refactoring.png

737 KB
Loading

img/tdd.png

844 KB
Loading

learning-paths/clean-testing.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
## Clean Testing 🧼
2+
![Clean Testing Learning path](../img/clean-testing.png)
3+
4+
- [Day 4: Identify the behavior under test and rewrite the tests.](../exercise/day04/docs/challenge.md)
5+
- Focus tests on behaviors (not data)
6+
- Tests List
7+
- Avoid duplication (Clean Code applied on tests)
8+
- [Day 6: Parameterize your tests.](../exercise/day06/docs/challenge.md)
9+
- Parameterized tests
10+
- [Day 13: Find a way to eliminate the irrelevant, and amplify the essentials of those tests.](../exercise/day13/docs/challenge.md)
11+
- Test Data Builder
12+
- `DSL` for our tests
13+
- [Day 15: Put a code under tests.](../exercise/day15/docs/challenge.md)
14+
- Approval testing
15+
- Combination testing
16+
- Work effectively with legacy code
17+
- [Day 17: Design one test that has the impact of thousands.](../exercise/day17/docs/challenge.md)
18+
- Property-Based Testing
19+
- From `Parameterized tests` to `Property-Based tests`
20+
- [Day 21: Refactor the tests and production code to Output-Based tests.](../exercise/day21/docs/challenge.md)
21+
- Styles of Tests
22+
- State-Based
23+
- Output-Based
24+
- Communication-Based
25+
- Refactor to Output-Based tests
26+
- Functional Core, Imperative Shell
27+
- [Day 23: Refactor the code after putting it under test.](../exercise/day23/docs/challenge.md)
28+
- Code coverage
29+
- Mutation Testing

learning-paths/design.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
## Design 🏛️
2+
![Design Learning path](../img/design.png)
3+
4+
- [Day 9: Fix the code.](../exercise/day09/docs/challenge.md)
5+
- Command Query Separation
6+
- Pure Function
7+
- [Day 11: Gather a dependency freshness metric.](../exercise/day11/docs/challenge.md)
8+
- Dependency Freshness
9+
- LibYear
10+
- Team Rules
11+
- [Day 12: Make your code open for extension.](../exercise/day12/docs/challenge.md)
12+
- S.O.L.I.D Principles
13+
- C.U.P.I.D
14+
- Open-Closed Principle
15+
- [Day 18: Automatically detect Linguistic Anti-Patterns (LAP).](../exercise/day18/docs/challenge.md)
16+
- Linguistic Anti-Patterns
17+
- Architecture Unit Tests
18+
- Team Rules
19+
- [Day 20: No more exceptions in our domain.](../exercise/day20/docs/challenge.md)
20+
- Hollywood principle / continuation
21+
- Constrain inputs
22+
- Referential transparency
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
## Functional Programming 🌋
2+
![FP Learning path](../img/functional-programming.png)
3+
4+
- [Day 5: No "for" loop authorized.](../exercise/day05/docs/challenge.md)
5+
- Use Collection Functions
6+
- [Day 10: Dot not use "if" statement.](../exercise/day10/docs/challenge.md)
7+
- Pure Function
8+
- Functional Map (function registration)
9+
- Object Calisthenics
10+
- [Day 14: Do not use exceptions anymore.](../exercise/day14/docs/challenge.md)
11+
- Parse Don't Validate
12+
- Use Monads instead of Exceptions
13+
- Extend Output
14+
- Referential Transparency
15+
- [Day 16: Make this code immutable.](../exercise/day16/docs/challenge.md)
16+
- Immutability
17+
- Use `T.D.D` to refactor existing code
18+
- Strangler Pattern
19+
- [Day 19: Loosing up dead weight.](../exercise/day19/docs/challenge.md)
20+
- Exceptions vs Errors
21+
- Use error instead of exceptions
22+
- [Day 23: Refactor the code after putting it under test.](../exercise/day23/docs/challenge.md)
23+
- Use Monads
24+
- Referential Transparency

learning-paths/refactoring.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
## Refactoring 🚀
2+
![Refactoring Learning path](../img/refactoring.png)
3+
4+
- [Day 1: Make your production code easier to understand.](../exercise/day01/docs/challenge.md)
5+
- Encapsulate Conditionals
6+
- Extract Method
7+
- Automated Refactoring
8+
- [Day 2: One level of indentation.](../exercise/day02/docs/challenge.md)
9+
- Object Calisthenics
10+
- Invert If
11+
- Extract Method
12+
- Guard
13+
- Automated Refactoring
14+
- [Day 3: One dot per line.](../exercise/day03/docs/challenge.md)
15+
- Object Calisthenics
16+
- Extract Method
17+
- Law of Demeter
18+
- [Day 7: Simplify the run method by extracting the right behavior.](../exercise/day07/docs/challenge.md)
19+
- Reduce cognitive load by extracting methods
20+
- More about cognitive load [here](https://speakerdeck.com/thirion/clean-code-du-point-de-vue-de-la-cognition)
21+
- [Day 23: Refactor the code after putting it under test.](../exercise/day23/docs/challenge.md)
22+
- Refactor Legacy Code
23+
- Seams
24+
- [Day 24: Write the most complicated code you can.](../exercise/day24/docs/challenge.md)
25+
- Crappy-Driven Development
26+
- Clean Code

learning-paths/tdd.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
## Test-Driven Development 🔴🔵🟢
2+
![TDD Learning path](../img/tdd.png)
3+
4+
- [Day 8: Using TDD rules, write a password validation program.](../exercise/day08/docs/challenge.md)
5+
- Example Mapping
6+
- Tests list
7+
- Triangulation
8+
- Baby steps
9+
- Parameterized Tests
10+
- Regex
11+
- `ChatGPT` 🤪
12+
- [Day 22: Design a diamond program using T.D.D and Property-Based Testing.](../exercise/day22/docs/challenge.md)
13+
- Property-Based Testing
14+
- Triangulate with PBT
15+
- Monads
16+
- Parse Don't Validate
17+
- Approval Testing
18+
- **T**est && **C**ommit || **R**evert (`TCR`)
19+
- [Day 23: Refactor the code after putting it under test.](../exercise/day23/docs/challenge.md)
20+
- Sprout Technique

0 commit comments

Comments
 (0)