42Tokyo での学びを振り返って

こんにちは、ウチイダです!
42Tokyoの最初のころから在学していた1人ですが、あす2022年8月30日に在学期間終了となります。
2020年2月の入学試験に合格して、2020年6月から本科に入学したので、2年半の学びの道程でした。

実はさっきまでラストチャンスのピアレビューをやっておりました。
レビューを通せればもうちょっと期間が延びていたはずなのですが、力及ばずバグを取り切れずに不合格となってしまいました。

レビュー終わって、そのままの勢いで久しぶりにnoteを書いています。
42で学んだことについて、まとめておこうと思います。

42Tokyo との出会い

過去に自身のブログに書いたこともありましたがあらためて。
知人が教えてくれたプレスリリースをみたことがきっかけで42Tokyoを知ったのが2019年の冬でした。
なにやらびびっとアンテナに響いて、入学試験に参加することを即決しました。

会社でいろいろ根回ししたり調整したりを重ねて、半休を取りつつ4週間の入学試験に参加できるように環境を整えたり、C言語で試験をやるらしいという情報をもとに有志で勉強会をしたりと、前夜祭的な熱気を楽しんでおりました。

試験の内容は語れませんが、事前の準備期間をふくめて、すごく濃密な期間でした。

42Tokyo 入学~最初の課題突破まで

なんとか入学試験の合格をいただいたものの、時は2020年です。
COVID対策のため開校日程がズレたり、オンラインでの実施に変更になったりと、いろいろありましたが、2020年6月下旬に第1期生の一人として本科に入学しました。
試行錯誤して開校にこぎつけてくださったスタッフの皆さんには感謝しかありません。

本科の最初の課題はC言語の標準ライブラリに含まれる関数の一部(ctype.h とか string.h とか)を自分で実装するというものでした。

当初はオンラインでのコミュニケーションに慣れなかったこともあって、課題をうまく進められず苦労しました…
入学試験をギリギリで突破したようなレベルとはいえ、多少はC言語の雰囲気を理解しつつあったと思っていたのですが、完全に気のせいでした。
試験期間中は近くに相談できる・聞ける人がいたからこそ、なんとなくできていただけでした。

そこから、自力で理解を進めるために公式のドキュメントを読むこと、英語を恐れずに情報を収集することなどを意識するようになりました。
このことを経て、新しい技術的な要素を身につけるスピードが上がったように思います。

調べごとに時間かけすぎて、最初の課題でいきなり提出期限ぎりぎりになってしまいました。入学後も時間との闘いは続いていましたね。。。

余談ですが、42Tokyoで「BlackHoleギリギリ回避」の実績を解除した最速ホルダーの一人です。まったく自慢になりませんね。

これ以降の学び、気づきいろいろ

これ以降もいろいろなことを学んだのですが、書き始めるときりがないのでダイジェストでお届けします。

C言語の基礎

いまでも「完全に理解した」レベルにすら到達できていないのですが、C言語のいろいろなシステムコールの使い方を学ぶことができました。

ウチイダはもともとなんちゃって趣味プログラマーでして、Webサイトでプログラムを動かしたくてPHPやJavaScriptなどのいわゆるライトウェイト言語から学び始めました。
主要な動作が思った通りに動けば満足していた輩です。テストコード?そんなものは知らん。

そんなレベルのウチイダが、42Tokyoの課題を通じてメモリ管理の概念を理解し、連想配列の内部実装としてハッシュテーブルという仕組みがあることを知り、プロセスやスレッドを使って簡易的な並行処理を書くことができるようになりました。

2年半かけてこんなもんか…という気もするのですが、おそらく42Tokyoに入学しなければここまできちんと学ぶことはなかったんじゃないかなと思います。

人に教え、人から教わることの効果

42Tokyo では学生同士で教えあうことが日常的に行われています。そういう仕組みとしてデザインされているからです。
まだ取り組んだことのない課題の評価・採点をしなければならない場面が頻繁にあります。

