見出し画像

42Tokyoで学び直す

この記事では、なんかこう思いのままに何故自分が42に入ろうと思ったかと、何を期待してるのかということをとりとめもなく書いていこうと思う。

整理せずに、思いのままに書いていくスタイルで行こうと思う。

とても長くなってしまったので、結論だけ先に書くと、

「42とても楽しいよ」

ってことだ。

じゃあ始めていく。

注意

いろいろなバッググラウンドの人が集まり、個々人のおかれた状況状況によって感じる感想は異なると思うので、結局は自分の目で体験してみていただけると良いのかなと思います。

誰?

Twitter: @sukesan1984

年齢は36歳で、友人と人生をどうすればよくできるだろうかということを議論するPodcastなんかをやっている。

細かい自己紹介はこちら

バックグラウンド

大学〜大学院は、化学系で有機ELの素材の構造解析を行う研究を行っており、Fortranを触ることはあってもComputer Scienceに属する類の単位は一つもとっていません。

2010年に新卒でエンジニアとしてDeNA入社し、ソーシャルゲームのバックエンド開発、Unityでのクライアントサイド開発などを担当した。右も左もわからない状態で、色んな人に支えられた。

2016年にFiNC Technologiesに入社。Androidエンジニア→モバイルチームのマネージャーを経て、食事画像に映る食材のSemantic Segmentation/Object DetectionのPoC、健康記事のレコメンデーション基盤の構築などを担当した。とにかく色々経験させてもらった。

2020年に株式会社BHIに業務委託エンジニアとして入社。現在は、メールデータから構造データを抽出するデータ基盤の開発などを担当している。Less is moreという価値観が非常に気に入っている。情報過多のこの世の中から自分たちの時間を取り戻したい。そういう思いは自分も強く共感するところだ。

42を見つけたきっかけ

友人がネット上で面白いクイズがあると教えてくれて、2時間ぐらいかかるのだが、かなり面白くて、集中して取り組んでいたら気づいたら終わってた。もうちょっとやれたんじゃないか!?という気持ちになって他の人がどれくらいやれるのか気になるし、共有したくなるそういう問題。

とてもおもしろいので入学しようとする意図がなくてもクイズ受けて見るだけでも是非。おすすめです。

Piscine

運良くウェブテストに合格したので、おーなんか面白そうだしやってみるかーというノリと空気で一ヶ月の入学試験にも申し込んでみることにした。

ほんとは42のコンセプトからすると、こういうお遊びみたいな気持ちはよくないという向きもあるかもしれないけど、適正は運営が判断してくれるはずだし、今はとっても真面目に取り組んでいるのでお許しいただけるとありがい。

実は、開始直前になって超絶めんどくさくなって、行きたくないなぁ・・と思っていたのは内緒だ。当日になって、流石に初日ぐらいは行くか・・・初日だけねっていう気持ちで参加したのも内緒だ。

Piscineの内容は書けないのだけど、初日に参加した瞬間、「あー俺が求めてたのはこれだ!!」感がすごくあって、そこから一ヶ月は一気にのめり込んで楽しんでやれた。

で、その中で過ごすにつれて、自分に足りないのはこれなんじゃないか?と薄っすらと感じ始めたのが42に本格的に参加しようと思ったきっかけだ。

Piscineの運営がすごく良く出来てて、福本先生が監修してるのでは?と友人とずっと話してた。

自分の技術力の限界

自分の技術力的な話にうつる

バックグラウンドにも書いたようにエンジニアとしては割と幅広くサーバーサイド、クライアントサイド、機械学習などに携わってきて、なんとなく一エンジニアとしては、一通りやれるかなぁという感じはあった。

マネージャー的なキャリアでみると、2年ほどやらせていただいた時には、とてもとても納得できるような結果ではなくて、迷惑をかけたなという印象で、はっきり言ってどうすべきか?全く答えがみえていない。色々原因はあると思うけれど、一番は後述するような技術力が足りてないことに起因すると思っている。

一エンジニアとしては、割と雰囲気でコードを書いてきて、困ったらStack Overflowみて問題解決して、テストを書いて、動くコードを書いて、QAして、バグを直して、インシデントが起きたら問題箇所を特定して解決してと、目の前にあるボールをひたすら打ち返すようなスタイルで来て、こういう感じであれば、まぁ後5年ぐらいなら、なんとかなるかなぁと思っている。

