新卒プログラマーがエンジニアリングと人生について考える

May 20th, 2021

まずは軽く自己紹介。

新卒2ヶ月目のプログラマー(いわゆるWeb系)で、プログラミング歴は大体2年くらい。

当初はGeorge Hotzというハッカーに憧れてプログラミングを始めたが、プログラミング歴1年が過ぎたあたりの頃にWebアプリ開発に足を踏み入れてみたところ堪らなく楽しくて、そこからはずっとWeb開発一筋。

恐らくたまたま最初に出会ったのがWebアプリだっただけで、例えばゲーム開発に出会っていたらゲーム開発者になっていただろうし、ネイティブ開発に出会っていたらネイティブ開発者になっていたと思う。

要は、モノをつくるのが凄く楽しい。

もちろん、プログラムを書くことそれ自体も楽しいではあるが、作ったものが形となって可視化されるのは何ものにも変え難い快感がある。

Webアプリ開発を始める前は大学で常微分方程式を数値計算するコードなんかを習ったりしていたのだが、私に数学の知識が無さすぎるというのもあり正直あまり楽しいとは思えなかった。

大学以外でも競技プログラミングの問題を解いたりとなんとなくプログラミング自体は続けていたのだがイマイチ心の底から楽しめずにいたので、Webに出会わなければ恐らく職業プログラマーにはなっていなかったかもしれない(なれなかっただろう、という方が正確か)。

そんなこんなでWebアプリケーション開発者として就職して今に至るわけだが、現在私の生活の大半はプログラミングやアプリケーション開発の事で占められている。

単純に業務で必要な知識の習得だったり、アルゴリズムや数学等の広義でのコンピュターサイエンス的なお勉強だったり、個人開発だったり、ジャンルは違えど大まかに言えばプログラミング関連の事に大半の時間を使っている。

経験の浅い私のような開発者にとって一見それはとても良い試みのようにも思えるが、最近は逆に業務外ではプログラミング以外のことにも時間を費やすべきなのではないか、と考えている。


才能について

話は少し脱線するのだが、ここで「才能」という言葉について私の持論を述べる。

人々が「才能」という言葉を使うとき、持って生まれた先天的な能力、という様な文脈で使われている事が多いと思うのだが、私は能力の先天性に関して少し懐疑的でいる。

もちろん遺伝などの先天的な要因も少なからずは影響があるとは思うのだが、「才能」を作り上げるのはむしろ後天的な要因の方が大きいと考えている。

それでは、具体的に何が才能を作り上げていると私が考えているかというと、1つは幼少期の環境だと思う。

例えば野球のイチロー選手を例に取り上げてみると、彼は小学生の頃父親に毎日バッティングセンターに連れて行ってもらっていたのだという。

無論、小学生という遊び盛りの年齢で毎日バッティングセンターに通い続けるという行為は称賛されるべきなのだとは思うのだが、一般的なサラリーマ目線で言うと毎日息子をバッティングセンターに連れて行くというのは経済的にも時間的にもかなり厳しい。

加えて、父親自身に「子供を絶対にプロ野球選手にする!」という気概がなければ、いくら自分の息子のためとはいえどそのような行動には至らなかったであろう。

スポーツに限らず音楽や勉強、語学、芸術などでも当てはまると思うのだが、幼少期にどれだけ時間とお金をかけられるか、というのは「才能」を形作る大きな要因であると思う。

では、幼少期に満足のいく環境を得られなかった人は才能が無いのかというと、私はそうでもないと思っている。

私が考える才能の2つ目の要因として、「現時点での能力に関わらず、対象に対して情熱を持って取り組み続けられるか」だと感じている。

言ってみれば「好きこそ物の上手なれ」というヤツなのだが、これは真理だと思う。

やり込める人間は、それだけでその他大勢とは比べものにならない程強い。

逆に言えば、人から「向いてそう」「やれば出来る」と言われ続けて結局やらない様な人はその分野に関して才能が無いのだと思う。

余談にはなるが、私は17歳か18歳かくらいの頃に英語の勉強にハマっていて、大学1年生の頃にはTOEICで900点を超える程度には熱心に勉強していた。

ただ、私の入った学部というのがいわゆる帰国子女やインターナショナルスクール出身の学生が半数以上を占める学部で、その集団の中では私の英語力は底辺と言っても差し支えがなかった。

それなりに英語を勉強した自負があっただけあって、他の学生から英語ができない人扱いされたり、話す英語を馬鹿にされるのは、当時の私にとっては耐えがたい苦痛だった。

そういう意味で、私には英語の才能がなかったのだと思う。

