Entry

エンジニアの細分化/専門職化とフルスタックエンジニアの話

2014年04月24日

こちらを読んで。

3月中旬から4月上旬にかけて、SIベンダーやネット系企業を取材し、多くの現場を訪れた。多数のエンジニア(40人以上)に取材して分かったのは、こうしたエンジニアには共通点がいくつかあるということだ。

最大の共通点は、技術や業務面で多くの領域の知識、スキルを兼ね備えているという点。つまり「マルチスキルなエンジニア」である。

記者の眼 - ITエンジニアのみなさん、“儲かるエンジニア”になれますか?:ITpro

しばらくエンジニア業に身を置いていて,そこそこ分かってきたことなんだけれども,理想とされるエンジニア像というのは,今も昔もそんなに変わらないな,とか云々。「マルチスキル」つまるところ,ソフトウェア開発にまつわる技術領域を広く回せるスキルというのは,あたしがこの業界に入った時から言われていました。ソフトウェア技術は,各領域で細分化されているけれども,開発にあたってはそれらを総合して作り上げなくてはいけません。なので,多方面に亘る専門的な知識が各エンジニアに要求されるのは,当たり前といえば当たり前のことです。

差しあたって,フルスタックエンジニアのような言葉は,今時の胡散臭い言葉として提案されているけれども,エンジニアとして要求されていることは,今も昔も大して変わりません。それは,ビジネス以前における,ソフトウェアエンジニアリングの枠組みそのものが,そのようなもの(分析と総合)の過程として構成されているからです。ソフトウェアエンジニアリングの構造は,プロトコル介して階層上に専門性を帯びていきます。この構造は,そう簡単には崩れない。

例えば,データベースへのクエリ(SQL)を書く技術を持っている技術者は,共通化されたSQLというプロトコルを通じて,データベースを扱うことができます。SQLというプロトコルに則っていればよく,対象となるデータベースが何であるかは,ほとんど技術の内容と関係がありません。もちろん,個々のデータベースのベンダは,各々独自の最適化や新技術を取り入れて製品を改善しているわけですが,それを扱うためのプロトコルは変わらない。

同様に,データベースの内部実装を担当している技術者も,それを実装する開発言語の標準に関しては,そのプロトコル(言語仕様)に従って実装します。このおかげで,各処理系がコードを生成する方法や,ターゲットとなるハードウェアに依存しないで開発できます。いわずもがな,各処理系のベンダも,ハードウェアの仕様に従うし,ハードウェアベンダも決められたプロトコルに従います。このように,ソフトウェアエンジニアリングの構造は,分析的な内部技術の変化で,総合する側が大きな影響を受けない仕組みになっているわけです。

つまり,ソフトウェアエンジニアリングにおける階層構造は,各階層で定義されるプロトコルによって切断され,これによって,ソフトウェアエンジニアリング全体の分析と総合が可能になっているということです。それぞれの専門家が,それぞれの領域に専念できるような仕組みです。

さて,それでは今に始まったものでないにせよ,ソフトウェアエンジニアリングにおいて,なぜフルスタックエンジニアのような総合家が要求されるのでしょうか。前掲引用のテーマにおける問題点はこの点にあるのだと思います。

ひとつの理由として,ソフトウェアエンジニアリングの領域では,総合家が慢性的に不足している点が考えられます。先にも述べた通り,ソフトウェア「技術」ではないソフトウェア「製品」は,各技術を総合した成果物です。言うまでもなく世間では,ソフトウェア技術の分析をいくら繰り返したところでお金は生まれず,これらを総合した結果(プログラム)が技術の応用(アプリケーション)として働いてこそお金が生まれます。この点,大学をはじめとしたカリキュラムや資格体系は,以前から分析的な領域を重視しており,総合家の育成にそれほど熱心でなかったように思います。分析家が相対的に増えれば,総合家が要求されるようになり,その価値が上がるのは必然なのではないかと思います。

しかし,繰り返しますが,このような要求は今に始まったことではなく,昔から言われていることです。

一方,要求されているエンジニア像が専門バカでないフルスタックエンジニアであることは昔から変わらないとして,変わっている部分もあります。それは「フルスタック」における各要素の内容と階層の深さです。

