ดังนั้นนักพัฒนา / ผู้จัดการบางคนเห็นคุณค่าในการเขียนโค้ดให้น้อยลงเพื่อให้สิ่งต่าง ๆ เสร็จสิ้น
นี่เป็นเรื่องของการมองไม่เห็นเป้าหมายที่แท้จริง
สิ่งที่สำคัญคือการลดลงของเวลาที่ใช้ในการพัฒนา ที่วัดในเวลา (หรือความพยายามเทียบเท่า) ไม่อยู่ในบรรทัดของรหัส
นี่เป็นเหมือนการบอกว่าผู้ผลิตรถยนต์ควรสร้างรถยนต์ด้วยสกรูน้อยกว่าเพราะใช้เวลาไม่นานในการใส่สกรูแต่ละตัวในขณะที่มันถูกต้องอย่างมากค่าการตลาดของรถยนต์ไม่ได้ถูกกำหนดโดยสกรูจำนวนเท่าไร หรือไม่มี เหนือสิ่งอื่นใดรถยนต์ต้องมีความปลอดภัยและบำรุงรักษาง่าย
ส่วนที่เหลือของคำตอบคือตัวอย่างว่าโค้ดที่สะอาดสามารถนำไปสู่การเพิ่มเวลาได้อย่างไร
เข้าสู่ระบบ
รับแอปพลิเคชัน (A) ที่ไม่มีการบันทึก ตอนนี้สร้างแอปพลิเคชัน B ซึ่งเป็นแอปพลิเคชันเดียวกัน A แต่มีการบันทึก B จะมีบรรทัดของรหัสมากขึ้นเสมอดังนั้นคุณต้องเขียนโค้ดเพิ่มเติม
แต่เวลาส่วนใหญ่จะจมลงไปในการตรวจสอบปัญหาและข้อบกพร่องและค้นหาสิ่งที่ผิดพลาด
สำหรับแอปพลิเคชัน A นักพัฒนาจะติดอ่านรหัสและต้องทำซ้ำปัญหาอย่างต่อเนื่องและผ่านรหัสเพื่อค้นหาแหล่งที่มาของปัญหา ซึ่งหมายความว่าผู้พัฒนาจะต้องทดสอบตั้งแต่เริ่มต้นของการดำเนินการจนถึงจุดสิ้นสุดในทุกเลเยอร์ที่ใช้และต้องสังเกตตรรกะทุกชิ้นที่ใช้
บางทีเขาอาจจะโชคดีที่พบมันในทันที แต่บางทีคำตอบอาจจะอยู่ในตำแหน่งสุดท้ายที่เขาคิดว่าจะมอง
สำหรับแอปพลิเคชัน B ซึ่งสมมติว่าการบันทึกสมบูรณ์แบบนักพัฒนาจะทำการตรวจสอบบันทึกสามารถระบุองค์ประกอบที่ผิดพลาดได้ทันทีและตอนนี้รู้ว่าจะต้องดูที่ไหน
สิ่งนี้สามารถบันทึกได้เป็นนาทีชั่วโมงหรือวัน ขึ้นอยู่กับขนาดและความซับซ้อนของ codebase
การถดถอย
ใช้แอปพลิเคชั่น A ซึ่งไม่เป็นมิตรกับสิ่งแวดล้อมเลย
ใช้แอปพลิเคชั่น B ซึ่งเป็น DRY แต่สุดท้ายก็จำเป็นต้องมีบรรทัดมากขึ้นเนื่องจากมี abstractions เพิ่มเติม
คำขอเปลี่ยนแปลงจะถูกยื่นซึ่งต้องมีการเปลี่ยนแปลงตรรกะ
สำหรับแอปพลิเคชัน B นักพัฒนาจะเปลี่ยนตรรกะ (ไม่ซ้ำกันแชร์) ตามคำขอเปลี่ยนแปลง
สำหรับแอปพลิเคชัน A ผู้พัฒนาต้องเปลี่ยนอินสแตนซ์ทั้งหมดของตรรกะนี้ซึ่งเขาจำได้ว่ามันถูกใช้
- หากเขาจำได้ทุกกรณีเขาจะยังต้องใช้การเปลี่ยนแปลงเดิมหลายครั้ง
- หากเขาไม่สามารถจำทุกกรณีตอนนี้คุณกำลังจัดการกับ codebase ที่ไม่สอดคล้องซึ่งขัดแย้งกับตัวเอง หากผู้พัฒนาลืมรหัสชิ้นที่ไม่ค่อยได้ใช้ข้อผิดพลาดนี้อาจไม่ปรากฏแก่ผู้ใช้จนกว่าจะถึงอนาคต ในเวลานั้นผู้ใช้ปลายทางจะระบุว่าสาเหตุของปัญหาคืออะไร แม้ว่าจะเป็นเช่นนั้นผู้พัฒนาอาจจำไม่ได้ว่าการเปลี่ยนแปลงมีอะไรบ้างและจะต้องหาวิธีเปลี่ยนตรรกะที่ถูกลืม บางทีนักพัฒนาอาจไม่ได้ทำงานที่ บริษัท แล้วและตอนนี้มีคนอื่นต้องคิดให้ดีตั้งแต่เริ่มต้น
สิ่งนี้สามารถนำไปสู่การสูญเสียเวลามหาศาล ไม่เพียง แต่ในการพัฒนา แต่ในการล่าสัตว์และค้นหาข้อผิดพลาด แอปพลิเคชันสามารถเริ่มทำงานผิดปกติในลักษณะที่นักพัฒนาไม่สามารถเข้าใจได้ง่าย และจะนำไปสู่เซสชันการดีบักที่มีความยาว
ความสามารถในการแลกเปลี่ยนของนักพัฒนา
นักพัฒนาแอปพลิเคชันที่สร้างขึ้น A. รหัสไม่สะอาดหรือไม่สามารถอ่านได้ แต่มันทำงานเหมือนมีเสน่ห์และทำงานในการผลิต น่าประหลาดใจที่ไม่มีเอกสารเช่นกัน
ผู้พัฒนา A ขาดงานไปหนึ่งเดือนเนื่องจากวันหยุด มีการยื่นคำขอเปลี่ยนแปลงฉุกเฉิน ไม่สามารถรออีกสามสัปดาห์ก่อนที่ Dev A จะกลับมา
นักพัฒนา B ต้องดำเนินการเปลี่ยนแปลงนี้ ตอนนี้เขาต้องการที่จะอ่าน codebase ทั้งหมดเข้าใจว่าทุกอย่างทำงานทำไมมันทำงานและสิ่งที่มันพยายามที่จะสำเร็จ สิ่งนี้ใช้เวลานาน แต่สมมติว่าเขาสามารถทำได้ในเวลาสามสัปดาห์
ในเวลาเดียวกันแอปพลิเคชัน B (ซึ่ง dev dev สร้างขึ้น) มีเหตุฉุกเฉิน Dev B ถูกครอบครอง แต่ Dev C นั้นมีให้แม้ว่าเขาจะไม่รู้จัก codebase ก็ตาม พวกเราทำอะไร?
- ถ้าเราทำงาน B ต่อไปและให้ C ทำงานกับ B เราก็มีนักพัฒนาสองคนที่ไม่รู้ว่าพวกเขากำลังทำอะไร
- หากเราดึง B ออกจาก A และให้เขาทำ B และตอนนี้เราวาง C ไว้บน A ผลงานทั้งหมดของนักพัฒนา B (หรือส่วนสำคัญ) อาจสิ้นสุดลงด้วยการยกเลิก นี่อาจเป็นจำนวนวัน / สัปดาห์ของความพยายามที่สูญเปล่า
Dev A กลับมาจากวันหยุดของเขาและเห็นว่า B ไม่เข้าใจรหัสและทำให้มันแย่มาก มันไม่ใช่ความผิดของ B เพราะเขาใช้ทรัพยากรที่มีอยู่ทั้งหมดซอร์สโค้ดไม่สามารถอ่านได้อย่างเพียงพอ A ต้องใช้เวลาในการแก้ไขความสามารถในการอ่านรหัสหรือไม่?
ทุกปัญหาเหล่านี้และอื่น ๆ อีกมากมายจบลงด้วยการสูญเสียเวลา ใช่ในระยะสั้นรหัสสะอาดต้องใช้ความพยายามมากขึ้นในตอนนี้แต่จะจบลงด้วยการจ่ายเงินปันผลในอนาคตเมื่อต้องแก้ไขข้อบกพร่อง / การเปลี่ยนแปลงที่หลีกเลี่ยงไม่ได้
ฝ่ายบริหารจำเป็นต้องเข้าใจว่างานสั้น ๆ ในตอนนี้จะช่วยให้คุณทำงานได้นานหลายงานในอนาคต การล้มเหลวในการวางแผนกำลังวางแผนที่จะล้มเหลว
ถ้าเป็นเช่นนั้นมีข้อโต้แย้งอะไรบ้างที่ฉันสามารถใช้เพื่อพิสูจน์ความจริงที่ว่ามีการเขียน LOC มากกว่านี้
คำอธิบาย goto ของฉันคือถามผู้บริหารว่าพวกเขาต้องการอะไร: แอปพลิเคชันที่มี codebase 100KLOC ซึ่งสามารถพัฒนาได้ในสามเดือนหรือ 50KLOC codebase ที่สามารถพัฒนาได้ในหกเดือน
พวกเขาเห็นได้ชัดว่าจะเลือกเวลาในการพัฒนาที่สั้นลงเพราะการจัดการไม่สนใจเกี่ยวกับ KLOC ผู้จัดการที่มุ่งเน้นไปที่ KLOC นั้นเป็น micromanaging ในขณะที่ไม่รู้ข้อมูลเกี่ยวกับสิ่งที่พวกเขาพยายามจัดการ