エンジニアの成長における過去と現代の違い

自身の過去の成長過程と現在の環境を思い浮かべたときに、得やすいもの得づらいものの違いを強く感じ、良好な成長のために一考してみた次第です。

といっても既にある Tweet のセルフまとめに、思い出と昔話なポエムを追加したようなチラ裏回です。



時代の変遷によるステータス変化

要約すると、現代は技術力の向上に必要な環境と既定路線があって向上速度が早いのに対し、昔(2010年以前とか)は頭を悩ませまくって乗り越えるべき壁が大量にあったおかげで解決力は相当鍛えられたよねってところ。


これについて、昔は解決力が向上する代わりに時間を多く無駄に消費していたとも言えます。現代は知識や実行力が早期に向上する代わりに、自身で高い壁を乗り越える解決力を得る機会を得づらくなっています(解決力が乏しいという意味ではない)。

この違いは単に時代によるもので、ITエンジニアが必要とされ出した黎明期から、どことなく安定しだした過渡期までは、小中規模なベンチャー企業やスタートアップが多く出始めたことが1つ。もう1つはハードウェアからソフトウェア、そして人材に至るまで、貧弱だったり未熟だったりしたことで、選択肢の多さや不安定さと向き合う必要があったためと考えられます。

成長期に入ると、ハードウェアは十分に強化され、ソフトウェアの安定さやフレームワークといった型の定着、そして仮想化やクラウドの出現によってより正着な型が共有されていきました。それにより、悩ましい項目が減少し、よりベターかつ信頼度の高い技術力の修得に集中できるようになったこと、年月の経過により技術力の高いエンジニアの数も増えたことで、さきほどの Tweet のような変化が起きているのだと思われます。

こういった変化は何もIT業界に限らず、学力でも趣味でもなんでも、情報や成長方法が研ぎ澄まされ各分野でその兆候が見えるわけです。シンプルに優秀かどうかでいえば、今現在のベテランとの差はどうあれ、十代二十代の若手の方が、最終的な高みは余裕で上を目指せるポテンシャルを秘めていると感じています。


IT業界における過渡期

苦労

ここで若手用の雑学として、昔は何が大変だったかを思い出ピックアップしてみます。

例えば OS の選択。仮想化などなく、ストレージに直接インストールして利用していた時代は、入れ替えるだけでも一苦労するので、より長く安定して、しかも皆が使いやすいものを選ぶ必要がありました。

例えばファイルシステムの選択やパーティション構成。いまや全くと言っていいほど考えないでよいこれらは、OS インストールやストレージが重要なシステムを扱うたびに最適解を考えたし、ある時期にパーティションなどいらん!と振り切ったものです。

例えばソフトウェアのインストール。./configure を何度もやり直すとか、make が通らないとか、パッケージじゃなければ何がどこに入ったかよくわからんくなるとか、一通り綺麗に通して整理されること自体が技術力でした。

アプリケーションが重いのも、何が原因か全然特定できなかったり、原因がわかっても限りあるリソースの中では目の前の死を待つしかできなかったり、それでも微々たる細かいチューニングを積み重ねて少しでも長く生きながらえたりしてきました。

救済

こういった多くの課題や悩みが急激に解決に向かった時期があり、個人的には2つが大きな要因となっています。

1つは OS のデータ化です。仮想化やクラウドによって、OS のインストールイメージを丸ごと1つのデータとして扱えるようになったことは、多くの手間暇を省く画期的な出来事でした。これを補助する IaC (Infrastructure as Code) の進化も平行したのも大きく貢献されています。

もう1つはストレージの強化です。いまやストレージの可用性が 99.99% だの IOPS が数万数十万だの、容量上限が 100TB 以上だのキラキラしています。それが昔は SATA HDD 1本で 100 IOPS、SAS 15000rpm なら 200 IOPS、RAID10 SAS 6本 で組んでようやく 600 IOPS が感動する性能ですよ!? ……ココ笑うところね?

そこに ioDrive といった NAND Flash Memory が出てきて、数万IOPS 出るし全然壊れません!ってなったあたりから、エンジニアとしての人生が大きく変わっていきます。

それまで細けぇ DB の秘伝のタレを混ぜ混ぜしたり、細けぇ DB クエリのチューニング……は今もするけど、圧倒的なボトルネック候補だったストレージ要因から解放されたことで、システムの可能性に大きな視界が開ける転換点となりました。

テストには出ませんが、このお気持ちだけでも覚えておくと、オッサンが何か語りだした時に多少は理解しつつ『さしすせそ』で適当に相槌を打てるようになると思います。


今は育たぬ技術力

現環境では OS のインストールなんてしないし、サーバーリソース量も金次第だし、ストレージ上限もガバガバじゃないですか。だから、キツキツの時代を生き抜いたから偉い!というわけでもなく、必要とする技術力が異なるというお話です。

お金や時間の制約、細かいパフォーマンス向上、限りあるリソースとシステムで創意工夫する構成。いまや由緒正しき ISUCON ってあるじゃないですか、日々アレの旧時代版をやってるような感じです。

エンジニアはこういった特定条件下においてサービスを健全に提供するために、少しでも速くなるよう、少しでもリソースを消費しないよう、細かい設定調整をしたり、コーディングにおいても余計な処理やメモリ確保がないように書くよう心がけるわけです。そのためにも、コンピューティングとしての基礎知識を重宝する必要がありました。


今だと、その条件が大きく解放されていることや、基本的な性能が向上したことで、多少イマイチな処理だったり、多少リソース量が足りないとなっても、クラウドパワーでなんとかしてしまったり、そもそもイマイチさが見えていなかったり、という傾向が強くなってきています。

