昨年、私はPythonとHaskellに慣れました。特に、Java、C++、C#などの言語と比較して、これら2つの言語で記述できる短くて読みやすいコードに驚き、感銘を受けました。もちろん、これはHaskellとPythonでの私の旅を追求する非常に動機付けです。
ただし、Java、C++、C#などの言語では、ほとんどの場合、「外部から」コードを扱います。つまり、クラスとそのプロパティおよびメソッドが表示されますが、メソッドとプロパティがどのように記述されているかは、それらが約束したことを実行している限り、気にしません。
だから私はコードが短くて読みやすいときに本当に重要であるかどうか疑問に思っていました、そしてPythonとHaskellについての私の熱意は正当化されます(プロのソフトウェア開発において)多くの状況があり、外。
今では、多くの開発者がコードにコメントしないことを知っています。これらのケースでは、短い可読コードから利益を得るでしょう。ただし、コードを文書化する機会がある限り、確信はありません。
メソッドとプロパティがどのように正確に記述されたかは、それらが約束したことを実行している限り、気にしません。
丁度。しかし、彼らが約束したことをしないとすぐに、コードをチェックして、なぜ彼らがそうしないのかを確認する必要があります。同僚のコードを踏み込むと、シンプルで明確な、よく書かれたコードが明らかになる場合があります。その場合、あなたは幸せになります。または、それは4 000 LOCモンスターになります。その場合、あなたは...挑戦される。
これは、変更する可能性のあるコードにのみ適用されるわけではありません。期待どおりに動作しなかったため、プロプライエタリな.NET Frameworkのコードに何度か飛び込む必要がありました。そのような場合、非常によく書かれたコードを見ることができたので、私の期待に欠陥があることを数分で理解できました。
だからコードが短くて読みやすいときに本当に重要なのかと思っていた
コードが決して誰にも読まれない場合、それは問題ではありません。したがって、タスクを自動化するスクリプトを作成していて、タスクが実行されるとすぐにスクリプトをスローすることがわかっている場合は、コード品質に時間を費やす必要はありません。できるだけ早く何かをハックしてください。うまくいけば、素晴らしいです。
ただし、ほとんどの場合、コードは書き込まれるよりもはるかに頻繁に読み取られるため、読み取り可能なコードを書くことが不可欠です。
今では、多くの開発者がコードにコメントしないことを知っています。これらのケースでは、短い可読コードから利益を得るでしょう。ただし、コードを文書化する機会がある限り、確信はありません。
してもいいです:
誰かが理解できるようにコメントする必要のある不明瞭なコードを記述します。たぶん、コードを変更する次の人はコメントを変更するのを忘れるでしょう、それはコメントが古くなることを意味します。
不明確なコードを書き、それを行うためのより良い方法を考え、それを明確なコードにリファクタリングします。
以下も参照してください。
最初に、短いコードの問題を読み取り可能なコードから分離します。簡潔さは読みやすさに貢献しますが、それを保証するものではありません。また、実行の効率を保証するものでもありません。
だから私はコードが短くて読みやすいときに本当に重要であるかどうか疑問に思っていました、そしてPythonとHaskellについての私の熱意は正当化されます(プロのソフトウェア開発において)多くの状況があり、外。
すべての開発者は2つの帽子をかぶっています。コードのライターと他のプログラマーのコードのコンシューマーです。
コードの消費者として、私はインポートするコードがどの言語で書かれているか、またそれらがどのコーディング標準を実施しているかを気にしません。私が取り組んでいるのはどの言語からでも呼び出せること、コードが要件を満たしていること、正しいこと、そしてアクティブに維持されていることだけです。
ただし、コードの作成者として、私は数十年にわたって複数のリリースがあったプロジェクトに取り組んできました。他の何千人もの開発者が私たちのコードを消費しています。これを可能にする分野の1つは、同僚と私がdoourコードが読み取り可能かどうかを気にすることです。私や私のチームの他の誰かが7年前に書いたコードを毎日修正する必要があります。
一度使用されて二度と触れられない使い捨てスクリプトを作成している場合、読みやすさは重要ではないと考えるかもしれません。最も簡単なスクリプトを除いてすべてが正しく機能するようにデバッグする必要があるので、あなたは間違っているでしょう。読み取り可能なコードのデバッグは、あいまいなコードのデバッグよりもはるかに簡単です。
例として、PythonでSciPyパッケージを使用する場合、おそらく関数を呼び出し、その関数は次に、基本線形代数サブプログラム(BLAS)から関数を呼び出します。 FORTRAN。SciPyのユーザーとして、私は彼らの読みやすさの基準が何であるかを本当に気にしません。しかし、BLASの維持を担当する人々は、コードの可読性を深く気にする必要があります。ほぼ40年間そのコード。
今では、多くの開発者がコードにコメントしないことを知っています。これらのケースでは、短い可読コードから利益を得るでしょう。ただし、コードを文書化する機会がある限り、確信はありません。
必然的にコードとコメントが同期しなくなるためです。つまり、誰かがコードに変更を加え、コメントの更新を怠ります。次に、将来のメンテナはコメントとコードの両方を理解し、コメント、コード、またはどちらもが、発生しているはずの正しいバージョンであるかどうかを把握する必要があります。私はコメントを使用しており、コメントを更新するように心がけていますが、最善を尽くしても、コメントが分岐することを保証します。コードが読めない場合、物事を整理することは不必要に苦痛です。
私はあなたが書いたコードが他の人によって使用されることになると想定しています。もしそうであるなら、それはメインテナンスおよび/または拡張される必要があります。コードの読みやすさとサイズは、maintanabilityおよび拡張性、およびコードの再利用などの優れた実践コードを記述する場合。メンテナンス可能で拡張可能なコードを記述することには多くの利点があります。通常、その一部を管理します。それはあなたが実装、構造、動作を変更し、それに新しい部品を追加するオプションを提供する時が来たときに、あなたのパートナーとあなたの人生をより簡単にするでしょう。
もちろん、効率を上げるために可読性を犠牲にしなければならない場合もありますが、ほとんどの場合、これら2つの間にスイートスポットを見つけることができるはずです。
一方、コードが混乱している(巨大で読みにくい)場合は、デバッグやリファクタリングなどのプロセスに多くの時間と労力を費やす必要がありますが、これは対処するのが最も楽しいことではないと思います。私が崇拝するようなことわざがあります
「常にあなたのコードを保守することになる男があなたがどこに住んでいるかを知っている暴力的な精神病者になるかのようにコーディングしてください。読みやすくするためにコードを書いてください。」
オープンソースについても考えると、読み取り可能なコードを書くのは非常に良い習慣です。他の人があなたのソフトウェアを理解し、貢献し、改善して(最大限に活用するため)、新しいコーディングスタイルを取り入れられるようにするためです。他からの実践。コードが自明である場合、不要なドキュメントの必要性も排除します。
特定のソフトウェアを使用したい場合でも("外側にある")、次のことができるようになればよいでしょう。予測できない動作を回避するために、その機能を追跡し、複数のオプション(ライブラリなど)がある場合は、目的に最も適したものを選択します。
より良いソフトウェアを書くことは別として、問題を考えて解決する方法をより良くするのにも役立つので、私見はより深く考え、コードをより単純にする方が良いです。
それで、あなただけでなく他の人の生活も楽になるなら、なぜそれをしないのかと尋ねます。
ただし、Java、C++、C#などの言語では、ほとんどの場合、「外部から」コードを扱います。
私が使用するコードのほとんどは、外部から処理します。
私が作成、修正、またはリファクタリングするコードのほとんどは、内部から処理します。
私が使用するコードのほとんどは、ほんの一瞬で使用します。
私が作成、修正、またはリファクタリングするコードのほとんどは、少なくとも数分、場合によっては何時間も費やしています。
ですから、ほとんどの場合、内部からコードを処理します。内部から処理しているコードは少数のコードですが、何らかの方法で "処理"しているため、コードの大部分が「との取引」に費やされていること。