タグ付けされた質問 「code-quality」

高品質のコードを書くためのベストプラクティスに関する質問。

19
読みやすく保守が容易なコードを書いたかどうか、どうやって知るでしょうか?
作成したコードが読みやすく、理解しやすく、保守しやすいことをどのように知ることができますか?作成者の観点からはもちろん、作成者がコードを作成および編集したため、最初からコードは読み取りおよび保守が可能です。しかし、私たちの職業がコードを測定できる客観的で定量化可能な標準がなければなりません。 これらの目標は、元の作者の専門家のアドバイスなしにコードを使用して次のことを実行できる場合に満たされます。 コードを読んで、基本的なレベルでロジックの流れを理解することができます。 入力、出力、アルゴリズムを含めるためにコードが何をしているのかをより深いレベルで理解することができます。 他の開発者は、バグ修正やリファクタリングなど、元のコードに意味のある変更を加えることができます。 元のコードを活用するクラスやモジュールなどの新しいコードを作成できます。 コードの品質を定量化または測定して、読み取り、理解、および保守が可能になるようにするにはどうすればよいですか?

25
いつBIGが答えを書き直しますか?
Big Rewritesに関する質問を読んでください。私は自分で答えたいと思っていた質問を思い出しました。 Struts 1.0を使用して古いJavaで書かれた、恐ろしいプロジェクトがあります。テーブルは一貫性のないリレーションシップを持っているか、リレーションシップがまったくないか、プライマリキーまたはフィールドがプライマリキーであることを意図していますが、一意ではありません。どういうわけか、アプリのほとんどは「機能する」だけです。ほとんどのページは再利用(貼り付けられたコードのコピー)およびハードコーディングされています。プロジェクトに携わったことのある人は誰でも、何らかの形でそれを呪いました。 今では、この恐ろしいアプリケーションの全面的な書き換えを上級管理職に提案することを長い間考えていました。私は個人的な時間でゆっくりと試みていますが、それを実現するための専用のリソースが必要だと思います。大きな書き直しに関する記事を読んだ後、私は再考しています。そして、上司に私の書き換えをサポートするように説得したいとき、それは良くありません。(私はかなり小さな会社で働いているので、提案は承認される可能性があります) TL; DRいつ答えが大きく書き換えられ、それをサポートするためにどのような引数を使用できますか?

7
JavaScriptで==を使用するのは理にかなっていますか?
でJavaScriptの、良い部品、ダグラス・クロックフォードは書きました: JavaScriptには、2つのセットの等値演算子があります:===と!==、およびそれらの邪悪な双子==と!=。良いものはあなたが期待する方法で動作します。2つのオペランドが同じ型で同じ値を持つ場合、を===生成しtrue、!==生成しfalseます。悪魔の双子は、オペランドが同じタイプの場合は正しいことをしますが、異なるタイプの場合、値を強制しようとします。彼らがそれを行うルールは複雑で記憶に残りません。これらは興味深いケースの一部です: '' == '0' // false 0 == '' // true 0 == '0' // true false == 'false' // false false == '0' // true false == undefined // false false == null // false null == undefined // true ' \t\r\n ' == 0 // true 推移性の欠如は憂慮すべきです。私のアドバイスは、邪悪な双子を決して使わないことです。代わりに、常に===and …

21
私のコードの大部分には大きな設計上の欠陥があります。終了するか、今すぐ修正しますか?[閉まっている]
私は高校生で、私の友人と一緒にC#プロジェクトに取り組んでいます。私のスキルレベルはほぼ同じです。これまでのところ、100件のコミットで約3,000行のコードと250行のテストコードを記述しました。学校のために、私は数ヶ月プロジェクトを延期し、最近私はそれを再び取り戻すことができました。 バックアップを取得するまでに、レンダラーに過剰なスレッドを含める、エミュレートされたCPU、GPU、ゲームカートリッジ間の相互作用における競合状態の防止が不十分であるなど、記述したコードの設計が不十分であることがわかりました、および単に冗長でわかりにくいコードも同様です。 問題は、プログラムの主要な機能すら完成していないため、真のリファクタリングができないことです。コードの設計に欠陥があることを完全に認識し続けることはできません。同時に、私はプロジェクトを放棄したくありません。かなりの量の進歩があり、作業が無駄になってはいけません。 私はいくつかの選択肢があるように感じます:貧弱なデザインを回避し、すべてが機能したらリファクタリングし、すべてを停止し、残りの機能が完了する前にすべてのもつれを解き、プロジェクトを開始することによって、単に機能を終了するそれがすべて私の心に再び新鮮であるように、または過度のサイズのためにプロジェクトを完全に放棄するように(本質的に「図面に戻る」)。 そのようなプロジェクトにおける他の人の経験に基づいて、自分を正しい軌道に乗せるための手段は何ですか?このサイトの回答から、一般的なコンセンサスは、書き換えは一般的に不要であるが、過剰なコストなしにコードを維持できない場合に利用可能なオプションであるということです。私は本当にこのプロジェクトを追求したいと思っていますが、現状では、私のコードは私が続けるのに十分に設計されておらず、落胆の感覚が私を継続からそらします。

