OK, this is a bit of a weird one because who decides to go and do a month long intensive coding course in France when their level of French is along the lines of ordering wine and cheese? So my experience of the Piscine at Ecole 42 may be quite different from others. Keep that in mind as you read on. Oh, and Piscine is French for swimming pool which is quite telling as the whole thing is rather sink or swim.
It was OK. Occasionally fun, frequently frustrating. The best parts were meeting people, learning C and solving problems. The worst parts were dealing with the Moulinette and recognising when you had made a bad decision that wasted a lot of time. I can see why people go back for a second round, but it's a big decision. After all, it's almost a month of ten hour days.
Table of Contents
- Pre-entry advice
- Advice for the Piscine
- Basic work flow
- Possible criticisms
- My Experience
- End result
Ecole 42 is promoted as an alternative coding school. To enter it you don't need any prior qualifications, you just need to do an online game which has some basic coding principles in it. I would say pass an online game but it is possible that it isn't how far you get but instead how long you try. This is a big part of the Piscine. At no time do you really know the rules that you are being judged by. There are rumours, theories, and so on but you never really know.
After doing the online game you choose a Piscine date that you want to start on (where there are some places left) and book an appointment to come into the school, get photographed, set your pin number for entry and get given your card.
You should also become familiar with git especially with these commands.
git clone git_repo folder_name
git add filename
git commit filename -m "This is a commit comment"
git push origin master
Doing a basic VIM tutorial would be a good idea as well.
If you are a non-French speaker then you can do the Piscine in Paris but you are going to make it a lot harder for yourself and have to do a lot more work. As an example, this is a video of the YouTube auto translation into English of one of the video tutorials used.
As you can see the auto translations on You Tube leave a lot to be desired. After all, who was Patti and why did it all turn to vegetables? :)
While I'm not female, the school is strongly encouraging toward women as far as I saw. They are very, very keen on having more women go through the course. There were women that had obviously coded before (Alternatively, they were exceedingly intelligent..or both) and many that were just trying to change course. The woman next to me had a masters degree in legal translation and wanted to try coding out. Generally she enjoyed the course although in the second week she was a bit down (I was too). By the end of it she said she was really enjoying it and wanted to continue coding.
Some Helpful Links (PDF warning)
- Shell and Git video
- C00 video
- C01 video
- C05 video
- C06 video
- C07 video
- C08 video
- C09 video
- C11 video
- C12 video
- C13 video
Advice for the Piscine
Take with grain of salt. I have not been invited to the school so use your own head.
There is, of course, COVID-19 going around so there are certain things that the school is not doing and these are probably subject to change so check with the school. During my Piscine there was no sleeping over, you had to be in the Paris region, you had to wear a mask all the time, you had to clean your computer, you had to only walk through the school in certain directions, etc....
Do not be scared of evaluations. Try to do two a day on other people. Not just to keep your points up but because it is a great way to see and discuss other peoples code, meet people, and figure out how they are doing things. Discuss the code for the full 15 minutes, discuss other code, try different implementations, etc... Also, get back to them afterwards and find out what worked with the Moulinette (an in house grading program) and what didn't. Be nice and definitely read the evaluations manual on the intranet.
I only had one bad experience with an evaluation and it was in the last week on a very bad day where the evaluator basically ripped my code apart and failed me on everything for not protecting my mallocs. It sort of blind sided me but in the end it was my own fault. If I had of defended my code instead of believing the guy who was so much better then I might have asked a question like, "Are you sure the Moulinette will fail the code because of the unprotected mallocs?". As it turned out, he was wrong but his write off of my code severely affected my grading as it is a mix between the Moulinette grading and your evaluations. For example, you might get 100% with the Moulinette but if you only have 50% scores from the evaluations you are probably going to only get 75% (or maybe 60%) of the points. What this guy did was wrong and against the pedology of the school but I failed to defend my code so it was my fault.
You can't plug in a normal audio jack but there are USB ports on the keyboard that you can use. The mice on many of the computers are the silly Apple ones so you may want to bring a mouse. Some computers are better than others depending on the wear and tear of the keyboards and mice and whether the monitor can still be adjusted upwards (I used a rolled up piece of paper behind mine).
You have to sign up for the exam event and the project on the first exam (I don't know why the others were different) and only the event on the others. You sign into the exam machine with username 'exam' and password 'exam' and then open a terminal and type 'examshell' before logging in with your proper user-name and password. You are allowed a pen, some sheets of paper and a bottle of water in the exams.
The food on campus is fine and is cheap. I made my lunches at home but quite often that was actually the same price as just buying something on the campus. In the campus you are only allowed a bottle of water on the floor. No eating inside. In the exams it is the same except for the final exam which can go for eight hours where you are allowed dried food like snack bars. No chocolate though.
Gcc is the compiler used at the school and is generally used with the Werror Wall Wextra flags as in,
gcc -Werror -Wall -Wextra <filetobecompiled>.c
I also found it extremely handy to use another option though especially to look for array overruns,
gcc -g -fsanitize=address <filetobecompiled>.c
Looking at code online
By all means look at somebodies exercise online if you are stuck or want a starting point but also realise that much of this code is wrong. Somebody said that 42 actually changes quite a lot of code online just to stuff people up when they try to cheat. I would read it quite a lot though, especially towards the end. Reading three different implementations of the same exercise is quite helpful but quite often I would find that the implementations were wrong, missing something, or included something that was an illegal function. Good if stuck, but do it after writing your own code.
Norminette is an automated format checker that says things like, "line 20, extra space at end of line" so you go and correct that and run it again.
norminette -R CheckForbiddenSourceHeader filename
Except in C08 where it is CheckDefine (this is not written in the current English version of C08),
norminette -R CheckDefine filename
The other things that would stuff people up with Norminette were things about variable alignment which just meant that your variable weren't aligned, or global function misaligned which meant that one of your function names was not lined up with the others. If they look lined up then you might find one is using spaces for alignment and the other is using tabs.
OK, this should be taken with a grain of salt as I will probably not get in so this is more a list of where I think I went wrong and what I should have done along with things that worked for me.
Get there at the same time, every day and leave at the same time everyday having put the same amount of effort in. However, remember it is for a long time so don't burn yourself out. Also, lots of people turn up at around 10:00 to 12:00 and work later into night. This is normal but can be annoying if you are in a group of people on different times.
Looking back I think I should have just done the first Rush and then not the others as I was falling behind the exams. The first rush was relatively easy. The others were beyond my ability. Do them if you have time. You will learn stuff but if you aren't up to speed then you might be better continuing to get up to speed for the exams.
Although there are other IDE's and text editors on the machine VIM is the only one in the Exams. To get the 42 header to automatically appear in VIM use Fn + F1.
What they are grading you on
Don't get to hung up on what they are grading you on. No one really knows. There are lots of really good programmers there and you may feel that you are falling behind but you will find in the second week or so that you probably aren't. Usually because you have to give an evaluation of a model you did a while back.
I imagine the person who completed all the exercises in two weeks will get in, but I really don't know and neither does anyone else. Do your best. Be meticulous and keep on swimming. If it doesn't pan out then it is still an interesting month and you do learn a lot even if you only manage a little.
Basic work flow
Your basic work flow is going to be something like this.
- Sign up to project and wait for git repo to be created.
- Copy repo url and clone it into a folder on your computer.
- Create folder for first exercise inside the repo folder.
- Create file for first exercise.
- Do exercise.
- Check for additional files.
- Check file with Norminette.
- Upload to the git repo and move to the next exercise.
- Finish exercises.
- Make sure you have pushed everything.
- Submit project to Moulinette.
Or, in slightly more command line terms...
git clone <repo url> <folder to be created> //download copy of repo
cd <path to cloned folder> //change directory to the cloned directory
mkdir ex00 //make exercise directory
cd ex00 //create folder
vim <exercisename>.c //write code
gcc -Werror -Wall -Wextra <exercisename>.c //run code and test it
ls -la //make sure there are no extraneous files in your exercise folder
norminette -R CheckForbiddenSourceHeader //check formatting with norminette
git add <exercisename>.c //add file to git
git commit <exercisename>.c -m "message" //commit file and list changes
git push origin master //upload file to server (after the first time you can just use git push)next exercise...
As time goes on my criticisms of the Piscine are fading but there are still a couple of stand outs.
The current Rush format is open to monopolisation by one or two people. In fact, it seems to encourage it. I was fairly relaxed about being with better coders and letting them take the lead but I saw others who were not and became frustrated when people took over. Especially when they turned out not to be better coders but just better at taking over.
What happens to the people who leave?
Really, lots of people left and since the course doesn't tell them what it is looking for I would imagine they are in a state of depression and failure without any hope of resolution. Most people fail to enter the school. What happens to them?
The first week is fairly chaotic. You are trying to sort out how everything works while working on your first projects. There is a thing called evaluations where you evaluate each other, the Norminette which is a program that tests your exercises before you upload them so they are formatted correctly and the Moulinette which is the testing program that grades you (alone with your grades from your peers). I will go into this a little more further on along with what I would have liked to have known before entering.
It was here that I started making a series of mistakes. :) To get evaluated you need evaluation points. You get one point for each evaluation you do and you need to use two points to get two evaluations before the moulinette will grade you. My first mistake was that after my first evauation on the first day I freaked out over my ability to evaluate people and cancelled my upcoming evaluations. Unfortunately I forgot to cancel my time slots on the evaluation planner so people kept on booking evaluations which I kept cancelling. Each cancellation cost me a point. The upshot of this was that by the end of the first day I had no points and still had to do evaluations. Not a great start.
My second was spending way too long on shell00 and shell01. I am a little shy and was somewhat out of depth at this point so I wasn't doing what I should have been doing which was finding people who had got the correct answers and seeing how they got them. One of the better ways to do this is through evaluations of other peoples answers.
A huge amount of people spent too much time on the first projects. This is because you don't really know what they are asking for. For instance the third exercise on the first day got you to recreate a screen shot of the ls - l command.
So you need to create some directories, change the permissions, change the time stamps and do some hard and soft links. You are also going to have to notice that the test 5 line is pretty much the same as the test 3 line. Otherwise you will link to somewhere else and all will look well until it is uncompressed and your links are gone.
It's a lot easier to say that now, but at the time I didn't know how to do it or exactly what they were asking for. Luckily there were videos and from memory those videos had fairly good English subtitles. This did not continue for long. Basically though, you want to get through shell00 and shell01 in the first couple of days. Study them before you go. Otherwise by the time you get to the exam on Friday you are already behind.
The first exam is a somewhat terrifying experience. You have to make sure you book in for it in two ways from memory. Once on the events page and once on the project page. I might have that wrong now as for all the exams after you just had to book the event and the exam project was automatically added to your projects.
The exam begins at 18:00 and everyone is kicked out at 16:00 so they can prepare for it. In fact the whole experience isn't all that complicated. You go in just before the exam, find a computer, log in with 'exam' as the user name and 'exam' as the password, open a terminal and start the exam program with the command 'examshell' and then log in with your personal username and password. If you fail to log into the examshell by 18:10 you are removed from the exam. If your computer doesn't work properly for some reason, you are removed from the exam, etc...
After logging in, and after 18:00, you are given your exercises one at a time. You have to pass each exercise before you can go onto the next one and the next. Norminette does not work in the exam so you have to format correctly yourself and in my case (others did not have this problem) I could compile the programs but could not run them so I had to do it all from memory with no ability to test before submission.
Another reason to get through the shell projects quickly is that the exam is all about C. So once you have reached your level of C then you don't know how to do the next exercise.
At 11:42 on Friday after the exam you can access your Rush00 project if you have signed up for it. The first one was fairly easy and took me maybe an hour to code the basic algorithm which was then expanded on by my other project members. There are three in a team. They added error checking and so on and expanded it to the other five exercises. All in all it looked like we were going to get 100%.
Unfortunately, we didn't upload the proper files with the error checking so instead of getting 100% we wasted a large part of the weekend and got 0%. BTW, the error checking was not actually mentioned in the project from memory. I think someone who had done the Piscine before knew about it. A large part of the Piscine is navigating rumours and so on and finding people doing the Piscine again to try to figure out what is going on and what is needed.
And the Rush isn't just about coding or git or so on. It is also about dealing with people. For instance, the person beside me said her experience of Rush00 (or was it Rush01?) was dealing with some alpha male who came in, took everything over, told them all to stay out of it, coded all night on Saturday, disappeared without communication having failed to do the code. Basically, one person killed the Rush for the others. You could say they should have dealt with him better and perhaps they could have. Either way, it was 0% for her, frustration and depression.
The second week was trying to get through C projects. I think I made it up to C04 before I got really stuck but there there was lots of frustration along the way. For instance you would get an exercise like,
And these are really important exercises too. Many of them you have to use further on in other exercises so you have to get them right and if you get one wrong then all the other exercises after it are failed as well. Many people got through by comparing the outputs of their program ft_strcmp with the actual program on the computer strcmp. Unfortunately, this didn't always work as sometimes the version on the computer was not the same as the version they had based the question on and until you find that out things get really weird.
The one I got stuck on was ft_atoi based on the atoi program on the computer but not the same. This eventually led me to get stuck in the final exam as well when they asked the same question (and really, by this time I had ft_atoi embedded in my brain) but wanted a different answer.
Again, if you haven't made it through your C projects the exams aren't all that much fun. Well, they are because I like problems but not because you reach a point where you can't go any further. From memory the third question in the second exam involved using argc and argv. It wasn't a hard question but as argv and argc are dealt with in Project C06 and I was only on C04 it was kind of impossible. I could code the program with the same outputs as the example but because I hadn't done C06 I couldn't accept command line arguments so it failed. I think I got 32 points in this exam.
Rush01 started my disillusionment with the Rush projects. Because I wasn't up to the level of the others I was basically dead weight (or moral support as I called it). My other team members were the same level and worked well together. The actual question was quite interesting in that you had to create an algorithm to solve what is basically a skyscraper puzzle, validate any number series imputed as solvable or not give a solution if it was solvable.
My other team members put a huge amount of time and effort into it but failed to find a solution. In some ways it was good for me as I had to understand their code for the questions at the defence of the project but in the end it was a bit of a waste of time that meant I lost most of a weekend that I should have spent getting further along in C.
At this point everybody is starting to get tired. I would say most people were doing at least ten hours a day at the school plus travel. For me, I would leave at 8:00 and get home around 21:00 which makes for a fairly long day. By the Thursday I was stuck on C07 ft_atoi. I just wasn't getting it right and nothing really seemed to be helping. On the Friday I spent the whole day in revision partially for a break from C07 and partially because I didn't want a repeat of hitting a question where there was no way I could do it.
Exam 02 was actually quite fun and I spent the entire four hours doing it. Unfortunately, in the last ten minutes I crashed git and was unable to upload my solution which meant that instead of getting over 50 points I only had 48 or something. My own fault really. I left out a part of the git command and when vim popped up I used Ctl+C to close it and it didn't close properly which meant git refused to do anything else as it already had a process running. No matter what tried, I couldn't seem to kill that process. C'est la vie.
I shouldn't have signed up for this Rush but the bet paid off solely because one of the people in the project was really good. Basically, I made some dictionaries to test the program and Axel spent god knows how many hours getting it to work. The next day he was a wreck and every time he picked up the program (he was supposed to be showing us how it worked) he would find another bug.
We got 100% for this Rush. This had nothing to do with me.
The Sunday night I didn't sleep well and on the Monday I spent all day banging my head against C07 again. Monday evening we had a Rush meeting which for various reasons went on until 21:00 so I didn't get home until 22:00 and then failed to sleep well again.
Tuesday was one of those days that pop up every now and then where everything went wrong from lack of sleep to the Metro train I was on deciding to change destination three stops after I got on it. I ended up walking to school and just made it in time to be evaluated for C07 which I failed. At this point I decided to go back to C04 as C07 depends on it and after submitting C04 again I failed that as well on an exercise that I hadn't changed that the Moulinette had previously validated.
Wednesday I resubmitted C04 to get my marks back, and started working on C08 which didn't depend on C07.
Thursday I submitted C08 and C07 and somehow scrapped through on C07 with more than 50% but nothing I was happy with.
Ahhh, the final exam. All was going reasonably well until I was asked to implement the function ft_atoi. I was wrapped at first. I could write the code from memory now having spent so much time on it. Did so, checked it, made sure it worked properly and then uploaded it and failed. Rewrote it three or four times and failed every time. Submitted it finally as not what I done in the exercise but as an implementation of the man page purely. Failed.
Eventually I gave up. Late that night I was talking to another entrant who had the same problem and got through it by using atoi (proper) on the computer they were on to test the outputs were the same. I had never thought of that even though we had used the method previously on functions such as strcmp. Silly me.
Of course, as I said before, you should take all of this with a grain of salt as I was not admitted into the course. It appears I passed the assessment but did not correspond to the pedagogy of the school. Here is a copy of the email.
Thank you for your interest in joining us, which you have increased to 42 by passing the assessments.
However, your overall test results do not allow you to qualify for the rest of the program.
Don't be discouraged, if you didn't pass the tests, it's because your profile doesn't correspond to the pedagogy of 42, but you have a lot of other schools, trainings that will be for you: (Webacademie, the Samsung campus, and many others on https://www.grandeecolenumerique.fr/)
If you have any questions, please do not hesitate to contact us at @42.fr. We wish you a positive outcome to your different steps,
ps: all future correspondence should be sent to @42.fr.
See you soon, L'Équipe 42
Translated with www.DeepL.com/Translator (free version)
Email from Ecole 42