Mengapa pemrogram baru tampaknya mengabaikan pesan kesalahan kompilator / pesan pengecualian runtime? [Tutup]

27

Saya pikir kita semua pernah melihat ini. Para pemula mengajukan pertanyaan tentang Stack Overflow yang mengikuti garis besar dasar ...

Saya coba lakukan (deskripsi tujuan yang sangat samar) tetapi tidak berhasil / saya mendapatkan kesalahan / pengecualian. Tolong bantu!

Bukankah ini aneh bahwa banyak dari mereka menganggapnya tidak perlu untuk menempel pesan kesalahan?

Saya ingin tahu apa psikologi ini. Ada apa dengan pesan kesalahan yang membuat orang awalnya menganggap bahwa mereka tidak berguna dan tidak layak untuk diperhatikan?

Jawaban yang saya cari bukanlah "mereka tidak mengerti pesan kesalahan". Itu tidak menjelaskan mengapa mereka tidak mempertimbangkan untuk memberi tahu orang lain yang mungkin memahaminya.

Timwi
sumber

Jawaban:

21

Saya pikir alasan sebenarnya adalah bahwa pengguna komputer biasa, bahkan jika mereka harus menjadi programmer, dikondisikan untuk percaya bahwa mereka tidak dapat melakukan apa-apa tentang kesalahan. Pikirkan tentang itu. Apa yang dilakukan tipe non-programmer ketika mereka menemukan pesan kesalahan samar *? Mereka mungkin membacanya, tetapi sembilan dari sepuluh mereka hanya akan mengabaikannya dan mencoba lagi. Hanya jika secara konsisten gagal mereka akan mencarinya.

Oleh karena itu, ketika mulai mempelajari cara memprogram, orang tidak segera menyadari bahwa kesalahan yang mereka dapatkan mengandung informasi yang berguna tentang cara memperbaikinya; dan ya, meskipun kesalahan penyusun dapat hampir tidak dapat dibaca bahkan untuk profesional terlatih (Saya sedang melihat Anda, metaprogramming template C ++), setidaknya mereka memberikan titik awal umum, dan begitu Anda telah melihat kesalahan yang sama beberapa kali , Anda akan selalu tahu apa yang telah Anda lakukan untuk menyebabkannya.

* Jujur saja, sebagian besar pesan kesalahan terlihat pada Joe Average seperti "Kesalahan X2412: Tidak dapat membuat dongledash antarplatform frobnicatory: harap verifikasi pengaturan bandersnatch atau hubungi administrator sistem Anda."

Jon Purdy
sumber
6
Apakah Anda keberatan jika saya menggunakan pesan kesalahan itu di perangkat lunak saya?
I.devries
12

Saya pikir jika itu adalah pemula sejati, ada peluang bagus mereka tidak tahu ada pesan kesalahan sama sekali. Mereka hanya tahu itu tidak berjalan dan ada kesalahan. Misalnya di Visual studio mereka mungkin tidak melihat bagian layar itu.

Pada dasarnya mereka tidak tahu bagian mana dari informasi yang mereka miliki yang berguna untuk mencari tahu apa masalahnya. Jika mereka melakukannya akan ada kesempatan yang lebih baik mereka bisa memperbaikinya sendiri dan tidak menanyakannya sejak awal.

Brian R. Bondy
sumber
Itu ide yang adil, tetapi apakah itu benar-benar menjelaskan tingginya volume pertanyaan seperti itu?
Timwi
@ Timwi: Mungkin ini menjelaskan volume pertanyaan yang relatif sedikit lebih sedikit dengan informasi kesalahan yang tepat. Volume absolut pertanyaan buruk relatif terhadap ukuran komunitas.
Brian R. Bondy
6

Saya pikir mengajukan pertanyaan dan pemecahan masalah adalah keterampilan yang perlu dipelajari, dan untuk pengembang profesional, ini adalah keterampilan penting yang tidak cukup sering diajarkan.

Sama seperti kode yang Anda tulis saat pertama kali memulai dalam profesi ini akan mengerikan dibandingkan dengan kode yang Anda tulis hari ini, pertanyaan yang Anda ajukan akan menjadi mengerikan dibandingkan dengan cara Anda menanyakannya hari ini.

Ketika Anda mulai, mudah untuk kewalahan oleh semua informasi yang Anda pelajari dan ketika hal-hal tidak akan direncanakan, sulit untuk mengetahui informasi apa yang relevan dan apa yang tidak. Ini adalah bagian besar alasan mengapa pemula tidak bisa menyelesaikan masalah sendiri sejak awal!

Paddyslacker
sumber
5

Ini berlaku lebih pada IRC daripada situs web online seperti Stack Overflow, yang jauh lebih jarang.

