Contexte
J’ai étudié à l’École 42, reconnue pour sa pédagogie intensive, axée sur les projets et le pair-à-pair. Au cours du cursus du tronc commun, j’ai réalisé un large éventail de projets de programmation bas niveau et système.
Faits marquants
Bibliothèques de base & utilitaires
Création des outils fondamentaux utilisés tout au long du cursus.
- Libft : Ré-implémentation des fonctions standards de la bibliothèque C (
strlen,strcat,atoi, etc.) et des listes chaînées. - get_next_line : Une fonction qui lit un descripteur de fichier ligne par ligne, gérant les variables statiques et la gestion de la mémoire tampon.
- printf : Re-création du comportement de la fonction standard
printfutilisant des arguments variadiques.
Algorithmes & concurrence
- push_swap : Développement d’un algorithme de tri hautement optimisé pour des structures de données à double pile avec un ensemble limité d’opérations.
- philosophers : Le problème classique de concurrence des “Dîners des Philosophes”, implémenté avec
pthreadet des mutex pour gérer les accès concurrents aux données et les interblocages.
Systèmes & architecture
- minitalk : Un programme de communication client/serveur transmettant des données en utilisant uniquement les signaux UNIX (
SIGUSR1etSIGUSR2). - born2beroot : Projet d’administration système. Configuration d’une machine virtuelle Debian sécurisée avec un partitionnement strict, LVM, des configurations sudo, une politique de mots de passe stricte et un pare-feu UFW.
- minishell : Recréation d’un shell de type bash en C. Implémentation d’une analyse de commandes basée sur l’AST, des processus (
fork,execve), des descripteurs de fichiers et des pipes. - netpractice : Exercices de configuration réseau et de routage (adressage IP, sous-réseaux, commutateurs, tables de routage).
Infographie
- so_long : Un petit jeu 2D axé sur les textures, les sprites et les mécaniques de jeu de base utilisant MiniLibX.
- cub3d (Backrooms Edition) : Un moteur de jeu 3D utilisant le raycasting (algorithme DDA) et le mappage de texture. Création d’une expérience d’horreur “Backrooms” personnalisée en utilisant la bibliothèque MLX42 réécrite. Ajout de fonctionnalités avancées au-delà des exigences de base : audio, ennemis, jumpscares, et une quête de style Slender-man à l’intérieur du labyrinthe jaune monochrome sans fin.
Programmation orientée objet (C++)
- cppmodules (00-09) : Une plongée en profondeur dans les fonctionnalités du C++98 (gestion de la mémoire, polymorphisme, templates, classes abstraites).
- ft_containers : Ré-implémentation complète des conteneurs de la bibliothèque standard de modèles (STL) du C++ comme
vector,mapetstack, incluant les itérateurs et les arbres Rouge-Noir.
Infrastructure finale & projets full-stack
- webserv (Projet Solo) : Un serveur HTTP/1.1 non bloquant entièrement fonctionnel écrit en C++98 de A à Z en utilisant
epoll/select.- Méthodes supportées : GET, HEAD, POST, DELETE.
- Test de charge avec
siegepour supporter 1000 connexions simultanées avec 99,9% de disponibilité. - Gestion des téléchargements multipart/form-data et analyse complète de la configuration similaire à Nginx (blocs location,
autoindex,cgi_pass, redirections). - Inclusion d’un testeur d’intégration personnalisé en Python pour la validation automatisée (CGI, codes d’état, téléchargements).
- inception : Pile LEMP complète utilisant Docker Compose, construction d’images Alpine personnalisées pour Nginx, MariaDB et WordPress.
- transcendance : Le projet final de 42. Un jeu de Pong multijoueur en temps réel full-stack (Vue.js, NestJS, WebSocket). (Voir l’étude de cas dédiée pour plus de détails).
Autres étapes clés
- Piscine : Le bootcamp intensif initial de programmation en C d’un mois.
- exam : Scripts personnalisés et environnements de pratique pour les examens rigoureux sur machine de 42.
Philosophie des projets
La particularité de l’École 42 est que la note de passage minimale (la correction) est relativement simple à atteindre. L’état d’un projet n’a pas besoin d’être incroyablement complexe pour être validé. Cependant, trouvant parfois les sujets de base assez stricts, je me suis toujours fait un point d’honneur d’ajouter de la créativité, de la complexité technique et des idées originales bien au-delà des exigences initiales dans chacun de mes rendus.
L’Impact 42
Au-delà des langages spécifiques, 42 m’a appris comment apprendre. Face à une nouvelle technologie, une API mal documentée ou un bug complexe, j’ai la méthodologie et la résilience nécessaires pour analyser le problème, lire le code source ou les RFCs, et construire une solution à partir de zéro.
Lien
Context
I studied at École 42, known for its intensive, project-based, and peer-to-peer pedagogy. During the common core curriculum, I completed a wide range of low-level and systems programming projects.
Key highlights
Core libraries & utilities
Creation of foundational tools used throughout the curriculum.
- Libft: Re-implementation of standard C library functions (
strlen,strcat,atoi, etc.) and linked lists. - get_next_line: A function that reads a file descriptor line by line, handling static variables and buffer management.
- printf: Re-creation of the standard
printfbehavior using variadic arguments.
Algorithms & concurrency
- push_swap: Development of a highly optimized sorting algorithm for dual-stack data structures with a limited set of operations.
- philosophers: The classic “Dining Philosophers” concurrency problem, implemented with
pthreadand mutexes to manage concurrent data access and deadlocks.
Systems & architecture
- minitalk: A client/server communication program transmitting data using only UNIX signals (
SIGUSR1andSIGUSR2). - born2beroot: System administration project. Setup of a secure Debian virtual machine with strict partitioning, LVM, sudo configurations, a strict password policy, and a UFW firewall.
- minishell: Recreation of a bash-like shell in C. Implementation of AST-based command parsing, processes (
fork,execve), file descriptors, and pipes. - netpractice: Network configuration and routing exercises (IP addressing, subnets, switches, routing tables).
Computer graphics
- so_long: A small 2D game focusing on textures, sprites, and basic game mechanics using MiniLibX.
- cub3d (Backrooms Edition): A 3D game engine using raycasting (DDA algorithm) and texture mapping. Created a custom “Backrooms” horror experience using the rewritten MLX42 library. Added advanced features beyond the basic requirements: audio, enemies, jumpscares, and a Slender-man style quest inside the endless monochrome yellow maze.
Object-oriented programming (C++)
- cppmodules (00-09): A deep dive into C++98 features (memory management, polymorphism, templates, abstract classes).
- ft_containers: Complete re-implementation of C++ Standard Template Library (STL) containers like
vector,map, andstack, including iterators and Red-Black trees.
Final infrastructure & full-stack projects
- webserv (Solo Project): A fully functional non-blocking HTTP/1.1 server written in C++98 from scratch using
epoll/select.- Supported methods: GET, HEAD, POST, DELETE.
- Load testing with
siegeto support 1000 concurrent connections with 99.9% uptime. - Multipart/form-data upload handling and comprehensive Nginx-like configuration parsing (location blocks,
autoindex,cgi_pass, redirects). - Included a custom Python integration tester for automated validation (CGI, status codes, uploads).
- inception: Complete LEMP stack using Docker Compose, building custom Alpine images for Nginx, MariaDB, and WordPress.
- transcendance: The final 42 project. A real-time multiplayer full-stack Pong game (Vue.js, NestJS, WebSocket) (See the dedicated case study for more details).
Other milestones
- Piscine: The initial one-month intensive C programming bootcamp.
- exam: Custom scripts and practice environments for the rigorous 42 machine exams.
Project philosophy
The unique aspect of École 42 is that the minimum passing grade (the defense/correction) is relatively simple to reach. A project’s state doesn’t have to be insanely complicated to pass. However, finding the basic subjects somewhat dry, I always made it a point to inject creativity, technical complexity, and interesting ideas far beyond the initial requirements into every single one of my projects.
The 42 Impact
Beyond specific languages, 42 taught me how to learn. Faced with a new technology, a poorly documented API, or a complex bug, I have the methodology and resilience necessary to analyze the problem, read the source code or RFCs, and build a solution from scratch.