この記事は, 個人の経験にもどづく考えが非常に多いです. すべてのケースにあてはまるわけではないことに考慮していただければと思います.
万能は無能とは ?
ひとことで言えば, なんでもできるということはなんにもできないことと同じということです. ある種の逆説を含んでいるように思われます (なんでもできるのだからなんにもできないことはないのでは ?) …
すでに万能であると思われる人は問題ありません. 問題は, これから万能を目指そうとする人です. なぜなら, 誰しも, 1 日は 24 時間しかないという不変の事実を考えるとその逆説も納得していただけるかと思います.
万能を目指してしまう理由
かなり個人的な見解ではありますが, 万能を目指してしまう人は以下のいずれかにあてはまることが多いように思います (わたし自身がそうだったのですが …)
- 完璧主義である
- 好奇心が強すぎる
- 独力でなんとかしようと考えている
完璧主義である
あれもこれもプロレベルになることは, ほとんどの人が不可能です …
個人的には, 完璧主義でうまくいくのはせいぜい高校教育・大学受験まででしょう …
好奇心が強すぎる
好奇心はとても大事です. しかし, それが時としてネックになります …
あれもこれも興味をもちすぎた結果, どれも中途半端なレベルで終わってしまう可能性が高いです …
独力でなんとかしようと考えている
教育機関では, 基本的には独力で物事を進めることが多いでしょう …
悲しいことに, 現状の日本の教育機関ではそれで社会に出ることが可能です …
しかしながら, 企業で働くのであれ, フリーランスであれ, 基本的に仕事はチームです. たとえ, 万能にできたとしても, 1 人の能力に依存するようなことは普通のチームはしないですし, 1 人であれもこれも同時に進めることはできません.
また, 下記は参考記事からの引用です.
人間は厳密に言うならば独立ができない生き物であるからだ。
だから、自分1人で全てをまかなってしまおうと思う事は、人間そのものの性質から逸脱している。
自分の性質と自分の行動が逆方向を向いてしまっているならば、それが上手に進まないのは当然の結論だろう。
そういう考えからすると、自分1人で全てをやってしまおうという考えはブレーキに相当してしまう。
万能を目指して失敗した経験
わたし自身の経験から失敗を列挙しますと …
- 27 歳のときに, Web の世界に入ったが, インフラ・サーバーサイド・フロントエンド・デザインすべてをできるようになろうとして, 今から思えば, 未消化に終わってしまった学びが多い (要するに時間配分をミスった …)
- 30 歳のときに, 新卒入社したが, 多様な能力をもつ同期をみて, ネイティブアプリ (iOS・Android) もできるようにならないと … Python, Ruby, 関数型言語 … も書けるようにならないととあらゆることに着手しすぎて, ほとんど未消化に終わったしまった学びが多い (要するに時間配分をミスった …)
Web エンジニアは守備範囲が広い …
Web 業界は, 技術的進歩が早く, 次々に, 言語仕様の追加やツール, ノウハウなどが流行り廃れていきます. 例えば, 私は C 社のとある事業でフロントエンドエンジニアとして働いていますが, そこで求められている能力・経験を求人から抜粋すると以下のようになります …
- Web 標準を前提とした HTML / CSSによるコンテンツとビジュアルの構築
- JavaScript を使ったリッチなユーザーインターフェースの構築
- 技術やデザインへの高い興味関心, 新しい事柄の自発的なキャッチアップ
- React, Vueなどモダンな UI コンポーネントライブラリ
- Node.js による BFF や Isomorphic アプリケーション
- サーバー全般やインフラ(AWS, GCP, Varnish, Fastly)
- Web動画プレイヤーおよびストリーミング技術(HLS, MPEG-DASH)
- Service Worker関連, Web Paymentsなどのモダンな Web 技術
- ほか Web 標準の中でも特にエッジな仕様や動向のキャッチアップ
- 品質全般(パフォーマンス, アクセシビリティ, セキュリティ, SEO)
- Sketch や Figma などデザインツールの操作およびデザイン作成
- ユーザーインターフェース一般の設計および改善
- ユーザーにとっての操作感を高めるマイクロインタラクションの適用
- CIやテスト自動化, webpack設定など開発環境の継続的な改善
- 他の職種(ビジネス, デザイナーなど)との円滑なコミュニケーション
- チーム内のデザイン. エンジニア, ビジネスを横断したディレクション
果たして … これをすべて満たしているエンジニアはいるかというと … 申し訳ないですが, 事業でトップクラスのエンジニアの方ですら, よくみても 80 % をクリアしているぐらいではないでしょうか …
わたしに限って言えば 20 – 30 % がいいとこかなと思います …
フルスタックエンジニアという幻想
なんでもできる姿はエリートや有能を連想させてしまいます. さらに, ほとんどつまづくことがなくあらゆる物事を進めることができるのはストレスも少ない, そして, 待遇もよくなる …
しかしながら, 例えば, フルスタックフレームワークと称される Angular が 3 大フレームワークから脱落しかけているように, フルスタックって意外と需要がないものです …
理由は, さきほども少し述べましたが,
基本的に仕事はチームです.
たとえ, 万能にできたとしても, 1 人の能力に依存するようなことは普通のチームはしないですし,
あれもこれも同時に進めることはできません.
すでにフルスタックエンジニアであったり, 生まれもった能力が恵まれていたり, Web の世界に突入したのが早かったり … 何かしら運がよい人はまだよいでしょう.
わたしみたいに, 生まれもった能力も特別なければ, Web の世界に突入したのが大学院を修了してから … みたいな人は, フルスタックエンジニアを目指すのはリスクが高く, コストパフォーマンスも最悪と言えます.
1 日は 24 時間という不変の事実を考えれば明白です.
TypeScript の学習に 1 時間費やせば, Kubernetes の学習にはもうその 1 時間は使えないのです.
フルスタックエンジニアにならなくても, 絶対に社内外で活躍することはできますし, むしろ, 1 芸をとにかく磨くことで, 海外で活躍できる可能性だってあると思います.
その 1 芸が需要の少ないニッチ分野 (まったく需要がないのはきびしいかもしれませんが …) でも大丈夫です. わたしの経験でいえば, Web Audio API + 信号処理数学 (もう少し範囲を広げると Web Music) というとてつもなくニッチな分野に関わっていますが, その分野に関わり続けたおかげで, (自身で述べるのもアレですが) もはや, この分野においてわたしを知らない人の方が少なくなりました. また, 現在の会社では, 前の会社でなんの実績もなく中途採用されましたが, それも, Web Music という突出した分野をもっていたからこそだったのかなと思います.
生存戦略
そもそも, 今回の記事を記載しようと思ったきっかけが以下の記事でした.
なんと … この記事は, React や Redux の作者 Dan Abramov 氏が書かれたものです ! もう, はじめはびっくりしましね …
なにかと万能を目指していたわたしがバカらしくなりました w
そこで, もう一度, 自身の生存戦略を以下のように設定しました.
- メディア技術においてトップクラスになる
- Web Music (Web Audio API, Web MIDI API, WebRTC, 信号処理, 音楽理論)
- 動画 (hls.js, dash.js)
- グラフィックス (Canvas, SVG, WebGL)
- フロントエンド技術 (+ インフラ, サーバーサイド, デザイン) は, 仕事を運用していくうえで困らない程度に学ぶ. 言い換えれば, 必要以上のことはやらない (その時間を, メディア技術に割り当てる)
1 日 24 時間は, 不変の事実. 精度の高い取捨選択をして楽しく生き残りましょう !