ウェブエンジニアの生存戦略
最近、この話題について経営者目線の話が多かったので、エンジニアのスキル獲得戦略とその最大化という観点から話をする。
まず目下のウェブエンジニアとして一番の課題は、「35歳定年説をどう乗り切るか」、ということだろう。もちろん、みんな35歳定年説なんてのが、まやかしであるとはわかっている。若い業界だったウェブ業界も成立してからだいぶ経ち、結果として平均年齢が押し上げられ、自然と35歳以上のエンジニアも増えてきた。
問題は、人月という概念によって、できる人間とそうでない人間の区別がされていないことだ。ウェブエンジニアとしての悲哀や業界の歪みはここにあると思う。下手に謙遜したりして話をややこしくする前に言ってしまうと、自分をできる側の人間として話をする。
生産性を測る確固としたメトリクスがないのも事実だと思うが、すくなくとも熟達した人間と未経験者がおなじ1人月というのは、到底ありえない話だと思う。ってのもう人月の神話で散々言われてるから何回同じ話してんのって感じだが。
1人が1人月どころか、比較不可能とか、マイナスの生産性とか
現実的な問題として、出来る人と出来ない人では、よく100倍の生産性の差、なんて言われるが、まず最初の段階で、「この人に任せればできる」「〜できない」で話をしたほうが良い。で、不可能を可能にできる人というのが世の中にいる。その段階でできない人と一緒にカウントするのはおかしい。
そして、そもそもマイナス方向に作用する人も多い。ある機能を一つ実装するのに、その機能のその一つを実装する以上の負債を撒き散らすことは往々としてある。それを防ぐためのテスト駆動であったりオブジェクト指向のテクニックであったり、デザインパターンがある。
エンジニアとしては、気持よく本質的な課題に取り組むコードを書き続けるために、負債を抑える方向に舵を取るのが長期的なプロジェクトにおいて価値が置かれるべきだが、非エンジニアが評価しづらいので達成度ベースの評価になってしまう。
長期的なプロジェクトでは、負債を貯める速度がメトリクスとして顕在化し、炎上する。よくあるのは、プロジェクト序盤はものすごい速度で開発が進み、そのペースを前提に長期プランが組まれるが、ある時点で開発が停滞し、しかし目標達成のために機能追加を止めるリファクタリングが許されず、その全てが破綻する。エンジニアとしてはよく見る光景だと思うが、非エンジニアにその理由が共有されているかというと、あんまりそうではなさそう。
政治力を持ってしまったエンジニアの話
達成度ベースでの評価基準にエンジニアが最適化してしまうと、政治力で自分に割り振られた機能を無理やりマージさせ、その負債を外部に押し付けるのが、相対的に評価が最も上がる戦略になってしまう。どこの会社とは言わないけど、数年前とあるウェブ系大手の会社にそういう人がいて、ビジネス上大きな課題を解決してきたけど、その人が理由で大量の離職者を出したと聞いている。そういうときはだいたいまともな人から辞める。
もちろん、弾をたくさん撃つ必要があるような状態では綺麗なコードを書く必要がないが、そういう状況下で生まれた綺麗でない状態のコードを、なんらかの成功や資本投下で開発し続けることが決まった時、長期的にメンテ可能なコードを書ける人材がいないことが顕在化してスケールしないことがある。ビジネスとしてそもそもスケールしないことがそこで露呈するケース。
これらの問題を解決するのは現状一つしかなく、経営者がエンジニアを理解するか、信頼している状態で、エンジニアの相互評価が成立している状態を作るしかない。エンジニアに信頼されるエンジニアを雇うしかない。GoogleやGithubとかエンジニアドリブンな会社でうまくいっているところは、そういうのが上手いと思う。でもさっき述べた大量の離職者を出した会社は、経営者が実力以上に政治力が高い人を信頼してしまったせいで、失敗してしまった。難しいと思う。
もちろん、人月をかけるのが有効な場面がある。レールがしっかりひかれ、ドキュメントが豊富で、プロジェクト内でゴールがしっかり共有されているケースだ。ある種の理想状態だが、僕からみてSIerの方はあらゆるものをその理想状態を前提に進められているように見える。(ここあんまり詳しくないのであんまり突っ込まないで)
個人がとりうる戦略
で、ここまで前置きなんだけど(なげーよ)、僕個人としては、日本で雇われのエンジニアやってる限りは、よほど傑出した成果を出さない限り、おそらく35歳を少し過ぎたあたりで、能力ではなく待遇の方が頭打ちになってしまう、という危機感がある。
日本ではエンジニアがエンジニアとしてステップアップできない。ある種のマネージャ職を経由することを強制されている雰囲気がある。一部の傑出した人だけが、エンジニアとして一部のウェブ系大企業のR&Dとして高待遇を得ることができるが、それができるのは一部だ。あまりにもパイが少ない。そしてそれができる大企業がいくつあるかってのは時代の流れによる。(これに関しては、IT関連技術の需要ってのは増す一方だとは思っているので、ある程度楽観しているが)
日本国内に居続けるかぎりは、大手のR&Dで好きなことやるってのがマネージャやりたくない僕として個人戦略として目指すべき場所の一つになってしまうわけなんだけど、平均給与とか考えると国外脱出も考えられる。
Githubでワンチャンある時代
この時代、世界レベルでエンジニアとして名を挙げるのは方法は割りと明快で、Githubで有名なOSSプロダクトを作ることや、有名OSSのコミッタになることだ。もうこれ以上に明快なアプローチはなくて、それがビジネスクリティカルな部分に採用している企業にフルタイムコミッタとして自分を売り込むという戦略がとれる。フルタイムコミッタは無理でも、その言語に詳しいという一定以上の保証がとれる。
残念ながら僕はあんまりそういうプロダクトを持っていないのだけど、再利用性がないコンセプトレベルの実装例は結構もってるので、それをアピールしたりはしている。(TypedCoffeeScriptをクリティカルなOSSに育てたい意図が少しだけあるが、まだ未完成だ) これらは、個人がとりうる戦略としてはすごく明快で、これほどわかりやすい指標はない。
自分が「一人月」で満足か
僕はたぶん、自分の能力が一人月とカウントされることに不服があって、エンジニアとしてのスキル選択もそれが反映されている。
構造化された大規模JavaScriptやデザインパターン、リアルタイムウェブの技術にある程度詳しくなったのも、僕自身がこれから10年投資するだけに足る技術だと思っているから。「僕がいればウェブアプリをネイティブレベルに高速化/複雑化できますよ、それなりに高品質なコードで」ってのを売りにしている。日本だとあんまり同業がいない。数年後はもっと増えてると思う。
で、その界隈はイノベーションが起き続けているので、常に新しい刺激がある。これは言語選択にあたって個人的には最重要で、イノベーションがない言語を選択するのはリスクだと思っている。よく言えば枯れているのだが、悪く言えば未来がない。
Flashを仕事で触っていた時期があって、言語仕様に不満ばかりだったのだけど、言語そのものの進化が明らかに停滞しており、新規に開発されるライブラリもなく、それらが現実的に改善される未来がないのが見えていて死ぬほど退屈だった。
PHPも、コミュニティとして人間が堕落する方向にしか言語仕様の舵をきっていないように見える。そもそもそういう性質の出発点の言語だと思えば不自然ではないが、あまりにも言語的に貧弱で、運用でカバーされてる。コミュニティの平均レベルが低いので、あまり関わりたくない。そもそもテンプレートエンジンだし…。
そしてJavaほどエンタープライズの呪いにかかっているものはない。過剰なカプセル化によって人月でスケールしやすくなっているが、カプセル化される方としてはたまったもんではない。個人の能力がスケールしない。
要は品質が低いコードを書くエンジニアと仕事をしたくない。 これらの言語では、可能な限り仕事したくはない。自分はその先をいきたい。
人月より、人間がスケールする方を選ぶし、その手段をとる
Javaは実は書けるけど学生アルバイト時代の嫌な思い出があって、仕事では使いたくないし、どの会社の面接でもJavaだけはやりたくありませんと宣言してきた。PHPは意図的に覚えないようにしている。(でも正直1日あれば覚えられるよなーとも)。そもそもPHPが選択されるような仕事は大抵魅力的ではない。僕でなくとも出来る仕事を僕がやる必要はない。
ルーチンは人月によって解決できるが、そもそもルーチンのタスクはプログラマがコードによって解決するべきであるし、実際にそうされてきた。それを認めないのは非生産的な場所にいた人間の自己保身であると思っている。25の若造が何を、と言われそうだが、これについては何度でも言ってやる。
前職、現職共にRubyの会社でRuby以外を書き続けている気がするが、それは個人の志向が会社選択にも影響されているのだと思う。
自分は仕事が無茶苦茶早いわけではないが、(得意分野なら調査フェーズを省略できるので早く終わらせられる自信はあるが)、ある程度の不可能を可能にするできると思っているし、今は、それが必要な会社に自分を売り込んで、優秀なエンジニアが揃っている環境に飛び込んで、自分に足りないものを吸収するだけだ。前職disったりして叩かれたりしたが、自分のスキルが売り手市場なのを知っているので、それを最大限利用している。
起業という選択肢
一応やってみたいことはあって、やっぱりゲームを作りたい、そのために起業してチャレンジしてみたい、という気持ちはある。
グラフィック的にリッチなゲームではないが、2Dゲームとしては十分な品質を備え、ターン制もしくはATBの戦闘と戦略と、アイテム収集に特化したゲームを作りたい、という欲求がある。自分が何年もやりたいと思っているが、結局自分の要求水準を満たすゲームは市場に登場していない。まあアトラスが近いといえば近いが。どちらかというとそういう方向性で好きなゲームはインディーのほうが多い。
僕は、とくにWizやRogueや90年代のRPGマニアなので偏っていることは認めるが、そういうのがやりたい人間がいるのは間違いないのに、ゲーム機のグラフィックの進化の都合と、市場の方向性の都合で切り捨てられきたと感じている。
RPGや、とにかくRPGのデータワークが好きな人、いたら @mizchi まで連絡ください。趣味プロジェクトとして始めましょう。ってのはとにかく、インディーゲーム市場が十分に育ったらチャンスはあると思っていて、そういうことに興味がある人を探している反面、まだ数年は早いとも感じている。PlaySimの知名度や、PS4, XboxOneのDLストアの参入障壁が下がったら考えたい。
ソーシャルゲームは、というかアイテム課金は、正直もう作りたくない。金を集めるためのプラットフォームを作るのが目的になって、作り手側に面白いゲームを作るというインセンティブがない。作ってる時の自分は今の自分から完全に切り離していたつもりだけど、古臭いゲーマーとしての自分は辛かった。あと脳みそ使う方のゲームを作りたい。
自分がやるなら、売り切りのゲームか、章立てでシナリオアンロックの式のRPGが作りたい。とはいったところで、自分がインディーやフリーのゲームで実績がないので、そこはこれから実績を作ろうと思っているのだけど、それが結局自分の個人時間の技術的投資になるので、結果として仕事のためになるので、そういう循環がある限りは僕はエンジニアとして生きていけるとおもっている。
結局そういう「夢」、みたいなのを言明しておくと、そういう起業のお誘いとかあって、良いのかなとも思っている。
他人にやりがい詐欺をさせられるのは許せないが、自分なら許せるし、そもそも勝算がない勝負はしない。詐欺にしない。
まとめ
- OSSで売名して海外脱出
- 国内で実績作ってR&D
- とにかくやりたいことのために起業
これらのどれかになるんだろうなぁという気がしている。 ちゃっかりやりたいことの宣伝ができたので満足。あと、一言言っておくと今現在の待遇や仕事に満足しているので、転職欲求はありません。起業の件は、やるならインディー市場がもうちょっと成熟してからです。
まあこういう記事を書くのもセルフブランディングということで。