44

私はしばらくの間、プログラミング アプローチの理由と、何かを行う方法と同様に考えたことを共有するのに役立つリストの作成に取り組んできました。

このために、次のようなもののリストを作成したいと思いました。

  • ベストプラクティス、
  • 最善の考え、
  • 最善のアプローチ...

最も効果的な方法で分析、思考、アプローチ、解決、および実装するプログラマーの能力を支援します。

スタック オーバーフロー全体の質問で非常に貴重なコメントを何十も見てきましたが、それらをまとめておく場所を見つけることができませんでした。Stack Overflow については、最も物議を醸す意見があります。ただし、共有してチームを助けることができる賢明な洞察を探しているだけであり、より良いプログラミングを通じて問題にアプローチし、解決することができます。

願わくば、これが、簡潔で深遠で、簡単に共有、繰り返し、レビューできる 1 つまたは 2 つのライナーを集めるための 1 つの場所になることを願っています。回答ごとに 1 つのルールにしておくと、賛成/反対の投票が最も簡単になる可能性があります。

最初から始めます。

DRY - 自分自身を繰り返さないでください - コード、コメント、またはドキュメントで。

4

64 に答える 64

52

コードは、見つけたときよりも少しだけ良くしておきましょう。

于 2009-02-05T00:08:23.383 に答える
52

コードは、バージョン管理システムに入力されるまで存在しません。

于 2009-02-05T00:10:08.157 に答える
32

KISS - シンプルに、ばかにしてください。 機能
する最も簡単なソリューションを選択してください。 必要になる前に物事を (あまりにも) 複雑にしないでください。 誰もが複雑なフレームワークを使用して問題を解決しているからといって、あなたがそうしなければならないわけではありません。

于 2009-02-05T01:04:13.273 に答える
27

他の誰かがそれを修正しません。

問題が発生した場合は、何らかの方法で確実に対処できるように、十分に長く所有権を持ってください。

于 2009-02-05T00:11:49.713 に答える
23

要件を収集しないでください -- 掘り下げてください

要件が表面にあることはめったにありません。仮説、誤解、政治の層の奥深くに埋もれている

実用的なプログラマー経由

于 2009-02-05T01:01:12.357 に答える
16

ベスト プラクティス:頭 を使う

于 2009-02-05T07:58:32.080 に答える
16

「The Zen of Python」にリストされているほとんどすべてが、すべての「Rules of Programming Mindset」リストに当てはまると思います。「python -c "import this"」で開始します。

Python の禅、Tim Peters 著

  • 美しいことは醜いことよりも優れています。
  • 明示的は暗黙的よりも優れています。
  • シンプルは複雑よりも優れています。
  • 複雑は複雑よりも優れています。
  • フラットはネストよりも優れています。
  • 疎は密よりも優れています。
  • 読みやすさが重要です。
  • 特別なケースは、ルールを破るほど特別なものではありません。
  • 実用性は純粋さに勝りますが。
  • エラーは黙って通過するべきではありません。
  • 明示的に黙らせない限り。
  • あいまいさに直面しても、推測する誘惑を断ってください。
  • それを行う明白な方法が 1 つ (できれば 1 つだけ) ある必要があります。
  • あなたがオランダ人でない限り、その方法は最初は明白ではないかもしれませんが.
  • 今は決してないよりはましです。
  • 多くの場合、今よりも良くなることはありませんが。
  • 実装を説明するのが難しい場合、それは悪い考えです。
  • 実装が説明しやすい場合は、良い考えかもしれません。
  • 名前空間は素晴らしいアイデアの 1 つです。もっと多くのことをしましょう!
于 2009-02-05T01:08:34.277 に答える
15

あなたがあなたの同僚に尋ねて彼のコーディングを中断する前にグーグル。

于 2009-02-05T08:29:07.587 に答える
13

怠惰なコーダーの習慣

何かをするように求められたら、最初にそれを実行します (正しい)。

二度目に頼まれたときは、それを自動的に行うツールを作ってください。

3 回目は、ツールがうまくいかない場合は、さらに多くのツールを生成するためのドメイン固有言語を設計します。

