ฉันอ่านบทความ Wikipedia เกี่ยวกับ Douglas McIlroyและพบข้อความที่กล่าวถึง
"ฮีโร่ที่แท้จริงของการเขียนโปรแกรมคือผู้ที่เขียนโค้ดเชิงลบ"
นั่นหมายความว่าอย่างไร?
ฉันอ่านบทความ Wikipedia เกี่ยวกับ Douglas McIlroyและพบข้อความที่กล่าวถึง
"ฮีโร่ที่แท้จริงของการเขียนโปรแกรมคือผู้ที่เขียนโค้ดเชิงลบ"
นั่นหมายความว่าอย่างไร?
คำตอบ:
มันหมายถึงการลดบรรทัดของรหัสโดยการลบซ้ำซ้อนหรือใช้โครงสร้างที่รัดกุมมากขึ้น
ดูตัวอย่างเรื่องเล็ก ๆ ที่มีชื่อเสียงนี้จากทีมนักพัฒนา Apple Lisa เดิม:
เมื่อทีมงานลิซ่าผลักดันให้เสร็จสิ้นซอฟต์แวร์ของพวกเขาในปี 2525 ผู้จัดการโครงการเริ่มต้องการให้โปรแกรมเมอร์ส่งรายงานแบบฟอร์มรายสัปดาห์เกี่ยวกับจำนวนบรรทัดของรหัสที่พวกเขาเขียน Bill Atkinson คิดว่ามันโง่ สำหรับสัปดาห์ที่เขาเขียนการคำนวณตามภูมิภาคของ QuickDraw ให้เร็วขึ้นหกเท่าและสั้นกว่า 2,000 บรรทัดเขาวาง "-2000" ลงในแบบฟอร์ม หลังจากนั้นไม่กี่สัปดาห์ผู้จัดการหยุดขอให้เขากรอกแบบฟอร์มและเขาก็ปฏิบัติตามด้วยความยินดี
มีใบเสนอราคาของ Bill Gates ตามบรรทัดของการวัดประสิทธิภาพการทำงานของโปรแกรมเมอร์โดยสายของรหัสเป็นเหมือนการวัดความก้าวหน้าของอากาศยานโดยน้ำหนัก
ฉันต้องการเพิ่มว่าตัวชี้วัด LOC ได้สนับสนุนการใช้ภาษาที่ยืดเยื้อมานานและคิดทบทวนการสร้างวงล้อใหม่เพื่อให้ตรงกับโควต้า
ตอนที่ฉันอยู่มัธยมและใช่เรามีคอมพิวเตอร์ย้อนกลับไปในยุค 70 แม้ว่าเราจะต้องทำให้พวกมันออกมาจากหนังสัตว์โดยใช้มีดหิน - ครูคณิตศาสตร์คนหนึ่งทำการแข่งขันเขียนโปรแกรม กฎคือโปรแกรมที่ชนะจะเป็นโปรแกรมที่สร้างเอาต์พุตที่ถูกต้องและมีผลิตภัณฑ์ที่เล็กที่สุดของบรรทัดของเวลารันไทม์ของโค้ด นั่นคือถ้าโปรแกรมของคุณใช้รหัส 100 บรรทัดและวิ่งเป็นเวลา 5 วินาทีคะแนนของคุณคือ 500 ถ้ามีคนเขียนโค้ด 90 บรรทัดและวิ่งเป็นเวลา 6 วินาทีคะแนนของเขาคือ 540 คะแนนต่ำชนะเช่นกอล์ฟ
มันทำให้ฉันเป็นระบบการให้คะแนนที่ยอดเยี่ยมซึ่งให้รางวัลทั้งความกระชับและประสิทธิภาพ
แต่รายการที่ตรงกับเกณฑ์การชนะทางเทคนิคนั้นถูกตัดสิทธิ์ ปัญหาคือการพิมพ์รายการของจำนวนเฉพาะทั้งหมดน้อยกว่า 100 รายการที่ถูกตัดสิทธิ์ไปบางสิ่งเช่นนี้ (นักเรียนส่วนใหญ่ใช้ BASIC ย้อนหลัง):
100 print "2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61,"
110 print "67, 71, 73, 79, 83, 87, 89, 91, 97"
นักเรียนที่เขียนรายการนั้นชี้ให้เห็นว่าไม่เพียง แต่จะสั้นและมีประสิทธิภาพมากเท่านั้น แต่อัลกอริธึมควรเป็นที่ประจักษ์แก่ทุกคนที่มีความรู้เกี่ยวกับการเขียนโปรแกรมแม้แต่น้อย
มันเป็นลิ้นในแก้ม หากมีค่าใช้จ่ายคุณ $ N ต่อบรรทัดที่เข้ารหัสแล้วการเข้ารหัส "เส้นลบ" จะเป็นผู้ชนะแน่นอน
ซึ่งหมายความว่าในฐานะที่เป็นคำแนะนำในทางปฏิบัติรหัสขนาดเล็กที่ทำงานให้สำเร็จนั้นดีกว่ารหัสขนาดใหญ่ที่ทำสิ่งเดียวกันทุกอย่างเท่าเทียมกัน
การเขียนโปรแกรมเดียวกันในรหัสน้อยเป็นเป้าหมายสำหรับทุกคน
หากโปรแกรมนำโค้ด LOC 200 ตัวและฉันเขียนมันใน 150 ฉันจะเขียน -50 LOC ดังนั้นฉันจึงเขียนโค้ดเชิงลบ
คำตอบของ Thiloน่าจะแม่นยำที่สุดในอดีต แต่การเปรียบเทียบ "รหัสเชิงลบ" นั้นอาจรวมถึงประสิทธิภาพและการใช้หน่วยความจำซึ่งเป็นรางวัลที่พยายามเลื่อนการดำเนินการหรือการจัดสรรบางสิ่งจนกว่าจะจำเป็นจริงๆ
"การผัดวันประกันพรุ่งจ่าย" ความคิดนี้สร้างสัจพจน์แบบลิ้น - แก้ม - แก้มเช่น "การไม่ทำอะไรเลยเร็วกว่าทำอะไร", "รหัสที่เร็วที่สุดคือรหัสที่ไม่เคยลงมือทำ" และ "ถ้าคุณสามารถทำให้มันนานพอ คุณอาจไม่จำเป็นต้องทำ "(หมายถึงการเลื่อนเวลาของการดำเนินการที่มีราคาแพงจนจำเป็นต้องใช้จริง)
เทคนิคหนึ่งในการตระหนักถึงโค้ดที่เป็นลบคือการท้าทายสมมติฐานเริ่มต้นและคำจำกัดความของปัญหา หากคุณสามารถกำหนดโดเมนปัญหา / อินพุตให้ใหม่ได้ซึ่ง "ปัญหาเหนียว # 3" นั้นเป็นไปไม่ได้อย่างเด็ดขาดคุณไม่ต้องเสียเวลาหรือต้องจัดการกับปัญหาเหนียว # 3 คุณได้ตัดรหัสโดยปรับการออกแบบให้เหมาะสม