Saya pikir alasan di balik itu adalah bahwa orang merasa lebih baik jika mereka tahu bahwa seseorang secara khusus tertarik pada masalah mereka dan bersedia membantu mereka. Jadi mereka mulai dengan mengatakan bahwa mereka memiliki masalah, tetapi mereka tidak masuk ke detail sampai seseorang bertanya kepada mereka, karena mereka takut kalau tidak mereka tidak akan mendapatkan jawaban sama sekali.

Kadang-kadang (tidak dalam kasus kesalahan kompiler) perilaku ini sebenarnya masuk akal. Jika saya memiliki masalah rumit yang besar saya akan memastikan ada seseorang yang mendengarkan terlebih dahulu sebelum menulis penjelasan panjang yang tidak akan ada yang membaca.

Thomas Bonini
sumber
Ya Tuhan, kuharap itu masih berlaku lebih pada IRC daripada SO ...
Félix Gagnon-Grenier
3

Karena kesalahan / pengecualian kompiler mengharuskan Anda tahu apa yang Anda lakukan salah untuk memperbaikinya. Itu untuk programmer yang mengabaikan hal-hal, bukan untuk orang yang tidak mengerti mereka.

Mereka juga tidak selalu yang paling jelas. Kesalahan seperti "tak terduga jika" tidak intuitif. "Tapi itu kalau harus ada" adalah jawaban dari seorang pemula. Seorang programmer yang lebih berpengalaman tahu bahwa itu berarti dia lupa tanda titik koma di baris sebelumnya .

Macha
sumber
Tentu - tetapi ada perbedaan antara berpikir bahwa sesuatu itu samar dan berpikir itu tidak berguna.
David Thornley
1
@ David: apa gunanya pesan kesalahan samar? ... tidak banyak.
Morgan Herlocker
1
@Irontool: Kutip ketika bertanya pada SO. Potong dan rekatkan ke penelusuran web. Bahkan jika Anda tidak memahaminya, itu bisa bertindak sebagai kue ajaib.
David Thornley
2

Saya tidak berpikir itu hanya pemula. Saya memiliki rekan kerja dengan pengalaman bertahun-tahun yang tampaknya hanya melihat nomor baris ketika mereka mendapatkan kesalahan kompiler, kemudian mencoba untuk mencari tahu sisanya (sering dengan mencoba voodoo seperti "mari tambahkan tanda kurung" atau "mari kita hentikan ini menjadi dua pernyataan ").

Kecurigaan saya adalah bahwa ini berasal dari tidak benar-benar memiliki pemahaman yang mendalam tentang aturan-aturan bahasa, sehingga deskripsi kesalahan yang umumnya padat tidak memiliki banyak makna. expression must be a modifiable lvalueSepertinya informasi yang cukup berguna jika Anda benar-benar tidak tahu apa itu nilai .

ASHelly
sumber
Dalam pengalaman saya hanya melihat kode berfungsi dengan baik untuk kesalahan sintaks, karena ada pesan kompiler sering tentang kegagalan yang secara tidak langsung disebabkan oleh kesalahan asli. Untuk kesalahan semantik, seperti dalam contoh Anda, pesan kesalahan biasanya penting.
CodesInChaos
1

Ada apa dengan pesan kesalahan yang membuat orang awalnya menganggap bahwa mereka tidak berguna dan tidak layak untuk diperhatikan?

Bagi saya, itu adalah seorang pemuda yang penuh dengan perangkat lunak Windows 95 yang menabrak dengan pesan kesalahan yang benar-benar tidak dapat ditembus yang biasanya berakhir dengan sekitar 150 baris hexadecimal.

Saya menghidupkan kembali pengalaman yang sama setiap kali saya mendapatkan jejak Java stack cryptic yang bagus yang akan berisi 40 baris dari kompiler omong kosong dan kesalahan Hibernate, dan disembunyikan dengan sangat baik di antara mereka adalah referensi aktual di mana dalam aplikasi saya kesalahannya.

Alasan orang mengabaikan pesan kesalahan dan jejak tumpukan sering kali pesan kesalahan dan jejak tumpukan tidak proporsional rumit dibandingkan dengan kompleksitas masalah. Tidak ada alasan untuk menyapu 150 baris omong kosong melalui layar saya ketika saya kehilangan titik koma.

Tom Morris
sumber
2
Tersembunyi dengan sangat baik? Cukup pindai nama paket Anda.
Bart van Heukelom
1