しかしベテランは今でも、昔と同じく当たり前のようにハイパフォーマンスになるような内容を心がけるわけで、それが高い品質につながるのも間違いありません。

──間違いありませんが、そういった技術思考に時間を使ったり、若手にそういう技術を伝達する時間を使うくらいなら、多少の品質差は気にせずスピード重視することが正とされつつもあります。Time is Money そのものな話で、困ったら・困りそうなら金で解決しておけホトトギスです。

そしてそのベテランとの性能差が 5%, 10% 悪化程度ならまだしも、50%, 100% 以上悪い状態で、負荷試験やリリース本番まで逝ってしまう場合があるのが、昨今の稀によくある兆候という感じです。


先駆者と追随者

新しいシステム・難しいシステムを苦労して築き上げる者を先駆者とするならば、それを修得し扱っていくことがメインな者を追随者、と表現できなくもないです。


サービスが健全に提供・運用されて、皆が納得する十分な給料をもらえていれば、ぶっちゃけどっちでもいいってのはあります。組織には役割ってのがありますからね。

ただエンジニアとしてどうなんって問うたとき、建前としては適性に合わせればいいし、無理に背伸びする必要もないって言いたいところですが、本音としては新しく難易度の高いシステムを、好きなようにガッチャガチャ構築して、どーだすげーだろ!って心に留めながら「やっとできましたよ~どうですかね~」とお披露目したいはずです。

そういう先駆者的な体験をするには、小規模な組織において、その担当者は我一人のみ!死んだら終わり!というシチュエーションが最高なわけです。大規模な組織だと、健全に担当者が複数になったり、補助がついたりするので、そのまま普通に進行するだけでは追随者の枠を抜けることは難しいでしょう。

そういう意味では、ベテラン勢かつ先駆者的な立ち位置な自分としては、あまり口出ししないようにしようと考えたり、そもそもいなくなった方がえぇんちゃうんか、と思ったりもします。これは、過去にインフラの全てを1人で引き継いで全てを把握したことで、急激なレベルアップを体験していることによる思想でもあります。

まぁ組織や社会において、先駆者という立場を目指す必然性は実はそこまでありませんが、やはり給料が高くなりやすいだろうってのと、何より楽しさが段違いってところが大きいです。自分が好き勝手に作れる状況と、他人が作ったモノを理解して扱うのとどっちが楽しいかなんて、愚問ですよ。


現代に求める成長法

で、グダグダ書き終わったところで、現代はどう成長すべきかを考える前に、ひとつ良いコメントを拝借します。


まず前提として、過去に現ベテラン勢が体験してきた苦しみは、現代では存在しないし、再現しようとする必要もないと考えます。あれらは、今の自分をかたどっている過去の経験である以上、無駄ではないと思いたいですが、現代では無駄でしかないです。

苦しんで得られる能力も確実にあるとはいえ、苦しむにしてもあくまで現代的で前向きに、意味のある苦しみを設定するべきかな、と思います。


例えば、現代では大量にあるインプット・ソースからの吸収と、パブリックな場でのアウトプットは簡単に思いつくところで、昔はネタはあっても手段に乏しく時間も取れなかったベテラン勢は、今でもやらない・できない人は多いし、差を埋め追い越すに必要なのは継続力と少しの勇気程度です。

また大企業に所属していたとしても、プライベートに独力でなにか作り上げる、というのも素晴らしい課題です。できれば自分で使い続け、改善し続けたくなる内容がグッドです。たとえ最初は拙くとも、ゼロからイチを練り上げる思考と、イチからジュウまで全てを把握して構築する技術力は、なかなか持ち合わせる人はいないものです。

そうやって技術力と信用を積み上げていくうちに、いつか社内で自分にとってチャレンジングな役割が出現したときに、率先して手を上げることで先駆者に近い体験と苦労を積むことが可能です。強制的に常時そうなりたいなら、ベンチャー企業に身を投じるのが手っ取り早いですが、あまりに人を選ぶので自分からオススメすることはありません。

※追記
最近は既に正常に動いているものには触れない傾向が強いですが、既存の処理を眺めて改善点を考えるのは、非常に意味のある試みです。



あまり好きな言葉じゃないですが、苦しいエンジニアリングを『生存バイアス』でくぐり抜け、幼い頃からスーパーマリオブラザーズ2や魔界村をノーコンティニューでクリアしてきたベテラン勢は、そんじょそこらの若造が数年頑張った程度で追い抜かれる気などサラサラありません。

今でこそ無駄と言える、苦労から得た解決力と精神力をベースに、現代の知識と経験を今も積み上げているのですから、そこまでヌルいはずもなく。しかし、若さゆえの体力・吸収力・コスパ・タイパを駆使すれば、まぁ5年10年で引導を渡せるんじゃないかな~と期待をするというか、そもそも肩を並べる技術者が増えること自体が嬉しいので、めげずに頑張っていただきたいと思っています。

自分を振り返っても、忙しいことで成長した時期、忙しいから成長しなかった時期、苦しんで成長したり、苦しんだだけだったり、マンネリ感が出て停滞していると思いきや、若手の思考や行動にアテられて、それもアリやなって刺激をもらい思考が柔軟になったこともあります。


現代の安定感や既定路線・型によって、逆に不安に感じることもあるかもしれませんが、あくまで基本の型をキッチリ抑えることが第一で、その上で枠から飛び出るべく意味のある苦労を設定し、継続するってのが正着かなぁと思いつつ、

若い頃は何が意味あるか判断できなかったり、その時点では意味を持たないかもしれないので、結局のところ無駄な苦労であったと将来的に笑えるのは、いつの時代も似たりよったりになるかもしれないですな:-)