- ในปี 1982 ทีมซอฟต์แวร์ Lisa ของ Apple ได้นำนโยบายติดตาม จำนวนบรรทัดของโค้ด รายสัปดาห์ของนักพัฒนาแต่ละคนมาใช้เพื่อเตรียมออกซอฟต์แวร์
- Bill Atkinson เห็นว่าจำนวนบรรทัดของโค้ดเป็นตัวชี้วัดผลิตภาพซอฟต์แวร์ที่ผิดพลาด
- เขาเขียน เอนจินคำนวณรีเจียนของ Quickdraw ขึ้นใหม่ทั้งหมด โดยลดโค้ดลงได้ราว 2,000 บรรทัด และเพิ่มประสิทธิภาพได้ 6 เท่า
- Atkinson กรอกค่า -2000 ลงในแบบฟอร์มการจัดการที่ใช้รายงานจำนวนโค้ด
- ในที่สุดผู้จัดการก็ไม่ขอให้ Bill ส่งแบบฟอร์มอีกต่อไป
ทีมซอฟต์แวร์ Lisa ในปี 1982 และนโยบายติดตามจำนวนบรรทัดของโค้ด
- ช่วงต้นปี 1982 ทีมซอฟต์แวร์ Lisa เริ่มเร่งงานโดยตั้งเป้าออกซอฟต์แวร์ภายใน 6 เดือนข้างหน้า
- ผู้จัดการบางคนมองว่าการติดตาม จำนวนบรรทัดของโค้ด ที่วิศวกรแต่ละคนเขียนในแต่ละสัปดาห์จะช่วยให้เห็นความคืบหน้า
- เพื่อการนี้จึงมีการนำ แบบฟอร์ม ที่ให้วิศวกรบันทึกและส่งจำนวนบรรทัดของโค้ดที่เขียนในทุกวันศุกร์มาใช้
มุมมองของ Bill Atkinson ต่อเกณฑ์วัดผลิตภาพ
- Bill Atkinson ผู้ออกแบบ Quickdraw และส่วนติดต่อผู้ใช้ มองว่าจำนวนบรรทัดของโค้ดไม่อาจใช้เป็นเกณฑ์วัดผลิตภาพซอฟต์แวร์ได้
- เขาเน้นว่าเป้าหมายคือการทำให้โปรแกรม เล็กและเร็วที่สุดเท่าที่เป็นไปได้
- เขาตระหนักว่าการวัดจำนวนบรรทัดของโค้ดอาจยิ่งส่งเสริมให้เกิด โค้ดที่รกและไม่มีประสิทธิภาพ
การรีแฟกเตอร์และปรับแต่งเอนจินรีเจียนของ Quickdraw
- Atkinson เพิ่งเขียน เอนจินคำนวณรีเจียนของ Quickdraw ใหม่ทั้งหมดด้วยอัลกอริทึมที่เรียบง่ายและใช้งานได้ทั่วไปมากขึ้น
- ผลจากการปรับแต่งทำให้ ความเร็วของการทำงานกับรีเจียนเพิ่มขึ้นได้ถึง 6 เท่า
- ระหว่างกระบวนการนี้ โค้ดราว 2,000 บรรทัด ก็ลดลงไปโดยธรรมชาติ
รายงานว่าเขียนโค้ด -2000 บรรทัด และปฏิกิริยาของผู้จัดการ
- ระหว่างกรอกแบบฟอร์มผู้บริหารในสัปดาห์แรก Atkinson เขียนค่า -2000 ลงในช่องจำนวนบรรทัดของโค้ด
- ไม่แน่ชัดว่าผู้จัดการตอบสนองต่อเลขนี้อย่างไร
- หลายสัปดาห์ต่อมา Bill ถูกบอกว่าไม่ต้องส่งแบบฟอร์มอีก และเขาก็ยินดีอย่างมาก
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
คอมมิตที่ผมจำได้ว่าเป็นคอมมิตที่ดีที่สุดคือการลบโค้ดไปราว 60,000 บรรทัด แล้วแทนที่ “เซิร์ฟเวอร์” ทั้งก้อนที่เคยเก็บสถานะทั้งหมดไว้ในหน่วยความจำ ด้วยลอจิกเบา ๆ ประมาณ 5,000 บรรทัด
falseถ้าตรงทั้งหมดก็trueแบบนี้ ต่อให้ไม่ใช่ต้นไม้ ถ้ากำหนดจุดเริ่มต้นให้ชัด วิธีนี้ก็น่าจะใช้ได้กับ subgraph แบบอื่นด้วยตอนเรียนมหาวิทยาลัย ผมเคยทำงานให้บริษัทที่มีนโยบายผู้บริหารว่าเด็กจบใหม่สามารถเขียนโค้ดดี ๆ ได้ สุดท้ายมันก็พิสูจน์ตัวเองว่าเป็นกรณีล้มเหลวที่ไม่ได้ถูกพิสูจน์ไว้ก่อน
ในประเด็นที่เกี่ยวกัน มีคนรวบรวมเธรดยอดนิยมใน Hacker News ที่พูดถึง “-2000 lines of code” ไว้ตามลิงก์
โปรเจกต์เว็บ UI ที่ผมรับช่วงต่อมีโค้ด 250,000 บรรทัด ยังไม่รวมฝั่งแบ็กเอนด์
addEventListenerจนผมถึงกับล้อว่า “ถ้าให้พระนักพรตมีหนังสือ JavaScript หนึ่งเล่มกับห้องขังเดี่ยว 10 ปี ก็คงได้โค้ดแบบนี้ออกมา”switch/case/if/else/ternaryซ้อนกัน 10 ชั้น, SQL ปะปนกับ JS/HTML/HTML ที่ฝัง JS และเป็นโครงสร้างฟรอนต์เอนด์ยุค PHP/Dojo ที่ไม่มี automated test เลยมีการ์ตูน Dilbert ตอนหนึ่งเกี่ยวกับโครงสร้างรางวัลที่ผิดเพี้ยนไม่รู้จบ โดยหัวหน้าของ Dilbert สัญญาว่าจะให้รางวัลเป็นเงินทุกครั้งที่แก้บั๊กหนึ่งตัว แล้ว Wally ก็พูดว่า “วันนี้ฉันต้องเขียนโค้ดให้ได้สักหนึ่งมินิแวนแล้วล่ะ!”
มีการแชร์กรณีจริงที่ลบโค้ดไป 64,000 บรรทัดใน repository
dotnet/runtimeทุกครั้งที่เห็นสถิติว่า LLM เพิ่ม productivity ของนักพัฒนาได้มากแค่ไหน ผมจะนึกถึงเรื่องคลาสสิกนี้เสมอ
ผมไม่ได้จบ CS และทำงานด้วยความรู้ภาคปฏิบัติที่เรียนรู้เอาระหว่างทำงาน
ก่อนการประเมินผลงานปลายปี ผมไปดูสถิติของตัวเองใน monolithic repository ภายในบริษัท แล้วพบว่าถ้าวัดจากยอดสุทธิของโค้ด ผมกลายเป็นคนที่ติดลบ
นานมาแล้วผมเคยช็อกกับกรณี KPI ที่ย่ำแย่มากในโปรเจกต์ใหญ่แห่งหนึ่ง ที่ PL จะจดจำนวนบั๊กของนักพัฒนาแต่ละคนด้วยมือแบบออฟไลน์ (ทั้งบั๊กที่แก้และบั๊กที่ก่อ) แล้วเอาไปแปะบนกำแพง