プログラマーでない人に「美しいコード」をどのように説明できますか?[閉まっている]


44

プログラマーではない友人と話したとき、「美しいコード」という概念に言及し、彼女はそれが何を意味するのか理解したかったのですが、私はそれを知らない人にそれを説明する方法について少し迷っていましたコンテキスト。

とにかくすべてのコードがだらしのないように見える場合、どのようにコードの一部が他のコードよりもきれいになるのかをどのように説明できますか?類推も役に立つかもしれません。


12
コードを見せずに美しいコードをプログラマに説明できますか?説明自体は芸術です。
小次郎

9
ここで良いアイデアを思いつくことができれば、それを使って数学者以外の人に美しい証明を説明できるかもしれません。
デビッドソーンリー

美しいコードは、仕事を正しく行いながら、よりシンプルで少ないアイデアを使用するものです。皮肉なことに、単純なアイデアを見つけるという以前のタスクは複雑な仕事になる可能性があり、それを称賛します。-申し訳ありませんが、これをもっと自然な方法で誰かに説明する方法を見つけることができません。
LatinSuD

IDEのフォントをComic Sansに設定すると、美しいコードになります。ため息
カークブロードハースト

回答:


88

言語の類推

最もお気に入りの物語を考えてください。おそらく美しく書かれています。英語を話さない人にとっては、彼らがそれを理解できないか、なぜそれが美しいのか理解できないからといって、その美しさを損なうことはありません。

構造の類推

ずさんな家を考えてみましょう。明らかにレンガで覆われたドアと窓があります。モルタルは、基礎が不十分だった1つのコーナーで割れています。そして、存在しない2階に通じる階段がある理由を誰も理解できません。トイレは、換気扇のないキッチンの隣に建てられており、支配的な風が家の残りの部分から不快な湿気の匂いを吹き飛ばすように配置されています。暖炉の煙突は木から5cm離れており、すぐに火を放つことができます。

それとは対照的に、すべてがあるべき場所にある家では、メンテナンスが少なく、冬に少しの太陽熱で暖かく保たれるように完全に断熱され、換気からエネルギーが回収されるので、新鮮な空気と快適な温度の両方があります無視できる電力料金。火で燃え尽きないように、不燃性の素材で作られています。9.0の地震とF5の竜巻に耐えます。他の家よりも建設にかかる費用はわずか30%ですが、5年で差額は返済されます。そして、それは審美的に楽しいです。

GUIは、家の外観のようなものです。ユーザーは、美しい家を鑑賞できるように、GUIで美を認識することができます。しかし、おそらくさらに重要なことは、住宅とプログラムの両方のデザインの本当の美しさは、初心者にとっては見えないが、重要であるか、または関係なく持って良いことです。


19
その構造のアナロジーは完璧です!
ダニエルヴァンダースルイス

1
+1 @ user21007:ずっと前に、私は巨大なサイトの情報アーキテクトでした-誰もが構築の類推と、正しく動作し、適切に感じるシステムの概念を取得します。
失策

1
GUIを備えた製品によく似ています。フレームワークやライブラリにはあまり適していません。
デン

1
この広告を思い出させてくれます:youtube.com/watch
v

4
私は過去に言語のアナロジーをたくさん使ってきました。「このいコードで作業しています...」「待って、いってどういう意味ですか?」「なるほど、それを書いてください」
-DistantEcho

28

車について考えてください。

私たちのほとんどは車を見て、体しか見ることができません。誰かがへこみを修理して、車に新しい塗装作業をすると、それははるかに美しく見えます。基本的には同じ車ですが、私たちが見るのはそれだけです。

メカニックが車を開き、エンジンを見ます。彼らはそのエンジンがどれほど優れているかを見ています。彼らは、すべてのものが取得、保守、および作業しやすいように配置されていることを理解しています。彼らは部品を見て、それがどれだけうまく設計されたかを知っています。経験豊富なメカニックにとって、手入れの行き届いた高品質の車のエンジンは美しいものになります。彼らはあなたにそれを美しくする理由を説明することはできませんが、美しさの概念は、メンテナンスコストの削減、車の寿命の延長、パフォーマンスの向上につながる可能性があります。あなたはそれを見ることができなくても、これらすべてがその車の価値を高めます。

