เหตุใดโรงเรียนจึงไม่ครอบคลุม debuggers [ปิด]


12

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

  • คำถามไม่ควรทำการดีบั๊กและวิธีการใช้เครื่องมือการดีบักที่ทันสมัยได้รับการสอนควบคู่กับพื้นฐานการเขียนโปรแกรม? ถ้าไม่ใช่เพราะอะไร

2
เอ่อ .. คุณกำลังบอกว่า gdb เป็นเครื่องมือดีบั๊กอันทันสมัยใช่ไหม มันไม่ได้เป็นดีบั๊ก แต่มันก็ไม่ได้ทันสมัย
Billy ONeal

1
ฉันจะเห็นด้วย แต่ฉันได้ตอบคำถามด้วยคือนักเรียนใช้ visual studio และไม่รู้ว่าพวกเขาจะใช้ดีบักเกอร์ได้อย่างไรหรือทำไม
รันใหม่

@ รันใหม่: เอ่อ .. พวกเขาไม่สามารถกดปุ่ม "เล่น" บน IDE หรือไม่ (BTW ฉัน +1)
Billy ONeal

system.out การบันทึกการพิมพ์เป็นป้อมปราการสุดท้ายของคนขี้เกียจและไม่เหมาะสม

6
@Jarrod เป็นลักษณะทั่วไปที่ค่อนข้างกว้างและอาจจะมากเกินไป บางครั้งคุณก็ไม่สามารถใช้ดีบักเกอร์ในโปรแกรมของคุณเมื่อเกิดปัญหา

คำตอบ:


7

มันไม่ได้เป็นอย่างนั้นในกรณีที่การใช้งานดีบั๊กที่ต้องได้รับการสอน แต่ยิ่งเทคนิคการดีบั๊กมากขึ้นเท่านั้น ซึ่งรวมถึงการสอนวิธีใช้ดีบักเกอร์แน่นอน แต่จะมีเทคนิคที่สำคัญอื่น ๆ อีกมากมายเช่น

  • การคิดเชิงวิพากษ์
  • หารและพิชิต
  • การดีบัก printf การบันทึกเป็นต้น
  • การตรวจสอบโต๊ะ
  • การทดสอบความเครียด

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

: มีค่อนข้างเป็นหนังสือที่ดีในเรื่องนี้ทั้งหมดซึ่งอาจควรจะต้องอ่านสำหรับนักศึกษาระดับปริญญาตรีทั้งหมดและทุกคนเรียนรู้พื้นฐานของการเขียนโปรแกรมเป็นการแก้จุดบกพร่องโดยเดวิดเจ Agans


8

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

ในทางกลับกันเครื่องมือการดีบักเป็นส่วนย่อยในพื้นที่การนำไปใช้ - เครื่องมือแต่ละอันแตกต่างกันสำหรับแต่ละภาษา (แม้ว่าแนวคิดจะเหมือนกัน) เราได้สัมผัสกับเครื่องมือดีบั๊ก แต่ไม่เคยครอบคลุมพวกมันในเชิงลึก หากเราใช้เวลามากกว่าหนึ่งสัปดาห์ในการดีบักเครื่องมือฉันจะมองย้อนกลับไปในแบบย้อนหลังและเห็นว่าเป็นการเสียเวลา ฉันอยากเรียนรู้เกี่ยวกับสัญกรณ์ BigO หรือโพลีมอร์ฟิซึม อย่างไรก็ตาม ff พลังของเครื่องมือการดีบั๊กไม่ได้รับการถ่ายทอด (สำเร็จ) ให้กับนักเรียนจากนั้นจะขาดความจำเป็น


3
+1 แปล: เพราะไม่ใช่ทุกคนที่ใช้ MSVS, GCC / GDB, LLVM / CLANG ฯลฯ
Billy ONeal

1
+1 แม้ว่าฉันต้องยอมรับว่าฉันเห็นด้วยกับ @rerun; หลักสูตร (หรือส่วนหนึ่ง) ที่ผ่านแนวคิดและเครื่องมือพื้นฐานที่ใช้ในร้านขายซอฟต์แวร์จะเป็นหนทางไปสู่การสำเร็จการศึกษาระดับบัณฑิตใหม่ ฉันพบเจอหลายตัวที่ดูเหมือนจะไม่เข้าใจการควบคุมแหล่งที่มาแม้ว่าจะใช้งานไประยะหนึ่งแล้วก็ตาม
เคนเฮนเดอร์สัน

ทักษะหลายอย่างที่นักพัฒนาโดยเฉลี่ยใช้เวลาส่วนใหญ่ในโรงเรียน การควบคุมแหล่งที่มา, การจัดการการกำหนดค่าโดยทั่วไป, การสำรวจรหัส, การอ่านรหัส, การสร้างกระบวนการ ฯลฯ ในขณะที่ฉันเข้าใจว่า CS องศาจำเป็นต้องครอบคลุมด้านทฤษฎีฉันคิดว่าหนึ่งระดับวุฒิสมาชิกที่นักเรียนทำงานกับฐานรหัสขนาดใหญ่ที่มีอยู่ และทำให้มันได้รับการตรวจสอบในรหัสและ "ใช้งาน" จะทำให้นักพัฒนาใหม่มีประโยชน์มากขึ้น
รันใหม่