30
コーディングの際にマイクロ最適化は重要ですか?
最近、PHPでisset()がstrlen()よりも高速だった理由を調べるために、Stack Overflowについて質問しました。これにより、読み取り可能なコードの重要性と、コードのマイクロ秒のパフォーマンスの改善が考慮に値するかどうかについて疑問が生じました。 私の父は退職したプログラマーであり、私は彼に応答を示しました。彼は、コーダーがマイクロレベルでもコードのパフォーマンスを考慮しない場合、優れたプログラマーではないことを完全に確信していました。 確かではありません-おそらく計算能力の向上は、この種のマイクロパフォーマンスの改善を考慮する必要がなくなったことを意味しますか?おそらく、この種の検討は実際の言語コードを書く人次第でしょうか?(上記の場合のPHPの)。 環境要因が重要になる可能性があります-インターネットは世界のエネルギーの10%を消費します。何百万ものウェブサイトで何兆回も複製されると、数マイクロ秒のコードがどれだけ無駄になるのだろうか? できればプログラミングに関する事実に基づいて答えを知りたいです。 コーディングの際にマイクロ最適化は重要ですか? 25の答えの私の個人的な要約、すべてに感謝します。 非常にまれな状況でのみ、マイクロ最適化について本当に心配する必要がある場合があります。ほとんどの場合、信頼性と読みやすさがはるかに重要です。ただし、ときどきマイクロ最適化を検討しても害はありません。基本的な理解は、次のようなコーディングの際に明らかに悪い選択をしないようにするのに役立ちます。 if (expensiveFunction() || counter < X) あるべき if (counter < X || expensiveFunction()) (@ zidarsk8の例)これは安価な関数である可能性があるため、コードを変更するとマイクロ最適化になります。しかし、基本的に理解していれば、そもそも正しく書くことができるので、その必要はありません。

10
Clean Codeが保護された変数を避けることを示唆しているのはなぜですか?
クリーンコードでは、「書式設定」の章の「垂直距離」セクションで保護された変数を避けることを推奨しています。 密接に関連する概念は、垂直方向に互いに近づける必要があります。明らかに、このルールは別々のファイルに属する概念には機能しません。ただし、非常に適切な理由がない限り、密接に関連する概念を別のファイルに分割しないでください。実際、これは保護された変数を避けるべき理由の1つです。 理由は何ですか?

28
バグのないプログラマになるには?[閉まっている]
上司はいつも、良いプログラマーは、自分が変更したコードが信頼でき、正しく、完全に自己検証されていることを確認できるはずだと言ってきました。変更が引き起こすすべての結果と影響を完全に理解する必要があります。何度も何度もテストすることで、この種のプログラマになるために最善を尽くしましたが、バグはまだ残っています。 どうすればゼロバグプログラマになり、コードのすべての文字が何を引き起こし、どのような影響を与えるのかを知ることができますか?
168 code-quality 

14
循環参照の何が問題になっていますか?
私は今日、プログラミングの議論に参加しました。そこでは、循環参照(モジュール、クラスなど)が一般的に悪いと公理的に仮定したステートメントをいくつか作成しました。ピッチで問題が解決したら、同僚は「循環参照の何が問題になっていますか?」と尋ねました。 これには強い気持ちがありますが、簡潔かつ具体的に言葉で表現するのは難しいです。私が思いつくかもしれない説明は、公理と見なされる他の項目に依存する傾向があります(「単独では使用できないため、テストできません」、「参加オブジェクトの状態が変化するときの不明/未定義の動作」など) )、しかし、私は循環参照が悪い理由の簡潔な理由を聞きたいです。それは私の脳が持っている種類の信仰の飛躍をとらない、何年にもわたってそれらを理解し、修正し、さまざまなコードを拡張します。 編集:二重にリンクされたリストや親へのポインターのような同種の循環参照については尋ねていません。この質問は、libAがlibAをコールバックするlibBを呼び出すなど、「より大きいスコープ」の循環参照について本当に質問しています。必要に応じて、「lib」を「module」に置き換えます。これまでのすべての答えに感謝します!