ウェブサイトやアプリケーションを見ると、ほとんどの人が車を見ているように見えます。コードを見ると、メカニックが車のエンジンを見ているように見えます。私のようにそのコードの美しさを決して経験することはできません、それは文字通りあなたには見えません。しかし、その美しさはメカニックの美しさと同じように重要です。それは、そのソフトウェアがどれだけうまく実行されるか、どのような問題が発生するか、どのくらい簡単にソフトウェアを改善できるかなどを決定します。あなたはそれを見ることはできませんが、これはすべてそのソフトウェアの価値を高めます。


11

存在するすべてのコードは必須であり、説明を必要とするものはありません。


2
@zdan:美しいと思う人は必要な知識を持っていると言って反論します(したがって、見る人の目には)。その上、賢い!=美しいIMO。
スティーブンエバーズ

2
@zdan:そのような多くの説明が必要なとき、それは「美しいコード」ではなく「賢いハック」です。
メイソンウィーラー

1
FFTは非常にスマートなハックですが、それを美しいと呼ぶ方法はありません。
-Kyte

1
ほとんどの部分でSnOrfusに同意します。しかし、私にとって美しいコードは必要で、十分で、自明であるだけでなく、主観的に完璧で軽いと感じなければなりません。多くのコードがSnOrfusが公開している基準を満たしているとはいえ、他の方法ではかなり面倒または不完全だと感じています。私はそのようなコードを美しいと呼ぶでしょう。
asoundmove

1
「必需品に還元されたが、それ以上ではない」という考えは正しい方向にあると思います。ただし、メンテナンスできないものや、タスクに対して間違った言語で書かれたものもこの定義に適合します。また、説明を必要としないことを要求することにより、定義に適合するほとんどのタスクも簡単でなければならない可能性があります。「Hello World」は美しいとは思えません。
user21007

5

私は詩を参照します:

よく書かれた詩は、同じ主題に関する不適切に翻訳されたマニュアルからの抜粋とは感じが異なります。


これも私の考えでしたが、誰もが詩を好んだり理解したりするわけではありません。音楽も頭に浮かびました。良い歌と悪い歌ですが、それもかなり主観的です。
PSU

何が... 25インターフェース+25クラスはすべて抽象クラスから継承していますか?赤い輪車が欲しかった。そして、おそらくいくつかの鶏。
エリックReppen

5

コーディングの問題は概念化に関するものであるため、美しいコードは問題の顕著な概念化を表しています。

たとえば、ある問題を既存の解決済みの問題に還元し、問題自体の性質についての洞察を与えることができる場合、それが気に入っています

問題の再概念化により、問題が非常に簡単に見える場合があります。難しいタスクを簡素化する簡単なトリックを必要とするエレガントなソリューションについて語っています。

私にとって、Quicksortは美しい例です。配列からランダムな要素を選択し、配列内の他のすべての要素と比較します。数がそれより少ない場合は、パイルAに入れます。数がそれより大きい場合は、パイルBに入れます。三角形の不等式により、パイルAの要素をパイルBの要素と比較する必要がなくなります。AとBを再帰すると、完了です。 。



4

完璧なコードには、しばしば矛盾する目標を同時に満たす必要があるため、非自明なコードは完璧ではありません。そのため、美しいコードは、手元のタスクのすべての重要な属性を完全にバランスさせ、ほとんどの人が考えている以上にこれらすべてを同時に満たすことに近づきます。順不同:

  • 読みやすさ
  • 簡潔
  • 効率
  • 柔軟性
  • 明示性
  • 堅牢性
  • 安全/ばか防止
  • 完全
  • 一貫性
  • 使いやすさ(APIの場合)

2

ジャクソン・ポロックの絵画は、ある人にとっては美しいものであり、ある人にとっては意味のないものの例です。


うーん...私はそれを感じていません。
ダイナミック

プログラミングは、芸術(またはその点で科学)よりも巧妙です。ノックしているわけでもない。
エリックReppen

1

その人が数学に精通している場合、美しいコードを問題のエレガントなソリューションと比較するのが好きです。


1

