KISS原則って?
「Keep It Simple, Stupid」 or 「Keep It Short and Simple」の略
何事もシンプルにしてね。 という意味
複雑とは何か
そもそも複雑とはなんでしょう。
国語辞書を引いたところ、以下のように記載されていました。
- 物事の事情や関係がこみいっていること。
- 入り組んでいて、簡単に理解・説明できないこと。
エンジニアの世界で言うと、
コードやコンポーネントが互いに絡みあったり、依存している状態と言えそうですね。
なぜ複雑がダメで、シンプルさが必要なのか
アプリケーションは常に変更されるものだからです。
仮に一生変更されないアプリに携わっているなら、KISS原則も他の全ての原則も覚える必要はないです。
変更するためには、人がそこに手を加わえなければいけません。
手を加えるためにはコードを読まなければいけません。
そして、その時のためにコードをシンプルにしておかなければいけません。
普段あまり意識しませんが、コードは人間のために書かれるべきだと思っています。
機械のために書かれているわけではないと思います。(もちろん機械に命令するためにも書いていますが)
爆速アルゴリズムや、ワンラインのコンパクトなコードや書いたとして、それを他の人が読んで何を意味しているのか理解ができなかった場合、負債でありコストにしかなりません。
人間が理解しやすいようにわかりやすくシンプルに書くのが、我々エンジニアの使命だと思っています。
「短い = シンプル」は常に成り立たない
なるほど、シンプルさがエンジニアにも求められるのは理解できたと。
じゃあなんでも短くしようとするアプローチはちょっと待ったです。
「短い = シンプル」は時に成り立ちますが、時に成り立ちません。
// 短い
f = lambda x: 1 if x <= 1 else x * f(x - 1)
// 短くない
def faculty(number: int) -> int:
if number <= 1:
return 1
else:
return number * faculty(number - 1)
どのように"シンプル"を実現するのか
DRY原則やYAGNI原則を筆頭にいろんな原則/原理/パターンなどを用いて、シンプルにしていけいばいいと思います。それぞれの説明はここでは割愛させてもらいます。
原則などとは別に、”不要な使われていないものを削除する”というアプローチをここで簡単に紹介します。
コードの量が少なければ少ないほど、シンプルに向かっていきます。
サン・テグジュペリに以下のような名言があります。
追加するものがなくなったときでなく、
取り除くものがなくなったとき、それが完璧になるということである。
Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away.
いやあ〜、かっこいいですね..。
コードの中に眠っている、デッドコードと向きあう事は”シンプル”に向けて大きな前進になるはずです。
まとめ
コードは人間のために、何事もシンプルに!!!
参照