可能性のある複製:
優れたプログラマーになるためにデバッグスキルは重要ですか?
私は若いJava=開発者であり、Netbeansデバッガを体系的に使用しています。実際、コードが機能するかどうかをすぐに確認するために、段階的にデバッグするときにアプリケーションを開発することがよくあります。
デバッガを使用すると実行時間が長くなり、アプリがブレークポイントから別のブレークポイントにジャンプするのを待つので、このようにプログラミングに多くの時間を費やしているように感じます(この質問をする時間が多すぎます)。
学校でデバッガの使い方を学んだことはありませんが、職場ではすぐにこの機能を使うように言われました。私は2年前にそれを使用するように自分自身を教え始めました、そしてそれについてのどんな重要なヒントも私は決して聞いたことがありません。
デバッガを効率的に使用するために守るべきルールがあるかどうか知りたい。
デバッガを使用することが最終的には良い習慣かどうかも疑問に思っていますか?またはそれは時間の損失であり、私は今この悪い習慣をやめなければなりませんか?
効率に非常に良い影響を与えます。
開発者があまり使用しないように感じます。
デバッグに役立つだけでなく、プロファイリングの洞察を得ることができます。
たとえば、行をステップ実行すると、「ああ」と感じることができます。この行の実行には少し時間がかかりすぎて、アプリのボトルネックの場所がわかります。
デバッグは時間を浪費するユニットテストよりも10倍遅いコードを実行しているため。多くの場合、マイクロベンチマーク、パフォーマンスプロファイラー、単体テスト、ロギング、または単にコードを読み取るなど、ジョブに適したツールがあります。単体テストスイートを使用すると、数十のコードパスをミリ秒単位で実行できます。これは、デバッガーでは数時間かかります。
I 単体テストを記述できる場合はほとんどデバッグしません。このようにして、コードがどのように機能するかの実行可能テストの形式でrecordを取得します。単にデバッグする場合、その知識はあなたがそれを忘れるまであなたの頭の中にだけあります。
デバッグする必要がある場合の具体的なヒントは、デバッガーのステップオーバー/イント/リターンホットキー、変数の検査方法、条件付きbreakステートメントの使用方法を学ぶことです。
私の意見だけですが、定期的に体系的に行レベルのデバッガーを使用することは、プログラマーが利用できる唯一の最大の生産性向上の方法かもしれないと感じています。既存のコードベースに飛び込んで学習しようとしている場合でも、独自のコードを機能させようとしている場合でも、デバッガにアクセスしてステッピングを開始します。
あなたは幸運にも、デバッガを学び、使用することが奨励されている場所で働くことができると思います。貴重なツールの使い方を学んだことのないベテランプログラマーをずっと多く見ています。
私は本当に、私たちの最後の開発者がデバッガを使用したことを本当に望みます。 PHP多くの優れたデバッグ機能を備えたフレームワークを備えたサイトがあり、彼はどれもを使用していませんでした。コードはPHP =コンパイラエラーは発生しませんでした。実行時に機能するまで、コードを陽気に切断したようです。
Every single pageデバッグモードのときに数十の警告またはエラーを出力し、デバッグ出力の読み取りやコードごとの分析を行ごとに行う場合は、これの多くを回避できたはずです。デバッガーを使用する代わりに、手動のコードを使用してサーバー上の.logファイルに変数を書き込みました。彼はそのコードを本番環境に残しました。ログファイルは、取得するまでに8 GBでした。
コードの調査に多くの時間を費やす可能性がありますが、修正に費やす時間は少なくなります。 betterコードも記述します。これは、独自のコードを理解するのに役立ち、より良いプログラマ期間になります。
一部の熱心な人は、デバッガーがあなたを怠惰にする、または単にすべてのユニットテストを書くべきだと主張するかもしれません。実際に物事を成し遂げる必要がある私たちにとって、デバッガーはコードの迅速なトラブルシューティング/調査に不可欠なツールです。もちろん、テストカバレッジは非常に優れており、コードが何をしているかを知ることができますが、場合によっては、その中身を調べて何が起こっているのかを確認する必要があるだけです。
デバッガーの使用は、何かが失敗した場合や、レガシーコードの機能がわからない場合に適しています。何も失敗しないときにデバッガーを使用するのは、自分のコードが何をするのか(最後の10分間に書き込んだ行)が理解できないからといって、非常に悪い習慣です。この場合、デバッグの代わりに読みやすく理解しやすい方法でコードを書くことに時間を費やすか、またはいくつかの自動テストを書くことにより、生産性をさらに向上させることができます。
デバッガーを使用すると、間違いなく効率が向上します。デバッガーがないと、困難または不可能であったことを実行できるからです。式をその場で評価したり、ローカル変数を変更したりすることは、興味のあるものを事前に推測して対応するprintf
ステートメントを書き、出力を正確に調べるよりもはるかに効率的です。知りたい。
ただし、indicateに他の問題がある可能性があります-通常は、一度ではなく注意深く実行する必要なくルーチンコードを記述できるようにしたいのです。単体テストを介して主張することができます。しかし、それは個人的な好みの問題です。同僚のテスト駆動型のスタイルよりも、探索型スタイルのほうがはるかに生産的である場合があり、逆もまた同様です。
デバッガは単なる別のツールです。これは、プログラミングを始めるときの理解に役立ち、難しい問題を単純化することもあります。
問題を解決するための論理的な部分もあります-スレッド化やシステムの相互作用を含む多くの問題は、デバッガーでトレースするのが困難または不可能である可能性があります-さまざまなツールが必要な場合は、問題解決スキルに取り組み、決して害を及ぼすことはありません。
私が長年にわたって学んだことの1つは、スキルに熟練しているすべての人が、知っておくべきことの90%を知っていると思っていることです。彼らが知らない何かを見た場合、彼らはそれを学びに行きます!)
なぜそれを追加するのですか?さて、デバッガを起動するのにかかるよりもはるかに速く、デバッガなしでほとんどの問題を解決できる開発者を見てきました。それがあなたが毎回行う一番最初のことなら、過度の依存はあなたを遅くする可能性があります。
それはキーボードで学ぶようなものです-もし最初のタイピストが文字なしでキーボードでタイプしなければならなかった場合、彼は文字を持っている方が良いことは明らかだったと思います-しかし、その後、文字を削除することでかなり速くすることができるポイントに到達します(手を見ないように教えることで)、そして最後に、文字がキー上にあるかどうかに関係なく完全に無関係になるポイントに到達します。
プログラミングでは、デバッガーがあなたを遅くする最後の段階に到達する人もいますが、それを奪うことで分析スキルが大幅に向上する可能性のある段階にいる可能性があります-しかし、ほとんどの人はおそらく最初の段階にいるだけですそれなしで。
職場では、デバッガーを使用するとプログラマーの効率が向上します。 dry-runプログラミングコードのアルゴリズムを自分で正しいものにするために、学校ではそれを惜しまないでください。
デバッガーは、プログラマーにとって効率的で便利なツールです。プロフェッショナルレベルでは回避できません。プログラミング時間と労力を大幅に節約できるため、プログラミング環境でデバッガを使用することを自分で学ぶのは良いことです。ですから、デバッガを使用することは、職場での良いプログラミング習慣です!
明らかに、デバッガはあなた自身や他の開発者のコードを理解するために非常に貴重です。しかし、それに頼らないでください!ボトムアップアプローチの場合、一般に、コードが本来あるべきことを行っているという証拠を見つけようとする必要があります。マルチスレッドコードは、特にデッドロック/ライフロック/飢餓に問題がある場合は特に、デバッグが困難です。多くのダイハードプログラマーがマルチスレッドコードを書くのが非常に難しいと感じる主な理由の1つであると私は感じています。
私は最後の手段としてデバッガーを使用します。通常、証明を見つけるのが難しい非構造化コードでのみ使用します。
あなたが頼りにすべきものは次のとおりです。
これらはあなたが書いているものへの信頼を与えるはずです。
デバッガーを使用せずにコードを推論できるはずです。あなたがそれを使っているのは良いことであり、はいそれは効果があります。場合によっては、コードを読むだけで混乱させるよりも、コードを実行して状況がどのように変化するかを確認する方が、より速く効率的です。
これは非常に良い習慣であり、テスト主導のアプローチを幾分再現したものだと思います。すぐにコードをステップ実行するために、プログラマーは自分でコードを単体テストしています。
ただし、プログラマーは自分が書いたコードに自信を持ち、デバッグ環境での動作を確認するために信頼できないコードを記述すべきではないと私は思います。それは確かに非効率につながります。
さらに、デバッガーを実行する機能がない環境が存在する可能性があることを忘れないでください。デバッガーをセットアップする余裕も時間もないコードベースで作業しなければならないという問題がありました。コードは機能する必要がありました。ありがたいことに、それは修正のための小さな領域であり、ありがたいことにそれは機能しました。