技術的な問題にとどまり、行動、文化、キャリア、政治的な問題を避けてください。
技術的な問題にとどまり、行動、文化、キャリア、政治的な問題を避けてください。
回答:
バグはであるあなたのコードではなく、コンパイラやランタイムライブラリ。
発生する可能性のないバグが見つかった場合は、プログラムを正しくビルドおよび展開したことを確認してください。(特に、煩雑な詳細を隠そうとする複雑なIDEまたはビルドフレームワークを使用している場合、またはビルドに多くの手動ステップが含まれる場合)
並行/マルチスレッドプログラムは、記述が難しく、適切にテストするのが困難です。同時実行ライブラリとフレームワークにできる限り委任することをお勧めします。
ドキュメントの作成は、プログラマーとしての仕事の一部です。「他の誰か」に任せないでください。
編集
はい、私のポイント#1は誇張されています。最高の設計されたアプリケーションプラットフォームでさえ、バグのシェアを持っています。そして、あまり良く設計されていないもののいくつかは、それらであふれています。しかし、そうであっても、常に最初にコードを疑い、コードに誤りがないという明確な証拠がある場合にのみ、コンパイラ/ライブラリのバグを非難し始めてください。
C / C ++開発を行った頃、オプティマイザーの「バグ」が原因であることが判明した場合や、言語仕様に記載されていることを行った他のプログラマーが未定義の結果をもたらした場合を覚えています。これは、Javaのような安全性の高い言語にも当てはまります。たとえば、Javaメモリモデルをじっくりと見てください(JLS 17章)。
浮動小数点計算は正確ではありません。
トラブルシューティングとデバッグのスキル
彼らは私が受講したどのプログラミングコースでもこのトピックにほとんど時間を費やしておらず、私の経験では、プログラマの生産性の最大の決定要因の1つです。好むと好まざるとにかかわらず、アプリのメンテナンス段階では、新しい開発段階よりも多くの時間を費やします。
私は、問題を見つけるための戦略なしに、ランダムに変更することによってデバッグする非常に多くのプログラマーと協力しました。この会話は何十回もありました。
他のプログラマー:修正されるかどうかを確認する必要があると思います。
私:さて、それはそれを修正すると仮定します。それは、問題の原因がどこにあるのかを教えてくれますか?
他のプログラマー:わかりませんが、何か試してみる必要があります。
基礎。現在、プログラマは概念ではなく技術を学びます。それは間違っています。
Its wrong
必要がありますit's wrong
。
それはあなたが思うより難しいです。
通常使用時に機能する何かをまとめるのは簡単ですが、誤った入力、すべてのエッジおよびコーナーケース、起こりうる障害モードなどに対処するのは時間がかかり、おそらく最も難しい部分です。
次に、アプリケーションの見栄えも良くする必要があります。
領域知識。仕様が100%になることはありません。開発対象の実際のドメインを知ることで、常に製品の品質が向上します。
ポインタ、明らかに。:)
真のスキルは、複雑なデザインを機能させることではなく、シンプルなデザインをうまく実行する能力に反映されます。
このスキルは、不可解なものをマスターするのではなく、基本をよりよくマスターすることから生まれます。優秀なプログラマーは、他の人ができないこと(高レベルの機能、高度な機能プログラミング、what-have-youを使用)をコーディングする能力によって定義されるのではなく、完全にありふれたコーディングを洗練する能力に定義されます。クラス間の機能の適切な分解の選択。堅牢性の構築; 防御的なプログラミング手法を使用します。そして、より多くの自己文書化につながるパターンと名前を使用して、これらは高度なプログラミングの基本です。
自分または他の誰かが1週間、1か月、または1年で戻ってくることができ、そのコードを使用、変更、強化、または拡張する方法を理解できる適切なコードを書くことが重要です。時間と精神的な労力を節約できます。それはあなたが前につまずいたはずの障害を取り除くことで生産性の車輪に油を差します(おそらくあなたの思考の流れを中断したり、おそらく他の仕事から数時間または数日努力を払うなど)困難な問題に集中するのを容易にします、場合によっては難しい問題がなくなります。
一言で言えば、エレガンス。すべてのクラス、すべてのメソッド、すべての条件、すべてのブロック、すべての変数名:優雅さのために努力します。
すべてのプログラマーは、デバッガーの使用方法と、デバッガーの適切な使用方法を知っている必要があります。
短絡評価。ただし、ブール演算子について最初に教えることの1つです。