เหตุใดโปรแกรมเมอร์ใหม่จึงไม่สนใจข้อความแสดงข้อผิดพลาดของคอมไพเลอร์ / ข้อความแสดงข้อยกเว้นรันไทม์ [ปิด]


27

ฉันคิดว่าเราทุกคนเห็นสิ่งนี้แล้ว ผู้เริ่มต้นถามคำถามเกี่ยวกับ Stack Overflow ที่เป็นไปตามเค้าร่างพื้นฐาน ...

ฉันกำลังพยายามทำ(คำอธิบายเป้าหมายที่คลุมเครือมาก)แต่มันไม่ทำงาน / ฉันได้รับข้อผิดพลาด / ข้อยกเว้น กรุณาช่วย!

มันไม่แปลกที่หลายคนคิดว่าไม่จำเป็นต้องวางข้อความแสดงข้อผิดพลาด?

ฉันสงสัยว่าจิตวิทยาของสิ่งนี้คืออะไร เกี่ยวกับข้อความแสดงข้อผิดพลาดที่ทำให้คนเริ่มคิดว่าพวกเขาไร้ประโยชน์และไม่คุ้มค่าที่จะให้ความสนใจอะไร

คำตอบที่ฉันค้นหาไม่ใช่ “ พวกเขาไม่เข้าใจข้อความแสดงข้อผิดพลาด” นั่นไม่ได้อธิบายว่าทำไมพวกเขาถึงไม่บอกคนอื่นที่อาจเข้าใจ

คำตอบ:


21

ฉันคิดว่าเหตุผลที่แท้จริงคือผู้ใช้คอมพิวเตอร์ธรรมดาถึงแม้ว่าพวกเขาควรจะเป็นโปรแกรมเมอร์ แต่ก็มีเงื่อนไขที่จะเชื่อว่าพวกเขาไม่สามารถทำอะไรเกี่ยวกับข้อผิดพลาดได้ ลองคิดดู ประเภทที่ไม่ใช่โปรแกรมเมอร์จะทำอย่างไรเมื่อพบข้อความแสดงข้อผิดพลาดแบบเข้ารหัส * พวกเขาอาจอ่านมัน แต่เก้าครั้งในสิบพวกเขาจะยกเลิกมันและลองอีกครั้ง เฉพาะเมื่อมันล้มเหลวอย่างสม่ำเสมอพวกเขาจะมองมัน

ดังนั้นเมื่อเริ่มเรียนรู้วิธีการเขียนโปรแกรมผู้คนจะไม่ทราบทันทีว่าข้อผิดพลาดที่พวกเขาได้รับนั้นมีข้อมูลที่เป็นประโยชน์เกี่ยวกับวิธีการแก้ไข และใช่ถึงแม้ว่าข้อผิดพลาดของคอมไพเลอร์อาจไม่สามารถอ่านได้แม้แต่กับผู้เชี่ยวชาญที่ผ่านการฝึกอบรม (ฉันกำลังมองหาคุณ C ++ เทมเพลต metaprogramming) อย่างน้อยก็ให้จุดเริ่มต้นทั่วไปและเมื่อคุณเห็นข้อผิดพลาดเดียวกันสองครั้ง คุณจะรู้อยู่เสมอว่าคุณทำอะไรลงไป

* จริงๆแล้วข้อความแสดงข้อผิดพลาดส่วนใหญ่มองไปที่ Joe Average เช่น "Error X2412: ไม่สามารถสร้าง dongledash interplatforming frobnicatory interplatforming: โปรดตรวจสอบการตั้งค่า bandersnatch หรือติดต่อผู้ดูแลระบบของคุณ"


6
คุณรังเกียจไหมถ้าฉันใช้ข้อความแสดงข้อผิดพลาดนั้นในซอฟต์แวร์ของฉัน
I.devries

12

