Start date
15/10/2023
Categories
Programming
End date
10/05/2024

Project description

💡 42 is a programming school based on a learn-by-yourself methodology. At first it could be rough to grasp and to make this methodology yours, but it is definitely a rewarding one!

On one side, it teaches you how to work independently, via the available material like offline manuals (RDFM) and online searches. On the other, it pushes you to ask for help to your peers, to create new friendships and support each other to write more maintainable code. It also pushes to peer-review each others code to learn either from mistakes and outstanding projects. And fundamentally, code must be free of memory leaks while errors are carefully handled to prevent unknown failures or segmentation faults.

These are all invaluable soft skills that no bootcamp or traditional classes can give you, when you are given clear and direct answers. And on the other hand, I have developed a better knowledge of bits, signals, memory and threading that are the fundamental bricks of most programming languages used today.

📖 More precisely, I learnt to:

  • Work with the terminal, a bit of vim, sudo, apt, ufw, ssh, on top of the most basic commands.
  • Create and setup Virtual Machines, to setup separate working environments.
  • Compile C programmes via Makefiles, to benefit from rules and dependencies.
  • Use static variables and variadic functions.
  • Manage signals and communication between processes via a stream of single bits.
  • Develop a game in 2D, to learn how Linux and Mac manage screens and windows.
  • Work with stacks and sort arrays
  • Manage threading via mutexes to prevent data races (threads) and multiprocessing via semaphores.

Eventually, we combined the learnt knowledge to develop our own shell with reduced functionalities compared to a Bash shell. Through minishell I learnt how Bash handles commands, from parsing the input commands, to handling quotes, redirections, pipes and environment variables. Additionally, we also managed the terminal status and configurations, to reset its behaviour when faulty commands messed it up.

👨‍💻 If you are curious about how my code looks like checkout my GitHub