École 42 — Ruby & Rails Bootcamp Author

42 School
Ruby & Rails
Bootcamp Author

I designed and authored the Ruby and Ruby on Rails bootcamp ("piscine") for École 42 — from scratch. This meant writing the subject PDFs in LaTeX, designing the progressive exercise and project sequences, creating automated test suites that students couldn't cheat, and integrating everything into the 42 intranet so it could be evaluated via the peer-to-peer correction system. First-person: this was my work from first keystroke to deployment on the intranet.

2wk
Bootcamp duration
20+
Subjects authored
100%
Peer-evaluated
LaTeX
All PDFs

No teachers · peer-to-peer · project-only — the 42 model

École 42 was founded in Paris in 2013 by Xavier Niel on a radical premise: no teachers, no lectures, no mandatory schedules, open 24/7. Students progress through a curriculum of projects evaluated by their peers using a structured grading scale. The school is free and requires no diploma — the only prerequisite is passing the four-week "piscine" (swimming pool) selection process.

🏊
La Piscine — selection
A 4-week intensive immersion in C programming. Students sink or swim. Those who pass demonstrate not technical skill, but the capacity to learn under pressure — the real selection criterion.
🎮
Gamified progression
Projects earn XP (experience points). Students advance through levels on a "Holy Graph" — a visual curriculum map showing available and locked projects, like a skill tree in an RPG.
🤝
Peer evaluation (correction)
Every project is evaluated by 2–3 other students following a grading scale written by the project author. No teacher marks anything. Students teach each other during corrections.
📋
The Intranet
42's intranet is the central nervous system: student profiles, project submissions, peer correction scheduling, XP tracking, slot booking, coalition rankings, and subject PDF downloads.
🧪
Elective "piscines"
Beyond the main C curriculum, 42 offered 2-week intensive bootcamps in specific technologies — PHP/web, C++, OCaml, Unity, and Ruby/Rails. These were optional deep-dives authored by pedagogical staff.
📄
PDF subjects in LaTeX
Every 42 project is defined by a PDF subject — a precisely formatted document describing the task, constraints, allowed functions, expected outputs, and grading scale. All authored in LaTeX.
The author's role at 42
Unlike Simplon where I was a live teacher, at 42 my role was invisible infrastructure. I wasn't in the room when students worked. My voice was the PDF. My presence was the test suite. If a subject was ambiguous, students couldn't ask me — they had to interpret the document. This forced extreme precision in writing: every edge case had to be anticipated and addressed in the subject text, because nothing could be clarified in person.

The Ruby / Ruby on Rails Piscine — 2 weeks

I designed the bootcamp as a two-week intensive, structured so that a student with no Ruby knowledge could progress from puts "Hello" to a deployed Rails application. The progression was deliberately steep — the piscine model selects for people who can learn under pressure, not people who already know the material.

Ruby — the language
D1
Ruby basics
Variables, types, string manipulation, conditionals, loops. Exercises in the style of C piscine — small, precise, auto-testable.
D2
Collections & iterators
Arrays, hashes, ranges. Blocks, each, map, select, reduce. The functional heart of Ruby.
D3
Object-oriented Ruby
Classes, instance variables, methods, inheritance, attr_accessor, modules and mixins. Building a small object graph from scratch.
D4
File I/O & exceptions
Reading/writing files, begin/rescue, custom exception classes, gems and Bundler.
D5
Minitest / RSpec intro
Writing tests as first-class citizens. Students write tests for their own solutions — and discover bugs in their "passing" code.
Ruby on Rails — the framework
D6
MVC & routing
Rails new, MVC architecture, routes.rb, controllers, views. First working Rails page from scratch — no scaffolding.
D7
ActiveRecord & migrations
Generating models, migrations, associations, validations. Building a multi-model schema. PostgreSQL under the hood.
D8
Forms, CRUD, ERB
Form helpers, params, strong parameters, flash messages. Full CRUD for a resource — the classic "to-do list" milestone.
D9
Authentication & authorisation
Devise integration, session management, Pundit policies. Protected resources — some pages only for signed-in users.
D10–14
Final project
An open-ended Rails application built over 4 days, evaluated by peer correction using a grading scale I authored. Deploy to a live URL required.

20+ exercise subjects — from atomic to architectural

Each subject is a self-contained PDF that defines exactly what the student must produce, the constraints they must respect, the test cases that will be run, and the peer-evaluation grading scale. I authored all subjects for the Ruby/Rails bootcamp. The progression was designed so each subject built on — and required — the previous ones.