ฉันคิดว่าถ้ามันเป็นผู้เริ่มต้นจริงมีโอกาสที่ดีที่พวกเขาไม่รู้ว่ามีข้อความแสดงข้อผิดพลาด พวกเขารู้เพียงว่ามันไม่ทำงานและมีข้อผิดพลาด ตัวอย่างเช่นใน Visual Studio พวกเขาอาจไม่เห็นส่วนหนึ่งของหน้าจอ

โดยพื้นฐานแล้วพวกเขาไม่รู้ว่าข้อมูลส่วนใดที่พวกเขามีอยู่นั้นมีประโยชน์ในการพิจารณาว่าปัญหาคืออะไร หากพวกเขาทำเช่นนั้นจะมีโอกาสที่ดีกว่าพวกเขาสามารถแก้ไขได้ด้วยตนเองและไม่ถามเกี่ยวกับมันตั้งแต่แรก


นั่นเป็นความคิดที่ยุติธรรม แต่นั่นอธิบายคำถามดังกล่าวในปริมาณที่สูงจริง ๆ หรือไม่
Timwi

@Timwi: บางทีมันอาจอธิบายปริมาณคำถามที่ค่อนข้างน้อยพร้อมข้อมูลผิดพลาดที่เหมาะสม ปริมาณคำถามที่ไม่สมบูรณ์นั้นสัมพันธ์กับขนาดของชุมชน
Brian R. Bondy

6

ฉันคิดว่าการถามคำถามและการแก้ไขปัญหาเป็นทักษะที่ต้องเรียนรู้และสำหรับนักพัฒนามืออาชีพมันเป็นทักษะที่สำคัญที่สอนไม่บ่อยนัก

เช่นเดียวกับรหัสที่คุณเขียนเมื่อคุณเริ่มต้นในอาชีพนี้จะเป็นเรื่องที่น่ากลัวเมื่อเทียบกับรหัสที่คุณเขียนวันนี้คำถามที่คุณถามจะแย่มากเมื่อเทียบกับวิธีที่คุณถามพวกเขาในวันนี้

เมื่อคุณเริ่มต้นมันเป็นเรื่องง่ายที่จะถูกครอบงำโดยข้อมูลทั้งหมดที่คุณกำลังเรียนรู้และเมื่อสิ่งต่าง ๆ ไม่ได้วางแผนไว้มันยากที่จะรู้ว่าข้อมูลใดที่เกี่ยวข้องและอะไรที่ไม่ นี่เป็นส่วนใหญ่ของเหตุผลที่ผู้เริ่มต้นไม่สามารถแก้ปัญหาด้วยตัวเองตั้งแต่แรก!


5

สิ่งนี้ใช้ได้กับ IRC มากกว่าเว็บไซต์ออนไลน์เช่น Stack Overflow ซึ่งหายากกว่ามาก

ฉันคิดว่าเหตุผลที่อยู่เบื้องหลังคือคนจะรู้สึกดีขึ้นถ้าพวกเขารู้ว่าคนที่สนใจปัญหาของพวกเขาและยินดีที่จะช่วยเหลือพวกเขา ดังนั้นพวกเขาเริ่มต้นด้วยการบอกว่าพวกเขามีปัญหา แต่พวกเขาจะไม่ลงรายละเอียดจนกว่าจะมีคนถามพวกเขาเพราะพวกเขากลัวว่าพวกเขาจะไม่ได้รับคำตอบ

บางครั้ง (ไม่ใช่ในกรณีของข้อผิดพลาดของคอมไพเลอร์) พฤติกรรมนี้เหมาะสมจริง หากฉันมีปัญหาที่ซับซ้อนมากฉันจะตรวจสอบให้แน่ใจว่ามีใครบางคนกำลังฟังก่อนที่จะเขียนคำอธิบายแบบยาวที่ไม่มีใครอ่าน


เทพฉันหวังว่ามันจะยังคงใช้กับ IRC มากกว่า SO ...
Félix Gagnon-Grenier

3