(あまり深刻に捉えないでください)

于 2009-02-05T01:10:09.767 に答える
10

変化の触媒になる

人に変化を強制することはできません。代わりに、将来がどのようになるかを示し、その作成に参加できるようにします。

実用的なプログラマー経由

于 2009-02-05T00:58:13.410 に答える
10

デバッグ時にパニックにならない

深呼吸して考えてみてください!バグの原因について。

実用的なプログラマー経由

于 2009-02-05T01:08:38.117 に答える
10

コピーして貼り付けて機能させることはできますが、そのままにしておくことはできません。

複製されたコードは中間段階であり、最終製品ではありません。

于 2009-02-05T01:10:48.767 に答える
9

それはあなたが言うこととあなたがそれを言う方法の両方です

優れたアイデアがあっても、それを効果的に伝えなければ意味がありません。

実用的なプログラマー経由

于 2009-02-05T00:59:34.030 に答える
9

あなたのコードを保守することになる人は、あなたがどこに住んでいるかを知っている暴力的なサイコパスであるかのように常にコーディングしてください。

出典:コーディングホラー

于 2009-02-05T08:02:46.173 に答える
7

コードレビューを頻繁に実施する

コードレビューとその結果としてのリファクタリングは継続的なタスクです。私の意見では、コードレビューに関するいくつかの利点があります。

  1. コードの品質が向上します。
  2. 再利用可能なコードを再利用可能なライブラリにリファクタリングするのに役立ちます。
  3. それはあなたがあなたの仲間の開発者から学ぶのを助けます。
  4. それはあなたがあなたの過ちから学び、あなたが以前に書いた天才コードについてあなたの記憶をリフレッシュするのを助けます。
于 2009-02-06T06:36:32.943 に答える
7

早めに公開し、頻繁に公開する

于 2009-02-05T00:07:17.273 に答える
7

ビルドブレイカーは昼食を買う

于 2009-02-05T00:11:57.497 に答える
5

オープンソース開発に参加する

プロジェクトでオープン ソース コードを使用している場合は、バグ修正と改善をコミュニティに投稿することを忘れないでください。それ自体は開発のベスト プラクティスではありませんが、努力すべきプログラマの考え方であることは間違いありません。

于 2009-02-05T01:53:15.700 に答える
5

使用するツールを理解する

パターンを使用する理由を理解するまで、パターンを使用しないでください。理由を知らずにツールを使用しないでください。フレームワークや言語設計者が常に自分の状況に合っていることに頼らないでください。

于 2009-02-05T12:40:51.290 に答える
5

設定より規約

特に慣習が強く、ある程度の柔軟性が犠牲になる可能性がある場合.

于 2009-02-05T00:09:00.857 に答える
4

あなたの仕事を義務としてではなく、工芸品として考えてください。

于 2009-02-05T02:12:08.860 に答える
4

考え!あなたの仕事について

自動操縦をオフにして、制御を取りましょう。常に自分の作品を批評し、評価してください。

実用的なプログラマー経由

于 2009-02-05T01:05:28.340 に答える
4

一歩下がって全体像を見る

時々、コードから離れて、抽象的な言葉で何をしているかを考えるべきです。そうしないと、数日後に戻ってくる何かを見逃すことになります。

私はコードを深く掘り下げるのが大好きですが、時々、表面に戻って空気を吸う必要があります...

于 2009-02-05T10:30:47.463 に答える
3
  1. オーディエンス - 私たちが構築するものはすべてオーディエンス向けであり、エンド ユーザーだけでなく他のコーダーによっても使用されます。両方で使用できることを確認してください。

  2. シンプルさ - 複雑で複雑なものを実装していることに気付いた場合は、おそらく、より効果的でシンプルなソリューションを見逃している可能性があります。

  3. 完璧ではなく品質 - 重要なことに注意を払い、時間枠内で品質を提供します。見積もりを 2 倍にした場合、完璧を提供してもお尻は救われません。

于 2009-02-05T01:09:23.433 に答える
3

ビジネスにすべてを話さないでください!

