新しいプログラマーがコンパイラーのエラーメッセージ/ランタイム例外メッセージを無視するように見えるのはなぜですか?[閉まっている]


27

私たちは皆これを見たと思います。初心者は、基本的な概要に従うStack Overflowで質問をします...

私はやろうとしています(目標の非常に漠然とした説明)がうまくいきません/エラー/例外が発生します。助けてください!

彼らの多くがエラーメッセージを貼り付ける必要がないと考えるのは奇妙ではないでしょうか?

これの心理学は何だろうか。人々が最初は役に立たず、注意を払う価値がないと思わせるエラーメッセージについてはどうですか?

私が探している答えは「彼らはエラーメッセージを理解していませ」ではありません。それは、彼らがそれを理解するかもしれない他の誰かに話すことを考慮しない理由を説明しません。

回答:


21

本当の理由は、普通のコンピューターユーザーは、たとえプログラマーになろうとしても、エラーについては何もできないと信じていることです。考えてみてください。プログラマーではないタイプは、不可解なエラーメッセージが表示されたときに何をしますか?彼らはそれを読むかもしれませんが、10回のうち9回は単にそれを却下して再試行します。一貫して失敗する場合のみ、検索します。

したがって、プログラミングの方法を学び始めたとき、人々、彼らが得ているエラーがそれを修正する方法に関する有用な情報を含んでいることにすぐに気づきません。そして、はい、コンパイラエラーは訓練された専門家(私はあなたを見ています、C ++テンプレートメタプログラミング)でも読めないかもしれませんが、少なくとも一般的な出発点を提供し、一度同じエラーを数回見たら、それを引き起こすために何をしたかを常に知ることができます。

*しかし、正直なところ、ほとんどのエラーメッセージは「エラーX2412:不正なインタープラットフォームドングルダッシュを確立できません:bandersnatch設定を確認するか、システム管理者に連絡してください」のようにJoe Averageに見えます。


6
ソフトウェアでそのエラーメッセージを使用しても構いませんか?
I.devries 14年

12

もしそれが本当の初心者なら、エラーメッセージがあることを知らない可能性が高いと思います。彼らはそれが実行されず、エラーがあることを知っています。たとえば、Visual Studioでは、画面のその部分が表示されない場合があります。

基本的に、彼らは利用可能な情報のどの部分が問題が何であるかを理解するのに役立つかわかりません。彼らがそうすれば、彼らはそれを自分で修正し、そもそもそれについて尋ねることができないより良いチャンスがあるでしょう。


それは公正なアイデアですが、それは本当にそのような質問の大量を説明していますか?
ティムウィ

@Timwi:適切なエラー情報で質問の量が比較的少ないことを説明しているのかもしれません。悪い質問の絶対量は、コミュニティの規模に関連しています。
ブライアンR.ボンディ

6

質問やトラブルシューティングは習得する必要があるスキルであり、プロの開発者にとっては、単に十分な頻度で教えられない重要なスキルだと思います。

この職業で最初に始めたときに書くコードが、今日書くコードと比べて恐ろしくなりそうなように、あなたが尋ねる質問は、今日尋ねる方法と比べてひどくなります。

始めたとき、あなたが学んでいるすべての情報に圧倒されやすく、物事が計画されないとき、どの情報が関連していて何がそうでないかを知ることは困難です。これは、初心者がそもそも問題を自分で解決できない理由の大きな部分です!


5

これは、スタックオーバーフローなどのオンラインWebサイトよりもIRCに多く当てはまりますが、これは非常にまれです。

その背後にある理由は、特に人が自分の問題に興味を持ち、喜んで助けてくれることを知っていると、気分が良くなるからだと思います。だから彼らは問題があると言うことから始めますが、誰かが彼らに尋ねるまで詳細には行きません。

時には(コンパイラエラーの場合ではなく)この動作は実際に意味をなします。私が大きな複雑な問題を抱えているなら、誰も読まないだろう長い説明を書く前に、誰かが最初に聞いていることを確認します。


神は、私はそれはまだ... SOよりも、IRCに多くの適用を望む
フェリックス・ガニオン-グルニエ

3

コンパイラーのエラー/例外を修正するには、何が間違っているのかを知る必要があります。それらは、物を見落としているプログラマーのためのものであり、理解していない人たちのためではありません。

また、それらは常に最も明白ではありません。「unexpected if」のようなエラーは直感的ではありません。「でも、もしそこにいるなら」というのが、初心者の反応です。より経験豊富なプログラマは、それが前行のセミコロンを忘れたことを意味します。


確かに-しかし、何かが不可解であると考えることと、役に立たないと考えることには違いがあります。
デビッド・ソーンリー

1
@David:不可解なエラーメッセージはどのような用途ですか?...それほどではありません。
モーガンハーロッカー

1
@Irontool:SOで質問するときに引用してください。ウェブ検索にカットアンドペーストします。たとえ理解していなくても、魔法のクッキーとして機能します。
デビッドソーンリー

2

私はそれが初心者だけだとは思わない。私は長年の経験を持つ同僚がいて、コンパイラエラーが発生したときに行番号だけを見て、自分で残りを理解しようとします2つのステートメントに」)。