3
ฉันไม่เห็นด้วยอย่างยิ่ง ถ้ารหัสจริงจะถูกเขียน (เพราะการเขียนโค้ดเป็นวิธีที่ดีของการฝึกแนวคิดทางวิทยาศาสตร์) จากนั้นนักเรียนควรมีการเข้าถึงที่ดีวิธีการเขียนโค้ดและนั่นรวมถึงการใช้งานของโปรแกรมดีบักถ้าจำเป็นเพื่อให้ นั่นไม่ใช่การสละเวลาที่สามารถใช้กับสัญกรณ์ BigO - มันเป็นการเพิ่มเวลาให้กับนักเรียนหลายคนที่ใช้จ่ายเพื่อทำลายวิธีการของพวกเขาผ่านข้อผิดพลาดเล็กน้อย ไม่มีอะไรที่ได้มาจากสิ่งนั้น นอกจากนี้ยังมีหลักสูตรวิทยาศาสตร์อื่น ๆ อีกมากมาย (เช่นฟิสิกส์) รวมถึงทักษะการวัดเชิงปฏิบัติซึ่งเป็นส่วนหนึ่งของหลักสูตรของพวกเขา
Inca

2
การใช้ดีบักเกอร์นั้นต้องเข้าใจว่าคอมพิวเตอร์ทำงานได้อย่างไรไม่ใช่แค่รหัส ฉันต้องการพิจารณานี้การเขียนโปรแกรมพื้นฐาน ฉันพบนักเรียนมากเกินไปที่เพิ่งไม่รู้ว่าคอมพิวเตอร์กำลังทำอะไรอยู่และนั่นไม่ได้ทำให้โปรแกรมเมอร์ดี
edA-qa mort-ora-y

2

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


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

2
@Billy ดังนั้นการเหยียบรหัสผิดจะช่วยพวกเขาได้อย่างไร
Neil Butterworth

1
@Billi ONeal คุณผิด ไม่มีดีบักเกอร์ที่คุณกำลังพูดถึง การก้าวผ่านโปรแกรมแบบโต้ตอบมีประโยชน์เมื่อคุณระบุปัญหาเกี่ยวกับการบันทึกการดีบักแล้ว ไม่เคยอยู่ในการปฏิบัติของฉัน (> 20 ปี) ฉันต้องใช้ดีบักเกอร์ด้วยรหัสของตัวเองการยืนยันและการบันทึกที่เหมาะสมนั้นเพียงพอเสมอ ฉันแค่ใช้เครื่องมือที่สาปแช่งกับรหัสห้องสมุดและเนื้อหาดั้งเดิม และ BTW. ความสามารถในการ serialise ใด ๆ โครงสร้างข้อมูลเป็นสิ่งที่สามารถอ่านได้เป็นเสมอ ความคิดที่ดี บางภาษา / สภาพแวดล้อมให้สิ่งนี้ฟรี
SK-logic

1
@Billy ONeal คุณจะเรียกดูหน่วยความจำของอุปกรณ์ไมโครคอนโทรลเลอร์ที่เชื่อมต่อกับพอร์ตอนุกรมอย่างไร และฉันเชื่อว่ามันไม่ใช่ความคิดที่ดีที่จะเปิดโปงภาษาที่สดใหม่ในระดับต่ำด้วยพอยน์เตอร์และเนื้อหาก่อนที่พวกเขาจะรู้พอในโครงสร้างข้อมูลและอัลกอริธึม เมื่อถึงเวลานั้นพวกเขาจะรู้วิธีการแก้ไขข้อบกพร่องอย่างถูกต้อง
SK-logic

1
@Billy ONeal ส่วนที่ยากที่สุดคือการระบุช่วงเวลาที่เหมาะสมเมื่อใดที่จะตรวจสอบค่าใน debuger (btw. ในกรณีส่วนใหญ่มันยังคงเป็นสิ่งที่เรียกวิธีการ. dump () ไม่ใช่การตรวจสอบหน่วยความจำโดยตรง) หรือ เพื่อพิมพ์ค่าอนุกรม ด้วยโครงสร้างพื้นฐานการบันทึกข้อบกพร่องที่เหมาะสมในสถานที่ปัญหาจะถูก จำกัด ให้แคบลงเพื่อวิเคราะห์ไฟล์บันทึก ในกรณีส่วนใหญ่ที่เรียบง่ายgrepไม่ทำงาน ไม่ต้องเหยียบไม่มีจุดพักตามเงื่อนไข - เพียงแค่ grep
SK-logic

2

มันไม่สำคัญเท่าไหร่ ฉันแทบไม่เคยใช้เลยและไม่มีเลย วิธีที่ดีที่สุดในการดีบักรหัสคือ:

  • อย่าเขียนบั๊กตั้งแต่แรก
  • ถ้าคุณเขียนมันแก้ไขด้วยการคิดไม่ใช่โดยไปที่ debugger

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