Saya mengajar beberapa kursus di Linux untuk Junior Sysadmin, dan Pemrograman dengan PHP dan Mysql. Sebagian besar siswa di PHP tahu ada kesalahan karena mereka melihat pesan jelek di layar. Tapi mereka sepertinya tidak bisa membacanya. Biasanya saya pergi ke layar mereka ketika mereka mengatakan ada sesuatu yang tidak berfungsi, saya membaca kesalahan di layar, memberitahu mereka untuk membacanya, menekankan file dan baris yang dicatat pada kesalahan dan memberitahu mereka untuk melihat di sana. Mereka memperbaiki kesalahan, tetapi ketika kesalahan lain muncul, prosedur yang sama berlaku ... sigh ...

Untuk kursus Linux, kadang-kadang mereka bahkan tidak melihat kesalahan. Mereka memasukkan beberapa perintah, beberapa baris muncul di layar, dan melanjutkan dengan perintah berikutnya. Ketika beberapa perintah kemudian mereka melihat ada sesuatu yang tidak berfungsi dan mengangkat tangan mereka, saya datang, gulir ke atas konsol dan arahkan ke perintah yang keluar dengan kesalahan karena parameter buruk atau apa pun. Wajah mereka: terkejut. Jadi bagian yang mudah bagi siswa linux saya adalah membuat mereka memperhatikan ketika kesalahan terjadi, menggunakan beberapa modifikasi dari bash prompt untuk membuatnya berbeda ketika kesalahan muncul, seperti ini . Sekarang, suruh mereka membaca pesan kesalahan begitu mereka melihatnya, itu pertarungan yang berbeda (sama seperti dengan siswa PHP) ...

Carlos Campderrós
sumber
0

Saya percaya bahwa mereka tidak terbiasa berpikir tentang kode kesalahan, dan pada saat mereka mencapai tempat di mana mereka harus memberi mereka, mereka sudah merasa seperti mereka sepenuhnya menjelaskan masalahnya, dan karena itu bahkan lebih kecil kemungkinannya untuk berhenti dan memikirkan apakah mereka harus memberikan informasi tambahan.

Mengajukan pertanyaan melibatkan beberapa tahap, dan semuanya diatur secara logis dalam urutan ini:

  1. Anda perlu menggambarkan apa yang Anda lakukan
  2. Anda perlu menjelaskan bagaimana Anda melakukan itu
  3. Anda perlu menjelaskan apa yang terjadi ketika gagal (atau bagaimana gagal)
  4. Anda perlu memberikan laporan post mortem

Laporan post mortem adalah tempat pesan kesalahan akan berada, dan itu di bagian paling akhir. Pada saat pemula mencapai titik ini, mereka berada di ujung tantangan mental untuk menjelaskan masalah mereka dan lebih mungkin untuk melewatkan sesuatu (untuk pemula, ada masalah informasi yang berlebihan). Lebih jauh, pada titik ini mereka sudah merasa seperti mereka menggambarkan semua aspek masalah, dan mereka memiliki kebiasaan masa lalu yang mencegah mereka mengingat kode kesalahan: lagipula, bidang kehidupan lain tidak memiliki kode kesalahan, sehingga mereka tidak terbiasa untuk pikirkan tentang mereka.

Mungkin juga bahwa bahkan jika mereka ingat tentang kode kesalahan, mereka tampaknya terlalu samar untuk digunakan sebenarnya. Hanya apa kesalahan 034982? Apakah ini benar-benar berarti bagi siapa pun? Dan apakah itu benar-benar menambah sesuatu pada deskripsi terperinci tentang apa yang saya lakukan, bagaimana saya melakukannya, dan bagaimana itu gagal? Tentunya informasi ini berdiri sendiri.

EpsilonVector
sumber
Lingkungan / kompiler / kerangka apa yang Anda gunakan yang memiliki kode kesalahan numerik murni? oO
Timwi
Saya tidak menggunakan satu IDE seperti itu. Pesan kesalahan itu sendiri dapat dianggap hanya sebagai samar (tidak membantu), atau mungkin terdengar seperti pengulangan deskripsi di atas (tidak menambah informasi).
EpsilonVector
0

Karena untuk sebagian besar bahasa, sebagian besar pesan kompiler / runtime tidak masuk akal. (C ++ dan Java khususnya, saya melihat Anda!) Melakukan kesalahan dengan benar cenderung agak rendah pada daftar prioritas perancang bahasa. Mendapatkan hal-hal yang bekerja dengan baik untuk bekerja dengan benar biasanya merupakan prioritas yang lebih besar, dan banyak waktu mereka tidak repot-repot memoles detail kecil.

Itulah salah satu alasan mengapa saya senang bekerja di Delphi. Seluruh bahasa penuh dengan perhatian pada detail kecil, termasuk kesalahan. Pesan kompiler masuk akal. Pesan kesalahan runtime masuk akal. Jejak tumpukan masuk akal. Ini adalah salah satu hal yang membuatnya, sejauh ini, bahasa yang paling mudah untuk di-debug yang pernah saya gunakan.

Mason Wheeler
sumber