良いコードのいくつかの側面は次のとおりです。

  1. 多数の小さなディテールがありすべてが同じ方向を指している
  2. 構造一貫しており、すべての部分が同じパターンに従っている
  3. しかし、それは繰り返されず、代わりにすべての部分が異なります
  4. また、無効見なされる動作許可しません
  5. 異なる状態の可能な限り少ない数を持っています
  6. 関数のプロトタイプを読むことで、コードの動作全体理解できます
  7. 副作用はありません
  8. それの実行は停止することが保証されています
  9. プログラミング言語で利用可能な高度な機能は使用ません
  10. それはあまりにも複雑ではありません、それは解決し、問題の複雑さに比べて
  11. エラーや未定義の動作はありません
  12. それはコンパイルすることができ、いくつかの異なるベンダーのコンパイラで
  13. それは持っていない依存関係で使用されていないコードにします

0

私にとって、言語は私のツールです。

そして、他の職人と同じように、私は自分の道具が新品状態であることを好みます。

概念の明確さ、保守性、読みやすさに関して、コードの状態が良いほど。より良いコード。

だから、私にとっては、よく書かれたコードを読むことは、よくできたツールでツールボックスを開くようなものです。

私はこのアナロジーを数回使用して成功しました。特に、より実践的または芸術的な背景を持つ人々は、このようにクリーン/美しいコードの概念を理解しているようです。


0

私はそれがどのような依存だと思うあなたは美しいコードの意味します。

私にとって、コードは読みやすいときに美しいです。プログラミングの概念で起こりうる問題は別として、素人はコードを読んで、少なくとも高レベルでコードが何をしているかを理解できます。

他のいくつかの回答で説明したように、コードは、いくつかの単純な概念を組み合わせることで複雑な機能を実現するという意味でも美しい場合があります。それをプログラマー以外の人に説明するのにどのような類推が最善かは定かではありません、それは素人に依存します。NeoCubeのようにパズルのおもちゃが思い浮かびます。


0

私の謙虚で個人的な意見では、美しいコードは良い小説の本のようなものです。

  • 最初から最後まで読むことができます/現在のページを理解するために本の将来のページにスキップする必要はありません。
  • 不必要な繰り返しはありません/本は常に同じことを言っているのであれば、本は一種の退屈です。
  • 各パートの意図はほぼ毎回明らかです/本を読むために常に辞書を手元に置く必要はありません(詩/コードゴルフxDを除く)。
  • 手頃なサイズと複雑さ(モジュール、関数、ステートメントなど)の下位構造で構成され、「ネスト」があまりない/章、段落、文が適切にバランスが取れている。文の従属などのレベルが多すぎません。
  • 審美的な方法で見た目が心地よい(きちんとくぼんだ、正しく区切られたブロックなど)/適切な組版の本のように。

0

誰もが自分の役割を知っている無駄のない会社のようなもので、誰が何を上手く行っているかを簡単に把握でき、労力の重複はありません

平凡さを擁護するオフィススペースでは、3人のマネージャーがTPSレポートについてのバグを報告する以上のことはありません。!@#$ ing FAX MACHINE NEVER WORKS !!! また、特定の従業員は、1週間に約15分の実際の作業しか受けられない可能性があります。誰かが彼を解雇するのを忘れたために、従業員は技術的にそこでさえ働いていないかもしれません(誰も効率的に働いておらず、彼らが達成しようとしていることを評価するのが難しいので、本当に言うのは難しいです)。そして、実際に何かを成し遂げるためには、誰かが読んだり、実際に問題を解決していなくても、履歴書できれいに見えるだろうと考える、とてつもなく過度に複雑なシステムをナビゲートする必要があります。


-1

「美しいコード」はなく、「エレガントなアルゴリズム」と「エレガントなデザイン」があります。設計者は非プログラマーでも理解できます。

私は「美しいコード」について議論するプログラマーが嫌いです。なぜなら、彼らはインタープリターやコンパイラーがそれをどのように消化するか、そしてマシンが何をするかを本当に知らないからです。彼の物語は素晴らしいですが、実際にはそうではありません。


-1

素敵な写真が素敵な理由を人々に説明しますか?いいえ。写真を見せます(写真には1000語以上の言葉があるので)。したがって、最良の方法は、本当にエレガントで、美しく、完璧な(そして、おそらくJoe Averageがどのようにコーディングしたかという比較として)小さなコードを見せることです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.