その環境を通して、人に教えたり、教わったりすることから得るものがとても多いということを感じました。
自分が提出した課題を入学直後の人にレビューしてもらうときは、相手の理解度を確認しながら、その人に伝わるように説明をします。
反対に、自分がまだやったことがない範囲の課題をレビューするときは、実装内容や要求仕様についての自分の認識を述べつつ、きちんと理解できているか確認しながら評価をつけます。

この取り組みは毎回とても力を使うのですが、相手に伝わる説明ができるようにしていくと、自然と理解が深まっていくことを実感しました。

あと、コミュニケーションの齟齬を減らす技術が身についたなと感じています。

またまた余談ですが、42Tokyo入学後に退職してフリーランスとなりました。
お仕事のひとつとしてプログラミングの研修の講師をやりはじめたのも、この「人に教えることの効果」を知ったからです。

開発のお仕事で身につけた知見を、新人さんにもわかりやすい表現や教材に落とし込んでいくことを通じて、知識が洗練され、次の開発のお仕事で活用できています。

あと、もう一つ余談ですが、長期の研修を任せてもらった場合は、42Tokyo 的な指導方法を取り入れたりしています。
解釈の余地を残した実装指示書に基づいて、周りと相談しながらプログラムを書き、相互レビューで内容を確認しあう、といったものです。

あと、期間を決めてのチーム開発などに取り組んでもらうこともあります。

42Tokyo の学生にはおなじみの「つら楽しい」というワードを、研修受講者の間に流行らせています。

42Tokyo 的な指導方法を取り入れると受講者の満足度が高く、ウチイダに講師業務を発注している研修会社さんからも喜んでいただけています。

もともとウチイダはもくもくと学んだり作業したりを好むタイプでした。
いまでもそのほうがはかどると思う場面もあるのですが、相互に教えあうことを通じて知識をアウトプットするメリットはとても大きいと思うようになりました。

42Tokyo で学んでなかったら、こういうスタイルの学び方の意義を知ることはなかっただろうと思います。

競技プログラミングデビューとアルゴリズムの考え方

42Tokyo の課題とは直接かかわりませんが、これもまた42Tokyo を通じて触れたもののひとつです。

42Tokyo の入学試験の事前対策として、有志で簡単なアルゴリズム問題に取り組んだりしました。
試験対策として意味があったかどうか?、、、それは言えませんね。。。参加したらわかります。

そこからAtCoderをやってみたり、PGBattle に参加したりするようになりました。
アルゴリズムの種類や実装をしっかり学ぶ時間は全然とれていないので、全然身についていないです。

ろくに取り組んでもいないうちからこんなことを言うのはよくないですが、ウチイダは数理的センスがなさそうなので、今後も成績伸ばせるかはわかりません…

42Tokyo でのC言語の課題と同様、いままでまったく目を向けてこなかったプログラミングの新しい側面でした。

才能のある人の急成長ぶりと、自身の伸びしろについて

ちょっとだけナイーブなことを書きます。

42Tokyo は自走力のある人ばかりなのですが、そのなかでもすごい勢いで成長していく人たちが一定数います。
プログラミング未経験から入学試験を突破し、1年ほどで42Tokyo のスポンサー企業に入社していくような人たちがたくさんいるのです。

そういう人たちを見ていると、42Tokyo の教育の質の高さを感じるとともに、目標を達成した人たちの姿からモチベーションをもらうことも多いです。

一方で、個人の「得意・不得意」や「才能」の存在を実感します。

そして、おそらく、それは自分の中にはなさそうだ、という現実を感じることもしばしばあります。

思えばウチイダは、子どものころから算数は不得意科目でした。大学受験の時も、理数系では失点をしないことが目標でした。

ですので、コンピュータサイエンスそのものには、さほど適正はないということはわかっているつもりでした。
しかし、そんな自分も42Tokyo で学ぶことができたら、それを覆せるかもしれない…という淡い希望も持っていたのでした。

現実はそんなに甘くなく、主観としてめざましいと言えるほどの能力向上には結びつきませんでした。

42Tokyo のカリキュラムや教育システムは素晴らしいと思いますし、42Tokyo に入らなかったら身につけることはなかったものがたくさんあります。