リファクタリングは仕事の一部であり、議論の余地はありません。必要なリファクタリングを行うために常に少し「推定」時間を追加すると、それについて不満はありません!

于 2009-02-08T00:59:00.033 に答える
3

行き詰まった場合は、それについて話してください (ゴム製のアヒルとしか話していない場合でも)

于 2009-02-05T12:14:03.137 に答える
2

ブログ投稿「実用的なプログラマークイックリファレンスガイド」を参照してください。*

于 2009-02-05T23:46:57.543 に答える
2

ヤグニ

あなたはそれを必要としないだろう

あなたがしていることに批判的である、別名考えてください!

于 2009-02-05T20:19:11.363 に答える
2

量は常に質に勝る

より多くのコーディングを行うと (たとえそれが素晴らしいものでなくても)、優れたコードがどのように見えるべきかをよりよく理解できるようになります。

于 2009-02-06T13:21:46.870 に答える
2

芸術である必要はありませんが、時間通りでなければなりません

私が苦労して学ばなければならなかったジャーナリズムの古いルール。

于 2009-02-05T01:14:33.593 に答える
2

デザインパターンはあなたの友達です

ギャング・オブ・フォーの本のコピーを参照用にどこかに置いておいてください。

于 2009-02-05T00:11:35.063 に答える
2

常にプロトタイプを作成します。10 回中 9 回は、かかる日/週/月の価値があります。当然の結果: プロトタイプに費やされる時間の長さは、メイン プロジェクトの長さ/サイズに比例する必要があります。

于 2009-02-05T11:12:18.690 に答える
1

コードは非常に単純である必要があります。これを見ると、ドキュメントを読まなくてもコードの機能を理解できます。

しかし、とにかくすべてを文書化することを忘れないでください。

APIが非常に簡単に使用できない場合は、APIに問題があります。正しく使用するのに手間がかからなくなるまでリファクタリングします。

コードを作成する前に、まず調査して、フレームワークに、実行しようとしていることに対する組み込みのサポートまたは拡張可能なインターフェイスがすでにあるかどうかを確認してください。

于 2009-02-06T06:49:06.133 に答える
1

バグを早期にキャッチ:

  • 静的に型付けされた言語を使用して、コンパイラーと静的分析が役立つようにします。
  • ユニットテスト(最初または最後)
  • コードレビュー
  • 継続的インテグレーション
  • 最後に、最も重要なこと-継続的な学習。
于 2009-02-06T06:57:48.907 に答える
1

データベースの場合...

可能な限り正規化します。その後、再び正規化します。

優れたデータベース (構造とデータの両方) を持つことは、プログラミングのストレスを軽減するために重要です。

于 2009-02-05T20:32:32.537 に答える
1

これはスティーブ・マコーネルから来ています

「コードのすべての新しい行は、デバッガーを介してシングルステップ実行する必要があります」

于 2009-02-05T05:04:36.267 に答える
1

赤、緑、リファクタリング!

TDD またはテスト駆動開発

  1. 開発したい機能の一部についてテストを作成し、まだコードを作成していないためテストが失敗することを確認します。

  2. テストに合格するために必要な最小限のコードを記述します。

  3. 効率や明確さなどのために、必要に応じてリファクタリングします。

  4. リファクタリング後、テストがまだ合格していることを確認してください。

于 2009-02-05T00:43:48.167 に答える
1

思ったほど簡単ではない

これは別の回答への回答ですが、矛盾しません! どちらも従うべき貴重な原則です。

于 2009-02-05T10:42:25.490 に答える
0

ソフトウェアの作成は、家を建てるようなものです。

あなたは青写真、計画、経験、建築家または資格のある商人なしでそれを構築することを試みることができます。

その結果、ほとんどの場合、コストがかかり、時間がかかり、時間とお金を必要とする将来の継続的な驚きに満ちています。

誰かが青写真なしで小屋を建てることができるからといって、彼らがそうすべきだという意味ではありません。

于 2009-02-05T02:01:57.680 に答える
0