17
経営者に技術的負債を処理するよう説得するにはどうすればよいですか?
これは、開発者と仕事をするときによく自問する質問です。私はこれまで4つの会社で働いてきましたが、コードをクリーンに保ち、ソフトウェアアプリの将来の進歩を妨げる技術的負債に対処することに注意が払われていないことに気付きました。たとえば、最初に勤務した会社は、MySQLのようなものを使用するのではなく、ゼロからデータベースを作成し、アプリケーションをリファクタリングまたは拡張するときにチームのために地獄を作りました。マネージャーが予測について議論するとき、私はいつもマネージャーに正直で明確にしようとしましたが、経営陣はすでにあるものを修正することに興味がないようで、チームの士気に与える影響を見るのは恐ろしいです。 この問題に取り組む最善の方法について、あなたはどう思いますか?私が見たのは、荷物をまとめて帰る人たちです。同社はその後、開発者が出入りしてコードを悪化させる回転ドアになります。これを経営者にどのように伝えて、技術的負債の整理に興味を持たせますか?

19
より速くコーディングする方法(品質を犠牲にすることなく)[完了]
私は数年間プロのコーダーをしています。私のコードに関するコメントは一般的に同じです。優れたコードを記述し、十分にテストされていますが、より高速になります。 それでは、品質を犠牲にすることなく、より高速なコーダーになるにはどうすればよいですか?この質問のために、私はスコープをC#に制限します。それは主に(楽しみのために)コーディングするものであるか、またはJavaであり、これは多くの点で重要です。 私がすでにやっていること: 仕事を成し遂げる最小限のソリューションを書く 多数の自動化されたテストを書く(リグレッションを防ぐ) あらゆる種類の再利用可能なライブラリを作成(および使用)する よく機能する場所でよく知られた技術を使用する(例:Hibernate) 所定の位置に収まるデザインパターンを使用する(シングルトンなど) これらはすべて素晴らしいですが、時間の経過とともに私の速度が向上しているとは感じません。私がやる私が(でも10%)私の生産性を向上させる何かを行うことができれば、それは私の競合他社よりも10%高速ですので、注意して。(私が持っているわけではありません。) それに加えて、小規模なFlash開発であろうとエンタープライズJava / C ++開発であろうと、私は常にマネージャーからこの報酬を受け取りました。 編集:私が速いとはどういう意味か、そして私が遅いことをどのように知っているかについて多くの質問があるようです。さらに詳細に説明します。 私は、さまざまなプロジェクトやさまざまなテクノロジー(Flash、ASP.NET、Java、C ++)で、さまざまな企業の中小規模チーム(5〜50人)で働いていました。私のマネージャー(彼らは私に直接言った)の観察は、私が「遅い」ということです。 これは、私の仲間の多くがスピードのために品質を犠牲にしたためです。彼らはバグがあり、読みにくく、保守しにくく、自動テストを書くのが難しいコードを書きました。私のコードは一般に、十分に文書化され、読みやすく、テスト可能です。 Oracleでは、他のチームメンバーよりも一貫してバグをゆっくりと解決していました。私はそのことに対するコメントを得るので、これを知っています。これは、他の(はい、より上級で経験豊富な)開発者が、ほぼ同じ品質(読みやすさ、保守容易性、テスト容易性)で、私がかかった時間よりも短い時間で作業を行えることを意味します。 どうして?私は何が欠けていますか?どうすればこれを改善できますか? 私の最終目標は単純です:今日40時間で製品Xを作成でき、明日20、30、または38時間で同じ製品を作成できるように、なんとか改善できるなら、それが知りたいことです-どうやってそこまで行くの?継続的に改善するためにどのプロセスを使用できますか?コードを再利用することだと思っていましたが、それだけでは十分ではないようです。

