「フルスタックエンジニア」がもたらすもの

ちょっと周回遅れ感がありますが、最近「フルスタックエンジニア」が話題です。

もう完全に大喜利になっている感覚がありますし、真面目に言及するとネタにマジレスみたいになりそうなのでこのエントリを書くかどうか悩んだのですが、ちょっと気が向いたので書いてみます。

きっかけ

このエントリを読んで「あぁ、そうだよなぁ…」と思ったのがこれを書くきっかけになってます。

昔ながらの「片手間に書くJavaScript」の限界 - mizchi's blog

フルスタックエンジニアの定義

については面倒臭いのでこのエントリでは触れません。*1

とりあえず「いろいろ出来る人」くらいの認識で読んでもらっていいと思います。

フルスタックエンジニアの存在は技術をブラックボックス化する

元エントリが非常にわかりやすいのは、JavaScriptを取り巻く環境がここ数年で激変していて、まさに今が過渡期だからなのだと思います。 かつてはブラウザで動くだけだった言語でサーバサイドアプリケーションも実装できるようになり、様々なフレームワークも登場し、Single Page Application なんてものがトレンドとして存在感を示し始め、独自のエコシステムを形成して今では Web 業界のトレンドを牽引している印象さえあります。かつてJavaScriptが軽視されていた時代からは想像もできません。

フルスタックエンジニアはその必要性から考えて「すべての技術領域を片手間でやる人」であり、こういった特定の技術領域での大きな変化がある場合にキャッチアップしにくいでしょう。

もちろん、チームバランスというものはあって、組織の一部にそういった人材を必要とするのはケースとしてはあるのかもしれませんが、すべてのエンジニアがフルスタックであるべきという考えでチームを構成すると確実に技術の進化から取り残される結果になると思っています。

片手間でないエンジニアがいればその人が最新技術にキャッチアップして議論となり問題が健在化するのでしょうが、そうでないと"片手間でキャッチアップできる範囲"でそのチームの技術は進化を止めてしまいます。当然それはマネージャーや経営陣に見えるところまで顕在化せず、ブラックボックスとなるでしょう。

「螺旋」を上ればエンジニアとしてスタックを積むことはできる

技術の進歩は「螺旋」である。 @t_wada さん社内講演 - >& STDOUT

JavaScript の歴史は非常にわかりやすい螺旋だと思っていて、かつてブラウザ戦争が勃発して JavaScript が軽視されていた時代から Ajax の台頭した時期を経て、現在さらなる発展を遂げています。当然その間にサーバサイド技術も進化してきたため、いくどもサーバサイドアプリケーションとクライアントアプリケーションはそれぞれの立場を変えながら(まさに螺旋を上りながら)進化してきたような気がします。

僕は、エンジニアとして活動を続けこういった螺旋をひとつずつ上っていけばおのずと守備範囲は広がっていくはずだと思っていて、逆に言えばそれ以外にフルスタックエンジニアに近づく方法はない気がしています。

専門性を深めることと守備範囲を広げることは矛盾しない

ある程度専門性を深めたらそれだけでは立ちゆかなるような感覚に陥ることはありますし、逆にそういう危機感に駆動されたほうが周辺領域の理解も早かったりします。そういう意味で専門性の深堀りと守備範囲の拡大は必ずしもトレードオフではなく、ときにお互いを補完しあう関係になりえます。

ただ「すべての技術領域を片手間でやる人」はこのことに気づきにくいんじゃないかと思います。

僕がフルスタックエンジニアに関する議論で気になっているのは、「フルスタックエンジニア」と「特定技術のエキスパート」をまったく違う人材としてとらえ、前者を無条件に崇拝しているように感じる点です。

以前こんなエントリを書きました。

「スペシャリストを目指した経験がないとゼネラリストになんてなれないよ」って話 - assertInstanceOf('Engineer', $a_suenami)

スペシャリストとゼネラリストみたいな二元論がたまにありますが、そういう対立構造にもまったく興味がありません。

僕はすべての人はスペシャリストを目指していると思っています。何かを知りたい・学びたいというのは人類の本源的な欲求だと思いますし、そういった知的欲求は無限に繰り返され、次々と新しい知識を求めていくからです。ゼネラリストとはその知的欲求の連鎖が深堀りする方向ではなく、周辺分野に広がった場合の結果に過ぎません。つまり、ゼネラリストとはスペシャリストの一つの形態に過ぎないのです。

結局のところ、専門性とは「どういう領域の組み合わせを選ぶか」だと思っていて、先述したとおり、選んだ領域の数とその深さは必ずしも反比例にはなりません。

専門性の深さと守備範囲の広さをトレードオフととらえず、自分のチームや組織に今どういった人材が必要なのか、どういう組み合わせだとチームのパフォーマンスを発揮できるかということに真摯に向き合う人が増えることを期待しています。

*1:人によっていろいろ定義が違いすぎます。