LoginSignup
7
4

More than 1 year has passed since last update.

中の人から見た42Tokyo

Last updated at Posted at 2020-12-02

はじめに

この記事は、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でやっていることの説明でした~

7
4
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4