10
深いプログラミング知識の開発について
時折、私は実証し、簡単にジョンスキートとエリックリペットの同類によって回答されているスタックオーバーフロー上のエッジケースや他のすごみについての質問を参照して、言語とその多くの複雑さの深い知識を この1のように: foreachループを使用するには、繰り返し処理するコレクションがIEnumerableまたはを実装する必要があると考えるかもしれませんIEnumerable<T>。しかし、結局のところ、それは実際には要件ではありません。必要なのは、コレクションの型が、パブリックメソッドが呼び出されていなければならないということでGetEnumerator、それが呼ばれるパブリックプロパティのゲッター持ついくつかのタイプを返す必要がありCurrent、パブリックメソッドMoveNextを返しますbool。コンパイラがこれらの要件をすべて満たしていると判断できる場合、これらのメソッドを使用するためのコードが生成されます。それらの要件が満たされていない場合にのみ、オブジェクトがIEnumerableまたはを実装しているかどうかを確認しますIEnumerable<T>。 それは知っておくべきクールなものです。エリックがこれを知っている理由を理解できます。彼はコンパイラチームに所属しているので、知っておく必要があります。しかし、インサイダーではないそのような深い知識を実証する人はどうでしょうか? 単なる人間(C#コンパイラチームに所属していない人)は、このようなことをどのようにして見つけるのでしょうか? 具体的には、これらの人々が体系的にそのような知識を根絶し、それを探求し、それを内面化するために使用する方法がありますか?
136 code-quality 

16
レビュー中に他の人の不適切に設計されたコードの改善を巧妙に提案するにはどうすればよいですか?
私はきれいなコードとコードの職人技を大いに信じていますが、私は現在、これが最優先事項と見なされていない仕事に就いています。機能的でバグがほとんどないのに、ピアのコードが乱雑な設計に埋もれており、将来のメンテナンスにほとんど関心がないという状況に陥ることがあります。 変更が必要なものが非常に多く、期限が近づいていると思われる場合、コードレビューの改善をどのように提案しますか?期限が過ぎた後に改善を提案することは、新機能やバグ修正が追加されると、優先度が完全に解除されることを意味することに注意してください。

8
再帰またはwhileループ
私はいくつかの開発面接の実践、特に面接で尋ねられた技術的な質問とテストについて読んでいて、ジャンルのことわざに何度かつまずいてきました。「問題はwhileループで解決しました。 「再帰」または「誰でも100行のwhileループでこれを解決できますが、5行の再帰関数でそれを実行できますか?」等 私の質問は、再帰はif / while / for構造より一般的に良いですか? 私はいつも、再帰は優先されるべきではないと考えてきました。なぜなら、それはヒープよりもはるかに小さいスタックメモリに制限されているためです間違っている...

16
将来必要になる可能性がある場合に備えて、冗長コードを追加する必要がありますか?
正しくも間違って、私は現在、コードを可能な限り堅牢にするように常に努めるべきだと考えています。これは、今は役に立たないことがわかっている冗長コード/チェックを追加することを意味しますが、 x数年後かもしれません。 たとえば、私は現在、次のコードを含むモバイルアプリケーションに取り組んでいます。 public static CalendarRow AssignAppointmentToRow(Appointment app, List<CalendarRow> rows) { //1. Is rows equal to null? - This will be the case if this is the first appointment. if (rows == null) { rows = new List<CalendarRow> (); } //2. Is rows empty? - This will be the case …

14
SCMなしでコード品質を維持するにはどうすればよいですか?
私は政府機関で働いています。ここで使用されている技術とソフトウェアの開発方法は非常に古いものです。 大量のストレージスペースがありますが、ここでの作業のほとんどを自動化するために使用されるアプリケーションを保持および維持するための適切なスペースはありません。 この機関では、GITやSVNなどのSCMソフトウェアを使用できません。 コードの品質を維持し、後でアプリに新しい機能を追加できるようにするための最良のアプローチは何でしょうか? コードを壊さずに行った変更を記憶するにはどうすればよいですか? 編集:私は言及するのを忘れました、彼らはそれぞれのコンピュータのためのネットワークドライブを持っています、そしてどういうわけかこれらのネットワークドライブは定期的にバックアップを作成または保存します。ただし、作業を保存し、既存のコードを壊さずに新しい機能を追加できるようにする独自の計画を作成しない場合、SCMソリューションに勝る大きな利点はありません。 編集:多くの人々がポータブルGitを提案したので、私はより多くの情報を追加する必要があります。Visual SVNサーバーをインストールしようとしましたが、インストールする管理者権限がないため失敗しました。また、通常のGitシェルをダウンロードしようとしましたが、ファイアウォールまたはネットワーク設定により、Gitダウンロードページにアクセスできませんでした。ポータブルGitをGmailであるメールに送信してみました。Googleはパッケージ内のexeファイルを検出しましたが、それでも仕事用コンピューターにポータブルGitバージョンをダウンロードできませんでした。もう1つ言及しなければならないのは、教育機関のコンピューターに適用されるネットワークポリシーでは、USBストレージデバイスの使用が許可されていないことです。USBポートを使用して、スマートフォンを充電したり、小型スピーカーなどの一部の機器に電力を供給したりできます。また、一部の人々が言及したように、インターネットさえ許可されていないコンピューターがあります。
110 git  code-quality  svn  scm 

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