美しいコードとは何ですか?[閉まっている]


30

開発者は美しいコードを書かなければならないことをよく読みますが、初心者の私にとっては、美しいコードとは何か、どのようにそれを認識するのかわかりません。

当然の質問は、美しいコードを書く方法と、コードの品質を向上させるための実践的な習慣は何ですか?、私が書いたコードを美しくするために何を気にする必要がありますか(そして私が学ぶこと)。



4
それは単なるスピーチの図です。美しさは見る人の目にあり、それを超えて、問題を解決するためにテキストファイルに記述した指示の明快さ、そしてあなたまたは他の誰かがそれを簡単に修正および維持できることが重要です。未来。さらに、インデント、モジュール構造、複雑さ、効率性、読みやすさ、命名規則など、コードがどれだけ美しいかはあなた次第です。
bad_keypoints


回答:


55

「美は目の判断によって買われる」。

そうは言っても、ほとんどのプログラマーは、美しいコードが明快さと透明性、優雅さ、効率、美学のバランスを示していることに同意すると思います。

  • 明快さと透明性:明快さは、読者がコードが何をするかをどれだけ簡単に推測できるかということです。透過的なコードは、それがするように見えることをします。コードが1つのことをしているように見えるが、実際には他の何か(またはそれ以上)を行う場合、それは透過的ではありません-それは誤解を招くものです。

  • 優雅さ:ほとんどのアルゴリズムを実装する方法はたくさんありますが、いくつかの方法は不器用で、他の方法はきちんとしていて優雅です。簡潔さはしばしば優雅さを追加しますが、過度の簡潔さは明瞭さを低下させる可能性があります。

  • 効率:リソース(CPU時間、メモリ、I / Oなど)の不必要な使用を回避します。

  • 美学:目に優しい。これは非常に主観的です。それは主にスタイルになります。重要な考慮事項の1つは、一貫したスタイルを持つことです。たとえば、スタイルを途中でインデントするなど、変更するコードは見苦しくなります。


11
美しい説明、+ 1
高円寺

2
「効率」を取り出します。厳密な意味ではポジティブですが、リストに含めることはせいぜい誤解を招く可能性があります。これは通常、他の副産物であり、コーディング時に二次的な問題になるはずです。主な理由は、ほとんどの場合、コンパイラーがダークマジックを実行した後にのみ現れるからです。
DPM

@Jubbat確かに-時々、最も効率的なソリューションは実際には非常にいコードにつながります。(たとえば、古典的な高速逆平方根関数)
ダレルホフマン

@DarrelHoffmanそうですね、その妥協点は、効率と残りだけでなく、優れたコードを定義する変数によっても当てはまりますが(残念ながら、「コードの完了」にはこれについての十分な説明があります-残念ながら、開始probably-近くブック、)
DPM

@Jubbat:効率は通常二次的な関心事であることに同意しますが、それでも美しさの方程式を考慮していると思います。
イグビーラージマン

20

人々をだまして、美しいコードは次のように思わせないでください。

  • 賢いアルゴリズム
  • 卑劣な言語機能
  • キーストロークの最小量で問題を解決する

そうではないからです。そのようなコードはかわいくて、一見の価値は確かにありますが、あなたが落ち着きたいコードの種類ではありません。

そして、あなたは、変なラムダを継承する派手な再帰メタテンプレート静的多型を知っていますか?あなたはそれらを使用する明確な理由なしに革新的で気の利いたトリックにジャンプしたいかもしれません。しかし、言語の境界を押し広げるコードも美しいものではありません。

彼らはセクシーです。
たくさんの楽しみがありますが、次のことを自問してください。私は本当にこの言語の解剖学を探求するのに時間を費やしたいですか、それとも言語と協力して美しいものを作りたいですか?結局のところ、プログラミング言語は作成するツールにすぎません。


では、美しいコードとは何ですか?

美しいコード=保守可能なコード。 それでおしまい!
それが式だ!

何かを書くことができて、数か月後に戻って、それについて進歩を続けていれば、それは素晴らしいことです。1年後に、既存の機能を微調整するだけでなく機能を追加する必要があることに気付き、比較的簡単にそれを行うことができれば、それは素晴らしいことです。他の人があなたのコードベースに足を踏み入れて、物事が整理されているために何が起こっているかをすぐに理解できれば、彼らはより多くの髪を持ち、また美しくなります。

したがって、あなたが尋ねたい本当の質問は、「どのようにメンテナンス可能なコードを書くのですか?」です。私はそれがより大きな質問であり、それが非常に創造的な規律だと思う。コードを書き続けるだけですが、今回はもっと美しくなるかどうかを自問しないでください。保守性を高めることができるかどうかを自問してください。


4
あなたが提起する問題と戦うために、c2.com / cgi / wiki?KillYourDarlings
jk

4

これに関する私の見解は、「美しいコード」は客観的または特に有用な用語ではないということです。そして、それを定義しようとするべきではありません。


英語の単語「美」の典型的な辞書の定義は次のようになります。

  • 「1.感覚を喜ばせ、心を喜ばせる人または物のすべての資質の組み合わせ」
  • 「1.心や感覚に強い美的喜びまたは深い満足を与える人または物に存在する品質。」
  • 「1.心や感覚に喜びを与え、形や色の調和、芸術性の卓越性、真実性、独創性などの特性に関連する品質。」

