はじめに
こんな記事を読んで、ハッとなったので文字に起こす。
私のこと
サーバ、ネットワークを管理するソフトウェアを作ってます。インフラより、サーバサイドに強いが、コードも書く、インフラよりのソフトウェア開発者です。フロント側以外ほぼ全てをやります。
自分の会社は高い技術が必要とされるものの、最終的にはPMとなるしかない。技術のみのスペシャリストになれるひとは1%以下という現実です。
元来性格として得意なのはマネジメントのほうだと思います。どちらかというとソフトウェア開発もインフラ技術もあまり得意ではないと思います。できるひとに圧倒的な差を感じている日々です。
それでも、今の会社に技術者として入社しました。それは技術力はあらゆる場面で根本的に理解を底上げし、問題解決に寄与すると思うから。
具体的な例で言うと、SIerのPMの方々は「コードなんて書けなくても設計は出来る」とよく言います。しかし運用に耐えうるシステムは、コードが書け、運用したことのある人でなければ設計出来ない、というのは事業者側から見れば当たり前の話です。設計と製造の専門家二人と、一人のフルスタックエンジニアだとすると後者の方が明らかに生産性が高いのです。
まさに、コードを書けずして設計ができるはずがない。書けるけど書かないと、書いたことがないは全然違う。だからこそ技術スキルを学んでから、マネジメントに行くのはそれからでいいと思っています。
今後必要となる能力
「勉強し続ける」技術を身に着ける事
これはだいぶ、身についてきた実感があります。多分、何を学ぶにも、通用する学び方があって、それが少しずつ身になってきてる実感があります。一方で、
フルスタックエンジニアを目指すのであれば、一つ一つの技術を覚えこむのではなく、そもそも何故それらは実現できているのか?裏側で何が起きているのか?という大元のコアな部分を理解する事が重要です。個別事象をすべて覚えていく事には限界がありますが、コア部分を理解出来ると学ぶ速度はぐっと上がるでしょう。
この観点が圧倒的に足りてない自覚があります。言語もRuby(Ruby on Rails)だけしか今は触っていませんし、(C、Javaの経験はあるものの、もう忘れている。。。)サーバ関係も、まだまだ「利用者」でしかないと思っています。つまり使い方を学んでいるだけでそのコアな内容は知らないままです。
この1つのフレームワークに偏っていることや、利用者視点でしか技術を見ていないところがまずいと思っています。
特定の会社、特定のフレームワークに最適化したエンジニアなどは特に危険でしょう。動作原理を知らずコピペ中心に仕事をしていると、新しい言語やフレームワークに対応が出来ないからです。
まさに今の自分はこの状態です。使うことはできるようになったけど、自ら作り出すことができていない。生き残るには自分で創りださなければいけないと思っています。「使ったこと」を発信できるようになった、じゃあ次は生み出したものを世に発信するフェーズにはやく行かなきゃ、でも行けてない、そんな現状です。
おわりに
今後もフルスタックエンジニアを目指すことになると思います。今はデータベースやフロントエンドが圧倒的に経験不足であることと、プログラミング言語・フレームワークに偏りがあることがまずい点です。学習コストの高さに怯えず、別の言語で1つフルスタックなサービスを立ち上げる経験を続けなければ、と思います。いい警告となりました。