ex00 — hello_rubyD1
Write a Ruby script that prints "Hello, World!" and accepts a name argument. Constraints: no gems, no require. Validates: Ruby syntax, CLI arg handling, string interpolation.
basicsARGV
ex04 — my_eachD2
Re-implement Array#each, #map, #select, #reduce without calling the originals. Forces understanding of blocks and yield mechanics.
blocksyield
ex08 — oop_vehicleD3
Model a vehicle hierarchy using inheritance and mixins. Must implement Driveable and Flyable modules. Peer evaluator runs provided RSpec examples.
OOPmixinsRSpec
ex12 — miniparserD4
Build a CSV/JSON file parser using only Ruby stdlib (no gems). Reads a file, transforms data, outputs to stdout. Error handling via custom exceptions required.
file I/Oexceptions
ex15 — tdd_bankD5
Write a BankAccount class. But: tests are provided first. Students must make all tests pass — pure TDD. The twist: tests cover edge cases students wouldn't think to handle.
TDDRSpec
ex16 — rails_helloD6
Create a new Rails app. Add a route, controller, and view that displays "Hello, 42!" with the current timestamp. No scaffold. Grader verifies: file structure, route correctness, running server.
RailsMVC
ex18 — blogD7–8
Full CRUD blog: Post model with title/body/author. No scaffold. Form with validations (title ≥ 5 chars, body ≥ 20). Flash messages. Pagination. Grader checks each action individually.
ActiveRecordformsvalidations
ex19 — auth_appD9
Extend the blog with Devise auth. Posts belong to users. Only the post's author may edit/delete. Pundit policy required. Grader attempts to edit another user's post — must be rejected with 403.
DevisePundit
ex20 — final_projectD10–14
Open brief: build a Rails application of your choice. Requirements: auth, at least 3 models with relationships, tests, live deploy URL, README. Peer grading scale authored and shipped with the subject.
full-stackdeploytests

Automated tests — the invisible examiner

At 42, the test suite is part of the subject authorship. For exercises that could be auto-tested, I wrote RSpec test files that peer evaluators ran against the student's submission. For project-level evaluations, I authored detailed grading scales used during peer correction sessions. The challenge: tests had to be impossible to fake while remaining learnable from.

01
Provided RSpec test files
For language exercises (days 1–5), I shipped RSpec test files with each subject PDF. Students ran rspec ex04_spec.rb against their code. Green = pass, red = fail. I designed tests to be instructive: failing output included the expected vs. actual value, pointing students toward the bug without solving it for them.
RSpec
02
Edge-case engineering
The most important tests were the ones students hadn't thought to write themselves: empty arrays, nil inputs, integer overflow, Unicode strings, concurrent access. I deliberately included 2–3 edge-case tests per exercise that only careful readers of the subject would anticipate — rewarding precision over guessing.
edge cases
03
Behavioural tests for Rails projects
For Rails exercises, I used Capybara + RSpec feature specs simulating a browser: "click the delete button on another user's post — expect 403". This tested Pundit enforcement, not just the presence of a policy file. Students couldn't fake it by simply creating the policy file without implementing it correctly.
Capybara
04
Peer grading scales (barèmes)
For project-level evaluation, I wrote structured grading scales: a sequence of questions and checks the peer evaluator must perform in order, each worth a fixed number of points. Scales were designed to be executable by a student who had completed the same exercise — not by a Ruby expert. Binary checks ("does the app start? does this route return 200?") kept evaluation consistent.
barème
05
Anti-cheating design
A known risk at 42: students copy each other's code. I designed exercises where slight variations in implementation (variable names, method structure) would still pass tests, but copy-paste of a classmate's code would fail on the randomised inputs I embedded in the test runner. The RSpec seed was different on every run.
integrity
The hardest test to write
The most technically challenging test I designed was for the my_each exercise — verifying that students hadn't called the original Array#each internally. The naive approach (checking the source file for "each") was trivially bypassed. My solution: I monkey-patched Array#each to raise an exception before running the student's code. If their implementation called the original, it exploded. If it was a genuine reimplementation, it passed. This kind of adversarial test design taught me more about Ruby's object model than years of professional use had.

Every subject PDF was written in LaTeX

The 42 pedagogical team required all subject PDFs to be authored in LaTeX, using a custom 42 document class that produced the school's signature dark-themed, monospace-heavy format. This was non-negotiable: LaTeX ensured consistent formatting, version-controlled source, and a professional output that matched every other subject in the 42 curriculum. I wrote all 20+ Ruby/Rails subjects in LaTeX.

A typical subject document structure in LaTeX:

% École 42 — Ruby Piscine subject \documentclass{42-subject} \title{Piscine Ruby — Day 01} \subtitle{ex04 — My Each} \author{[author]} \version{1.0} \begin{document} \maketitle \chapter{Instructions} \begin{itemize} \item Only turn in the asked files. \item \textbf{Do not use the standard Array methods} internally. \item Your functions must pass the provided RSpec tests. \end{itemize} \chapter{Exercise 04 — my\_each} \begin{42infobox} Turn-in directory: ex04/ Files to turn in: my\_each.rb Allowed functions: none \end{42infobox} Reimplement the following methods on \texttt{Array} without using the originals: \begin{itemize} \item \texttt{my\_each} \item \texttt{my\_map} \item \texttt{my\_select} \item \texttt{my\_reduce} \end{itemize} \end{document}
Why LaTeX specifically
42's subjects needed to be: version-controlled (Git diff-able), consistently formatted across hundreds of subjects from different authors, printable as high-quality PDFs, and able to render code in monospace with syntax highlighting. LaTeX with a custom class handled all of this in a single source format. Word or Markdown would have produced inconsistent output across the curriculum.
42 document classcustom class
Code listings (lstlisting)syntax highlight
Custom environments42infobox, 42warning
Multi-chapter structurechapters, sections
Git-based versioningv1.0 → v1.3
PDF/A output for archivepdflatex

