はじめに
この記事について
前回書いた記事に何気なく以下のように書いたんですが、読み返したところ自分の中で十分に言語化できてなかったなと感じたので、前回の補遺的な位置づけで、「フルスタックエンジニア」とはなにか、自称することへの忌避感はどこから来ているのか、について考えてみます。
自分としてはあまりフルスタックと名乗りたくない、という気持ちはありまして、
nunulk-blog-to-kill-time.hatenablog.com
フルスタックエンジニアとは
前回の記事にも自分で定義を書きましたが、我流でない解釈も載せておくほうがいいと思ったので、Wikipedia にある定義を載せておきます。
A full-stack developer is expected to be able to work in all the layers of the application (front-end and back-end).
中には勘違いされている方もいるようですが、「スタック」とはアプリケーションを構成するレイヤーのことであって、同階層における技術の種類や幅のことではありません。
フルスタックエンジニアという呼称についての印象
自分がソフトウェアエンジニアになった25年前は(少なくとも自分の周りでは)フルスタックという用語は存在しませんでした。アプリケーションの全レイヤーを担当することがほとんどだったからです(自分自身も、デバイスドライバーから Windows GUI、HTTP サーバーから HTML まですべて書いていました)。
私の印象では、バックエンドとフロントエンドという分業がされはじめたのは HTML5, CSS3 が出てきたあたりで、フロントエンドの技術の幅が広がったためにカバーするのが困難になったのと、主に Flash を使っていた人たちが、HTML5 に乗り換えて動的な(文字どおり動的な)ウェブサイトをバンバン作り始めて、それらのパーツは基本的にはバックエンドと絡まないため、フロントエンドがバックエンドから離れる格好で分離していったんだと解釈しています(それでももう15年近く前の出来事なので記憶が曖昧ですが)。私は Flash の仕事はほとんどしてなかったので、当時の Flasher の仕事の範囲というのはわからないですが、おそらく、ゲームとウェブサイト構築が(システムではなく)主な主戦場だったであろうと思います。
その時代を経て、もともと存在していた「アプリケーションのすべてのレイヤーにおけるコードを書く」(概念上のフルスタック)ソフトウェアエンジニアが、フロントエンドを専任に任せる形で自然とフロントエンドから離れていくパターンと、チームの人数が少ないために依然としてフロントエンドも書かざるを得ずに継続していったパターンとが存在していたんじゃないかと思います。私も所属する会社によっては前者と後者を使い分ける形で従事していました。
最初はウェブサイト制作の文脈でフロントエンド技術の多様化複雑化とともに分業が進み、それが業務システムの文脈まで派生してきた、という印象です。
分業が当たり前の現在、すべてを一人でやることに対してネガティブな印象を持っている方もいるようですが、私自身は昔はそれが当たり前だったというのもあり、ネガティブな印象は持ってないです。当然、昔よりは守備範囲の広さが格段に違うので、一人でやることの大変さというのは分かりますし(実際大変ですし)、分業を否定しているわけではありません。
なぜ「フルスタックエンジニア」を自称したくないのか
積極的に避けたいというよりは、むしろ自分にとってはそれが当たり前なのでなんとなくの気恥ずかしさがある、というのが正確なところだろうと思います。
仮に10年後、(職業としての)料理の世界で分業が進み、一人で料理を作ることがなくなった世界が来たとします。その中にあってなお、あなたが依然として一人で料理を作っているとして、それを「フルスタック料理人」と自称したいと思うか、ということです(喩えとしてあまり上手くないかもしれないですが)。「料理人」は「料理人」であって、そこに修飾語としてなにかを加える必要がない、加えようと思わない、という感じです。
なので、私は「ウェブアプリケーションエンジニア」を自称するようにしていますが、それはやはり過去から引き続いて持っている感覚に基づいているので、20代、30代の方たちとは感じ方が違うでしょうし、平たくいえばみんな好き々々に呼べばいい、という類のものだと思います。
とはいえ、いま現在の潮流がどうなのかはわかりませんが、もし「フルスタック」であることに希少性があるんだとしたら、堂々と「フルスタックエンジニア」を自称すればいいんじゃないかと思います。
実体としてのフルスタックにはこだわりたい
名乗りはしなくとも、自分としてはフルスタックにこだわりたいと思っていて、それは、過去に何人か中小企業の社長からシステム開発の依頼を受けて業務システムを一人で作ってた頃があって、そのときの仕事が楽しかったからです。要件定義から実装まですべて一人でやれるのは圧倒的に楽なのと、自分は自分でなにかを作りたくてこの仕事をしているのではなく、目の前にいる困っている人を助けたい、という動機でやっているので、そうしたビジネスアイデアはあるけど自分では作れない人からの「こういうの作れない?」っていう問いに応えられるかどうかっていうのが、自分の価値になっていると思っています。なので、そういう問いに対して「画面以外は作れます」みたいな回答は基本的にはなしなんですよね。
世の中に、ソフトウェアエンジニアは大量にいて、探せばそれぞれのスタック(レイヤー)で優秀な人材を揃えることはできるでしょうけど、ソフトウェアエンジニアの知り合いが私しかおらず、頼って声をかけてくれたのであれば、それにできるだけ応えたい、という当時の動機がいまでも根底にあるんだと思います。
いまではチーム開発の仕事がほぼ100%ですが、それでも、チーム内にできる(やりたがる)人がいない仕事はどんなことでもやろうと思いますし、できるようになりたいです。
おわりに
今回も勢いで書いたのでとりとめのない感じになってしまいましたが、「フルスタック」についての思いの丈はぶちまけられたんじゃないかと思うので、とくに推敲などせず、このまま公開しちゃいます。