元組み込み屋から見たWeb業界

もう5,6年程Web業界にいる元組み込み屋です。


組み込み業界からするとWeb屋って派手に見えて羨ましいんですよね。
はてブとかを賑わしている話題はいつもWeb系が多く、low layerの話はせいぜいこのOSの新しいバージョンが出たとか、せいぜいそのレベル。
たまに特定のアルゴリズムだったりが話題に登りますが、まあ寂しく羨ましいものです。
酷いとgitとかのバージョン管理ツールとか使えないとか珍しくないし(いまでもそうなのかな?)、富豪的プログラミングが当たり前で、こっちはいつだってカツカツ状態。
そんな自分がWeb業界に来て今まで数年間見てきて、感じたことを書いていきたいと思います。

仕様書を書かない

組み込み業界だとウォータフォールが当たり前で、仕様書もとことん書きます。
リリース後に修正なんか出来ないので、本当に失敗は許されないしだからこそなのですが、Web業界では仕様書を書かないというのは結構見ます。
まあ、仕様書なくてもなんとかなるというのもあるし、組み込み業界では部品1つでも減らしたいというのと同じように、早くリリースしたいと考えているので、ある意味当然の流れです。


と思っていたのですが、多分違う。そもそもディレクターに当たる人やヘタしたらエンジニアも含めて仕様書が書けないのです。
信じられないですが、エンジニアリングの基本的な知識がない人が多い。そしてそういう人に限って何故か指示する側にいます。
最近はアジャイル、そしてスクラムが流行っていますが、これを採用する理由の1つにドキュメントを書かなくて良い、と勘違いしている人が多そうです。
アジャイルスクラムはドキュメントを書かなくても良いとは言っていなくて、ドキュメントよりは動くソフトウェアを重視するってだけで、必要最低限のドキュメントは書くのです。


いつくか軽くググって出てきた内容を引用してみます。
http://www.kumikomi.net/archives/2012/04/ep04agi1.php

アジャイル開発注1ではドキュメント(文書)は作らない」と思っておられる方も多いのではないでしょうか.「ドキュメントを作らないアジャイル開発は適用できない」というような意見を聞くこともあります(最近はあまり聞かなくなったが).確かに,2001年2月にKent Beck氏らによって宣言された「アジャイル・ソフトウェア開発宣言」では,「包括的なドキュメントよりも動くソフトウェアを価値とする」と述べられています.しかし,アジャイル開発ではドキュメントを作らないわけではありません.「アジャイル開発では必要最低限のドキュメントを作成する」と考えるのが適切です.


http://objectclub.jp/technicaldoc/xp/agile_misunderstanding#q3

アジャイルプロセスはドキュメントを書かない」と最初に言ったのは誰なのでしょうか。正直、迷惑してます。 もちろんアジャイルプロセスでもドキュメントは書きます。ただ優先順位が異なるだけです。 『アジャイルソフトウェア開発宣言』にもあるように「完全なドキュメントよりも、動くソフトウェア」を相対的に重視するだけです。 最小限の文書化で最大限の効果を狙う、必要にして十分なドキュメント。そうしたドキュメントは一朝一夕に書けるものではありません。 むしろアジャイルプロセスのほうが、ドキュメント作成の難易度は高いともいえます。 「コードがドキュメントだ」とうそぶくことは簡単ですが、「ドキュメントであるかのようなコード」「ドキュメントが不要なコード」を書くのはとても難しいです。 また、コードだけでは「なぜこの設計にしたのか」「なぜ他の設計にしなかったのか」という設計判断の根拠が残せません。 アジャイルプロセスはコードを重視するプロセスではあっても、偏重するプロセスではありません。 コードとドキュメントの間でバランスを取ってこそのアジャイルプロセスなのです。


曲解してかそうでないかは不明ですが、指示する側が適当に口頭で作りたい内容と、いつまでに欲しいよという希望だけ伝えて会議は解散、そしてそのとおりに作れると思い込むという心底アホで間抜けな考えを持っているようです。
当たり前ですが、ドキュメントを書いて、開発して、そしてテストをする。ごく当たり前の流れです。知識のない人が指示を出して当たり前の流れを無視してまともな物なんか出来るはずないです。


ドキュメントがなく引き継ぎもまともにしないせいで、カオスな状態になっている会社はそう少なくないはずです。
普通のやつらの上を行け(http://practical-scheme.net/trans/beating-the-averages-j.html)には、高速でリリースが出来てライバル会社に勝てたとかいう話があるけど、あれってそれが出来る言語と優秀なエンジニアだったからで、普通の企業では無理。
この無茶な開発を行うと結局エンジニアにしわ寄せが行くので、残業、休出の嵐になります。なんとかリリースしてもバグだらけだったり、エンジニアの心が壊れて使い物にならない、とが当たり前になります。


ドキュメントを書かないのは悪ですよ

Web業界はgitとか色々ツールが使えて、派手!

gitとかのバージョン管理ソフトを使わないのは組み込み業界がアホなだけですが、それ以外も色々ツールが使えて羨ましいですよね。
これやっている事自体はWeb業界がただしいですが、最近感じてきた事は上記のように結構目茶苦茶な開発が当たり前で、それをどうにかしたいとエンジニアが何とかしようとした結果ではないかと思うのです。逆に言えば、多少体質が古くても組み込み業界はまだまともで(まともじゃあないとこもいっぱいあるけど)、それ以上にエンジニアリングを分かっていない人が多いのです。
Web業界の問題の本質はここにあります。

自動テストが羨ましい

これ本当に羨ましい。コメントからドキュメントの自動生成程度ならばやっている所も珍しくないですが、テストの自動化は羨ましい。
どうしたって組み込みのテストは自動化というわけには行きませんし、再現性が難しいのもあるので人が手でというのは珍しくないです。


ですが、実際にはJenkinsを使って自動化している所って業界全体の半分もあれば良い方だと思っています。実態は開発が忙しすぎてTDDどころかテストコードをあまり書いていないプロジェクトも結構あります。
所詮そんなものです。
ちなみに、まともなテスト仕様書も書けないとこも珍しくないです。

そもそもなぜこんなことに..

他にも色々ありますが、こんな事になっている理由は?
やはりまずは勉強不足なのでしょう。そもそもWeb業界って組み込みに比べると非常に短い歴史しかないため、教育出来る人が少ないからなんとなく開発している状況なのです。
もちろん素晴らしい運用、開発している会社はいっぱい有りますが、やはりダメな会社は少なくないのです。
エンジニアはまだよいです。基本的に自分で勉強する人は珍しくないので。
問題は非エンジニアなのです、こういう人に限って勉強をせず、そのくせお金と時間をかけず開発したがるのです。まあ組み込み業界にもそういう人達はいますが彼らより酷いでしょう。


結局エンジニアが独立するなりなにか別の方法を見つける必要があると最近は考えています。
何故プログラマーは起業に追い込まれるのか http://anond.hatelabo.jp/20140526004631
こういうのもその1つの回答なんでしょうね。
個人的には仕事では色々諦めて、プライベートプロジェクトで副業するのが一番だと思う。