Simple Made Easy
Simple Made Easy
https://res.infoq.com/presentations/Simple-Made-Easy/en/mediumimage/rich-hickey-big.jpg#.png
infoqによる文字起こし付きの動画ページがあるのでおすすめ:
プログラミングにおける単純さはSimpleとEasyに区別されるべきである
Easyはユーザから見て親しみやすく、扱いやすいこと
Easyの反対はHardである
Simpleは単一の責務、単一の機能、単一の概念に特化しているということ
Simpleの反対はComplexである
「単一の操作で済む」のはEasyかつComplexの可能性があるので注意
見かけのコードとして1行で済むとしても、そのために巨大で複雑な仕様を持つフレームワークに依存しているならEasyかつComplexと言える
例としてRich Hickeyはプログラミング言語を実装する際の構成要素を以下のように分類している
Complex constructs: State, Object, Methods, Syntax, Inheritance, Switch/matching, Vars, Imperative loops, Actors, ORM, Conditionals.
avashe.iconRich Hickeyはこのsimplicityに基づいて独自の言語を至ったのがすごい、関数プログラミングの一部の概念も批判していて、例えばパターンマッチング批判とかは驚く人もいるんじゃないだろうか
Simple constructs: Values, Functions, Namespaces, Data, Polymorphism, Managed refs, Set functions, Queues, Declarative data manipulation, Rules, Consistency.
それぞれの分析については元の発表を参照
SimpleとEasyは対立構造ではない
Simple <-> Complex と Easy <-> Hard の二軸である
SimpleでありながらHardなことはありえる
例えば単一機能に特化したライブラリをたくさん集めてアプリを開発することは、強力で分厚いフレームワーク一つにのっかって開発するより(短期的には)難しい
ここがポイントで、Simple Made EasyはSimpleを追求すれば勝手にEasyがついてくるんだ!という主張ではない
avashe.icon私も最初誤解してましたが、Simple Made Easyは「シンプルという概念を簡単に解説する」というユーモア交じりのタイトルであることに注意してください
プログラマはEasyではなくSimpleであるかどうかに注目して意思決定すべきであるという主張
ソフトウェアにおいて重要なのはそれが信頼でき、時間経過に伴って変更していけるかどうかである
ソフトウェアにおいて重要ではないのはコードの見た目や開発の体験、文化である
avashe.icon補足すると「体験の良さや文化はソフトウェアに外在する開発環境やチームにおいて議論すべきことであり、ソフトウェアそのもののSimplicityについて議論する場合これらは重要ではない」という意味だと思ってます
Simpleでありつづけることで、中長期においてもコードの理解、変更、デバッグが容易になる
特に初期はSimpleでありながらHard(設計開発にコストがかかる)なことはありえるが、中長期・大規模化した後に効いてくる
ゼロからSimpleな設計を考えるのは大変だが、とにかくcomplectする概念を避け、初めからsimpleなものだけを採用し、それらの組み合わせだけで作っていくように考える
物事をComplexにすることをcomplectという動詞で表す
元々は絡めさせる、編み合わせるという意味
avashe.icon厳密に元の語を使っているが、日本語にするなら普通に「絡まる」で良いと思う
ここでは、複数の軸やパラメータ、概念、責務、機能を混ぜることを指している
例えば状態は値と時間をcomplectしている
State is easy but introduces complexity because it intertwines value and time. State intertwines everything it touches directly or indirectly, and it is not mitigated by modules and encapsulation.
重要なのは、モジュール化やカプセル化などの抽象化を施したとしても、それの利用者は遠隔的にcomplectされてしまうということ
抽象化はあくまでもその場から引き離すことしかできない
avashe.iconなにがSimpleな概念・実装であるかという分析については随時議論されるべき点だろう