回答
「美しさは目の判断によって購入されます」
とはいえ、ほとんどのプログラマーは、美しいコードが明快さと透明性、優雅さ、効率性、美学。
-
明快さと透明性 :明快さは、読者がコードの機能をどれだけ簡単に推測できるかです。透過的なコードは、それが行うように見えることを行います。コードが1つのことをしているように見えても、実際には別のこと(またはそれ以上のこと)をしている場合、それは「透過的ではなく、誤解を招く」ものです。
-
エレガンス:ほとんどのアルゴリズムを実装する方法はたくさんありますが、いくつかの方法は不器用ですが、他の方法はきちんとしていて優雅です。簡潔さはしばしば優雅さを増しますが、過度の簡潔さは明快さを低下させる可能性があります。
-
効率:リソース(CPU時間、メモリ、I / Oなど)の不要な使用を回避します。
-
美学:目に優しい。これはかなり主観的です。それは主にスタイルに帰着します。重要な考慮事項の1つは、一貫性のあるスタイルにすることです。たとえば、途中でインデントスタイルを変更するコードは見苦しいです。
コメント
回答
美しいコードが次のようなものだと思わせないでください。
- 巧妙なアルゴリズム
- 卑劣な言語機能
- 最小限のキーストロークで問題を解決する
そうではないため。そのようなコードはかわいいであり、一見の価値は確かにありますが、それはあなたが落ち着きたい種類のコードではありません。
そして、可変ラムダを継承する派手な再帰メタテンプレート静的ポリモーフィズム、またはオンラインで読んだものは何でも知っていますか?あなたはそれらを使用する明確な理由なしに革新的で気の利いたトリックに飛びつきたいと思うかもしれません。しかし、言語の境界を押し広げるコードも美しくはありません。
彼らはセクシーです。
たくさんの楽しみがありますが、これを自問してみてください。本当に欲しいのかこの言語の構造を探求することに時間を費やすのですか、それとも言語と協力して美しいものを構築したいですか?結局のところ、プログラミング言語は単に作成するためのツールにすぎません。
では、美しいコードとは何ですか?
美しいコード=保守可能なコード。それはそれです!
それは公式です!
何かを書くことができたら、数か月後に戻ってきて、それを進歩させ続けると、それは素晴らしいことです。1年後、機能も追加したいと思った場合は、既存の機能を微調整し、比較的簡単にそれを行うことができれば、それは美しいことです。他の人があなたのコードベースに足を踏み入れて、物事が整理されているために何が起こっているのかをすばやく理解できれば、彼らはより多くの髪を持ち、また美しいでしょう。
つまり、あなたが尋ねたい本当の質問は:「より保守しやすいコードを書くにはどうすればよいですか?」それはもっと大きな質問であり、非常に創造的な分野だと思います。コードを書き続けるだけですが、今回はもっと美しくできるかどうか自問しないでください。保守しやすくすることができるかどうか自問してください。
コメント
回答
これについての私の見解は、「BeautifulCode」は客観的または特に有用な用語ではないということです。そして、それを定義しようとすべきではありません。
英語の単語「beauty」の典型的な辞書の定義は次のようになります:
- “1。すべての組み合わせ感覚を喜ばせ、心を喜ばせる人や物の資質」
- 「1。心や感覚に強い美的喜びや深い満足を与える人や物に存在する資質。」
- 「1。心や感覚に喜びを与え、形や色の調和、芸術性の卓越性、真実性、独創性などの特性に関連する品質。」
(出典 http://dictionary.com )
共通の糸はその「美しさ」です美的に楽しいものについてです。それは必然的に主観的です…「美しさは見る人の目にある」という言葉で示されているように。
「美しさ」という言葉をコードに適用できます、そして明らかな意味は、コードが「美的に心地よい」ということです。
しかし、「美しいコード」には特定の属性のセットがあると言うことは(他の回答で示唆されているように)、<の矛盾です。 em>明らか美的に心地よいという意味。美学とは、人々がどのように… 個々の人々 …物事をどのように認識するかです。
別の言い方をすれば、人、芸術作品、…コードなど、私が美しいと思うべきものを誰かが私に言っていることについて、嫌悪感があります。
これまでのところ私が懸念しているように、美しいコードは私が美しいと思うコードであり、それだけです。それは主観的で個人的なものであり、そのままにしておきましょう。
回答
これが私のアドバイスです。
の回答をご覧ください"美しいコード"をどのように説明できますかプログラマー以外の人に?そして彼らが焦点を当てるべきと言っている特徴を見てください。次に、 Code Complete のような本を手に取り、それを読んで、より良いコードを書く方法についてのアドバイスを学びます。
ある時点で、古いコードを見ていると気になります。 、「これは醜いです。」それは直接的な美的反応になります。そして、それを見ると、「プログラマーのようにコードを表示していることがわかります。見栄えの良いコードがどのように見えるかがわかっているので、醜いことがわかります。
回答
美しいコードについてよく読むからといって、それについて書く人が同じ定義を持っているとは限りません。悲しいことに、あなたの質問から判断すると、彼らは気にしないようです。そもそもそれを定義します。
私にとって美しいコードは:
表現力のない簡潔なコードは不可解である可能性があり、簡潔でない表現力のあるコードは肥大化して読むのが面倒になる傾向があるため、両方が必要です。
コードを作成する要素の一部として保守性を含めません。美しさはあなたが見たり読んだりするものであり、行動するものではないからです。しかし、それは私の個人的な見解です。
回答
美しいコードという用語は、非常に曖昧で抽象的な用語です。それが何を表しているのか、そしてそれが何を意味するのかを理解するのは簡単ですが、それは二次的な目標以上のものとして見られるべきではありません。
コードカバレッジメトリックの多くを思い出させます。あなたが十分に高い数を得るとき、あなたはリラックスして何か他のものに行くことができます。約80%のカバレッジを持つコードベースを持つことは素晴らしいことであり、防弾ではありませんが、冷やして他のことをするのに十分です。 40%のカバレッジを持つことはかなり怖いので、その数を増やすことをお勧めします。
ポイントは、コードカバレッジは、数が少ない場合にのみ本当に意味があるということです。ですから、低くしないでください。カバレッジが特定のポイントに達したら、別の場所に移動します。
同様に美しいコードは素晴らしいです。あなたがかなりのコードを持っているなら、素晴らしい、何か他のものに移ってください。あまりストレスをかけないでください。100%のマークに達することは決してありません。そうすると、読み方や見た目に集中しすぎて、十分ではないことに気付くでしょう。それが何をするのか、それがどのように行うのか。だから、妥当なマークに到達してから停止してください。
しかし、コードが曖昧な場合、スパゲッティコードの巨大で複雑な混乱がある場合、ファイルを開くのに物理的に苦痛がある場合、コメントがない場合、またはドキュメントなどなどを修正します。そして、できるだけ早く実行してください。
時間の経過とともに、コードベースは全体的にクリーンになり、全体的に明るく、全体的に美しくなり、さらに重要なことに、曖昧さを減らすことに集中すると、より使いやすくなります。美しいコードを書くことはワンステップのプロセスではありません。
魔法の哲学はありません。1000の小さなステップがすべて一緒に行われ、コードの見た目とは関係のない具体的な目的を果たします。それらをすべて一緒に提供し、それらはその部分の合計として美しいコードを形成します。voltronやキャプテンプラネットのように。
回答
私はここでの答えに本当に同意しますが、あまり技術的でないアプローチを取ると、美しいコードはその作者の表現であると言えます」よく定式化された正確でありながらシンプルな言語を通して現れる目前の問題についての明確な考え。
私にとって、美しいコードを見るのは、芸術作品を見るのとよく似ており、メーカーを示す新しい詳細を見ることができます。意図だけでなく、さまざまな部分がどのように実現され、それぞれが非常に多くの質問に答え、そして最後に、その存在が、畏敬の念の言葉でしか説明できないようにすべてが一致する自然法則のように感じる方法:壮大、刺激的で、美しい。
その観点から、プログラマーとしてのキャリアの中で、他の人が知識を欠いているために理解できない、または甘やかされてしまったために注目に値しない美しいコードを発見する可能性があります。美しすぎることによって;)
美しいコードには、他に述べたようにすべての実用的な性質がありますが、私は完全に同意します。
回答
3つの基準があります:
- シンプル:少なくとも人間が読める形式である必要があります。たとえば、数行のソリューションに対してO(1)で機能するコードを記述できますが、0(n)で機能するコードは数行で解決することをお勧めします。これは極端な状況では変わる可能性がありますが、最初は単純さが重要です。
- 再利用可能:コードは再利用可能ですが、上書きされません。操作が必要な場合は、数年後に使用できるように定義する必要があります。
- インデント:これはあなたにとっては問題ではないかもしれませんが、初心者レベルにとっては、これが最初に解決されるべきことです。