はじめに
この記事は、42tokyo Advent Calendar 2020の12月1日の記事です。
フランス発のエンジニア養成機関である謎の集団42Tokyoについて書かせていただきます。
そもそも42Tokyoって?
この手の記事は大量にあると思うのでさらっと説明していくと、42Tokyoによると、
42 Tokyo(フォーティーツー)は、フランス発のエンジニア養成機関です。
「挑戦したいすべての人に質の高い教育を」を理念にシリコンバレーをはじめ、世界各国でエンジニア教育をおこなっています。
24時間利用可能な施設、学生同士で課題を克服するピアラーニング、学費完全無料など新しい仕組みで、社会で活躍するエンジニアを数多く輩出しています。
つまり、42の本部はフランスがあって、それが世界各地にあって、そのうちの一つが、42Tokyoですよという感じ。あとはググれば出てくると思うので、割愛する。
ここを見ると、世界各地に有るのがわかる、シリコンバレーにももちろんある。
42Tokyoに入るには?
募集要項を見れば、わかりますが、webテスト -> piscine -> 42Tokyo
みたいなフローになっています。
piscineは4週間もかかるので大変です。これはフランス語でスイミングプールという意味があり、プールをもがきながら泳ぎきりましょうという意味みたいですね。興味があればぜひ応募してみましょう。
42Tokyoって実際どんなことをやっているのか?
大まかにやっていることは2つ。
- 課題を解く
- P2P(peer to peer)コードレビュー
課題を解く?
42Tokyoによると、
42には実践的なカリキュラムが用意されています。プロジェクト単位で登録して、自分が解きたい問題を設定していきます。カリキュラムの前半はC言語に取り組んで、その後は、自分で学びたい言語を選択することができます。
どんな課題があるのかと言うと、
例えば、
コマンドライン引数を受け取り、文字列とその長さを出力してください。
使用可能関数
write()
Ex
$ ./a.out test 42 echole
test 4
42 2
echole 6
みたいになります。
この課題だと、
まずは、
- コマンドライン引数って?
- 文字列出力するには?
- 文字列の長さを得るには?
みたいなのを調べるのですが、ここから、P2P Learningが始まります。
まずは、色々とググったりして、関数の使い方を調べる、それでもわからなかったら誰かに聞く。
逆にわかっている人は、わかってない人に教えたりします。
ということが、P2Pでは行われます。
P2Pでは、
分からない人 - 色々質問したりして、なんとか自分の知識にしようとする
分かる人 - 教え方、伝え方を工夫して、自分の知識を整理することができる
双方向で学習ができるので、P2P Learningは素晴らしいですね。
上記の課題だと、
#include <unistd.h>
int str_len(char *str)
{
int l = 0;
while (str[l])
l++;
return (l);
}
void print_num(int num)
{
if (num > 9)
print_num(num / 10);
char c = num % 10 + '0';
write(1, &c, 1);
}
int main(int argc, char *argv[])
{
int i = 0;
while (i + 1 < argc)
{
int sz = str_len(argv[i + 1]);
write(1, argv[i + 1], sz);
write(1, " ", 1);
print_num(sz);
write(1, "\n", 1);
i++;
}
return (0);
}
$ gcc print_42.c
$ ./a.out test 42 echole
test 4
42 2
echole 6
になります。
P2P(peer to peer)コードレビュー
課題を解き終わったら、課題を提出して、コードレビューを行います。
42Tokyoではコードレビューする人をそれぞれ、レビュワー(課題を評価する人)、レビュイー(課題を提出した人)と呼んでいます。
(ちなみにですが、最低限何人かにコードレビューを行わないと次に進むことができません。)
まず、コードは変数、関数の名前の付け方から十人十色なので、相手が理解できるようにコードのロジックを説明していきます。
もしも、相手に説明が通らない(理解ができなければ)不正解なんて言うこともあります。
具体的には、この関数はどういう意味ですか?ここはどういう原理で動いていますか?などなどの質問に答えていって、動作なども確認しつつ、コードレビューが行われていきます。
なので、自分だけが理解できるコードではなく、人が読んでも理解がしやすいコードを書かないといけません。
例えば、上記のコードだったら、レビュイーは
str_len()は文字の長さを求める関数で、print_num()はint型の数字を出力する関数になります。
str_len()は1文字1文字見ていって、null文字が来るまで、文字をカウントしていきます。
(NULLが来ることはないので、エラー処理はしてない。)
print_num()は数字を出力する関数で、再帰的に呼び出しを行って、最上位の桁から出力を行えるように実装しています。
みたいな.....
説明を行います。
レビュワーだったら、ここはどうやって動いていますか、とか、間違っている場合は、ヒントを与えつつ、答えを一緒に考えたりします。(個人によってやり方は多々あります。)
これで何人かのコードレビューが終わったら、その後は機械判定が行われます。
機械判定がPASSできれば、次の課題に取り組むことができます。FAILすると再TRYとなります。
基本的に進め方は個人の裁量に任せれています。なので、猛烈に早い人もいれば、マイペースに進めていく人もいます。
とこんなことが42Tokyoでは行われています。
他にも様々なコンテストに参加したりだったり、アプリ開発したりだったりいろんなことが行われています。
まとめ
いろいろ書いてありますが、picineを受ければ、たいていのことを経験することができます。42Tokyoでやってることも、picineの延長でしかないです。
なので、興味があれば受けてみてください〜
中の人から見た42Tokyoでやっていることの説明でした~