見出し画像

42Tokyoで、「Exam」という試験をすべて合格!!

先日42Tokyoで、試験である「Exam06」を受け、無事に合格した!

今回うけたのは最後の試験だったので、これですべての試験が終了したと思うと感無量。

総じて42での試験はとてもエキサイティングだった。

というのも、事前にどのような問題がでるかは大体わかっているものの、提出後に機械的に採点され、その採点方法は明らかにされていないので、実際に試験をうけてみないと、正解するかどうかはわからないからだ。

また、たまに問題自体も修正されている可能性があるので、その場で臨機応変に対応しなければならない。

42 Tokyoの学習について

そもそも42Tokyoでの学習は、大きくわけて前半と後半に分かれている。

卒業までにみんながほぼ同じ課題をこなす基礎コースの「1stサークル」と呼ばれるものが前半。

そして、それぞれの専門分野に特化した「2ndサークル」と呼ばれる後半戦が存在する。

サークルというのは、カリキュラムの全体像が、円の形の上に展開されているからだ。

1stサークルの期間は、退学までのカウントダウン(ブラックホールと呼ばれる)が存在しており、課題に取り組むにさいして時間のプレッシャーがある。

しかし、2ndサークルにはブラックホールはなく、他国の42の校舎への移籍も可能となる。

今回「exam06」をクリアしたので、1stサークルを突破するには、のこすところ「ft_transcendense」というチーム課題の1つだけ。

「ft_transcendense」はかなりヘビーで、今までの課題よりも実践的で、実際に企業がリリースしているプロダクトにより近いものになっている。

言語もTypeScript(JavaScripttを拡張して開発された新しい言語)を使用し、ReactやNestJS、PostgreSQLといった技術を学ばなければいけない。

Exam06のざっくりとした内容

試験時間は3時間。

試験の内容は「サーバー」を作ることだった。

イメージでいうと、コミュニケーションの中継地を作るもの。

最初にサーバーを立ちあげたあと、別のターミナルを使って、クライアントとして、サーバーが接続しているポートに接続をする。

そしてさらに別のターミナルから、別のクライアントとして同じように接続。

すると、クライアント同士でメッセージの送受信が可能となる。

5万字をゆうに超えるメッセージを扱えるのか?や、切断と接続を繰り返した時にきちんと動くか?といったテストが実施されているようだった。

これは「機械採点」とよばれており、提出して、試験用のコマンドを入力すると、「機械採点」をスタートさせることができる。

採点結果はその場でわかるので、もしも合格していたらそのまま帰ってよく、不合格なら、コードを修正して再提出しなければならない。

事前準備の内容

準備には20時間ほど費やして、コードを作成した。

準備をせずに、試験問題を初見で解く人もいるが、ぼくは自宅ががそこまで校舎に近くなく、校舎にもほとんど顔を出さないので、何度も試験にチャレンジすることは避けたかった。

ゆえに試験には、いつも準備万端でいくようにしていた。

具体的には、自分の中でコードの完成形をあらかじめ作っておいて、そのコードを再現できるかを自分でテストした。

そして丸暗記までとはいかずとも、だいたいは再現できるようにしておく。

本番では記憶を頼りにコードを書き上げたあと、機械採点に通るように調整していった。

試験当日

午前中は合気道の稽古があったのでそちらに参加。

しかし、体調がおかしい。

稽古が終了してから、頭痛がひどくなってきた。

スマホのアプリで確認すると、案の定、低気圧だった。

ぼくは低気圧に弱く、いつも片頭痛に悩まされている。

いつもはすぐにバファリンを飲むのだが、今日は持ってくるのを忘れてしまっていた。

試験だというのに迂闊すぎる。

とりあえず家から持ってきていたおにぎり二つを昼ごはんとして食べた。

元々の計画では、試験は15時からと、試験開始までは時間があったので、丸善オアゾに移動し、今取り組んでいるプログラミングの課題の参考になりそうな技術書を探そうと思っていた。

しかし、頭痛がひどくて諦めた。

あとから考えると、この時点でバファリンを買えばよかったのだが、なぜかその発想はなかった。

近くのベンチに座って30分ほどボ〜っとすることに。

まったく頭痛が止まらない。

低気圧のときに行っている耳を引っ張るマッサージもやってみたが効果なし。

頭をマッサージしてもあまり効果なし。

やばい。

とりあえず水をたくさん飲んだ。

動くのも億劫だったが、早めに校舎にいって、ゆっくりしようと思ったのと、余裕があれば試験の準備をしようと思い移動。

六本木の校舎に到着したのは14時ごろ。

校舎は23階にあるので、エレベーターで上っていくと気圧の関係で、頭痛がひどくなった。

校舎に入ると、企業とのイベント関連でビスコを無料で配布しており、帰るときに食べようと、一ついただいた。

席に着くとすこし頭痛がおちついた。

なので校舎のiMacで自分のアカウントでログインし、自分が事前に準備したコードをながめた。

そして、自分がミスしやすい箇所をまとめたコードも念入りに確認した。

14:30には終わったので、目をつぶってボ~っとすることに。

すると、頭痛がよくなるどころか、逆にひどくなってきた。

頭痛を飼いならすことはむずかしい。

そして、15分前に試験が行われるブースへ移動。

ぼくが一番乗りだった。

