「コードは汚くてもいい」を条件付きで擁護してみる

釣りじゃないですよ。わりとまじめに考えました。

実際にYコンビネーターで成功しているハッカーというのは、決して美しいコードが書けるわけではありません。プログラミングの上手さより大事なことは、まずどれだけユーザーの欲しいことを理解できるかということで、次に重要なのはその条件をもとに実際に使いやすい製品を作ることができるか、ということですね。そのなかのコードは別にきれいである必要はなくて、ユーザーが喜べばいいだけの話ですからね。むしろコードがどれくらいきれいかを気にする人は出来の悪いプログラマーだとぼくは思っているくらいです。コードが気になってしまうと締め切りに間に合わず、ビジネスにならないわけですから。ポール・グレアムもそのように考えている人だと思います

美しいコードを書こうとするのは悪いプログラマーだ

極端な話、コードがもうメチャメチャでも、動いて金が回れば正解なんですよ。「アイツの書くコードは汚いけど、アイツが入ったプロジェクトは絶対勝つよね」ってエンジニアは、絶対に呼ばれます。もう間違いない。少なくとも、僕は欲しいですし。

エンジニアよ、ゼネラリストなんて目指すな!―VASILY 金山裕樹のキャリア論

定期的にでてきますね、この話題。
そのたびにフルボッコに叩かれるわけなんですが……個人的に思うところを書いておきます。

結論から言うと、

WEBサービスのスタートアップなどでは、コードの美しさよりリリースのスピードを優先させることは十分ありえるし、妥当だと思います。


とりあえず、「美しい」とか「汚い」とかの表現があいまいなので、一応この記事の中での定義を決めておきます。

美しいコード
可読性が高く、保守しやすく、拡張性が高く、再利用しやすいコード

汚いコード
最低限のバグは潰してあり、基本的な脆弱性は塞いであるが、読みづらく、とりあえず動いてますって感じのコード

 

コードは汚いより美しい方が良いに決まっているわけすが……実際にはそのコードの寿命によるかなと思います。

綺麗、汚いにかかわらずコードには寿命があります。

サービスが立ちいかなくなったりとか、技術の移り変わりだとかで、捨てなきゃならん、あるいは一から全部書き直さなくちゃならんってことは、必ず発生します。

使い捨てのコードでさえ美しさを最優先させるのってのは、仕事ではなくて趣味です。

これから作るサービスがちゃんとビジネスとして成功するかわからない、資金に余裕がなくて優秀なエンジニアなんて雇えない、そんなスタートアップの状況下でなら、コードの美しさよりリリースするスピードを優先させるのはそんなにおかしなことでもないですし、「資金調達が上手くいったら優秀なエンジニア引き抜いて、中身丸ごと綺麗に書き直そうぜ」ってのも、戦略としてありだと思います。
スタートアップ時に書くコードの寿命は短くていいし、むしろそんな初期に書いたコードをその後何年も使い続け、保守し拡張し続ける方が無茶だと思います。

実際には綺麗なコードが書けるエンジニアは書くスピードも速かったりするのですが、でも、そういう優秀なエンジニアはちゃんと高額な給与で向かい入れられるべきだと思うし、そうなるとスタートアップ時にそんな人材を調達するのはかなり困難であるはずで、そんな中で美しさとスピード、どちらかを優先しなくてはならないとしたらスピードでしょう。
とにかく、とっととリリースしてビジネスとして成功させていかないと、エンジニアに払う給与だっていずれなくなってしまうのです。

それにこの方が、エンジニアの地位も向上すると思うんですよね。

優秀なエンジニアには、その優秀さ(美しいコードが書ける)がちゃんと評価され必要とされて大きなお金が払われるわけですから。

なんとなく、日本の「美しいコードであるべき」論争には、「上から下まで全ての人間があらゆる状況下で完璧な仕事をするべき」という職人魂の悪い部分が出ているような気がします。

そういう思想のもとでは、「汚いコードを書くエンジニアなんてものは許されないし、存在しないはず」とその姿が無視され、実際には大きな差があるはずの、優秀なエンジニアと未熟なエンジニアが十把一絡げにされて「全部で5人月でお願いします」みたいな話になってしまうのではないでしょうか。

スタートアップ時と、会社の成長期では必要となる人材が違ってくるという話がありますが、それはコードにも当てはまるってことだと思います。

美しさにこだわた挙句リリースが遅れて競合に先を行かれてビジネスとしてポシャッた、なんてことになれば、その綺麗に書いたコードもゴミ箱に捨てるしかないわけです。

まずはビジネス優先させないと……給与でないと困るし、会社潰れても困りますしね。

【余談】
ザッカーバーグが最初に書いたFacebookのコードも酷いスパゲッティだったって話もどっかで聞いたし、海外のスーパーなエンジニアの武勇伝には「今はでっかいサービスになってるが、俺が雇われた頃のコードは酷いスパゲッティで、それをFack!と罵りながら全部書き直したんだぜ、ハッハッハッハ」ってエピソードがわりと沢山あったと思うので、そんなに珍しい話でもないと思うんですけどね。

まぁ、SIerとかになるまた話が違ってくるとは思いますが。