私たちは皆これを見てきました。初心者は、Stack Overflowで基本的な概要に従う質問をします...
私はやろうとしている(目標の非常にあいまいな説明)だが、うまくいかない/エラー/例外が発生する。助けてください!
彼らの多くがエラーメッセージを貼り付ける必要はないと考えているのは奇妙ではありませんか?
これの心理って何なんだろう。エラーメッセージについて、最初は役に立たず、注意を払う価値がないと人々に思わせるのは何ですか。
私が探している答えはnot「彼らはエラーメッセージを理解していません」です。それは、彼らがそれを理解している可能性がある人に他の人に話すことを考えない理由を説明していません。
本当の理由は、普通のコンピューターユーザーは、たとえプログラマーになっても、エラーについては何もできないと信じるように条件付けられているためだと思います考えてみてください。プログラマー以外のタイプは、不可解なエラーメッセージ*に遭遇したときに何をしますか?彼らはそれを読むかもしれませんが、10回のうち9回は単にそれを却下して再試行します。それが一貫して失敗した場合にのみ、彼らはそれを調べます。
したがって、プログラムの方法を学習し始めたとき、人々はすぐには気づきません。そのエラーには、修正方法に関する有用な情報が含まれていることに気づきます。ええ、コンパイラエラーは訓練を受けた専門家(私はC++テンプレートメタプログラミングを見てます)にとっても読みにくいかもしれませんが、少なくとも一般的な出発点であり、同じエラーを数回目にしたら、それを引き起こすために何をしたかを常に知るでしょう。
*ただし、正直なところ、ほとんどのエラーメッセージは「エラーX2412:不正なプラットフォーム間ドングルダッシュを確立できません:バンダースナッチの設定を確認するか、システム管理者に連絡してください」のようなJoe Averageに見えます。
真の初心者であれば、エラーメッセージが表示されることをまったく知らない可能性が高いと思います。彼らはそれが実行されないこととエラーがあることを知っているだけです。たとえば、Visual Studioでは、画面のその部分が表示されない場合があります。
基本的に、彼らは入手可能な情報のどの部分が問題が何であるかを理解するのに役立つかを知りません。もし彼らがそうしたなら、彼らは自分でそれを修正し、そもそもそれについて尋ねないより良いチャンスがあるでしょう。
質問することとトラブルシューティングは習得する必要があるスキルだと思います。プロの開発者にとって、それは単に十分に頻繁に教えられない重要なスキルです。
この職業で初めて始めるときに書くコードが、今日書くコードと比較してひどいものになるように、あなたが尋ねる質問は、あなたが今日尋ねる方法と比べてひどいものになるでしょう。
最初は、学習しているすべての情報に圧倒されやすく、物事が計画されていない場合、関連する情報とそうでない情報を知ることは困難です。これは、初心者がそもそも問題を自分で解決できない大きな理由です。
これは、はるかにまれなStack OverflowなどのオンラインWebサイトよりもIRCに当てはまります。
その理由は、特に人が問題に興味を持ち、喜んで助けてくれることを知っていると、人は気分が良くなるからだと思います。だから彼らは問題があると言うことから始めますが、誰かが尋ねるまで詳細に触れません。
時々(コンパイラエラーの場合ではなく)、この動作は実際に理にかなっています。非常に複雑な問題が発生した場合は、誰かが最初に聞いていることを確認してから、誰も読まないという長い説明を書きます。
コンパイラエラー/例外では、修正するために何が間違っているのかを知る必要があります。それらは、物事を見落としているプログラマーのためのものであり、それらを理解していない人々のためのものではありません。
また、常に最も明白であるとは限りません。 「予期しない場合」のようなエラーは直感的ではありません。 「でもそこにあるべきだ」というのは初心者の反応です。より経験豊富なプログラマは、それがpreceeding行のセミコロンを忘れたことを意味することを知っています。
初心者だけではないと思います。私には長年の経験がある同僚がいて、コンパイラエラーが発生したときに行番号だけを見て、残りを理解しようとしています(多くの場合、「かっこを追加しましょう」または「これを分解しましょう」などのブードゥー教を試してみてください) 2つのステートメントに)。
私の疑いは、これは実際には言語のルールを深く理解していないためであり、そのため、エラーの一般的に密な説明はあまり意味がありません。 expression must be a modifiable lvalue
は、lvalueが何であるかを本当に知らなければ、かなり役に立たない情報のようです。
私は、ジュニアシステム管理者向けのLinuxのコースと、PHPとMysqlを使ったプログラミングを教えています。PHPの学生の大半は、画面上の醜いメッセージ。しかし、彼らはそれを読むことができないようです。通常、私は何かがうまくいかないと私が彼らの画面に行きます、私は画面上のエラーを読み、それを読むように彼らに伝えます。彼らはエラーを修正しますが、別のエラーが表示されたとき、同じ手順が適用されます...ため息...
Linuxコースでは、エラーに気付かないこともあります。彼らはいくつかのコマンドを入力し、いくつかの行が画面に表示され、次のコマンドを続行します。後でいくつかのコマンドが何かが機能していないことに気づき、手を挙げたら、私は立ち上がってコンソールを上にスクロールし、不正なパラメーターなどが原因でエラーで終了したコマンドをポイントします。彼らの顔:驚き。したがって、私のLinux学生にとって簡単な部分は、エラーが発生したときに通知することです。エラーが表示されたときにそれを変えるためにbashプロンプトのいくつかの変更を使用します this one 。今度は、エラーメッセージが表示されたらエラーメッセージを読んでもらいます。これは別の戦いです(PHPの学生と同じ)...
エラーメッセージについて、最初は役に立たず、注意を払う価値がないと人々に思わせるのは何ですか。
まあ、私にとっては、通常、150行程度の16進数で終了する完全に不可解なエラーメッセージが表示され、クラッシュするWindows 95ソフトウェアに満ちた若者でした。
私は素敵な暗号Javaスタックトレースを取得するたびに同じ経験を追体験します。これには、40行のコンパイラのがらくたとHibernateエラーが含まれ、それらの間で非常によく隠されていますアプリはエラーです。
ユーザーがエラーメッセージとスタックトレースを無視する理由は、多くの場合、エラーメッセージとスタックトレースは、問題の複雑さに比べて非常に複雑です。セミコロンを逃したときに画面から150行のがらくたをフラッシュする理由はありません。
ほとんどの言語では、ほとんどのコンパイラ/ランタイムメッセージは意味がありません。 (C++とJava特に、私はあなたを見ている!)エラーを正しく取得することは、言語デザイナーの優先順位のリストではかなり低い傾向があります。正しく機能するものを正しく機能させることは、通常、優先度が高く、細かい部分を細かく調整する必要がありません。
それがDelphiでの仕事を楽しむ理由の1つです。言語全体が、エラーを含む細かい部分に注意を向けています。コンパイラメッセージは意味があります。実行時エラーメッセージは意味があります。スタックトレースは意味があります。これは、これまで使った中で最もデバッグしやすい言語になっています。
彼らはエラーコードについて考えるのに慣れていないだけだと思います、そして彼らがそれらを与えるべき場所に到達するときまでに、彼らは問題を完全に説明しているようにすでに感じているので、停止して、追加情報を提供する必要があります。
質問にはいくつかの段階があり、最も論理的には次の順序で行われます。
事後分析レポートは、エラーメッセージが表示される場所であり、最後にあります。初心者がこのポイントに達するまでに、彼らは問題を説明するという精神的な挑戦の終わりにあり、何かを見逃す可能性が高くなります(初心者の場合、情報過負荷の問題があります)。さらに、この時点で、彼らはすでに問題のすべての側面を説明しているように感じており、エラーコードについて覚えることを妨げる過去の習慣があります。結局のところ、他の人生のフィールドにはエラーコードがないため、慣れていませんそれらについて考えてください。
また、エラーコードを覚えていても、実際には使用するのが難しすぎるように見える場合もあります。エラー034982とは何ですか?これは本当に誰かにとって何か意味がありますか?そしてそれは本当に、私がやっていたこと、私がどうやっていたのか、どのように失敗したのかについての詳細な説明に何かを追加していますか?不思議なことに、この情報はそれ自体を表しています。