試験官に、窓際の席を指示され、そこに着席。

試験が始まるまで、あたまが痛すぎたので、ひたすら外を眺めていた。

校舎からは東京タワーが目の前にあり、絶景だったのだが、遠くを眺めていてもいっこうに頭痛がやまない。

目を閉じて、深呼吸をした。

試験開始

15時にテストがスタート。

急いで仕上げなければいけないので、集中し、コード作成中はほとんど頭痛のことを忘れていたが、頭からはコンピューターの処理が重くなると発する熱のようなものを感じていた。

最初のコードは45分ほどで完成。

しかし、コンパイルエラーが多数おきており、修正しまくった。

頭痛の影響なのか、ただ単にうっかりか、凡ミスを連発しており修正に15分ほどかかった。

そして自分で動かしてみて、期待通りに動くものが完成。

そのコードをさっそく提出してみる。

結果は...不合格。

どんなテストケースでミスをしているのかがわかる「トレース」と呼ばれるファイルが作成されていたので、早速確認。

diffコマンドで、「ぼくの作ったプログラムの出力」と、「あるべき出力」を比べており、それらに違いがあった場合に不合格となっていた。

diffコマンドはいままで少ししか触ったことがなく、出力結果の読み方がわからなかったので、自分で作った二つのファイルをdiffコマンドで比べ、どうやって読めばいいのかを確認した。

-と+の記号が、それぞれのファイルに余分に含まれている箇所を表していることがわかったので、再度トレースファイルを確認。

すると、自分の作ったコードでは、何度も同じ出力がされていることに気づいた。

なぜ...よくわからん...

と思い、コードとにらめっこ。

このコードを見つめている時間に、頭の痛みをズキズキと感じた。

頭をおさえつつコードをながめていると、いつもなら見逃さない場所で凡ミスをしていたことを発見。

文字列を一度キレイにクリアしなければいけないところで、コードの書き方を間違えており、残るはずのない文字列が残ったままになっていた。

何度も同じ出力がされている原因はこれだった。

コードを修正し、動作を確認し、再び提出した。

この時点で16:15ぐらいだった。

結果は...不合格。

トレースファイルをみると、どうやら大量の文字を送信したあとに、サーバーからエラーが吐き出されているようだった。

ちなみにエラー内容は「server returns 266」で、266ってなんだ?と焦った。

266とは何かを、manコマンドをつかっていろいろと調べてみたが、結局わからなかった。

試験中はインターネットは使えず、自分のケータイを触ることも禁止されているので、調べようがない。

試験が終わってから家にかえって調べてみたのだが、どうやらプログラムが異常な状態に遭遇した場合に、プログラムの実行を中断するために使用されるものらしい。

異常状態には、予期しないエラー、致命的なエラー、または処理できない状況が含まれているとのこと。

といっても、試験中は何が原因かわからなかったので、サーバー側で問題が起きているのと、大量の文字を捌いたあとに問題が起きていたので、そのあたりのコードを確認。

もしかしたら「listen関数」の引数であるバックログが関係しているかもしれないと予想をつけて修正。

そして提出すると、またもや不合格。

頭がズキズキといたむ。

サーバーから全く同じエラーが出ていた。

しかし、今度は少し違う箇所でエラーがでていたので、少しは「listen関数」のバックログをいじることが解決につながるかもと思った。

もう一度コードをながめ、もしかしたら文字列を一時的に保存する器が大きすぎて、文字を読み込む処理に時間がかかっているのかもと推測し、器を少し小さくして再提出。

結果はまたもや不合格。

結局よくわからないので、listen関数の引数であるバックログと、文字列を保存する器の大きさを再度いじり、再提出。

結果は当然ながら、不合格だった。

この時点で、すでに17:20になっており、残り時間は40分。

もしかすると、文字列の保存は、スタック領域ではなく、ヒープ領域で確保しなければいけないのかもと思い始めた。

すると、文字列を扱う箇所をすべて修正しなければならず、40分でぎりぎり間に合うかどうか。

決断をしなければならない。

頭痛がひどいのと、全部書き直すには時間がかかりすぎ、なおかつメモリーリーク対策もバッチリとこなすには時間が足りないと判断。

そこで、一部だけ修正してなんとかやりすごせないかを考えることに。

そして少しだけ書き直し始めていると、致命的な、かつ、初歩的なミスを発見。

頭痛がなければ、もっと早くに気づけていたかもしれない。

コードを修正して提出。

これでだめだったら、文字列の修正を急ピッチで行わなければと少しピリピリしていた。

そんな矢先、画面にふっと「合格」の判定が。

緊張が一気にとけた。

5回目の提出でやっと合格することができ、残り時間は20分ほどだったので危なかった。

試験後

合格した安堵感から、試験終了後は頭痛がすこし軽くなり、最後まで諦めずによかったと思った。

電車のホームのベンチで食べたビスコが、おいしかった。

これですべての試験が終わったと、勝利の味をしみじみと味わった。

頭痛がなければ、もっと早くにミスに気付けていたかもしれず、どこにいくにもバファリンを忘れずに持って行くよう決めた。

家にかえってバファリンを飲むと、翌朝には頭痛は治っており、バファリンのありがたさを感じた。

匿名のコメ・質問はmondまで👍 https://mond.how/ja/hovinci_jp