手前味噌になってしまいますが,私の職場(小さなソフトベンダです)では,SolarisやLinuxで構築されたサーバのユーザアカウントが各社員に割り当てられており,それぞれプログラムのテストや開発に使われていたりします。少し変わっているのは,アカウントが開発職だけでなく,全ての社員に対して割り当てられているということです。営業さんも,普通にUN*Xのコマンドや簡単なシェルスクリプトくらいなら書いています。このような領域では,例えば,Linuxユーザの専門家みたいな領域はほとんど意味がありません。みんながそれなりに使えるので,専門でもなんでもないからです。

開発者も,例えばOracleを構築したり,LAMP環境を作ったり,ネットワークの不調を調べたり,といった作業は普通にしています。特にデータベースの技術者でなくても,基礎技術としてそれなりにできる。もちろん,データベースにかかわる部分をほぼ専門に開発している技術者さんは,一般の技術者よりもよく製品を知っているし,チューニングの方法や効率の良い負荷分散の方法も心得ています。いずれにせよ,昔の括りでは,UN*Xサーバを運用したり,ウェブページを作ったり,といったことは,個別でないひとつの専門性とみなしているところがありました。

もちろん,このことは,昔の技術者がスーパーマンだったという話では必ずしもありません。昔の技術は素朴だったので,特に専門領域として細分化しなくても取り扱えた事情があるのだと思います。もっとも,そうした技術者さんも昔の素朴な技術に留まっていることはなく,差分を学習する(学習しない人は辞める)ので,結果としてフルスタック的な位置づけになっている側面はあるのだと思います。

結果,現在「フルスタック」なるものが要求される原因として,以前と異なるのは,主に以下の二点だと思われます。

  • 従前はひとつの領域として扱われていた技術領域が,過度に細分化され,各々が専門として職業化している。
  • 細分化された職種が増えすぎたために,総合できる人材が相対的に少なくなっている。

これまでは,このような総合を,ITコンサルのような人たちが担っていたわけですけれど,いかんせんこの人たちはモノを作れない。モノを作れる総合家の不足は,相対的に不足の度合いを増しており,今になってにっちもさっちもいかなくなっている,というのが現状のように思えます。

もうひとつ。引用本文では,スマートフォンをはじめとしたターゲットデバイスが増えたことや,クラウドのような実行環境基盤の変化が,総合家への要求を高めているような趣旨になっています。しかしこの点は,それほど関係のないことなのではないかと思っています。というのも,市場の要求もあり,これらの変化は,開発側にとってそれほど大きな変化ではないからです。本当の意味で開発環境が刷新され,これまでのノウハウがほとんど通用しない領域であれば,そもそもこれらの基盤は現在ほど成長していません。PalmやBlackBerryを見ても分かるように,これまでと異なりすぎる開発基盤は,開発者の支持を取り付けにくく,結果として普及しないように淘汰が働きます。

スマートフォンであれクラウドであれ,これらは,開発基盤を整備する側が,これまでの開発手法の延長として開発できるように,かなり丁寧に整備されています。洗練されすぎている感すらあります。このような基盤で開発することは,内部的にはさまざまな配慮があるものの,使う側(開発する側)からすると大きな変化はありません。見た目が派手なので,大きく変わったようにも見えますが,ここでダメだということは,以前もダメだったということなんじゃないでしょうか。

現状の「フルスタックエンジニア」なるものへの要求は,言葉こそ胡散臭いけれども,これまでも行われてきたことであり,現在に至ってそろそろ理想ではない現実の要求として市場から要求されている感触があります。ここで,個別のエンジニアのキャリア形成について云々するつもりはありませんが,こうなったのには高級エンジニアの蛸壺主義的なところが,いよいよ市場に沿わなくなったからだとも思えます。これを話すと長いので,その話は,また別の機会にでも。

Trackback
Trackback URL:
Ads
About
Search This Site
Ads
Categories
Recent Entries
Log Archive
Syndicate This Site
Info.
クリエイティブ・コモンズ・ライセンス
Movable Type 3.36
Valid XHTML 1.1!
Valid CSS!
ブログタイムズ

© 2003-2012 AIAN