私は今修士課程2年で、修了後は就職するつもりなので、つまり順当に行けば大学に在籍するのはあと1年間である。
最近になってこの1年間の価値は大きいと考え、じゃあなにをするのかを考えた。
働くということ
社会に出て働き金を稼ぐということは、自分が求められている価値をなんらかの形で提供することである。
自分はいわゆるWeb系で働くつもりなので、提供するのはプログラミングに付随するエンジニアリングになる。
これまで、自分は主に情報工学を学びながら、多少プログラミングをした。
特に、Webサービスや自動化するスクリプトを書くのが好きだった。
しかし、それらが本質的になぜうまく動いているのかは理解していなかった。
でもそれでよかった。動けばよかった。なぜならそれらは仕事ではなかったからだ。
これまでは、なんかすごい道具を買ってきて、なんとなくうまくいきそうで作ってみてそれが動けば目的は達成だった。
仮にプロフェッショナルに仕事を依頼し、同様に動くものを作ってもらうとして、
なぜそれらの道具でうまくいくのか、なぜその道具を選ぶのか、その道具はなにでてきているのか、などの問いに答えられなかったとしたら、
それでも依頼を続けるだろうか。
原理的な知識無しには、本当はなにもできていないのではないか。
機械学習のことはあまり知らないので本当は話に出したくないのだが、最近台頭したフレームワークを使ってみたら、
なんかすごい結果がでた、さらにパラメータを試行錯誤すると、もっとすごくなった、という話はざらにあると思う。
この裏側には、コンピュータを安く買えるようになったとか、アルゴリズムが進歩したとか、使いやすいフレームワークになったとか
色々あると思うが、言いたいこととしては、とにかく参入の敷居が下がったということだ。
ここからは空想だが、近い将来、誰でもボタンを数回押すだけで目的が達成できるようになったとしよう。
すると、ボタンを押すことが仕事になるだろうか?一方で、ボタンを数回押すだけで目的が達成できるようになった、という仕組みを作った人は必ずいる。
そちら側にいない限り、価値を提供し続けることは難しくなる。
学生という立場
学生は基本的には暇なので、結構なんでもできる。
遊び呆けることもできるし、アルバイトやインターンの身分で実際の業務に携わることもできる。
社会にでてから学ぶことは、基本的には業務に関する情報である。
新卒研修というので基礎的な素養を叩き込むのが一般的と思われるが、それがどの程度の効果なのかは真に定量的には保証されていないと思う
(ペーパーテストやプログラミングテストは真の意味で適さないと私は考えている)。
学生がやるべきことは、その業務の前提となる素養を身につける勉強をすることなのではないか。
もしかしたらすごく当たり前のことを言っているかもしれない。しかし、そのことに最近気がついた。
修士という立場上、研究は必須であるが、資本主義社会において企業は常にイノベーションを起こして成長が必要であり、
素養を身につけるという本質は変わっていない。
バイトで適当に小遣いを稼いだり、適当にプロダクトを作って喜んでいる場合ではないということである。
学生は、その身分の間でしかできない、勉強と研究をするべきということに気がついた。
なにを学ぶか
世の中にいる同世代もしくはもっと下の世代で、OSSで活躍したり、コンテストで表彰経験のある人というのは、
早い段階で、基礎的な部分を学習し、その上で応用やイノベーションを起こしているのだと思う。
その前提において、自分が極めて底辺に位置するということがわかったので、そこは開き直って最初からやっていこうと思う。
まずUnixを学ぶ。WebもUnix思想に大きく影響を受けているし、Webアーキテクチャを語る上でUnixの話は避けて通れないはずである。
なにより今この文章を書いているMacbookもUnixだし、Webサーバが動いているのは普通Unixである。
その上で、システムパフォーマンス、特にネットワークを学びたいと思う。
理由は、自分がインフラ領域をやりたいと思っているのと、今配属している研究室がネットワーク分野だからという理由である。
最近簡単なプロセスの本とソケットプログラミングの本を読んだ感想としては、面白かった。もっと学びたいと思った。
昔これらを学んだときに分からなかった面白さが理解できるレベルにやっとなったということかもしれない。
スパイラルアップで学習することが長期的に見て一番効率がいいということも最近気がついた。
まずは気楽にベストエフォートでやっていこうと思います。