This repository contains my projects developed at 1337 programming school for the 42 Cursus, a programming curriculum developed by 42 Paris. The 42 Cursus is an intensive, peer-to-peer learning program designed to teach computer science and programming skills through project-based learning. Each project is graded by peers using a peer-evaluation system called "correction," and successful completion of each project is required to progress to the next level of the program.
Table of Contents
About 42
Curriculum
Projects
Skills
Stats
Bookshelf
Articles
Study notes and cheat sheets
Tech Stack
Music and Playlists
Contact
42 is a global education initiative that offers a new way of learning technology: no teachers, no classrooms, students learning from their fellow students (peer-to-peer learning), with a methodology that develops both computing and life skills. The 42cursus is free for whoever is approved in its selection process* - the so-called "Piscine" - becoming thus "cadets" (42's students).
For further information about 42's selection process (the "Piscine"), please visit the C Piscine repo.
42cursus comprises two groups of projects: the first one is known as "inner circle" and the second one, "outer treks" - due to the Holy Graph layout (see image below).
The inner circle is the basic curriculum, with all projects being mandatory to attain level 7 - which is the minimum level required for activities such as internships and interchange.
The outer treks is a collection of diverse project trails in subjects ranging from operational systems to web development which allows cadets to specialize on whatever subject they prefer.
The following table lists the projects I've completed as part of the 42 Cursus. Each project is linked to its repository, where you can find the project's description, requirements, and my implementation.
CIRCLE | PROJECT | DESCRIPTION | KEY TAKEAWAYS | TECHNOLOGY | STATUS |
---|---|---|---|---|---|
00 | Libft | A library of useful C functions | Basics of C programming, data structures | C | β 122 |
π« | π« | π« | π« | π« | |
01 | ft_printf | A function that mimics the behavior of the C library printf function | C string formatting, variadic functions | C | β 100 |
02 | Born2beroot | A project on Virtualization basics | Virtualization, Linux basics | VM, debian | β 108 |
03 | get_next_line | A function that reads a file line-by-line | File I/O, memory management | C | β 125 |
π« | π« | π« | π« | π« | π« |
04 | Push_swap | A program that sorts a stack of numbers | Algorithm optimization, stack manipulation | C | β 125 |
05 | Minitalk | A communication program using UNIX signals | UNIX signals, inter-process communication | C | β 100 |
06 | Fract-ol | Renders Julia and Mandelbrot fractals | Graphics programming, fractal mathematics | C | β 100 |
07 | Exam Rank 02 | Programming skills assessment | Problem-solving, time management | C | β 100 |
π« | π« | π« | π« | π« | π« |
08 | Philosophers | Dining Philosophers problem simulation | Concurrency, thread synchronization | C | β 100 |
09 | Minishell | Custom shell emulating bash | Shell scripting, process management | C | β 101 |
10 | Exam Rank 03 | Programming skills assessment | get_next_line or ft_printf function implementation | C | β 100 |
π« | π« | π« | π« | π« | π« |
11 | Net_practice | Networking concepts and protocols | Networking fundamentals, protocol analysis | Networking, Protocols | β 100 |
12 | Cub3d | 3D maze using raycasting | Graphics programming, raycasting | C | β 115 |
13 | CPP Modules 00 - 04 | C++ fundamentals and advanced concepts | Namespaces, classes, memory allocation, pointers, inheritance, polymorphism, templates | C++ | β 80 |
14 | Exam Rank 04 | Microshell exam | Shell command execution, piping, error handling | C | β 100 |
π« | π« | π« | π« | π« | π« |
15 | Webserv | Building a web server from scratch | HTTP protocol, socket programming, multi-threading | C++ | β 125 |
16 | Inception | Docker-based system setup and configuration | Containerization, Docker, system orchestration | Docker | π§ In Progress |
17 | CPP Modules 05 - 08 | Advanced C++ concepts | Operator overloading, exception handling, file I/O, STL, advanced OOP | C++ | π§ In Progress |
18 | Exam Rank 05 | Advanced programming skills assessment | Complex problem-solving, optimization, advanced C++ concepts | C++ | π Pending |
π« | π« | π« | π« | π« | π« |
These are some of the skills I've developed during my time at 42.
.
βββ Computer Science
β βββ Computer Systems
β β βββ Distributed Systems (Operating Systems, Linux)
β β βββ Linux Kernel and System Programming
β β β βββ System Calls
β β β βββ Processes and Threads
β β β βββ Signals and IPC (Inter-Process Communication)
β β β βββ Memory Management
β β β βββ File I/O
β β β βββ Sockets and Networking
β β β βββ Threads and Concurrency
β β βββ Linux Development
β β β βββ C/C++ Development (gcc, g++, make)
β β β βββ Scripting Languages (Python, Shell Scripting)
β β β βββ Version Control Systems (Git)
β β β βββ IDEs (Integrated Development Environments)
β β βββ Linux Virtualization (Docker, VM)
β β βββ Linux Command-Line Tools and Utilities
β β β βββ Text Editors (nano, vim, emacs)
β β β βββ Networking Tools
β β β βββ System Monitoring
β β β βββ Package Management Tools
β β β βββ Remote Access
β β β βββ Disk and File System Tools
β β βββ Shell and Command Line (Bash, Zsh)
β β βββ Linux Networking
β β βββ IP Addressing and Subnetting
β β βββ TCP/IP Protocol Suite
β β βββ OSI Model
β β βββ Network Protocols (HTTP, FTP, SSH, DNS)
β βββ Theoretical Computer Science
β βββ Algorithms and Data Structures
β β βββ Sorting Algorithms (Bubble Sort, Quick Sort, Merge Sort)
β β βββ Searching Algorithms (Linear Search, Binary Search)
β β βββ Data Structures (Arrays, Linked Lists, Stacks, Queues, Trees, Graphs)
β βββ Complexity Theory
β βββ Big O Notation
β βββ Time and Space Complexity
βββ Software Engineering
βββ Programming Languages
βββ C Programming
β βββ Standard Library Functions
β βββ Memory Management
β βββ Pointers and References
β βββ Data Types and Structures
β βββ Preprocessor Directives
β βββ Compilation and Linking
βββ C++ Programming
β βββ Object-Oriented Programming (OOP)
β βββ Classes and Objects
β βββ Inheritance and Polymorphism
β βββ Templates and Generic Programming
β βββ Exception Handling
β βββ Standard Template Library (STL)
βββ Shell Scripting
βββ Bash Scripting
βββ Command-Line Utilities
- Self-learning and proactivity: At 42, self-learning is at the core of its peer-to-peer learning methodology. There are no teachers whatsoever; the learning process is based on googling, enquiring your classmates, and empirical knowledge, with each student learning at their own pace.
- Teamwork: Some projects must or should be developed in groups, which promotes collaborative work among cadets. The major challenge here is to equalize the different knowledge levels while finding a common work methodology that allows all team members to contribute to the project.
- Time management and resiliency: The school is open 24/7. Thus, the cadets are free to work whenever they want, which demands excellent time management skills and resiliency for not "drowning" amid the massive load of work demanded by the program.
- Problem-solving: The projects are designed to challenge the cadets' problem-solving skills, requiring them to think outside the box and find creative solutions to complex problems.
- Communication: The peer-to-peer learning methodology requires cadets to communicate effectively with their peers, both to ask for help and to help others. This promotes the development of communication skills, which are essential in the workplace.
42 Stats
GitHub Stats
These are some of the books I've read or plan to read to deepen my knowledge in computer science, programming, and other subjects.
Name | Description | Category | Image |
---|---|---|---|
The Linux Programming Interface-Michael Kerrisk | A comprehensive guide to system programming on the Linux platform by Michael Kerrisk. Covers system calls, libraries, and more. | Computer System-level Programming | |
Advanced Programming in the Linux Environment | Explores advanced topics in Linux programming, offering insights into system calls, libraries, and techniques for efficient software development. | Computer System-level Programming | |
Operating System Concepts | A classic textbook on operating system principles and concepts, providing a foundational understanding of OS design and functionality. | Computer System-level Programming | |
Networking Essentials - A CompTIA Network+ N10-008 Textbook | Provides comprehensive coverage of essential networking concepts and technologies required for CompTIA Network+ certification exam N10-008. Authored by Jeffrey S. Beasley and Piyasat Nilkaew, this textbook offers detailed explanations and practical examples to help readers understand networking fundamentals. | Computer Networking | |
Computer Networks - A Tanenbaum - 5th edition | A comprehensive textbook on computer networking, authored by Andrew S. Tanenbaum, covering a wide range of networking topics including protocols, architectures, and applications. | Computer Networking | |
UNIX Network Programming Volume 1, Third Edition: The Sockets Networking API | A classic reference on UNIX network programming, authored by W. Richard Stevens, offering in-depth coverage of the Sockets API and various networking concepts on UNIX-based systems | Computer System-level Programming |
These are some of the blogs and articles I've written about my experiences at 42 and other topics related to computer science and programming.
Other blogs and articles by 42 students:
These are some of the study notes and cheat sheets I've created to help me learn and remember key concepts in computer science, programming, and other subjects.
-
Apps and Tools
- Discord - Free communications app
- Obsidian - A private and flexible noteβtaking app that adapts to the way you think.
- Commander One - Free file manager for Mac to replace Finder
- tldraw - A collaborative whiteboard tool
- TeraBox - Cloud storage service
-
Editor and IDE
- Replit - Online IDE for coding in multiple languages
- Visual Studio Code - Code editor
-
VS Code Extensions
- 42 Header - 42 header for C and C++ files
- 42 ft count lines - Count lines of code in C and C++ files
- vscode-pdf - Display PDF files in Visual Studio Code
- Markdown All in One - All you need to write Markdown
- Code Spell Checker - Spelling checker for source code
- Live Share - Real-time collaborative development from the comfort of your favorite tools
- Path Intellisense - Visual Studio Code plugin that autocompletes filenames
-
42 Bookmarks: A collection of bookmarks for 42-related resources, programming tools, and other useful information.
- https://iscsi-tools.1337.ma/ - iSCSI tools
- https://mail-students.1337.ma/SOGo/ - 1337 webmail
- 42 Intra - 42's intranet
- 42tools - 42's tools and resources
- bleach_42 - Script to free up some space
- find-peers - Find peers at 42
- 42-resources - A collection of resources for 42 students
- 42_CheatSheet - A collection of cheatsheets for 42 students
- 42 cursus gitbook - A guide to the 42 cursus
- Ocean's 42
-
Github Repositories and Gists
- lowlevelprogramming-university - A collection of resources for learning low-level programming
- coding-interview-university - A complete computer science study plan to become a software engineer
- every-programmer-should-know - A collection of (mostly) technical things every software developer should know
- build-your-own-x - A list of tutorials to help you build your own software
- practical-tutorials/project-based-learning - A curated list of project-based tutorials
- developer-handbook - A collection of resources for developers
- path-to-senior-engineer-handbook - A collection of resources for developers
- project-guidelines - A set of best practices for JavaScript projects
Here are some of my favorite music and playlists to listen to while coding or relaxing.
- Coding days - A playlist of my favorite music to listen to while coding.
- Spotify - Take a moment to listen to some of my favorite playlists. I hope you enjoy them as much as I do!
- Radiooooo - A website that lets you explore music from different countries and decades.
- Moroccan tapes - A website that showcases Moroccan music from the 60s, 70s, and 80s.
Feel free to reach out to me if you have any questions, suggestions, or just want to chat!