英語に対する情熱は、その時点ですっかり失ってしまった。


プログラマーとしての才能

それでは、私にはプログラマーとしての才能はあるのだろうか?

言うまでもなく、現時点での私のプログラマーとしての能力は社内ではダントツの底辺だろう。

社内だけでなく、全世界でプログラミングを嗜んでいる人間を横一列に並べたとしても、もしかすると後ろから数えた方が早いかもしれない。

ただ、周りに自分と絶望的なほど実力が乖離した開発者達に囲まれながらも、プログラミングは始めた当初から相も変わらずずっと楽しい。

休日もコードを書いて終える事が多々ある。むしろ、そう言う日の方が多いかもしれない。

そう言う意味で、私にはプログラミングの才能は無くは無いのかもしれない¬(¬p)\neg (\neg p)

ただ、当たり前の話ではあるが、プログラマーとしての能力は単純に書いたプログラムの量だけでは決まらない。

ある程度品質の保証されたソフトウェアを作り上げるには、コードを書く能力だけではなくソフトウェア工学、ソフトウェアアーキテクチャ、ソフトウェアテスト等の知識が必要不可欠だし、それ以外にもネットワークやOSの知識、ゆくゆくはもっと低レイヤー、例えば型システムなんかを理解するには数学的な知識も必要になってくるだろう。

つまり、プログラマーとしてより高みを目指そうと思えば、広義でのコンピューターサイエンス的な知識が必要だ。

そう言う意味では、私には才能が無い。

モノづくりという文脈ではプログラミングは大好きなのだが、それ以外のお勉強的な文脈が私はどうにも苦手である。というより、あまり興味を持てない。

今でもごく僅かであるが学部時代に履修した微積・線形代数・確率統計などの教養数学周りを復習したり、数理論理学やグラフ理論などの情報数学周りの本も読み進めてはいるのだが、正直現時点では全く楽しいと思えない。

その昔、社内のソフトウェア工学修士卒の上司に上記のような趣旨のお伺いを立てた事がある。

その際は上司から、「アルゴリズムも解析学も、アプリ開発には必要ない」という回答を頂いた。恐らくこれは半分は真実なのだろうが、もう半分は私に気を遣っての回答なのだろう。

確かに、一般的なアプリケーション開発においてコンピューターサイエンスの深い知識はMust haveというよりはGood to haveの域を出ないと感じているし、コンピューターサイエンスの学位はプログラマー達の間で必要以上に神格化されすぎているなと感じる事がある。

ただそうは言っても、開発をする上でコンピューターサイエンスは軽視されるべきでは断じてない。先人達が作り上げた基礎があるからこそ、今我々がこうして高レイヤでアプリケーションを開発できる様になっているというのは理解しておくべきだろう。

話が脱線しかけたので、この話は別の機会にお預けとする。

要するに、私のプログラマーとしての才能はまだ分からない、半々といったところだ。


人生100年時代

「人生100年時代」と言う言葉の通り、恐らく今後も日本人の平均寿命は伸びるだろう。

我々が歳を重ねる頃には80歳くらいまで働かなくてはならなくなってもおかしくないし、現状の年金制度などを考えればそうせざるを得なくなる、と言った方が正しいだろう。

そうなった時、できるだけ自分が出来ることは増やしておいた方が良いし、例え直接キャリアに結びつかなかったとしても、心の拠り所を分散させるという意味でプログラミング以外の物事にも時間はある程度投資すべきなのかもしれない、と最近考えている。

生活するために向こう数十年はコードを書き続けなければならないわけだが、もしかしたらキャリアの途中でプログラミングに挫折し、情熱を失ってしまうことも無いとは言い切れない。

そんな時、プログラミング以外に心の拠り所がなければそれはきっと苦しい。

だから、休日はなるべくプログラミング以外のことにも時間を費やすべきではないだろうか?と最近は考えている。

私の父は取締役に就任してここ10年ほどは直接手を動かさなくなったものの、元々はシステム工学部を卒業してWeb系のソフトウェア開発者になったバリバリの技術者上がりである。

そんな父に、先日LINEでコンピューターサイエンスを勉強すべきか、それ以外の趣味などに時間を使うべきか?という様な相談をしたところ、以下の様な返信を頂いた。

父のエンジニアキャリア論


この返信には私は心底安堵させられた。

私にプログラマーとしての才能があるかはまだ分からないが、現時点ではアプリケーションを作るだけでとても楽しいし、それで満足している。

それならば、無理して興味のない分野の勉強に多大な時間を投資するよりは、趣味や未経験だが興味のある分野などに時間を投資する方が有意義なのかもしれない。

最近はそんな風に考えている。