Hatena::ブログ(Diary)

shi3zの長文日記 RSSフィード Twitter

2017-12-13

お洒落エンジニアについて 08:25 Add Star

 以下、エンジニアでない人はよまなくていいです。


 世の中には、雰囲気でプログラミングをやっている人がいる。

 僕らは10年ほど前から、実用性よりも個人の美学を優先したコードを「オシャンティーなコード」と呼んでいる。


 オシャンティーなコードを書くのは、お洒落エンジニアである。


 オシャンティーなコードの定義は前述の通りなのだが、一定の法則がある。


 お洒落エンジニアは無闇矢鱈にマニアックな言語とかフレームワークを使いたがる。

 新しいものに飛びつく人もいれば、古すぎて誰も知らないものに飛びつく人もいる。


 まあ下っ端にお洒落エンジニアがいるというのは、上からいくらでもコントロールできるのであまり害がない。しかし技術責任者がお洒落志向だと、会社全体がお洒落化してヤバイ。


 お洒落エンジニアにとって重要なのは、要求された要件をコンクリートに満たすことではなく、いかにエレガントに解決するかということなので、そのフレームワークや言語が枯れているかどうかという点は一切気にしない。


 多くのお洒落エンジニアは、たいがい若い。要はハシカのようなもので、一度や二度はお洒落なコードやマニアックなプログラミング言語を使いこなす俺カッケエと思い込む時期があるのである。残念ながら俺にもそういう時期はあった。まあ17~22歳くらいまでは。


 お洒落かぶれになる時期はだいたい5年くらい。俺の場合は、7歳の頃からコードを書いていたので、10年後に罹患し、5年で完治したといえる。


 おれが完治できたひとつのキッカケは、MicrosoftのDirectXのサンプルを二週間で2つ作ったときだ。そのときまだC++で実装されたばかりのテンプレート機能を駆使して俺なりにできるだけエレガントに思える3Dゲームフレームワークを作った。VectorStormという名前も、いかにも厨二病から抜けられていない感じがした。


 しかし実際にこれが世に出てMicrosoftの公式なSDKサンプル(Dreamcast専用なのでライセンシー以外は入手できない)になると、急に恥ずかしくなった。家庭用ゲーム機が32ビット化していたとはいえ、テンプレートを使えばメモリは無駄に食うし、そもそもテンプレートは当時枯れてないし普及もしてないから、他の開発者がこれを参考に自分独自の拡張を加えることは絶望的に面倒なだけだと思ったからだ。


 幸いなことに、俺が書いたコードは実用品としてではなく、あくまでもサンプルコードだったためにテンプレートを使って行数を節約できたことはそれほど悪い話ではなかった。テンプレートの知識なしに読むのは大変だっただろうから、あれを渡された人たちの気持ちを考えるとあまり笑えない。


 そのあとも一時期、SchemaやPrologにかぶれたことがある。

 kahuaという、gache(Schema処理系のひとつ)ベースのWebフレームワークを一時期本気で仕事に使おうとしていた。


 kahuaを使うと、「継続ベース」という魅力的なプログラミングパラダイムを使ったWebサーバーを書くことができた。それはとても魅力的に見えた。当時C++でWebサービスを書いていた俺にとって、C++はあまりにもWebサービス向きではなかったからだ。


 当時はJavaScriptが貧弱で、Ajaxとかが出てくるよりずっと前だ。クライアントサイドでの処理は最低限にしなければならなかったし、対象はiモードだったから、そもそもJavaScriptは走ってなかった。


 しかし、kahuaの限界にすぐに達してしまった。そもそも慣れてないschema言語で、どこに問題があるか突き止めることもできないまま悶々としていた。


 しかし日々の仕事はやってくる。

 結局、自分が独立して会社を持つと、オシャンティーな技術は道楽に過ぎない、という結論を得た。


 サラリーマン時代に安達という後輩がいて、今はグルコースという会社を経営しているが、彼もなかなかオシャンティーが抜けない男だった。誰も見向きもしない頃からPythonを使っていて、彼に仕事を頼むと、誰も知らない頃のPythonで書かれたコードが納品され、それは誰もメンテできないのでとても困る、という時代が続いたことがある。もう10年以上前だ。


 今はむしろ安達がPythonをやり続けていてホッとしている。Deep Learning関係のプログラミングはPythonが多いからだ。PythonやそのWebフレームワークも枯れてきているので今は安心してPythonで実用的なコードが書けるし、みんなメンテできる。


 ダイバシティというのはいつも大事だ。だからオシャンティーな技術に全く興味を持たないエンジニアは、それはそれで失格であると思う。


 しかしオシャンティーな技術「しか」興味を持たないエンジニアは、現実の問題を解決できないと思う。



 とある会社があるとして、その会社のブログや、その会社の社員が、やたらオシャンティーなことを言っていたら警戒しなければならない。


 オタクというのは、とにかく普通の人が知らないことを知っているという知識をひけらかしたいだけの人が多い。


 「こっちのほうがエレガントだから」で仕事に使う技術を選択してしまう。誰にでもあるミスだが、25過ぎてもそんなことを言ってるやつが居たら張り倒して良い。


 現実のエンジニアリングで求められるのは、エレガントであることではなく、コンクリートであることだ。ソースコードが綺麗で保守性が高い、は多くの場合、自己満足に過ぎない。まあオシャンティープログラマーはさらにエレガントかつ、普通の人が読んでも意味がわからないようなほぼ暗号というかナゾナゾのようなコードを好むことが多いので、本人しかメンテできない。彼らのいう「自称エレガントでメンテナンス性の高いコード」は、たいがい普通の人から見たらゴミでしかない。


 要は、技術的負債である。


 技術的負債を一掃するには、まずトップを変えなければならない。技術的負債が蓄積されていくのは、トップが間違った道を示し続けるからだ。


 脱オシャレが成功すれば、あるいはとあるサービスの復活はそう遠くないかもしれない。出てきたメンツを見ると応援したくなる。ふたりとも、オシャンティーよりコンクリートを好む人物だと僕は知っているからだ。


 しかし大胆な決定をしたものだな。


 とにかくがんばれ。超がんばれ


https://i.gyazo.com/71a552fb6f9d32b5f86357c4c1958fcb.png