This repository contains my progress and projects from the 42 Cursus.
42 is a global software engineering school that offers a unique educational model:
- No Teachers & No Classes: Learning is entirely peer-to-peer and project-based.
- Gamified Curriculum: Students progress by completing projects, earning experience points (XP), and leveling up.
- The Norm: Strict coding standards (Norminette) must be followed for all C projects. It enforces rules like a maximum of 25 lines per function, no
forloops, and strict variable declaration rules.
The core curriculum heavily focuses on low-level programming to build a strong foundation before moving on to higher-level concepts. Key areas include:
- C Programming: Memory management (malloc/free), pointers, linked lists, and data structures.
- Algorithms: Sorting algorithms, pathfinding, and optimization.
- Unix / System Programming: Multi-threading, processes (forks), pipes, signal handling, and file I/O.
- Graphics: Raycasting, wireframe rendering, and handling window events using the MiniLibX.
- System Administration: Virtual machines, Docker, system setup, and network configuration.
Here is an overview of the projects generally found in the 42 Core Curriculum:
- Libft - Creating a custom C library consisting of standard libc functions and additional utility functions (linked lists, string manipulations).
- ft_printf - A custom implementation of the standard C
printffunction, learning about variadic arguments. - get_next_line - A function that reads and returns a single line from a file descriptor, teaching static variables and buffer management.
- Born2beroot - System administration project requiring the setup of a virtual machine, Debian/CentOS installation, LVM, and strict security rules.
- push_swap - An algorithmic project to sort data on a stack using a limited set of instructions and aiming for the lowest possible number of operations.
- pipex - Recreating the behavior of shell pipes (
|) in C usingfork,pipe,dup2, andexecve. - FdF - Introduction to graphical programming using MiniLibX. (Wireframe 3D rendering).
- Philosophers - A classic threading and synchronization problem (Dining Philosophers problem) using mutexes and threads.
- minishell - Recreating a basic bash-like shell, handling prompts, parsing, environment variables, built-ins, pipes, and redirections.
- cub3D - Advanced graphics. Creating a 3D game engine using raycasting (like Wolfenstein 3D).
- NetPractice - Understanding TCP/IP addressing, subnetting, and basic routing.
- CPP Modules 00-04 - Introduction to Object-Oriented Programming in C++ (Classes, instances, inheritance, polymorphism).
- Inception - Introduction to Docker. Setting up a complete infrastructure using docker-compose (Nginx, WordPress, MariaDB).
- webserv - Network programming. Creating an HTTP server from scratch in C++ (handling GET/POST, CGI, multiplexing).
- CPP Modules 05-09 - Advanced C++ concepts, templates, exceptions, and the Standard Template Library (STL).