เนื่องจากข้อผิดพลาดของคอมไพเลอร์ / ข้อยกเว้นทำให้คุณต้องรู้ว่าคุณทำอะไรผิดเพื่อแก้ไข สำหรับโปรแกรมเมอร์ที่มองข้ามสิ่งต่าง ๆ ไม่ใช่สำหรับคนที่ไม่เข้าใจ

พวกเขายังไม่ชัดเจนที่สุดเสมอไป ข้อผิดพลาดเช่น "คาดไม่ถึงหาก" ไม่ใช่เรื่องง่าย "แต่ถ้าเป็นเช่นนั้น" เป็นคำตอบของมือใหม่ โปรแกรมเมอร์ที่มีประสบการณ์มากขึ้นรู้ว่านั่นหมายความว่าเขาลืมเครื่องหมายอัฒภาคบนบรรทัดนำหน้า


แน่นอน - แต่มีความแตกต่างระหว่างการคิดบางสิ่งที่เป็นความลับและคิดว่ามันไร้ประโยชน์
David Thornley

1
@David: การใช้งานเป็นข้อผิดพลาดที่เป็นความลับอะไร ... ไม่มาก
Morgan Herlocker

1
@Irontool: อ้างเมื่อถามดังนั้น ตัดและวางลงในการค้นหาเว็บ แม้ว่าคุณจะไม่เข้าใจมันก็สามารถทำหน้าที่เป็นคุกกี้มายากล
David Thornley

2