しかし、その先はどうかというと、ちょっと難しいなと感じている。

例えば、チームとしての生産性を上げるためのアーキテクチャを考えたり、プロダクトの成長に合わせた組織設計だとか、直感的に「あ、今の自分には全く想像がつかないな」と思うタスクに対して、できる方法を模索して提案するのではなく、直接的に解決できる方法を提案するとか。

最後の「できる方法を模索して提案する」に関しては、一定それはそれで価値はあると思うのだけど、やっぱり今まで見てきたスーパーなエンジニアな方々は、自分だったら、回避するような事を直球で打ち返す力を持っていて、そこに到達できるイメージは全く持てないなというのが正直なところだ。

ドキュメントを読む力

果たしてそれがどうすればできる様になるのか?というのはてんで想像はつかないが、一つ自分が圧倒的に足りてないなと感じているのはドキュメントを読む力であると思う。

できるエンジニアは公式ドキュメントをちゃんと読んでる。

というのは最近自分が言ってることなんだけど、

恥ずかしながら、自分はRFCの中でまともに読んだ項目はないし、何だったらAWSのサービスのドキュメント読むのも億劫で、安易な解説サイトで理解してふむふむってなってることがすごく多いなと言うのを自覚している。

これは、日々振ってくるタスクを処理する上ではなんとかなる時もあるんだけど、早晩頭打ちが来る方法だと思っている。

地道にオフィシャルなドキュメントをしっかり読み込める力が必要だ。manとかもよく読むと知らなかったこととかが書かれてたりする。

このドキュメントを読む力というのは、42で身につくスキルの一つだと思っている。何故ならば、本科の最初の方の課題は、「既存のある実装を再実装してみよう」というような課題で、c言語だとlibcの再実装だったりする。これを正確に実装するためには公式ドキュメントなり仕様なりをしっかり読んで理解した上で再現する必要がある。manは読み込まないといけないだろうし、先の課題ではRFCに当たらないといけないだろうと思う。なぁなぁにしていた公式ドキュメントを読むということをやらないとクリアできないようになっている。

最近取り組んだprintfの再実装課題では、x86-64のABI仕様のva_argsの挙動なんかを結構念入りに読んだりしたのは、昔だったらできないことだったなと思って誇らしく思っている。

読まなくてもクリアできるけど、ちゃんとやるなら読んだほうがより学習には効いてくる。

やはり先人たちがしっかり考えてしかも皆に読まれる形でドキュメントに残してあることから学べることは非常に大きい。

(*printfのundefinedな挙動にはあまり納得がいってないが、これはきっと何か自分が思い及ばない深い事情があったに違いない。)

人のコードをしっかり読む力

もう一つ自分に足りてないと思うのは、コードをしっかりと読む力である。

PRのレビューとかしていても、自分のコードリーディング力は低いと思うことが多い。他の人にレビューしてもらうと「なんでこんなことに気づくんだ!」というような指摘をしてもらえることが多くてすごいなぁと思ったりする。

一方で自分はすぐにLGTM出しがち。

ちゃんと読めてないんだと思う。

コードを読むのにもいろいろ段階があるが、ここまでやればオッケーみたいな明確な線引はないように思う。自分が知らないだけであるのかもしれない。

例えば、PRで読むにしても、「github上で、コードを読む」「branchにチェックアウト(今はスイッチっていうのかな)して手元でコードを動かしてみる」「コード書き換えてサンプル実装を作ってみる」「ビルドして端末上で動作確認をする」とか、やり方は色々あると思うけどそれをどこまでやるか?みたいなところはかなり人に寄ってるところがあると思う。もっと違うやり方をしている人もいるだろう

なんにしても、すごいエンジニアはコードを良く見てる。

これどうやったら身につくんだろう?と思う。

最近自分がやって、コードをすごく読んだなという一つの事例としては、コンパイラ作りだ。 低レイヤを知りたい人のためのCコンパイラ作成入門を読んで面白そうだと思って始めて、つい最近セルフホストを達成できてとても嬉しいのだけれど、この取り組みの中で、rui314さんのコードを参考に実装していくことになったので、コードで理解するためにただひたすらコミットを追ってコードを読みまくった。