(ソースhttp://dictionary.com

一般的なスレッドは、「美」は美的に楽しいものであるということです。「美しさは見る人の目にある」という言葉で示されているように、それは必然的に主観的です。


「美しさ」という言葉をコードに適用できますが、明らかな意味は、コードが「審美的に楽しい」ということです。

しかし、その後、「美しいコード」が特定の属性セット(他のアンサーによって示唆されている)を持っていると言うことは、審美的に楽しいという明白な意味の矛盾です。美学とは、人々... 個々の人々 ...が物事をどのように知覚するかということです。

別の言い方をすれば、誰かが私に美しいと思うべきことを教えてくれるのを嫌う何かがあります。それは人々、芸術作品、またはコードの中にあります。

私が思う限り、美しいコードは美しいと思うコードであり、それがそれです。それは主観的で個人的なものであり、そのままにしておきます。


2

これが私のアドバイスです。

回答に目を通すどのように非プログラマに「美しいコード」を説明することができますか?そして、彼らが焦点を当てるために言う特性を参照してください。次に、Code Completeのような本を取り上げて読み通し、より良いコードの書き方に関するアドバイスを学びます。

ある時点で、「これはcodeいです」という古いコードを見ていると、あなたにぶつかるでしょう。それは直接的な審美的な反応です。そしてそれを見ると、コードをプログラマのように見ていることに気付くでしょう。そして、見栄えの良いコードがどのように見えるべきか知っているので、さを見ることができます。


1

美しいコードについてよく読んだからといって、それについて書いた人が同じ定義を持っているわけではありません。悲しいことに、あなたの質問から判断すると、彼らがそもそもそれを定義することさえ気にしていないようです。

私にとって美しいコードは:

  • 表現力豊か
  • 簡潔な

表現力に欠ける簡潔なコードは不可解である可能性があり、簡潔ではない表現力に富むコードは肥大化して読みにくくなる傾向があるため、両方が必要です。

美しさはあなたが見たり読んだりするものであり、行動するものではないため、コードを美しくするものの一部として保守性を含めません。しかし、それは私の個人的な見解です。


0

美しいコードという用語は、非常に曖昧で抽象的な用語です。それが何を表し、何を意味するかは簡単に理解できますが、決して二次的な目標以上のものと見なされるべきではありません。

多くのコードカバレッジメトリックを思い出させます。数字が十分に高くなったら、リラックスして別の場所に行くことができます。約80%のカバレッジを持つコードベースは優れていますが、防弾ではありませんが、他のことを冷やしたりするのに十分です。40%のカバー率を持つことは非常に恐ろしいことであり、その数を増やすことをお勧めします。

ポイントは、数が少ない場合にのみコードカバレッジが本当に意味があるということです。低くしないでください。カバレッジが特定のポイントまで上昇したら、他の何かに進みます。

同様に、美しいコードは素晴らしいです。すばらしいコードがあれば、すばらしいものに進みましょう。それについて強調しすぎないでください。その100%のマークをヒットすることは決してありません。そうすることで、読み方や見た目に集中しすぎて、何をするのか、どうするのかが十分ではないことに気付くでしょう。 。したがって、妥当なマークに到達してから停止します。

しかし、あなたのコードがcodeい場合、スパゲッティコードの巨大な複雑な混乱の場合、ファイルを開くのが物理的に苦痛な場合、コメントやドキュメントなどがない場合は修正します。そして、できるだけ早くそれを行います。

時間の経過とともに、コードベースは全体的にきれいになり、一般的に明るく、一般に美しくなり、より重要なことに、無駄を少なくすることに焦点を当てると使いやすくなります。美しいコードを書くことは、ワンステップのプロセスではありません。

魔法の哲学はありません。その1000の小さなステップはすべて一緒に行われ、そのすべてが、コードがどれほど美しいかとは関係のない具体的な目的に役立ちます。しかし、それらを一緒に提供すると、それらはその部分の合計として美しいコードを形成します。ヴォルトロンのように。またはキャプテンの惑星。


0

私はここでの答えに本当に同意しますが、技術的ではないアプローチを取ると、美しいコードは著者の手近な問題の思考の明快さの表現であり、よく定式化された正確でシンプルな言語を通して現れます。

私にとって、美しいコードを見ることは、芸術作品を見て、メーカーの意図を示す新しい詳細を見ることに似ていますが、さまざまな部分がどのように実現されたか、それぞれが非常に多くの質問に答えて、最後に、その存在がどのように自然の法則のように感じられ、すべてが揃っているので、壮大、感動的、美しいというwords敬の言葉でしか説明できない。

したがって、その観点から、プログラマーとしてのキャリアでは、知識が不足しているために他の人が理解できない美しいコードを発見する可能性があります。

美しいコードには、別の方法で述べたようにすべての実用的な品質があります、私は完全に同意します。


0

次の3つの基準があります。

  • シンプル:少なくとも人間が読めるものでなければなりません。たとえば、大量の行を含むソリューションのO(1)で動作するコードを書くことができますが、0(n)で動作するコードは数行で解決します。これは極端な状況では変わる可能性がありますが、最初はシンプルさが重要です。
  • 再利用可能:コードは再利用可能でなければなりませんが、上書きしないでください。操作が必要な場合は、数年後に使用できるように定義する必要があります。
  • インデント:たぶんこれはあなたにとって問題ではないかもしれませんが、初心者レベルにとっては、これが最初に解決されるべきことです。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.