6
ฉันคิดว่าอันนี้ขึ้นอยู่กับ หากคุณพยายามทำความคุ้นเคยกับพฤติกรรมของ codebase ขนาดใหญ่และไม่ดีที่คุณไม่ได้เขียน debugger เป็นหนึ่งในวิธีที่เร็วที่สุดในการปรับตัวให้ชินกับสิ่งที่ codebase กำลังทำอยู่ หากคุณเขียนรหัสทั้งหมดแน่นอนคุณไม่จำเป็นต้องดีบักเกอร์บ่อยนัก แต่ไม่ใช่พวกเราทุกคนที่อยู่ในสถานที่นั้น +1
Billy ONeal

1
@Billy เราต้องยอมรับที่จะแตกต่างกัน คุณลองทำความรู้จักกับเซิร์ฟเวอร์การซื้อขาย MT ขนาดใหญ่พร้อมดีบักเกอร์
Neil Butterworth

@ Neil: ฉันไม่เคยจัดการเรื่องแบบนั้นเป็นการส่วนตัว ... แต่ฉันได้ทำการแก้ไขรหัส MT มาก่อนโดยไม่มีปัญหา บางทีฉันก็รู้สึกแย่กับ MSVC ++ - ผู้ debuggers ที่นั่นแสดงให้เห็นว่าเธรดที่หลากหลายกำลังทำอะไรได้ง่ายจริงๆ แต่ถ้าฉันแก้ไขข้อบกพร่องในรุ่นก่อนปี 2008 (ฉันคิดว่านั่นคือเมื่อมีการเพิ่ม) ฉันสามารถดูว่าวิธีการที่จะทำให้สิ่งต่าง ๆ ยากขึ้น
Billy ONeal

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

2
ฉันรู้ว่าคุณกำลังบินไปที่ใบหน้าของภูมิปัญญาที่ได้รับรอบที่นี่ แต่คุณเป็นเพื่อนที่ดีกับคนอย่าง Linus Torvalds, Larry Wall, Brian Kernighan และ Rob Pike
btilly

0

ควรทำการสอนการแก้จุดบกพร่องเพราะนักเรียนเป็นมนุษย์และมนุษย์ทำผิดพลาดทุกประเภทซึ่งบางอย่างต้องได้รับข้อมูลทดลองบางอย่าง (ข้อมูลการดีบัก) ก่อนการตรัสรู้เกี่ยวกับข้อผิดพลาดที่เกิดขึ้น

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


อืม .. โรงเรียนของฉันอาจจะแตกต่างออกไป แต่นั่นไม่ใช่สิ่งที่ CWRU ทำ
Billy ONeal

อาจขึ้นอยู่กับแผนภูมิมรดกแผนกประวัติศาสตร์ของหลักสูตรการเขียนโปรแกรมในคำถาม
hotpaw2

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

@ davidk01 - นั่นไม่ได้อธิบายการสังเกตการณ์ของ OP ที่ฉันเคยได้ยินไม่บ่อย แต่มากกว่าหนึ่งครั้ง
hotpaw2

@ hotpaw2: อะไรที่ไม่อธิบายการสังเกตการณ์ของ OP? เพียงเพราะนักเรียนมีเวลาเรียนรู้การดีบักโปรแกรมไม่ได้หมายความว่ามันไม่ได้สอนซึ่งเป็นข้อสรุปที่คุณกำลังกระโดดไป ฉันใช้หลักสูตรการเขียนโปรแกรมหลายหลักสูตรทั้งในฐานะนักศึกษาระดับปริญญาตรีและปริญญาโท ในทุกชั้นเรียนผู้สอนใช้เวลาอย่างน้อยหนึ่งครั้งในการบรรยายเพื่อไปยังโปรแกรมที่ไม่ถูกต้องและเพื่อแก้ไขเพื่อสาธิตเทคนิคการดีบักทั่วไป
davidk01

0

คำถามนี้ต่างกับฉัน ที่มหาวิทยาลัยของฉันการใช้ดีบักเกอร์ (JDB และดีบักเกอร์ Eclipse) ได้รับการสอนให้เร็วเท่าลำดับวิทยาศาสตร์คอมพิวเตอร์ปีแรก การใช้งาน debuggers และเครื่องมือทดสอบอื่น ๆ นั้นได้รับการสอนอีกครั้งในหลักสูตรการทดสอบซอฟต์แวร์

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


0

คิดออกด้วยตัวคุณเอง

ฉันไม่ต้องการและไม่ต้องการอาจารย์หรือ TA ที่จะสอนฉันสิ่งที่ฉันสามารถคิดออกเองได้อย่างง่ายดาย พวกเขาอยู่ที่นั่นเพื่อสอนฉันเกี่ยวกับแนวคิดที่ยากและแนวทางการเรียนรู้ พวกเขาไม่ได้และไม่ควรอยู่ที่นั่นเพื่อให้คุณไม่ต้อง RTFM

เรียนรู้วิธีการเรียนรู้

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

ขึ้นเขาทั้งสองวิธีผ่านหิมะ

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

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