Skip to content

Commit 17268c8

Browse files
committed
chore: add pedagogical framework and new issues
1 parent 79896bc commit 17268c8

File tree

2 files changed

+132
-4
lines changed

2 files changed

+132
-4
lines changed

CHANGELOG.md

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,13 @@
22

33
## [0.2.1](https://github.com/zoedsoupe/exlings/compare/v0.2.0...v0.2.1) (2025-10-14)
44

5-
65
### Bug Fixes
76

8-
* duplicated exercises ([#6](https://github.com/zoedsoupe/exlings/issues/6)) ([3f74f9d](https://github.com/zoedsoupe/exlings/commit/3f74f9d8c5e5a147b5ba1e8ad29c2f5650900ccf))
9-
7+
- duplicated exercises ([#6](https://github.com/zoedsoupe/exlings/issues/6)) ([3f74f9d](https://github.com/zoedsoupe/exlings/commit/3f74f9d8c5e5a147b5ba1e8ad29c2f5650900ccf))
108

119
### Miscellaneous Chores
1210

13-
* readme/formatting ([5bd1901](https://github.com/zoedsoupe/exlings/commit/5bd1901e8ddb1b34f8c068b53fecb74efa8dc035))
11+
- readme/formatting ([5bd1901](https://github.com/zoedsoupe/exlings/commit/5bd1901e8ddb1b34f8c068b53fecb74efa8dc035))
1412

1513
## [0.2.0](https://github.com/zoedsoupe/exlings/compare/v0.1.0...v0.2.0) (2025-10-13)
1614

CONTRIBUTING.md

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,136 @@ defmodule ExerciseXXXTest do
123123
end
124124
```
125125

126+
## Pedagogical Philosophy
127+
128+
exlings follows a proven pedagogical approach inspired by rustlings and ziglings:
129+
130+
- **Small, Broken Programs**: Each exercise is a small program with intentional gaps (marked with ???) that learners must fix
131+
- **Self-Contained Learning**: All information needed to solve an exercise is provided in the exercise's comments
132+
- **Progressive Difficulty**: Exercises build on previous concepts in a carefully planned sequence
133+
- **Learning by Doing**: Students learn through hands-on problem-solving, not passive reading
134+
- **Immediate Feedback**: The exercise runner provides clear, helpful error messages
135+
136+
### Exercise Design Rules
137+
138+
When creating exercises, follow these principles:
139+
140+
1. **Single Focus**: Each exercise teaches ONE main concept clearly
141+
2. **Self-Contained**: Include all necessary information in comments
142+
3. **Clear Examples**: Provide 2-3 worked examples demonstrating the concept
143+
4. **??? Placeholders**: Use ??? to mark where students need to write code
144+
5. **Expected Output**: Show what the correct output should be in comments
145+
6. **Progressive Difficulty**: Build on concepts from previous exercises
146+
7. **No Emojis**: Keep formatting simple and professional
147+
8. **Idiomatic Code**: Demonstrate Elixir best practices
148+
149+
### Topic Progression
150+
151+
exlings follows a carefully structured progression from basics to advanced topics:
152+
153+
#### Levels 1-6: Foundations (Exercises 001-027) - COMPLETED
154+
155+
- **Level 1**: Basics (hello world, variables, IO)
156+
- **Level 2**: Data Types (numbers, atoms, booleans, strings, tuples)
157+
- **Level 3**: Functions (basic functions, anonymous functions, capture syntax, higher-order functions)
158+
- **Level 4**: Pattern Matching (basics, lists, multiple clauses, guards)
159+
- **Level 5**: Control Flow (if/unless, case, cond)
160+
- **Level 6**: Collections (maps, keyword lists, structs)
161+
162+
**Key Learning Outcomes**: Students understand Elixir syntax, basic data types, functions, pattern matching, and simple data structures.
163+
164+
#### Levels 7-12: Functional Programming (Exercises 028-055) - PLANNED
165+
166+
- **Level 7**: Enum Module (map, filter, reduce, each, find, all/any, sort, group_by)
167+
- 8 exercises covering the most important enumerable operations
168+
- Foundation for functional programming style
169+
170+
- **Level 8**: Recursion (basic, list patterns, accumulators, tail call optimization)
171+
- 5 exercises teaching how Elixir works under the hood
172+
- Essential for understanding functional programming
173+
174+
- **Level 9**: Comprehensions (basic syntax, filters, multiple generators)
175+
- 3 exercises on syntactic sugar for transforming enumerables
176+
- More concise alternative to Enum operations
177+
178+
- **Level 10**: Strings & Binaries (String module, interpolation, binaries, charlists)
179+
- 4 exercises on text processing and binary data
180+
- Understanding Elixir's string vs binary distinction
181+
182+
- **Level 11**: Range & Stream (ranges, lazy evaluation, stream composition)
183+
- 3 exercises on memory-efficient data processing
184+
- Introduction to lazy evaluation
185+
186+
- **Level 12**: Module Organization (nesting, import/alias, require, defp, attributes)
187+
- 5 exercises on structuring larger programs
188+
- Best practices for code organization
189+
190+
**Key Learning Outcomes**: Students master functional programming patterns, understand recursion, work efficiently with collections, and organize code professionally.
191+
192+
#### Levels 13-18: Practical Development (Exercises 056-077) - PLANNED
193+
194+
- **Level 13**: IO & File System (IO operations, file read/write, streaming, Path module)
195+
- 4 exercises on practical file and console operations
196+
- Real-world data input/output
197+
198+
- **Level 14**: Error Handling (error tuples, raise/rescue, catch/throw, with statement)
199+
- 5 exercises on robust error handling patterns
200+
- Elixir's philosophy of "let it crash" vs defensive programming
201+
202+
- **Level 15**: Protocols (understanding, implementing, String.Chars example)
203+
- 3 exercises on polymorphism in Elixir
204+
- How to make custom types work with existing functions
205+
206+
- **Level 16**: Behaviours (understanding, implementing, foundation for GenServer)
207+
- 3 exercises on defining contracts between modules
208+
- Preparation for OTP concepts (but no processes yet)
209+
210+
- **Level 17**: Sigils (~r, ~s/~w, ~c, custom sigils)
211+
- 3 exercises on Elixir's special syntax for literals
212+
- Understanding when and how to use sigils
213+
214+
- **Level 18**: Mix & Testing (project structure, ExUnit basics, assertions, documentation)
215+
- 4 exercises on professional development workflow
216+
- Testing best practices and documentation with @doc/@moduledoc
217+
218+
**Key Learning Outcomes**: Students can build real applications, handle errors properly, use advanced language features, and follow professional development practices.
219+
220+
#### Future Topics (Exercises 078+) - NOT YET PLANNED
221+
222+
These advanced topics will be covered after all functional and language fundamentals are mastered:
223+
224+
- **Processes**: spawn, send/receive, process linking, monitoring
225+
- **OTP Basics**: GenServer, Supervisors, Applications
226+
- **Advanced OTP**: Task, Agent, DynamicSupervisor
227+
- **Concurrency Patterns**: ETS, Registry, PubSub
228+
- **Metaprogramming**: Macros, quote/unquote, AST manipulation
229+
- **Advanced Protocols**: Enumerable, Collectable, Inspect
230+
- **NIFs and Ports**: Interfacing with native code
231+
- **Distribution**: Node connections, distributed Elixir
232+
233+
**Rationale**: Concurrency and OTP are complex topics that require solid understanding of Elixir's functional foundation. Introducing them too early would overwhelm learners.
234+
235+
### Proposing New Exercises
236+
237+
Use the issue template at `.github/ISSUE_TEMPLATE/exercise.md` to propose new exercises. Each proposal should include:
238+
239+
- **Topic and Level**: Where it fits in the progression
240+
- **Difficulty**: 1 (easy), 2 (medium), or 3 (hard)
241+
- **Prerequisites**: What students must know first
242+
- **Learning Objectives**: What students will learn (be specific)
243+
- **Key Concepts**: Main ideas covered
244+
- **Exercise Structure**: How you'll teach the concept
245+
- **Hints**: Guidance for solving the exercise
246+
- **References**: Links to official Elixir documentation
247+
248+
New exercises should:
249+
250+
- Fill gaps in the current progression
251+
- Build logically on previous exercises
252+
- Follow the same pedagogical style as existing exercises
253+
- Include clear, self-contained explanations
254+
- Provide helpful examples and expected output
255+
126256
## Adding New Exercises
127257

128258
When adding a new exercise:

0 commit comments

Comments
 (0)