思い描いた理想通りにはいかなかった、というだけのことです。

とはいえ、それで不貞腐れていられるほど若くもないというか、自分ができることってなんなのか、ということを改めて見つめなおしています。

身一つでコンピュータサイエンスの沖合深いところまでは行けそうにないことはわかりましたが、42Tokyo の課題を通じて、浅瀬ちゃぷちゃぷのところまで進んでくることはできました。

ここから先、浮き輪を装備するのかクルーザーを手に入れるのか、工夫を凝らして自分の能力の使い道を探り続けたいと思います。

劇的な変化は望めない。地続きの先にしか未来はない。それを改めて胸に刻んで、この先のことを考えています。

これからの学びについて

ウェットな感じになってしまいましたが、42Tokyo での学びを終えたいま、新しいことにチャレンジしていきたいと思っています。

直近でやってみようと思っていることに、以下があります。

設計やプロジェクト管理

直近では開発のお仕事につながる学びを深めていきたいと思っているので、ソフトウェアアーキテクチャとかプロダクトマネジメントなどを改めて学んでみたいです。

これまでずっと、見よう見まねでしかやってきていなかったので、そろそろ全体像をつかんで体系化しておきたいところです。

データベース関連をもっと深く学びたい

お仕事で10億レコードくらいの規模のデータベースの操作する機会があったのですが、何も考えずにクエリ書くと実用に耐えない速度しか出なかったので、インデックス見直したりキャッシュ使ったり、結構な工夫を強いられました。

結果的に、自力でどうにか及第点の速度が出るところまで実装できたのですが、データベースのこと何も知らなかったんだな…と改めて無知を実感しました。

これを機に、SQLもNoSQLも改めて学びなおしていこうと思っています。
フレームワークにかかわらず幅広く使えるので、汎用性もありますし。

マイクロサービスのフレームワーク

42Tokyo でちょっとだけGoを触りましたが、新しい言語やパラダイムにも取り組むつもりです。

いまは小規模な開発のお仕事が多いので、Laravelとか.Netとかでサクッと作ることが多いのですが、大規模なサービスのチームメンバとして関与することもやってみたいと思っています。

まずは目の前のお仕事の品質を上げていきたいので、これはちょっと後回しですが…

そのほか

これらのほかにも、いろいろとやってみようと思っていることがあります。

42Tokyo 以外にエンジニアさんのコミュニティに属してみることとか、エージェントさんに話を聞いてみたりとか。

独立2年目にして、いまだポートフォリオと言えるものが全く用意できていないので、よく使っているフレームワークで、何か作ってみようかなとか。

42Tokyoで学んだことから派生して、自分に足りないものや学ぶべきことをたくさん見つけることができました。

これからも自分のペースで、地に足つけて学んでいきたいと思っています。

おわりに

この記事を書いているうちに日付が変わりました。

2022年8月30日、今日で42Tokyo とはいったんお別れです。

42Tokyo に入ることを決めてからは、あわただしくも実りの多い日々でした。

この期間に、前職を辞めてフリーランスになりました。

知らないことをたくさん学んで、たくさんの優秀な人たちと知り合うこともできました。

自分の伸びしろを見つめなおして、これからの方針を考えるきっかけを得ました。

目標のレベルまで到達できなかったのは無念ですが、悔いはありません。
もっと頑張れた部分はあったかもしれませんが、やれる限りはやったと思います。

長くなりがちなウチイダのレビューに付き合ってくれたすべてのレビュイーさんたち、
不適切な実装を的確に指摘してくれたレビュアーさんたち、
そしてオンラインで顔の見えない中、学習環境を支えてくれた運営スタッフのみなさん、改めてお礼申し上げます。ありがとうございました!

これから42Tokyo で学ぶみなさん、ここでしか学べないことがたくさんありました。ぜひ、全力を尽くしてください。

最後に、好きな小説から、今の気持ちにぴったりな言葉を引用して結びとします。

きっと十年後、この毎日のことを惜しまない

ーーー『氷菓』折木供恵の手紙より

この記事が気に入ったらサポートをしてみませんか?