โดยย่อ: มันขึ้นอยู่กับ
ในรายละเอียด
คุณจะต้องล้างสิ่งที่เป็นเงางามหรือไม่?
มีสิ่งที่ต้องระวังเกี่ยวกับที่นี่และคุณต้องระบุขีด จำกัด ระหว่างสิ่งที่เป็นจริงกำไรที่วัดได้และสิ่งที่เป็นเพียงการตั้งค่าส่วนตัวของคุณและนิสัยที่ไม่ดีของรหัสสัมผัสที่ไม่ควรเป็น
โดยเฉพาะอย่างยิ่งรู้สิ่งนี้:
มันเป็นรูปแบบการต่อต้านและมันมาพร้อมกับปัญหาในตัว:
- มันอาจจะขยายมากขึ้นแต่มันอาจจะไม่ง่ายที่จะขยาย
- มันอาจจะไม่ง่ายที่จะเข้าใจ ,
- สุดท้าย แต่ไม่ท้ายสุดที่นี่: คุณอาจทำให้รหัสทั้งหมดช้าลง
บางคนอาจพูดถึงหลักการ KISSเป็นข้อมูลอ้างอิง แต่ที่นี่มันตอบโต้ได้ง่าย: เป็นวิธีที่ได้รับการปรับปรุงวิธีที่ง่ายที่สุดหรือวิธีที่มีสถาปัตยกรรมที่ชัดเจนหรือไม่? คำตอบนั้นไม่จำเป็นต้องสมบูรณ์แน่นอนดังอธิบายในส่วนที่เหลือด้านล่าง
หลักการ YAGNIไม่สมบูรณ์มุมฉากกับปัญหาอื่น ๆ แต่มันจะช่วยให้ถามตัวเองคำถาม: คุณจะต้องการหรือไม่
สถาปัตยกรรมที่ซับซ้อนมากขึ้นนำเสนอประโยชน์ให้กับคุณจริง ๆ หรือไม่นอกเหนือจากการดูแลรักษาให้มากขึ้น?
เขียนสิ่งนี้บนโปสเตอร์ขนาดใหญ่แล้วแขวนไว้ข้างหน้าจอของคุณหรือในห้องครัวในที่ทำงานหรือในห้องประชุม dev แน่นอนว่ามีบทสวดอื่น ๆ อีกมากมายที่ควรค่าแก่การทำซ้ำ แต่สิ่งนี้เป็นสิ่งสำคัญเมื่อใดก็ตามที่คุณพยายามทำ "งานบำรุงรักษา" และรู้สึกอยากที่จะ "ปรับปรุง" มัน
มันเป็นเรื่องปกติที่เราจะต้องการ "ปรับปรุง" โค้ดหรือแม้แต่แตะมันแม้กระทั่งโดยไม่รู้ตัวเมื่อเราอ่านมันเพื่อทำความเข้าใจ มันเป็นสิ่งที่ดีเพราะมันหมายถึงว่าเราให้ความเห็นและพยายามที่จะทำความเข้าใจกับ internals ให้ลึกซึ้งยิ่งขึ้น แต่มันก็ถูกผูกไว้กับระดับทักษะของเราความรู้ของเรา (คุณจะตัดสินใจได้อย่างไรว่าอะไรดีกว่า ... ) และสมมติฐานทั้งหมดที่เราทำเกี่ยวกับสิ่งที่เราคิดว่าเรารู้ว่าซอฟต์แวร์ ... :
- จริง ๆ แล้ว
- จริง ๆ ต้องทำ
- ในที่สุดจะต้องทำ
- และมันทำได้ดีเพียงใด
จำเป็นต้องปรับให้เหมาะสมจริง ๆ หรือไม่
ทั้งหมดนี้กล่าวว่าทำไม "เพิ่มประสิทธิภาพ" ตั้งแต่แรก? พวกเขากล่าวว่าการเพิ่มประสิทธิภาพก่อนวัยอันควรเป็นรากของความชั่วร้ายทั้งหมดและหากคุณเห็นรหัสที่ไม่มีเอกสารและดูเหมือนว่าเหมาะที่สุดโดยปกติแล้วคุณสามารถสันนิษฐานได้ว่าอาจไม่ปฏิบัติตามกฎการเพิ่มประสิทธิภาพไม่ต้องการความพยายามอย่างเต็มที่ ปกตินักพัฒนาที่มีความโอหังเตะเข้ามาอีกครั้งบางทีมันอาจเป็นแค่การพูดคุยของคุณ
หากเป็นเช่นนั้นภายในขอบเขตใดที่ยอมรับได้? หากมีความจำเป็นต้องใช้ขีด จำกัด นี้จะมีอยู่และให้คุณมีพื้นที่สำหรับปรับปรุงสิ่งต่าง ๆ หรือฮาร์ดไลน์เพื่อตัดสินใจว่าจะปล่อยมันไป
นอกจากนี้ระวังคุณสมบัติที่มองไม่เห็น โอกาสที่จะเกิดขึ้นคือโค้ด "ที่ขยายได้" ของคุณนี้จะช่วยให้คุณมีหน่วยความจำมากขึ้นขณะใช้งานจริงและยังแสดงหน่วยความจำสแตติกที่มีขนาดใหญ่กว่าสำหรับปฏิบัติการ คุณสมบัติ Shiny OO มาพร้อมกับค่าใช้จ่ายที่ไม่ได้ใช้งานง่ายเช่นนี้และอาจมีความสำคัญกับโปรแกรมของคุณและสภาพแวดล้อมที่ควรทำงาน
วัด, วัด, วัด
ในฐานะที่เป็นคน Google ตอนนี้มันเป็นเรื่องของข้อมูล! หากคุณสามารถสำรองข้อมูลได้แสดงว่าจำเป็น
มีเรื่องนี้ไม่เก่านักที่ทุก ๆ $ 1 ที่ใช้ในการพัฒนาจะต้องตามมาอย่างน้อย $ 1 ในการทดสอบและอย่างน้อย $ 1 ในการสนับสนุน (แต่จริงๆแล้วมันมีมากขึ้น)
การเปลี่ยนแปลงส่งผลกระทบต่อสิ่งต่างๆมากมาย:
- คุณอาจจำเป็นต้องสร้างงานสร้างใหม่
- คุณควรเขียนการทดสอบหน่วยใหม่ (แน่นอนถ้าไม่มีและสถาปัตยกรรมที่ขยายได้มากขึ้นของคุณอาจออกจากห้องพักมากขึ้นเนื่องจากคุณมีพื้นผิวมากขึ้นสำหรับข้อบกพร่อง);
- คุณควรเขียนการทดสอบประสิทธิภาพใหม่ (เพื่อให้แน่ใจว่านี้ยังคงมีเสถียรภาพในอนาคตและเพื่อดูว่าปัญหาคอขวดที่มี) และเหล่านี้เป็นเรื่องยุ่งยากที่จะทำ ;
- คุณจะต้องจัดทำเอกสาร (และสามารถขยายรายละเอียดได้มากขึ้น)
- คุณ (หรือบุคคลอื่น) จะต้องทำการทดสอบอีกครั้งใน QA
- รหัสคือ (เกือบ) ไม่มีข้อบกพร่องและคุณจะต้องสนับสนุน
ดังนั้นไม่ใช่เพียงแค่การใช้ทรัพยากรฮาร์ดแวร์ (ความเร็วในการทำงานหรือการปล่อยหน่วยความจำ) ที่คุณต้องการวัดที่นี่ แต่ยังเป็นการสิ้นเปลืองทรัพยากรของทีม ทั้งสองจำเป็นต้องคาดการณ์ว่าจะกำหนดเป้าหมายเป้าหมายที่จะวัดทำบัญชีและดัดแปลงตามการพัฒนา
และสำหรับผู้จัดการของคุณนั่นหมายถึงการปรับให้เหมาะกับแผนการพัฒนาในปัจจุบันดังนั้นสื่อสารกับมันและอย่าเข้าไปเขียนโค้ดที่โกรธแค้นกับเด็กผู้ชาย
โดยทั่วไป ...
ใช่ แต่...
อย่าเข้าใจฉันผิดโดยทั่วไปฉันยินดีที่จะทำตามที่คุณแนะนำและฉันมักจะสนับสนุน แต่คุณต้องระวังต้นทุนระยะยาว
ในโลกที่สมบูรณ์แบบมันเป็นทางออกที่ถูกต้อง:
- ฮาร์ดแวร์คอมพิวเตอร์ดีขึ้นเมื่อเวลาผ่านไป
- คอมไพเลอร์และแพลตฟอร์มรันไทม์จะดีขึ้นเมื่อเวลาผ่านไป
- คุณจะได้รับรหัสที่ใกล้เคียงกับความสมบูรณ์แบบสะอาดและบำรุงรักษาได้
ในทางปฏิบัติ:
คุณอาจทำให้แย่ลง
คุณต้องการดวงตาที่มากขึ้นเพื่อที่จะมองมันและยิ่งคุณซับซ้อนมันมากขึ้นดวงตาที่คุณต้องการมากขึ้น
คุณไม่สามารถทำนายอนาคตได้
คุณไม่สามารถรู้ได้อย่างแน่นอนหากคุณต้องการและไม่ถึงแม้ว่า "ส่วนขยาย" ที่คุณต้องการนั้นจะง่ายกว่าและเร็วกว่าที่จะนำไปใช้ในรูปแบบเก่าและหากตัวเองจะต้องมีประสิทธิภาพสูงสุด .
มันแสดงให้เห็นจากมุมมองของผู้บริหารค่าใช้จ่ายมากสำหรับไม่มีกำไรโดยตรง
ทำให้เป็นส่วนหนึ่งของกระบวนการ
คุณพูดถึงที่นี่ว่าเป็นการเปลี่ยนแปลงเล็กน้อยและคุณมีปัญหาบางอย่างในใจ ฉันมักจะบอกว่ามันก็โอเคในกรณีนี้ แต่พวกเราส่วนใหญ่ยังมีเรื่องราวส่วนตัวเกี่ยวกับการเปลี่ยนแปลงเล็ก ๆ น้อย ๆ เกือบจะแก้ไขการผ่าตัดซึ่งในที่สุดก็กลายเป็นฝันร้ายในการบำรุงรักษาและกำหนดเวลาเกือบจะพลาด จากเหตุผลที่อยู่เบื้องหลังรหัสและสัมผัสบางสิ่งที่ไม่ควรเกิดขึ้น
หากคุณมีกระบวนการที่จะจัดการกับการตัดสินใจดังกล่าวคุณต้องถอดความเป็นส่วนตัวออก:
- หากคุณทดสอบสิ่งต่าง ๆ อย่างถูกต้องคุณจะรู้ได้เร็วขึ้นหากสิ่งต่าง ๆ เสียหาย
- หากคุณวัดพวกเขาคุณจะรู้ว่าพวกเขาปรับปรุงหรือไม่
- หากคุณตรวจสอบคุณจะรู้ว่ามันจะโยนคนออกไป
การครอบคลุมการทดสอบการทำโปรไฟล์และการเก็บรวบรวมข้อมูลนั้นเป็นเรื่องยาก
แต่แน่นอนรหัสทดสอบและตัวชี้วัดของคุณอาจประสบปัญหาเดียวกันกับที่คุณพยายามหลีกเลี่ยงสำหรับรหัสจริงของคุณ: คุณทดสอบสิ่งที่ถูกต้องและเป็นสิ่งที่ถูกต้องสำหรับอนาคตและคุณวัดสิ่งที่ถูกต้องหรือไม่ สิ่ง?
โดยทั่วไปยิ่งคุณทดสอบได้มากเท่าไหร่คุณก็ยิ่งมีข้อมูลมากขึ้นเท่านั้นและยิ่งปลอดภัยมากขึ้นเท่านั้น เวลาในการเปรียบเทียบที่ไม่ดี: คิดเหมือนการขับขี่ (หรือชีวิตโดยทั่วไป): คุณสามารถเป็นนักขับที่ดีที่สุดในโลกถ้ารถพังคุณหรือคนที่ตัดสินใจฆ่าตัวตายด้วยการขับรถด้วยตนเองในวันนี้ ทักษะอาจไม่เพียงพอ มีทั้งสิ่งสิ่งแวดล้อมที่สามารถโจมตีคุณและความผิดพลาดของมนุษย์ก็มีความสำคัญเช่นกัน
บทวิจารณ์โค้ดเป็นการทดสอบห้องโถงของทีมพัฒนา
และฉันคิดว่าส่วนสุดท้ายคือกุญแจสำคัญที่นี่: ทำการตรวจสอบโค้ด คุณจะไม่ทราบคุณค่าของการปรับปรุงของคุณหากคุณทำให้พวกเขาเป็นโสด การตรวจสอบโค้ดคือ "การทดสอบห้องโถง" ของเรา: ปฏิบัติตามกฎหมายของ Linus รุ่น Raymondเพื่อตรวจจับข้อบกพร่องและตรวจหาวิศวกรรมและรูปแบบการต่อต้านอื่น ๆ และเพื่อให้แน่ใจว่ารหัสสอดคล้องกับความสามารถของทีมของคุณ ไม่มีจุดในการมีรหัส "ดีที่สุด" หากไม่มีใครอื่น แต่คุณสามารถเข้าใจและบำรุงรักษาได้และนั่นจะเป็นทั้งการเพิ่มประสิทธิภาพที่เป็นความลับและการออกแบบสถาปัตยกรรม 6 ชั้นที่ลึกล้ำ
โปรดจำไว้ว่า:
ทุกคนรู้ว่าการดีบักนั้นยากกว่าการเขียนโปรแกรมตั้งแต่แรก ดังนั้นหากคุณฉลาดเท่าที่จะเป็นเมื่อคุณเขียนมันคุณจะแก้ไขข้อบกพร่องได้อย่างไร - Brian Kernighan