42 is an innovative school in Paris, France where students age 18 and over, regardless of prior education, teach themselves and each other about code. There are no classes, no teachers: the cursus consists of a series of projects students have to complete to gain experience and get to the next levels. Collaboration is key: the students corect each other's projets and learn to cooperate and share their findings and struggles.
I started my cursus in November 2019, and this has been my main occupation since.
Because of its innovative system, there is no strict progression along the cursus and no school year. Students can come to school anytime they want, and validate their projects at their own pace. For every project they validate, they gain experience, which allows them to gain levels, which in turn allows them to finish the cursus once they get to level 21.
The cursus has an estimated duration of 3 years.
The Piscine is the selection program to get access to the school. For a month, candidates must complete as many projects, or days as possible. The projects are aimed at developping the students coding skills, from scratch. They all use the C language. There are also exams every Friday evenings, as well as rushes (2-day group projects) and personnal projects during the weekends.
✏️ I attended the August 2018 Piscine, with very little prior knowledge about coding (I used to be an English teacher), and managed to get in!
Once accepted, students can start their cursus and have more autonomy to choose the projects they want to apply themselves to. The projects are represented on this map, which is called the Holy Graph.
Students start in the inner circle, on the left. Once they get to the center of the circle, they can choose to continue on the right branch (algorithms), the top branch (unix), or the bottom branch (graphics), which are all C projects. In order to access projects beyond the inner circle, they must get to level 5, complete one of the branches and do a 4- to 6-month internship (the internship was rendered optionnal in a later version of the cursus). The cursus comes to an end with a final intership.
✏️ So far I am still within the inner circle and have completed a couple of graphics projects and the PHP piscine, but my main focus has been on the algorithm branch, which I finally completed in July 2019!
The inner circles also gives access to other projects which tackle other languages : the systems administration projets, the Piscine PHP (which gives access to the web branch), or the electronics program.
✏️ On top of that, I also took part in Machine Learning workshops supervised by 42AI, the Artificial Intelligence club at 42.
Grades are given to every project. 100 is the top score for the mandatory part of the project. Points between 100 and 125 are given for bonuses.
All project in the inner circle, except the web and SysAdmin branches, are done using the C language and following a strict standard, the Norm, which you can find in the resources folder. For example, functions cannot have more than 25 lines, there cannot be more than 5 function in a .c file, the Makefile may not relink, etc.
Project name | Description | Goals | Solo/Group | Status | Grade | Start Date | End Date |
---|---|---|---|---|---|---|---|
42 Commandements | Welcome, young cadet! | Code of conduct | Solo | ✅ | 100 | 18-11-05 | 18-11-05 |
Piscine Reloaded | Go over some exercises from the piscine | Basics of C | Solo | ✅ | 100 | 18-11-05 | 18-11-06 |
Libft | Recode a number of standard C library functions | Basics of C, static libraries | Solo | ✅ | 125 | 18-11-06 | 18-11-19 |
Get_Next_Line | You'll always need to read content line by line | File descriptors, basic parsing, bufferisation | Solo | ✅ | 112 | 18-11-19 | 18-11-21 |
Fillit | What's the smallest square for these tetriminos? | Basic algorithm, input/output | Group | ✅ | 100 | 18-11-22 | 18-11-29 |
Project name | Description | Goals | Solo/Group | Status | Grade | Start Date | End Date |
---|---|---|---|---|---|---|---|
ft_printf | Code your own printf! | Parsing, variational functions | Group | ✅ | 110 | 18-11-30 | 18-12-23 |
Push_swap | Sort a stack as efficiently as possible | Sorting algorithms, basics of stacks manipulations | Solo | ✅ | 125 | 18-12-27 | 19-02-11 |
Lem-in | How long will it take the ants to get out of their maze? | Graph search, max flow problem | Group | ✅ | 124 | 19-03-06 | 19-04-29 |
Corewar | Let the fight begin! | Compilation, simple VM, simplified assembler, visualization | Group | ✅ | 125🌟 | 19-30-04 | 19-07-15 |
Project name | Description | Goals | Solo/Group | Status | Grade | Start Date | End Date |
---|---|---|---|---|---|---|---|
FdF | Represent the mesh in "wire of a field" in 3D | Simple graphic library, segment layout, events, 3D to 2D projection | Group | ✅ | 125 | 19-01-17 | 19-02-14 |
Fract'ol | Discover the psychedelic world of fractals | 2D programming, optimization | Solo | ✅ | 117 | 19-02-14 | 19-03-04 |
Project name | Description | Goals | Solo/Group | Status | Grade | Start Date | End Date |
---|---|---|---|---|---|---|---|
Init | Introduction to systems administration and networks | Unix, systems administration | Solo | ✅ | 100 | 18-12-13 | 18-12-22 |
Roger-Skyline-1 🌟 | Systems administration and networks basics | Unix, systems administration | Solo | ✅ | 60 | 19-08-01 | 19-08-08 |
Docker-1 | Think with containers! | Micro services, docker, unix, containers, DevOps | Solo | ⌛ |
Project Name | Description | Goals | Solo/Group | Status | Grade | Start Date | End Date |
---|---|---|---|---|---|---|---|
Piscine PHP | Introduction to basic web technologies | HTML, procedural PHP, Web server, SQL, object oriented PHP | Solo | ✅ | 104 | 05-20-2019 | 06-02-2019 |
Camagru | Create an instagram-like website | User management, permissions, mailing, security/data validation | Solo | ⌛ | |||
Matcha | Create a dating website | Micro-framework, advanced user management, real-time web, geolocation, security/data validation | Group | ⌛ | |||
Hypertube | Create an video streaming website | MVC framework, Omniauth, Background jobs, Internationalisation | Group | ⌛ |
Every thursday for 14 weeks in 2019, I attended the machine learning workshops with 42AI, the association for Artificial Intelligence at 42. The workshops aim at giving an understanding of the main machine learning algorithms. Every week, a student gives a presentation on an algorithm, followed by a practical application for the attendees to get their hands dirty, using python and numpy. I gave the presentation about the k-means clustering algorithm. More information about the content of the workshops and my exercises here.
Between October 2019 and March 2020 I completed my first intership with Ikigai as a web developer. Ikigai is a small team of game designers, game developers and web developers working with the Sorbonne Université (Université Pierre et Marie Curie) to create free educational games for university students, focusing on providing a regular video game quality experience. They have been working on topics such as fake news, gravitation, etc. The web development part of the project focuses on developing a steam-like website to download games developed by the Ikigai team (and, in the long run, other educational games), and provide the architecture for a quiz game (for which professors at the university should be able to create and edit questions).
📋 As a web developer, my tasks where to:
- fix bugs and improve the current website
- maintain the API for the quiz game
- provide new features for the quiz game (such as importing or exporting questions from/to files with various existing formats)
A particularity of the development team at Ikigai is that, for various reasons, the team changes very often. It means that at one point there might not be someone with experience with some parts of the codebase, and the question of legacy code and maintaining code quality is paramount. We decided to take on the challenge of creating a better experience for future developers by improving the codebase and development flow:
- I started using a Test Driven Development approach, by setting up Jest writing unit tests.
- I refactored parts of the codebase that we worked on most often to have one source of truth on how CRUD operations should be conducted regarding the questions of the quiz game.
- I included Jest, Prettier and ESLint as git hooks to be run before changes could be pushed to a git branch and made sure the code of the files I modified passed the different tests.
- I improved the Angular code on parts of the application I made changes to to make the most of TypeScript's features.