ฉันไม่คิดว่ามันเป็นแค่มือใหม่ ฉันมีเพื่อนร่วมงานที่มีประสบการณ์หลายปีซึ่งดูเหมือนจะดูเฉพาะหมายเลขบรรทัดเมื่อพวกเขาได้รับข้อผิดพลาดของคอมไพเลอร์จากนั้นลองคิดหาส่วนที่เหลือด้วยตัวเอง (บ่อยครั้งโดยลองใช้วูดูเช่น "เพิ่มวงเล็บ" เป็นสองข้อความ ")

ความสงสัยของฉันคือว่าสิ่งนี้มาจากการไม่เข้าใจกฎของภาษาอย่างลึกซึ้งดังนั้นคำอธิบายข้อผิดพลาดที่หนาแน่นโดยทั่วไปจึงไม่มีความหมายมากนัก expression must be a modifiable lvalueดูเหมือนว่าเป็นข้อมูลที่ไร้ประโยชน์ถ้าคุณไม่ทราบว่าlvalueคืออะไร


จากประสบการณ์ของฉันเพียงแค่ดูรหัสทำงานได้ดีสำหรับข้อผิดพลาดทางไวยากรณ์เนื่องจากมีข้อความคอมไพเลอร์มักจะเกี่ยวกับความล้มเหลวที่เกิดจากทางอ้อมโดยข้อผิดพลาดเดิม สำหรับข้อผิดพลาดทางความหมายเช่นในตัวอย่างของคุณข้อความแสดงข้อผิดพลาดมักเป็นสิ่งจำเป็น
CodesInChaos

1

เกี่ยวกับข้อความแสดงข้อผิดพลาดที่ทำให้คนเริ่มคิดว่าพวกเขาไร้ประโยชน์และไม่คุ้มค่าที่จะให้ความสนใจอะไร

สำหรับฉันมันเป็นเด็กที่เต็มไปด้วยซอฟต์แวร์ Windows 95 ที่ล่มพร้อมกับข้อความแสดงข้อผิดพลาดที่ยอมรับไม่ได้ซึ่งมักจะจบลงด้วยเลขฐานสิบหกประมาณ 150 บรรทัด

ฉันได้รับประสบการณ์แบบเดิมทุกครั้งที่ฉันได้รับการติดตาม Java stack ที่ดีซึ่งจะมีข้อผิดพลาด 40 บรรทัดของคอมไพเลอร์อึและข้อผิดพลาดของไฮเบอร์เนตและการซ่อนไว้อย่างดีในหมู่พวกเขาคือการอ้างอิงจริง

สาเหตุที่ผู้คนไม่สนใจข้อความแสดงข้อผิดพลาดและร่องรอยสแต็กมักจะเป็นข้อความแสดงข้อผิดพลาดและร่องรอยสแต็กนั้นซับซ้อนกว่าเมื่อเทียบกับความซับซ้อนของปัญหา ไม่มีเหตุผลที่จะล้างอึ 150 บรรทัดผ่านหน้าจอของฉันเมื่อฉันคิดถึงเซมิโคลอน


2
ซ่อนไว้ดีมากเหรอ? แค่สแกนหาชื่อแพ็คเกจของคุณ
Bart van Heukelom

1

ฉันสอนบางหลักสูตรบน Linux สำหรับ Junior Sysadmins และการเขียนโปรแกรมด้วย PHP และ Mysql นักเรียนส่วนใหญ่ใน PHP รู้ว่ามีข้อผิดพลาดเพราะพวกเขาเห็นข้อความที่น่าเกลียดบนหน้าจอ แต่พวกเขาดูเหมือนจะอ่านไม่ออก โดยปกติแล้วฉันจะไปที่หน้าจอเมื่อพวกเขาบอกฉันว่ามีอะไรไม่ทำงานฉันอ่านข้อผิดพลาดบนหน้าจอบอกให้พวกเขาอ่านโดยเน้นไฟล์และบรรทัดที่บันทึกไว้ในข้อผิดพลาดและบอกให้พวกเขาดูที่นั่น พวกเขาแก้ไขข้อผิดพลาด แต่เมื่อข้อผิดพลาดอื่นปรากฏขึ้นขั้นตอนเดียวกันใช้ ... ถอนหายใจ ...

สำหรับหลักสูตร Linux บางครั้งพวกเขาไม่ได้สังเกตเห็นข้อผิดพลาด พวกเขาป้อนคำสั่งบางบรรทัดปรากฏบนหน้าจอและดำเนินการต่อด้วยคำสั่งถัดไป เมื่อบางคำสั่งในภายหลังพวกเขาสังเกตเห็นว่ามีบางสิ่งไม่ทำงานและยกมือขึ้นฉันก็เลื่อนขึ้นไปบนคอนโซลแล้วชี้ไปที่คำสั่งที่ออกมาพร้อมกับข้อผิดพลาดเนื่องจากพารามิเตอร์ไม่ดีหรืออะไรก็ตาม ใบหน้าของพวกเขา: แปลกใจ ดังนั้นส่วนที่ง่ายสำหรับนักเรียนลินุกซ์ของฉันคือการทำให้แจ้งให้ทราบล่วงหน้าพวกเขาเมื่อมีข้อผิดพลาดเกิดขึ้นโดยใช้การปรับเปลี่ยนของทุบตีพร้อมที่จะทำให้มันแตกต่างกันบางเมื่อปรากฏข้อผิดพลาดเช่นนี้ ตอนนี้ให้พวกเขาอ่านข้อความแสดงข้อผิดพลาดเมื่อพวกเขาเห็นนั่นคือการต่อสู้ที่แตกต่างกัน (เช่นเดียวกับนักเรียน PHP) ...


0

ฉันเชื่อว่าพวกเขาไม่คุ้นเคยกับการคิดถึงรหัสข้อผิดพลาดและเมื่อพวกเขามาถึงสถานที่ที่พวกเขาควรให้พวกเขาพวกเขารู้สึกเหมือนพวกเขาอธิบายปัญหาทั้งหมดแล้วดังนั้นจึงมีโอกาสน้อยที่จะหยุดและคิดว่า พวกเขาควรให้ข้อมูลเพิ่มเติม

การถามคำถามเกี่ยวข้องกับขั้นตอนไม่กี่ขั้นและจัดเรียงอย่างมีเหตุผลตามลำดับนี้:

  1. คุณต้องอธิบายสิ่งที่คุณทำ
  2. คุณต้องอธิบายว่าคุณทำอย่างนั้นได้อย่างไร
  3. คุณต้องอธิบายสิ่งที่เกิดขึ้นเมื่อล้มเหลว (หรือล้มเหลว)
  4. คุณต้องจัดทำรายงานชันสูตร

รายงานโพสต์ชันสูตรเป็นที่ที่ข้อความแสดงความผิดพลาดจะอยู่ที่ท้ายที่สุด เมื่อถึงเวลาที่มือใหม่มาถึงจุดนี้พวกเขาอยู่ในช่วงท้ายของการท้าทายทางจิตในการอธิบายปัญหาของพวกเขาและมีแนวโน้มที่จะพลาดบางสิ่งบางอย่าง (สำหรับมือใหม่มีข้อมูลปัญหาเกินพิกัด) นอกจากนี้ในจุดนี้พวกเขารู้สึกเหมือนพวกเขาอธิบายทุกด้านของปัญหาและพวกเขามีนิสัยที่ผ่านมาที่ป้องกันไม่ให้พวกเขาจำเกี่ยวกับรหัสข้อผิดพลาด: หลังจากที่ทุกสาขาอื่นของชีวิตไม่มีรหัสข้อผิดพลาดจึงไม่คุ้นเคย คิดเกี่ยวกับพวกเขา

อาจเป็นได้ว่าแม้ว่าพวกเขาจะจำรหัสข้อผิดพลาดได้ แต่พวกเขาก็ดูเหมือนจะคลุมเครือเกินกว่าจะใช้งานได้จริง ข้อผิดพลาด 034982 คืออะไร สิ่งนี้มีความหมายกับทุกคนจริงๆหรือ? และเพิ่มบางสิ่งบางอย่างลงในคำอธิบายโดยละเอียดเกี่ยวกับสิ่งที่ฉันทำวิธีที่ฉันทำและความล้มเหลว? ข้อมูลนี้แน่นอนสำหรับตัวเอง


คุณกำลังใช้สภาพแวดล้อม / คอมไพเลอร์ / กรอบที่มีรหัสข้อผิดพลาดที่เป็นตัวเลขอย่างหมดจด? oO
Timwi

ฉันไม่ได้ใช้ IDE หนึ่งอัน ข้อความแสดงข้อผิดพลาดนั้นอาจถือว่าเป็นความลับ (ไม่ช่วยเหลือ) หรืออาจฟังดูเหมือนการใช้คำอธิบายใหม่ด้านบน (ไม่ได้เพิ่มข้อมูล)
EpsilonVector

0

เพราะสำหรับภาษาส่วนใหญ่ข้อความคอมไพเลอร์ / รันไทม์ส่วนใหญ่ไม่สมเหตุสมผล (โดยเฉพาะอย่างยิ่ง C ++ และ Java ฉันกำลังมองคุณอยู่!) การได้รับข้อผิดพลาดมีแนวโน้มที่จะค่อนข้างต่ำในลำดับความสำคัญของนักออกแบบภาษา การได้รับสิ่งต่าง ๆ ที่ทำงานได้อย่างถูกต้องนั้นเป็นเรื่องที่สำคัญกว่าและหลายครั้งที่พวกเขาไม่ใส่ใจกับรายละเอียดเล็ก ๆ น้อย ๆ

นั่นเป็นหนึ่งในเหตุผลที่ฉันสนุกกับการทำงานใน Delphi ภาษาทั้งหมดเต็มไปด้วยรายละเอียดเล็ก ๆ น้อย ๆ รวมถึงข้อผิดพลาด ข้อความคอมไพเลอร์ทำให้รู้สึก ข้อความแสดงข้อผิดพลาดรันไทม์ทำให้รู้สึก ร่องรอยสแต็คทำให้รู้สึก เป็นหนึ่งในสิ่งที่ทำให้ภาษาที่ง่ายที่สุดในการแก้ไขข้อบกพร่องที่ฉันเคยทำงานด้วย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.