シンプルさは常に読みやすさを向上させますか?
たぶん、少し論争がありますが、絶対にそうではありません。
パブリックインターフェイスに200個のメンバー関数を持つクラスを渡すことができます。これは、最も人間が読み取れるパブリックインターフェイスかもしれません。そのようなコードとそのドキュメントを何気なく読むだけの喜びかもしれません。ただし、読みやすさにもかかわらず、これらすべての機能が相互にどのように相互作用するかを気にしなければならず、誤用に起因するトリッキーなエッジケースに注意する必要があるため、「単純」とは呼びません。
「読みやすさ」は人間のエラーを防ぎ、コードの保守性を改善するという点で私にとって最優先事項ではないため、200に読みにくい20のメンバー関数を持つクラスを好むでしょう。それを変更することができます、すなわち)。
ただし、これはすべて「単純さ」の個人的な定義にかかっています。「可読性」は、典型的には変化しないことを誰かが、彼らは正規表現は私たち単なる人間の残りの部分を忘れて、例えば、非常に「読みやすい」と考えていることはあまり専門知識と流暢さを取得していない限り、私たちの間で乱暴。
シンプルさ
昔、「シンプル」とは「できるだけ読みやすい」ことを意味すると思っていた時代がありました。したがって、構文を改善し、できる限り読みやすく、書きやすいものにするために、多くの便利な関数を使用してCコードを記述します。
結果として、非常に大きく、リッチで高レベルのライブラリを設計し、すべての自然な人間の思考のための関数をモデル化しようとしました。私が当時書いたコードは、最も「読みやすい」かもしれませんが、最も「保守不能」で「複雑」でもありました。
Lisp
それでも、私は90年代半ば(後発)にLISPに短い情熱を抱いていました。「シンプル」という私の考え全体を変えました。
LISPは最も読みやすい言語ではありません。入れ子になった括弧のボートロードで再帰関数を呼び出しながらCDRとCARを抽出することは、非常に「読みやすい」とは誰も考えないことを願っています。
それにもかかわらず、言語の奇妙な構文と完全に再帰的なやり方に頭を悩ませるのに苦労した後、それは私の単純さの考え方を永久に変えました。
LISPで書いたコードで私が見つけたのは、そのように考えることのトリッキーさが私にもっと露骨な間違いを犯させたにもかかわらず、私はもう微妙なエラーを犯していなかったということです(しかし、それらは簡単に見つけて修正できます)。関数が何をしているのかを誤解しておらず、微妙な予期しない副作用を逃していませんでした。私は、一般的に変更を行い、正しいプログラムを作成するのが楽でした。
LISPの後、私にとってのシンプルさは、ミニマリズム、対称性、柔軟性、副作用の減少、無限のさまざまな方法で一緒に組み合わされる柔軟性の少ない機能についてでした。
最も信頼できるコードは存在しないコードであるという考え方に感謝するようになりました。それは大雑把なメトリックにすぎませんが、その量に基づいてコードの信頼性が失われる可能性があると思う傾向があります。構文上の最大限の利便性と読みやすさを追求すると、その量が大幅に増加する傾向があります。
ミニマリズム
LISPの考え方が組み込まれているため、私は最小限のAPIを好むようになりました。「便利な」ヘルパーを大量に提供し、コードを「読みやすく」する可能性があるものよりも、利便性が低く、読みにくい可能性のある、より少ないがより信頼性の高い柔軟な機能を備えたライブラリを好むこれらの数千の機能の1つが何をするのかを誤解することから生じる、信頼性の低い問題や驚きの問題。
安全性
LISPのもう1つのことは安全性です。それは最小限の副作用と純粋な機能を促進し、言語での読み書きの難しさが10秒後に見つけることができる露骨な間違いを増やしたにもかかわらず、私はもはや微妙な間違いを犯すのを見ていませんでした。
純粋な関数と不変の状態は、次の構文であっても、余裕があればいつでも私にとって好ましいものになりました。
sword = sharpen(sword)
...は、以下よりもやや単純で人間の思考から切り離されています。
sharpen(sword)
読みやすさVS。シンプルさ
さらに、LISPは最も「読みやすい」言語ではありません。多くのロジックをコードの小さなセクションに詰め込むことができます(1行に複数の人間の考えがあります)。私は理想的には「読みやすさ」のために1行に1つの人間の考えを好む傾向がありますが、それは必ずしも「単純さ」のためではありません。
このような「シンプル」の定義では、「シンプル」が「読みやすい」と実際に競合する場合があります。これは、インターフェース設計の観点から物事をより考慮しています。
シンプルなインターフェースは、それを使用するために学ぶことをはるかに少なくする必要があることを意味し、潜在的に、そのミニマリズムの結果として、より高い信頼性とより少ない落とし穴があります。主題に関する包括的なドキュメントは、大量の本ではなく小冊子に収まる場合があります。それにも関わらず、それはもっと面倒な作業を必要とし、読みにくいコードを生成するかもしれません。
私にとって「シンプル」は、システムの機能を幅広いレベルで理解する能力を向上させます。私にとって「読みやすい」とは、小さなコードの各行を自然言語と思考に結び付ける能力を向上させ、特に言語に堪能でない場合に、コードの1行が何をするかについての理解をスピードアップする可能性があります。
正規表現は、私が「非常に単純」と考えるものの例です。私の個人的な好みには「単純すぎて読みにくい」です。これらの両極端の間にはバランスのとれた行為がありますが、正規表現には、定義どおりのLISPのような単純さの品質があります。ミニマリズム、対称性、信じられないほどの柔軟性、信頼性などです。流readableになるとは思わないほど読めなくなってしまいました(私の脳はうまく動かないので、正規表現コードを流writeに書ける人がうらやましいです)。
とにかく、それは「シンプルさ」の私の定義であり、「読みやすさ」とは完全に独立しており、時には他のものと干渉することさえあり、より「構文的に便利」で読みやすいがより大きなライブラリまたは「構文的に「不便」、読みにくい、さらに小さいライブラリ。私はいつも、読みやすさとより自然な人間のシンタックス(正規表現の点ではない)を多少犠牲にして、ミニマリズムへの強い選好で、後者に合わせて真の「理解の利便性」と真の「維持可能性」優先順位を見つけました。YMMV。