Deploying subjects onto the 42 intranet

Writing the subject was only half the work. For the bootcamp to run on the 42 intranet, each project needed to be registered in the intranet system: subject PDF uploaded, grading scale encoded, XP value set, peer evaluation slots configured, and the project linked into the correct sequence of the Ruby piscine curriculum graph. The intranet is the infrastructure — without this step, the subject doesn't exist for students.

01
PDF compiled and validated
LaTeX source compiled to PDF via pdflatex. Checked against the 42 PDF standard: correct document class, version number, author metadata, no missing fonts. Stored in the pedagogical Git repository.
LaTeX → PDF
02
Project created on intranet
Using the 42 intranet admin interface: create project record, set name, description, difficulty, XP value, allowed retry count. Upload the compiled PDF — this is what students see when they open the subject.
intranet admin
03
Grading scale (barème) encoded
The peer evaluation grading scale is entered directly in the intranet: a sequence of checkpoints, each with a point value and binary/gradated answer. The intranet generates the correction form that evaluators use during peer evaluation — my written barème became interactive form fields.
barème form
04
Linked into the curriculum graph
The 42 "Holy Graph" is a directed dependency graph of projects. I linked each Ruby piscine project into the correct sequence: ex00 → ex04 → ex08…. Dependencies enforced by the intranet — students can't attempt day 3 exercises before completing day 1.
Holy Graph
05
Correction slot configuration
Set the number of peer corrections required per project (typically 2–3), the time window for corrections, and whether the project was "solo" or "group". The intranet's slot system auto-assigns evaluator/evaluatee pairs.
peer system
06
Test cohort run
Before general release, a test cohort of 5–10 students ran the full bootcamp. I reviewed the corrections log, identified subjects where students systematically scored low (ambiguous wording) or high (tests too easy), and iterated on the LaTeX source + intranet grading scale accordingly.
iteration
Intranet as product
The 42 intranet is itself a Rails application — which meant that as a Ruby/Rails practitioner authoring content for it, I had an interesting dual relationship with the platform. Understanding how Rails structured its data helped me design subjects that mapped cleanly to the intranet's project/skill/correction data model. The grading scale encoding in particular benefited from thinking about it as ActiveRecord-like structured data rather than a freeform document.

What building this bootcamp taught me

Designing a complete curriculum from scratch — subjects, tests, grading scales, intranet integration — was one of the most demanding and rewarding technical writing projects I have undertaken. The constraints of the 42 model forced a quality of precision that normal developer writing never requires.

✍️
Writing as product design
A subject PDF at 42 is a product — it has users (students), it has requirements (the curriculum), and it has bugs (ambiguities). LaTeX forces precision, but the real discipline was anticipating misreadings.
🧠
Depth of language mastery
Designing the my_each anti-cheating test required a deeper understanding of Ruby's metaprogramming and object model than any production app I had written. Adversarial test design is the most effective form of language study.
📐
LaTeX as a professional tool
LaTeX is verbose and unforgiving, but the output quality and version-control compatibility make it the right tool for technical documentation at scale. I became genuinely fluent — not just proficient.
🔄
Feedback loops matter
The test cohort iteration cycle was essential. No amount of pre-emptive review catches everything. The real curriculum was the one that survived contact with actual students — not the one I wrote in isolation.
🌐
42's global reach
Once deployed to the 42 intranet, subjects are available to all campuses in the 42 Network — 50+ campuses across 30 countries. The Ruby piscine I authored ran in Paris, Lyon, Madrid, Tokyo, São Paulo.
🏫
Teaching without being present
The most counterintuitive lesson: at 42, the best pedagogical outcome is for students to never need you. A well-designed subject is self-sufficient. The goal of authorship is to make the author unnecessary.
Personal reflection
The combination of these three experiences — Cashpad backend engineer, Simplon live teacher, 42 bootcamp author — gave me a complete perspective on Ruby and Rails as both a technical and a pedagogical artefact. Each context demanded a different kind of mastery: production craft at Cashpad, human communication at Simplon, and documentary precision at 42. I find that fluency across all three registers — building, teaching, and writing — is what distinguishes a senior from a senior senior developer.
École 42 — Ruby & Rails Bootcamp Author
Subject design · LaTeX · Automated tests · Intranet integration · 50+ campuses worldwide
École 42 Ruby on Rails LaTeX RSpec · Capybara
Menu