新技術の話をしたときに、僕がいつも話すことをまとめてみました。気になるところとか、突っ込みどころがあれば、コメントいただきたいですm(_ _)m
技術選定時に気を付けること
- 現場に残る人たちが使いこなせるのか?(選定した人が抜けても機能するか?)
- ブラックボックス的に使うなら、十分に枯れているか?(10年以上が節目?)
- シンプルさや、使用感の統一性、既存技術との乖離性(手続き型と関数型など)などを考慮
- 高負荷時の動作など大丈夫なものか?(高負荷になるとバグが出たりします。。。)
- 既存技術と比べて大きな優位性があるのか?
- 頑張って選んでも、数年後には古いと言われます。。。
- 影響範囲が狭くて、修正頻度が極端に低いのであれば、とりあえずGoでもおkかと。
- スケールアウト出来るとはいえ、実行速度が速い言語のほうが良いと思います。(プロトタイプ制作なら作りやすいものが良いかもですが。。。)
など、色々と考えたほうが良いかなぁと。
C言語は今でも価値のある言語か?
CouchDBでは当初Erlangを多用していたが,
"Erlang VMのクラッシュのせいで2人月以上を" 浪費した
など、言語そのものなど、ブラックボックス的に使う部分に不具合があると、マジ大変です(言語のコミッターが居るとかなら良いのでしょうが、そういうことは稀だと思います。。。)さらに、業務要件を実装するのも大変なのに、言語自体のバグにも悩まされるのは本質的では無い気もします。
新言語の導入失敗
担当者が新言語を導入したいと願って、導入したは良いが、その担当者が会社辞めてしまって、残ったエンジニアが、メンテ出来ないorしたくなくて、結局別言語でリプレイスされたというのはありました。(残された人たちの恨みが大きかったです。)
導入担当者への信頼
若い子に新技術を導入したいと言われたときに、不安な気分になったのですが、実績のあるベテランが導入したいと言った場合、特に何も感じませんでした。この違いは何かなぁと考えたときに、自分に影響があるのか無いのか?の違いだと思いました。現場のことも考えて普及活動も含めて、最後までケツ持てるのかどうか?という違いは大きいなぁと思います。(逆に言えば、そこまでやる気も無いのに導入されるとちょっと。。。)
型の無い言語のバージョンアップ
テストが無いと、どこで影響が出るのか分からず、バージョンアップがものすごく怖いです。Node.jsで実装していた時も、テスト必須だと思ってテスト駆動開発で実装していました。(Node.jsは、テスト駆動開発がしやすいので、テスト駆動開発おすすめです。)
まとめ
色々と書きましたが、新技術導入自体は良いと思っています。ですが、システムが動かなくなる危険があるので、リスク・リターンを見極めて、慎重に導入していってほしいと思います。(けっして流行っているからとか、今時のモダンスタイルがどうのとか、そんな軽いノリでやらないでほしいです。)