Small daily exercises to make you fluent at writing and reading code. Python first; C, C++, Rust, and Go on the roadmap.
Project description
bytelings
Small daily exercises that make you fluent at writing and reading code.
Inspired by Rustlings. Built
to make you reach for dict instead of looking it up; write a try
without thinking about it; recognize a sliding-window problem from one
glance. Python today — C, C++, Rust, and Go on the roadmap.
Install
pip install bytelings
# or
uv pip install bytelings
Quickstart
mkdir my-bytelings && cd my-bytelings
bytelings init # copies the curriculum into ./curriculum/
bytelings welcome # one-minute intro (optional)
bytelings # start the watcher — save files, see green panels
That's it. Open curriculum/phase-1-python-core/module-01-setup-and-values/day-001-*/
in your editor and start fixing the broken bits.
How it works
Each day teaches one concept in 5 rungs:
- Read —
concept.md, written in one of 8 rotating storytelling styles (story / pain-point / compare / trace / build-it / metaphor / code-tour / detective). Same shape every day = autopilot. Different shape every day = forced re-engagement. - Fluency drill — fix a broken file. Tests turn green when you do.
- Guided implement — fill a function body, signature pre-built.
- Solo implement — no scaffold, hidden tests, you write it cold.
- Apply — a tiny project chunk that reuses what you just wrote.
The watcher (bytelings) runs pytest on every save and advances you
through the rungs automatically. On rung 5 of day N, you're auto-ported
to rung 1 of day N+1.
After every 5 modules, a 3-day phase project combines all the phase's concepts in a real build (a contacts manager, an async website snapshotter, a parallel log analyzer, a tiny in-memory database, a maze pathfinder). The whole curriculum ends in an 8-day capstone where you ship a real CLI tool.
Commands
| Command | What |
|---|---|
bytelings init |
Copy the bundled curriculum into ./curriculum/ |
bytelings |
Start the watcher (the main loop). Ctrl-C to exit. |
bytelings today |
Print what you're working on now |
bytelings progress |
Streak + completion bar |
bytelings hint [DAY] |
Show today's (or named day's) concept page |
bytelings run [DAY] |
Run current rung's tests once (no watch) |
bytelings list |
List every day with completion markers |
bytelings done |
Manually mark current rung done |
bytelings next |
Skip to next rung (escape hatch) |
bytelings reset DAY |
Reset a specific day's progress |
bytelings welcome |
Print the orientation message |
What's in the Python track
135 days, 6 phases, 27 modules:
- Python Core Fluency (31d) — values, strings, lists, dicts, functions, decorators, type hints
- Pythonic Tools & I/O (27d) — comprehensions, async, dataclasses, classes, context managers, files
- Quality & Production-Grade (21d) — errors, pytest, logging, profiling, concurrency choice
- Data Structures from Scratch (19d) — stacks, linked lists, trees, heaps, hash tables
- Algorithms (25d) — recursion, sorting, graphs, DP, greedy, backtracking
- Packaging, AST, Capstone (12d) —
uvpackaging, AST, ship a real CLI
Phases 1–5 each end in a 3-day phase project. Phase 6 is the 8-day capstone.
Roadmap
- Python — shipped (135 days)
- C — planned (memory, pointers, undefined behavior intuition)
- C++ — planned (RAII, templates, modern C++)
- Rust — planned (ownership, lifetimes, error handling — yes, on top of Rustlings, with a different ladder)
- Go — planned (interfaces, goroutines, the philosophy)
The runner is language-agnostic. Each track ships its own curriculum
and test driver under the same bytelings UX.
Why this exists
Most curricula teach concepts in blocked order: all syntax, then all data structures, then all algorithms. Research consistently shows interleaved practice (mix topics each day) produces dramatically better long-term retention.
And most courses skip the bottom rungs of any concept ladder — they parachute you onto "implement merge sort from scratch" without first giving you the worked example, the broken-file drill, or the scaffolded version. That's why so many self-taught engineers feel comfortable reading code but freeze when asked to write something non-trivial.
bytelings is the curriculum I wished existed when I was decent at Python but still reaching for syntax references daily.
Acknowledgements
This project is deeply inspired by
Rustlings (carol-nichols
& contributors). The "save → watch → green panel" loop, the init /
hint / reset / run command shape, and the "small exercises in a
single concept" philosophy all come straight from there. If you do
Rust, do Rustlings first; bytelings borrows their playbook for other
languages.
Other inspirations: Codewars and 100 Days of Python.
License
MIT. Curriculum content is also MIT — fork it, remix it, build your own bytelings track for any language you want.
Contributing
Bug reports, content fixes, and new-language curriculum tracks all
welcome. The runner is small (~1000 LOC); adding a new language means
shipping a new _curriculum/<lang>/ tree and a <lang>_test.py
discriminator. See CONTRIBUTING.md (TBA).
Bytes don't lie. The fluency comes from the reps.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file bytelings-0.1.0.tar.gz.
File metadata
- Download URL: bytelings-0.1.0.tar.gz
- Upload date:
- Size: 513.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ef6d89e76b9ea64a00a70c8e0f0cdaa628cf1b2d0346960ec4fa3d8d104de187
|
|
| MD5 |
5e0588176167fc1948a942846a32ba25
|
|
| BLAKE2b-256 |
ea6fea29ba530d4a4d2924f61be799b824f2db2de6abc854911dfee486eaead0
|
File details
Details for the file bytelings-0.1.0-py3-none-any.whl.
File metadata
- Download URL: bytelings-0.1.0-py3-none-any.whl
- Upload date:
- Size: 2.1 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
25bb4a32930adab27f2d8073f86322326c91cf250769ead8033b8df5b12f7821
|
|
| MD5 |
d3b8d530442855c37bb1d59a9b12ac90
|
|
| BLAKE2b-256 |
d234e483854cf29f10a011a8e7428da2df756c28d94d7407419ec9173bdc90a1
|