私の疑いは、これは言語のルールを実際に深く理解していないことに起因しているため、エラーの一般的に密な説明にはあまり意味がないことです。 expression must be a modifiable lvalueあなたが本当に左辺値が何であるかわからない場合、かなり役に立たない情報のようです。


私の経験では、コンパイラのメッセージは多くの場合、元のエラーによって間接的に引き起こされた失敗に関するものであるため、コードを見るだけで構文エラーがうまくいきます。例のようなセマンティックエラーの場合、通常はエラーメッセージが不可欠です。
CodesInChaos

1

人々が最初は役に立たず、注意を払う価値がないと思わせるエラーメッセージについてはどうですか?

まあ、私にとって、それは通常、約150行の16進数で終わる完全に不可解なエラーメッセージでWindows 95ソフトウェアがクラッシュすることで満たされた若者でした。

私は、40行のコンパイラーがらくたとHibernateのエラーを含む素敵な不可解なJavaスタックトレースを取得するたびに同じ経験を追体験し、それらの間に非常によく隠されているのは、アプリ内のエラーの実際の参照です。

人々がエラーメッセージとスタックトレースを無視する理由は、多くの場合、エラーメッセージとスタックトレースが問題の複雑さに比べて不均衡に複雑だからです。セミコロンを見逃したときに、画面に150行のがらくたを流す理由はありません。


2
非常によく隠されていますか?パッケージ名をスキャンするだけです。
バート・ヴァン・Heukelom

1

Linuxでジュニアシステム管理者向けのコースをいくつか教えており、PHPとMysqlを使用したプログラミングも行っています。PHPの学生の大半は、画面にいメッセージが表示されるため、エラーがあることを知っています。しかし、彼らはそれを読むことができないようです。通常、私は彼らが何かが機能していないと言ったときに彼らの画面に行きます、私は画面上のエラーを読んで、彼らにそれを読むように伝え、エラーに記録されたファイルと行を強調し、そこに見えるように伝えます。彼らはエラーを修正しますが、別のエラーが表示された場合、同じ手順が適用されます...ため息...

Linuxコースの場合、エラーに気付かないこともあります。彼らはいくつかのコマンドを入力し、いくつかの行が画面に表示され、次のコマンドに進みます。後でいくつかのコマンドがやっと何かが機能していないことに気づき、手を挙げたら、コンソールを上にスクロールして、不正なパラメーターなどが原因でエラーで終了したコマンドをポイントします。彼らの顔:驚き。だから私のLinuxの学生のための簡単な部分は、エラーが表示されたときに、それは違う作るためにプロンプトはbashのいくつかの変更を使用して、エラーが発生したときに、それらの通知を作ることだったこの1のように。さて、エラーメッセージが表示されたら、それを読んでもらいましょう。これは別の戦いです(PHPの学生と同じです)...


0

私は彼らがエラーコードについて考えるのに慣れていないだけで、彼らがそれらを与えるべき場所に着く時までに、彼らはすでに問題を完全に説明したように感じているので、停止して、追加情報を提供する必要があります。

質問にはいくつかの段階があり、それらは最も論理的に次の順序で配置されます。

  1. あなたは何をしていたのかを説明する必要があります
  2. あなたはそれをどのように行っていたかを説明する必要があります
  3. 失敗したときに何が起こったのか(またはどのように失敗したのか)を説明する必要があります
  4. 事後報告書を提出する必要があります

事後レポートは、エラーメッセージがある場所であり、最後にあります。初心者がこの点に達するまでに、問題を説明するという精神的な課題の終わりにあり、何かを見逃す可能性が高くなります(初心者にとっては、情報過多の問題があります)。さらに、この時点で、彼らはすでに問題のすべての側面を説明したように感じており、エラーコードを思い出せない過去の習慣があります:結局、他の人生の分野にはエラーコードがないため、それらについて考えてください。

また、エラーコードを覚えていても、実際には役に立たないほどわかりにくいように見えることもあります。エラー034982とは何ですか?これは本当に誰にとっても何か意味がありますか?そして、それは本当に、私がやっていたこと、私がそれをやっていたこと、そしてそれが失敗したことのその詳細な説明に何かを追加しますか?残念ながら、この情報はそれ自体を表しています。


純粋に数値のエラーコードを使用している環境/コンパイラ/フレームワークを使用していますか?オブジェクト指向
Timwi

私はそのようなIDEを使用していません。エラーメッセージ自体は、不可解な(役に立たない)ものと見なされるか、上記の説明の言い換えのように聞こえるかもしれません(情報を追加しません)。
EpsilonVector

0

ほとんどの言語では、ほとんどのコンパイラ/ランタイムメッセージは意味をなさないためです。(特にC ++とJava、私はあなたを見ています!)エラーを正しく取得することは、言語設計者の優先順位リストではかなり低い傾向があります。適切に機能するものを適切に機能させることは、通常、より大きな優先事項であり、多くの時間は、細かい部分を磨くことに煩わされません。

それが、Delphiでの作業を楽しんでいる理由の1つです。言語全体が、エラーを含む細かい部分に注意を払っています。コンパイラのメッセージは理にかなっています。ランタイムエラーメッセージは理にかなっています。スタックトレースは理にかなっています。これは、私がこれまで取り組んだ中で最もデバッグしやすい言語です。

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