プログラミングのガイドラインや提案などがなかったので、最後の仕事でチームのドキュメントを作成しました...かなり大きくなり始めましたが、すべて理にかなっています。

喜んで共有させていただきます。しかし、それは1つのルールだけではなく、他の何よりも「コーディングガイドライン」でした。

これが私のドキュメントに含まれているもののサンプルアウトラインです:

        A.ソースコード
           a。フォーマット
           b。変数の命名
           c。エラー処理
           d。ロギング
           e。テキストエディタ
           f。スコープ宣言
           g。コメント/コメントブロック
           h。ドキュメンテーション
           私。API/ライブラリ開発標準

       B.ソース管理
          a。チェックインチェックアウト
          b。バージョン情報
          c。ソース管理には何が属しますか?

そして、これがセクションAの例です。


ソースコード

テキストエディタ:

テキストエディタの選択は、純粋に開発者次第です。フォントは等幅で、18以下、8以上である必要があります。これは開発者の選択ですが、ソースファイルの上部にコードコメントを表示して、エディター、フォント、フォントサイズ、および該当する場合はインデントサイズを示す必要があります。存在する必要があります。詳細については、コメント/コメントブロックを参照してください。

タブ:
タブをソースファイルに含めないでください。タブはスペースに置き換え、インデントを4にする必要があります。
行末:
行末はCRLFの形式である必要があります。ほとんどの{会社名}のソースコードはWindowsプラットフォーム上にあるため、Windowsで読みやすくするために行末をCRLFに設定する必要があります。ソースファイルで行末を混在させないでください。
行の長さ:
行の長さは、ほとんどの行で200文字を超えてはなりません。単一ステートメントソースの非常に長い行は許容されます。関数定義、または関数呼び出しは分割する(そして文書化する)必要があります。(詳細については、API /ライブラリのセクションを参照してください。)


もちろん、これは米国、MMVで機能したものであり、コーディングスタイルに一致するようにルールを調整する必要があります。

于 2009-02-05T02:07:05.610 に答える
0

何か(プロセス/ソフトウェア)について少しだけ知っている人は、世界で最も危険な人です。

于 2009-03-10T00:46:07.767 に答える
0

自明のコードを書きます (そして、それを文書化します)。

  • 略語や特に子音のクラスターを避けた意味のある名前
  • 実際のコードを疑似コードのように読めるようにするために導入されたばかりの関数
  • 1つのコード単位内で抽象化のレベルを一定に保つなど。
于 2009-04-11T19:59:13.983 に答える
0

いくつかのことは、説明されているよりも優れています

仕様のスパイラルに陥らないでください。ある時点で、コーディングを開始する必要があります。

実用的なプログラマー経由

于 2009-02-05T01:07:21.597 に答える
0

常にコードのドキュメントを作成してください! 半年もすれば、その仕組みを思い出せなくなります。したがって、ドキュメントなしでコードを記述しないでください。

于 2009-02-06T08:23:38.373 に答える
0

単体テストのないコードは、定義上、壊れています。

一目瞭然。

于 2009-02-08T00:54:06.363 に答える
0

SOLIDの原則 (またはその他の原則や方法論のセット)の意図を理解します。

于 2009-02-05T00:47:36.707 に答える
0

物事を実際よりも単純にしようとしないでください。

自分が何をしているのかを知ることは、単体テストよりも望ましいことです。

テクノロジーを理解することは、テスト駆動開発よりも望ましいことです。

試行錯誤の方法論で人生を無駄にしたいのはなぜですか?

于 2009-02-05T08:20:11.723 に答える
0

初めては決して簡単ではありません。後で毎回行うのは簡単です。それは、初めてどこかへ車で行くときに近道を見つけようとするようなものです。GPS前。

于 2009-02-06T19:19:45.523 に答える
0

最小限のコードしか必要としないソリューションを見つけるように努めてください。

于 2009-02-05T01:16:39.083 に答える
0

「I just can't see how it can fail」は単に「It can fail, I just can't see how」という言葉を並べ替えたものです。すべてをテストしてください!

于 2009-02-05T11:45:29.653 に答える