ฉันเห็นคำตอบเกี่ยวกับพวกเราที่เป็นมนุษย์และมีแนวโน้มที่จะผิดพลาดซึ่งเป็นเรื่องจริง ... แต่ฉันเห็นคำถามของคุณจากมุมมองอื่น
ฉันคิดว่าคุณสามารถเขียนโปรแกรมที่ไม่มีบั๊กได้ แต่โดยทั่วไปแล้วเป็นโปรแกรมที่คุณเขียนไปแล้ว 10 หรือ 12 ครั้ง ครั้งที่ 13 ที่คุณเขียนโปรแกรมเดียวกันตั้งแต่เริ่มต้นคุณรู้วิธีที่จะทำ: คุณรู้ปัญหาคุณรู้เทคนิคคุณรู้จักห้องสมุดภาษา ... คุณเห็นมันในใจของคุณ รูปแบบทั้งหมดอยู่ที่นั่นในทุกระดับ
สิ่งนี้เกิดขึ้นกับฉันด้วยโปรแกรมที่ง่ายมากเพราะฉันสอนการเขียนโปรแกรม มันง่ายสำหรับฉัน แต่ยากสำหรับนักเรียน และฉันไม่ได้พูดถึงวิธีแก้ปัญหาที่ฉันทำหลาย ๆ ครั้งในกระดานดำ แน่นอนฉันรู้สิ่งเหล่านั้น ฉันหมายถึงโปรแกรมประมาณ 300 บรรทัดที่แก้ปัญหาโดยใช้แนวคิดที่ฉันรู้จักดี (แนวคิดที่ฉันสอน) ฉันเขียนโปรแกรมเหล่านี้โดยไม่มีการวางแผนและพวกเขาก็ใช้งานได้และฉันรู้สึกว่าฉันรู้รายละเอียดทั้งหมดฉันไม่ต้องการ TDD เลย ฉันได้รับข้อผิดพลาดในการรวบรวมสองหรือสาม (ส่วนใหญ่พิมพ์ผิดและสิ่งอื่น ๆ เช่นนั้น) และที่มัน ฉันสามารถทำสิ่งนี้สำหรับโปรแกรมขนาดเล็กและฉันก็เชื่อว่าบางคนสามารถทำเช่นนั้นสำหรับโปรแกรมที่ซับซ้อนมากขึ้น ฉันคิดว่าคนอย่าง Linus Torvalds หรือ Daniel J. Bernstein มีความชัดเจนในใจพวกเขาเป็นคนใกล้ชิดที่สุดที่คุณจะได้รับรหัสปราศจากข้อผิดพลาด ถ้าคุณเข้าใจสิ่งต่าง ๆ อย่างลึกซึ้งฉันคิดว่าคุณสามารถทำได้ ฉันทำได้เฉพาะโปรแกรมง่ายๆเท่านั้นอย่างที่ฉันพูด
ความเชื่อของฉันคือถ้าคุณพยายามทำโปรแกรมที่สูงกว่าระดับของคุณ (ฉันใช้เวลาหลายปีในการทำเช่นนั้น) คุณจะสับสนและทำผิดพลาด ข้อผิดพลาดใหญ่ ๆ อย่างที่คุณรู้ทันทีว่าวิธีแก้ปัญหาของคุณไม่สามารถทำงานได้ในที่สุดเมื่อคุณเข้าใจปัญหาและต้องทำการเปลี่ยนแปลงที่ซับซ้อนจนพวกเขาอาจหยุดคุณจากการแก้ปัญหาของคุณหรือทำให้รหัสแย่ ฉันเชื่อว่า TDD สำหรับกรณีนี้ คุณรู้ว่าคุณไม่ได้คลุกคลีปัญหาที่คุณกำลังแก้ไขและทำการทดสอบทุกที่เพื่อให้แน่ใจว่าคุณมีฐานที่แข็งแกร่ง แต่ TDD ไม่สามารถแก้ปัญหาสายตา 10,000 ฟุตได้ คุณอาจเดินวนเป็นวงกลมโดยมีรหัสที่สะอาดอย่างสมบูรณ์ตลอดเวลา
แต่ถ้าคุณพยายามที่จะทำอะไรบางอย่างที่เป็นของใหม่ แต่ที่เป็นเพียงแค่เหนือระดับของคุณคุณอาจได้รับโปรแกรมของคุณที่สมบูรณ์แบบหรือเกือบจะสมบูรณ์ ฉันคิดว่ามันยากมากที่จะรู้ว่าโปรแกรมใดอยู่ใน "ความรู้ชายแดน" ของคุณ แต่ในทางทฤษฎีนั่นเป็นวิธีที่ดีที่สุดในการเรียนรู้ ฉันเขียนโปรแกรมใหม่ตั้งแต่เริ่มต้นจริง ๆ แล้ว บางคนทำ แต่คุณต้องใช้เวลาและความอดทนมากเพราะครั้งที่สามที่คุณทำซ้ำโปรแกรมที่ไม่สำคัญคุณจะไม่รู้สึกตื่นเต้นเหมือนครั้งแรก
ดังนั้นคำแนะนำของฉันคือ: อย่าคิดว่าคุณเข้าใจอะไรบางอย่างจนกว่าคุณจะสามารถเขียนโปรแกรมปราศจากข้อบกพร่องเพียงเพื่อสิ่งนั้น จากนั้นลองรวมแนวคิดสองข้อที่คุณรู้จักอย่างลึกซึ้งเข้ากับโปรแกรมเดียวกัน ฉันเกือบแน่ใจว่าคุณจะทำให้ถูกต้องในครั้งแรก หนึ่งในวิธีที่ดีที่สุดคือการเขียนซอฟต์แวร์ที่ไม่ใช่เรื่องแปลกใหม่สิ่งที่ต้องใช้ความพยายามอย่างมากในครั้งแรก (ฉันกำลังทำสิ่งนี้กับแอพ Android ตอนนี้) ทุกครั้งที่ฉันเริ่มต้นใหม่ฉันเปลี่ยนบางสิ่งหรือเพิ่มสิ่งต่าง ๆ เพียงแค่เพิ่มความสนุกเล็กน้อยและฉันสามารถบอกคุณได้ว่าดีขึ้นเรื่อย ๆ และดีขึ้น ... อาจจะไม่ใช่ข้อผิดพลาด แต่ภูมิใจมาก