セカイノカタチ

世界のカタチを探求するブログ。関数型言語に興味があり、HaskellやScalaを勉強中。最近はカメラの話題も多め

マーブルワーズ

プログラミングの EASY⇔HARD と Simple⇔Complex

プログラミング界隈では、よく「SimpleとEasy」について議論されることが多いですが、だいたい紛糾します。

それは何故かというと、そもそもSimpleとEasyは、対立軸ではないからです。

Easy(簡単)の対義語は、Hard(難しい)です。に対して、Simple(単純)の対義語は、Complex(複雑)です。

それぞれ機軸が違う概念を比較するのですから、まとまった議論に向かうはずが無いのです。

それは、「長い」と「重い」を比べるようなものですが、長いものは総じて重いことが多いため、ヘタに議論が成り立ってしまうあたりが厄介なのです。

プログラミングにおいても、単純で簡単なものというのは、数多く存在しますし、複雑なものは難しいことが多いので、ここらの議論がごっちゃになるわけです。

これらの機軸を整理して考えると、議論はよりスムーズで発展的なものになるのではないかと思います。

自分の意見としては、プログラミングとは、「世界の複雑さを難しさに変換して圧縮する営み」だと思っています。つまり、現実世界は膨大な量の複雑さで溢れているため、何とかしてこれを圧縮して扱いやすくする必要があるわけです。

複雑さとは、「要素と要素の絡み合いの度合い」と言うことができるので、単純化すると「複雑さ=情報量」ということになると思います。

情報量が少なければSimpleになり、情報量が多ければComplexになります。

そして、情報量が一定なら難しいプログラムほど、よりSimpleにすることができます。Easy⇔Hardというのは、情報の圧縮力です。

だから、「簡単に書けるプログラミング言語」とか、「プログラミング不要で誰でも書ける」なんていう製品は、情報圧縮力が低く、取り扱える情報量の限界が低いということになります。

これは、物理法則のようにシンプルな法則で、基本的にプログラミングという営みはこの法則から逃れることができません。

後は、自分が扱う情報量を見積もって、必要な圧縮力を選定すれば良いということになります。

現代のコンピューティングの世界では、簡単で単純な用途から、複雑で難しい用途まで、あらゆるユースケースに応じたプログラミング環境が揃っていますから。

余談

余談ですが、この情報圧縮の考え方は、プログラミングに限ったことではありません。物理学や数学だって難しくてシンプルな式でより多くの現実の減少にマッチするものが、より高い圧縮率を持っていると考えることができます。

なんなら、仏教の教えだって、簡潔に私たちの認知の真実を言い表していますが、理解するのは難しいです。

この世のすべての事柄が、扱う情報量と圧縮率で表せると思うと面白いですね。