これはとても力になったと思う。

42ではどうか?

42では、コードレビューはピアレビューでお互いの画面を見ながら自分のコードを一行ずつ説明をしてお互いが納得するまでレビューをする。時に説明に不安を覚えるときには、実験的なコードを書いて動かしてみて動作を理解したり、ドキュメントをその場で一緒に参照しにいったりもする。とても時間がかかる、レビューに二時間以上かかったりすることもある。しかし、これはとても有用なことだと思っていて、他人のコードをしっかりと読む練習になるし、そのスピードも上がっていくのではないかと思う。

後、人に解説すると自分が理解していない部分がよく分かる。「あ、ここの理解が弱いからなんか説明曖昧になってるな」というのに気づく。そのときに後でもう一度調べ直して説明をする。これもとても良い。

こういう自分が理解してると信じ切っているものでももう一度説明しようとしてみる機会になるのがとても良い。

また、42にはいろんな人がいるので、その人の理解度に合わせた説明を心懸ける必要があり、他人にどのように説明すれば伝わるか?ということを身につけるのにも良いと思う。

異世界でも活躍したい

全然話は変わるんだけど、個人的に異世界に行っても活躍できる人材を目指したいと思っている。

例えば、Dr.STONEなんかは異世界ではないものの、あらゆるもののの組成を知り尽くしす主人公の千空が大活躍している。

自分が今の知識を持ったまま過去にさかのぼったとして何年前なら活躍できるだろうか?ということを考えたりする。

1年前とかだったら、なんかこう事件のようなものを予想して預言者ぶるぐらいのことしかできないかもしれないけど、火が生まれる前の世界まで戻ったらひょっとしたら火を起こしてみせることで大活躍できるかもしれない。

まぁそこまで大活躍できなくても良いんだけど、なんとなく何もない状態からスクラッチで何かを作り上げて行けたら驚いてもらえるかもしれない。そういうことやれたら良いなと思う。

それもあって、コンパイラ作りにチャレンジしてみて、これがとっても楽しかったわけなんだけど、こういう何か基礎となるスキルを探求したいという気持ちがある人には42はとてもおすすめな場所だと思う。

ホントは鉱石を掘り出すところからコンピュータを作り上げるところまでやってみたいんだけど、異世界でゼロからコンピューターを作る方法を読んで、15年ほどかかるということを知り頭を抱えている。いつかこれもマスターしたいと思っている。

そういうことは学生時代にすませておけよっていう話があるかもしれないんだけど、学生時代は学生時代でかけがえのない友人と自堕落な生活を送るという選択をしたのでしょうがない。そればっかりはできなかったことを後悔してもしょうがない。

今に目を向けてしっかり進んでいくしかないだろう。

最終的にどうなりたいのか?

最近思うのは、何かを作りたいと思ったときの選択肢を増やしたいということ。

ついつい今自分ができる範囲でやっちゃうところがあるんだけれどやっぱりそれって狭いし、もっと視界を広げていろんな選択肢から選べる様になったほうが面白いと思う。まったくもっての推測にすぎないんだけど、低レイヤの知識は応用範囲が広いような気がしていて、そこを追求するとできることが増えていくのではないかという淡い期待を寄せていて、そういった勉強をしたいと思う。そのためには、42に限らないんだけどいろんな事を新しく学んで行かないとなって思っている。

後は、できれば何か人類の知識をほんの少しでもいいから前進させたいなと思っている。そのためには巨人の肩にまず乗らないといけない。巨人がでかすぎて登れないよってのが今なんだけど、まぁちょっとずつ這い上がっていくしかない。そのための足場作りをしていきたい。そのために42が自分にとっては素晴らしい学びを得る機会になっている。

まぁ、いろいろ書いたんだけど、一番大事なのは今を生きるということで、今この瞬間楽しいかどうか。それが一番大事で、自分としては、まだ始まったばかりだけれど、42に入学して最高に楽しいし、これをしっかりと進めていければ、自分が想像しなかった状態になれるんじゃないかなととてもワクワクしている。

#42Tokyo #自己紹介

この記事が参加している募集

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