プログラマーではない友人と話したとき、「美しいコード」という概念に言及し、彼女はそれが何を意味するのか理解したかったのですが、私はそれを知らない人にそれを説明する方法について少し迷っていましたコンテキスト。
とにかくすべてのコードがだらしのないように見える場合、どのようにコードの一部が他のコードよりもきれいになるのかをどのように説明できますか?類推も役に立つかもしれません。
プログラマーではない友人と話したとき、「美しいコード」という概念に言及し、彼女はそれが何を意味するのか理解したかったのですが、私はそれを知らない人にそれを説明する方法について少し迷っていましたコンテキスト。
とにかくすべてのコードがだらしのないように見える場合、どのようにコードの一部が他のコードよりもきれいになるのかをどのように説明できますか?類推も役に立つかもしれません。
回答:
言語の類推
最もお気に入りの物語を考えてください。おそらく美しく書かれています。英語を話さない人にとっては、彼らがそれを理解できないか、なぜそれが美しいのか理解できないからといって、その美しさを損なうことはありません。
構造の類推
ずさんな家を考えてみましょう。明らかにレンガで覆われたドアと窓があります。モルタルは、基礎が不十分だった1つのコーナーで割れています。そして、存在しない2階に通じる階段がある理由を誰も理解できません。トイレは、換気扇のないキッチンの隣に建てられており、支配的な風が家の残りの部分から不快な湿気の匂いを吹き飛ばすように配置されています。暖炉の煙突は木から5cm離れており、すぐに火を放つことができます。
それとは対照的に、すべてがあるべき場所にある家では、メンテナンスが少なく、冬に少しの太陽熱で暖かく保たれるように完全に断熱され、換気からエネルギーが回収されるので、新鮮な空気と快適な温度の両方があります無視できる電力料金。火で燃え尽きないように、不燃性の素材で作られています。9.0の地震とF5の竜巻に耐えます。他の家よりも建設にかかる費用はわずか30%ですが、5年で差額は返済されます。そして、それは審美的に楽しいです。
GUIは、家の外観のようなものです。ユーザーは、美しい家を鑑賞できるように、GUIで美を認識することができます。しかし、おそらくさらに重要なことは、住宅とプログラムの両方のデザインの本当の美しさは、初心者にとっては見えないが、重要であるか、または関係なく持って良いことです。
車について考えてください。
私たちのほとんどは車を見て、体しか見ることができません。誰かがへこみを修理して、車に新しい塗装作業をすると、それははるかに美しく見えます。基本的には同じ車ですが、私たちが見るのはそれだけです。
メカニックが車を開き、エンジンを見ます。彼らはそのエンジンがどれほど優れているかを見ています。彼らは、すべてのものが取得、保守、および作業しやすいように配置されていることを理解しています。彼らは部品を見て、それがどれだけうまく設計されたかを知っています。経験豊富なメカニックにとって、手入れの行き届いた高品質の車のエンジンは美しいものになります。彼らはあなたにそれを美しくする理由を説明することはできませんが、美しさの概念は、メンテナンスコストの削減、車の寿命の延長、パフォーマンスの向上につながる可能性があります。あなたはそれを見ることができなくても、これらすべてがその車の価値を高めます。
ウェブサイトやアプリケーションを見ると、ほとんどの人が車を見ているように見えます。コードを見ると、メカニックが車のエンジンを見ているように見えます。私のようにそのコードの美しさを決して経験することはできません、それは文字通りあなたには見えません。しかし、その美しさはメカニックの美しさと同じように重要です。それは、そのソフトウェアがどれだけうまく実行されるか、どのような問題が発生するか、どのくらい簡単にソフトウェアを改善できるかなどを決定します。あなたはそれを見ることはできませんが、これはすべてそのソフトウェアの価値を高めます。
存在するすべてのコードは必須であり、説明を必要とするものはありません。
私は詩を参照します:
よく書かれた詩は、同じ主題に関する不適切に翻訳されたマニュアルからの抜粋とは感じが異なります。
コーディングの問題は概念化に関するものであるため、美しいコードは問題の顕著な概念化を表しています。
たとえば、ある問題を既存の解決済みの問題に還元し、問題自体の性質についての洞察を与えることができる場合、それが気に入っています。
問題の再概念化により、問題が非常に簡単に見える場合があります。難しいタスクを簡素化する簡単なトリックを必要とするエレガントなソリューションについて語っています。
私にとって、Quicksortは美しい例です。配列からランダムな要素を選択し、配列内の他のすべての要素と比較します。数がそれより少ない場合は、パイルAに入れます。数がそれより大きい場合は、パイルBに入れます。三角形の不等式により、パイルAの要素をパイルBの要素と比較する必要がなくなります。AとBを再帰すると、完了です。 。
ジャクソン・ポロックの絵画は、ある人にとっては美しいものであり、ある人にとっては意味のないものの例です。
良いコードのいくつかの側面は次のとおりです。
私の謙虚で個人的な意見では、美しいコードは良い小説の本のようなものです。
誰もが自分の役割を知っている無駄のない会社のようなもので、誰が何を上手く行っているかを簡単に把握でき、労力の重複はありません
対
平凡さを擁護するオフィススペースでは、3人のマネージャーがTPSレポートについてのバグを報告する以上のことはありません。!@#$ ing FAX MACHINE NEVER WORKS !!! また、特定の従業員は、1週間に約15分の実際の作業しか受けられない可能性があります。誰かが彼を解雇するのを忘れたために、従業員は技術的にそこでさえ働いていないかもしれません(誰も効率的に働いておらず、彼らが達成しようとしていることを評価するのが難しいので、本当に言うのは難しいです)。そして、実際に何かを成し遂げるためには、誰かが読んだり、実際に問題を解決していなくても、履歴書できれいに見えるだろうと考える、とてつもなく過度に複雑なシステムをナビゲートする必要があります。