プログラマー35歳定年説の嘘と老害プログラマーの真実

新しい技術が出てきたとき、若くて優秀なプログラマよりも圧倒的な速度で概念を理解しすぐさま習得できるおじさんプログラマというのが時折いるのをご存じでしょうか。

なぜこのようなことが起こるかというと、実は新しい技術を習得するために必要なのは、若さよりも「経験に基づいた体系だった基礎スキル」であるからに他なりません。

本記事ではプログラマー35歳定年説の嘘を暴き、老害プログラマーがどうやって生まれるのかの真実をお教えします。

新規技術に関するとある真実

たとえば、ある新規ハードウェアを検証する必要があり、20代の若いプログラマにどう検証すればいいかを相談されたので「ドキュメントは読んだ?」と返したのですが「ドキュメントを読んでもよくわからないんです」と返されました。

確かにこのハードウェア、リリース前のものだったのでググってもまったく情報が出てこない代物だったのですが、日本を代表するとある京都の会社が作ったものだったので、ちゃんとした日本語のドキュメントが一式揃っていましたし、私が見る限り足りない情報はなく、Q&A専用のサポートサイトまで準備されていました。

「サポートサイトは使った? そもそも何がわからないの?」と聞くと「うーん」と首をかしげるばかりで一向に要領を得ません。

要するにこの子は何がわからないかすら理解していなかったということです。

とはいえ、決して落ちこぼれというわけではなく、チームリーダーも務められるような優秀で飲み込みの早い子です。

また違うタイミングで、コリジョン(衝突判定)の最適化をする必要がでてきたとき「衝突の判定がわからないので教えてください」と言ってきた違う子に、数学の基礎から分かる衝突判定の本を渡したら「数式が分からないから読めません」と返してきました。

じゃ、試しにAABB(軸に平行な直方体)同士の衝突をやってみようということで、処理の流れを説明してみると、流れの中で、そこで使われている数学の概念自体を理解していないことが判明しました。

他の子に関しても1フレームの速度を改善するために、毎フレーム呼ばれる処理の中にあるデータ構造とアルゴリズムにネックがあることは分かっていたので、その見直しを依頼してみると、コンピュータサイエンスの基礎が理解できておらず、それぞれのコンテナをどのように扱うべきか理解していなかったりしました。

このようなことは、プログラマ(エンジニア)に限定した話ではなく、デザイナーやプランナーといった他の職種にまで及びます。

新しい技術、新しい手法、新しい概念、新しいソフトやハード、そのほとんどは、実はまるっきり目新しいものではなく、大抵は何かの系譜に基づいて生まれてきています。

根底を覆すような革新的な新技術などほとんどないということです。

そして、すでに業界で10年、20年と経験してきたおじさんプログラマはこのような新しいものを見ても「ああ、これはアレの応用だな」とか、「この考えはアレと似ているな」といったように何かと関連付けて理解につなげることができるようになっています。

ありとあらゆるものが線で繋がっている状態なので、あっという間に理解ができるわけです。

これに対して若い子は技術をまだ点で捉えているため、自分が今まで学んできた技術と新しい技術がどのように繋がるのかがまったく想像できず、理解のための手がかりが近くにあることにすら気がつかない、そんなことがおきます。

技術は進化するが知識は陳腐化しない

プログラマー35歳定年説が叫ばれた頃に言われたこととして「技術はすぐに進化するから、老害化したおじさんの知識は何の役にもたたない」というのは、まったくの嘘なわけです。

もちろん、古くなれば直接使えなくなる知識はいくらでもあります。

しかし、役に立たなくなる知識というのはほとんどありません。

例えば、今はアセンブリや構造化プログラミングのような古いものを使うことはありませんが、実はその考えは今の最新の言語や設計に繋がっています。

プログラミング言語の思想も突然0から生まれるわけではなく、昔からの系譜として設計されているので当然ですね。

今からソフトウェア開発をはじめるエンジニアが最新の技術だけを習得し、時代遅れの知識を学ぶ必要はない、ということにはならないわけです。

それどころか、もうプログラムすることもないような技術であっても、それを深く理解して使いこなしている人の方が、流れをつかむのが早いため、新しい概念をいち早く理解して使いこなせることが起きるのです。

衝突判定やアニメーションなど、最近は既存のエンジンが勝手にやってくれるような処理でも、その仕組みを理解し、自分で1から組み上げられる人間の方が、エンジンの役割や意味を素早く的確に理解し使いこなすことができるのと同じことですね。

ディープラーニング(深層学習)のような新しい手法でさえ、学習していなかった頃の初期のAIがどう動いていたのかを理解してる人の方が、どこにどう機械学習を導入すれば効果的なのか判断がつくようになります。

これは何でも機械学習すれば解決するわけではない、ということからも明かです。

新しい概念の本質は、既存技術では為しえなかったことを置き換えるために存在してるので、既存技術の酸いも甘いも噛み分けた人間の方が理解に達する速度が圧倒的に早くて当然ということです。

中にはいくら古くても新しいものに置き換えなくても良いものも存在しますから、無駄に新しい技術や概念を取り込んで現場を混乱させることもありません。

ただし、これは10年、20年もの間に基礎からしっかり体系だって積み重ねてきたおじさんプログラマ限定の話であって、一切何も積み重ねてこなかったおじさんはただの老害であることは間違いありません。

私はこの差が大きくでるのが35歳ごろだと確信しています。

何より積み重ねてきたおじさんたちは仕事の中で勉強を積み上げているので、週5日間、毎日8時間以上の積み重ねを行ってきたわけで、それまで何も積み重ねてこなかった人との差は、10年ほどの月日だとしても超えることが不可能なくらいに絶望的な差だといえます。

そして、そうやって開いてしまった差は速度が逆転することもないので、もう二度と埋まらないわけです。

これが若い人であれば、やる気さえあればこれから時間をかけて知識を体系的に積み上げていくことで何年後かには追いつくことも可能なのですが、一切やってこなかったおじさんプログラマには、もう時間も気力もありません。

結局、二度と取り戻すことができない「若さ」という時間を無駄にしてしまったおじさんにとっては、35歳は定年と等しい意味を持つわけです。

この現象をもって私はプログラマー35歳定年説は正しいと主張します。

逆に今まで長年の積み重ねをしてきたおじさんは、多くの若者よりも圧倒的に加速が効くわけです。

加速できるものの最高速度が足りないおじさんが生き残る方法

ただし、世の中には天才というのはいるもので、東大や京大の院レベルになると、最初から適わないくらいの学力や知恵、数学知識、コンピュータサイエンスの理解といったような武器を兼ね備えており、わずか2、3年でおじさんの10年、20年を追い越してくのも事実だったりします。

要するにおじさんは加速が得意ですが、最高速度はとてもではないが適いません。

経験を積み重ねてきたおじさんでさえ、そういう類い希な若い才能と真っ正面から争っても負けてしまうので、いくら基礎能力が高くても、時間をかけて経験を積まない限りどうにもならない分野においてポジションをとり、若い彼らと協力し一緒に問題を解決していくのが一番良いと言えます。

特に「高い基礎力」と「長い時間をかけて積み重ねた経験」の両方を兼ね備えていなければできない仕事というのも往々にしてあり、それは「基礎力の高い若者」にも「経験を積み重ねたおじさん」にもできないため、分担を余儀なくされることになります。

そういった立ち位置を手に入れることができたおじさんは、得意の加速を活かしつつ若者の最高速度を利用できるので、老害と呼ばれることもなく、定年という概念も知らずにいつまでも自由に走り続けることができるわけです。