ลดผลข้างเคียงให้น้อยที่สุด (ไม่ควรมีใคร)
ฟังก์ชั่นที่ทำให้เกิดการเปลี่ยนแปลง 3 ครั้งในสถานะที่อยู่นอกขอบเขตของตัวเองนั้นยากกว่าที่จะให้เหตุผลและการบำรุงรักษามากกว่าหนึ่งซึ่งเพียงแค่อินพุตบางสิ่งและแสดงผลอย่างอื่น คุณไม่สามารถรู้ได้ว่าฟังก์ชั่นนี้ทำอะไรคุณต้องจำไว้ว่ามันทำอะไรและมีผลอย่างไรต่อฟังก์ชั่นอื่น ๆ ที่เกี่ยวข้องทั้งหมด
สำหรับ OOP การย่อขนาดผลข้างเคียงหมายถึงคลาสที่มีสมาชิกน้อยลงและโดยเฉพาะอย่างยิ่งสมาชิกที่สามารถปรับเปลี่ยนสถานะของคลาสได้เนื่องจากฟังก์ชั่นสมาชิกสามารถปรับเปลี่ยนสถานะของตัวเองและมีผลข้างเคียง (สามารถจัดการภายในของชั้นเรียนเป็นต้น) นอกจากนี้ยังหมายถึงคลาสที่มีข้อมูลสมาชิกของตนเองน้อยลงเพื่อให้มีวิธีการที่น้อยลงในการแก้ไขปัญหาและผลข้างเคียงที่อาจเกิดขึ้นน้อยลง
ตัวอย่างง่ายๆลองจินตนาการถึงการออกแบบโครงสร้างข้อมูลแฟนซีที่สามารถรักษาsorted
สถานะที่ใช้ในการพิจารณาว่าจะทำการค้นหาแบบไบนารี่หรือแบบเชิงเส้น ในกรณีเช่นนี้อาจเป็นประโยชน์ในการแยกการออกแบบออกเป็นสองคลาส การเรียกsorted
คลาสที่ไม่ได้เรียงอาจส่งคืนโครงสร้างข้อมูลของคลาสอื่นซึ่งเก็บเนื้อหาไว้เสมอ ตอนนี้คุณมีผลข้างเคียงน้อยลง (ดังนั้นจึงเกิดข้อผิดพลาดน้อยและง่ายต่อการเข้าใจรหัส) เช่นเดียวกับรหัสที่ใช้กันอย่างแพร่หลายมากขึ้น (การออกแบบในอดีตจะสิ้นเปลืองทั้งในการประมวลผลและประสิทธิภาพทางปัญญาของมนุษย์สำหรับอาร์เรย์ขนาดเล็ก
หลีกเลี่ยงการพึ่งพาภายนอกแบบฟุ่มเฟือย
คุณอาจสามารถใช้โค้ด terse มากที่สุดเท่าที่จะเป็นไปได้ด้วยการใช้รหัสซ้ำสูงสุดโดยใช้ 13 ไลบรารีที่แตกต่างกันเพื่อให้งานง่ายขึ้น อย่างไรก็ตามการโอนค่าโสหุ้ยทางปัญญาให้กับผู้อ่านของคุณนั้นต้องทำให้พวกเขาเข้าใจอย่างน้อยส่วนหนึ่งของห้องสมุด 13 แห่งที่แตกต่างกัน ใครก็ตามที่พยายามสร้างและทำความเข้าใจกับห้องสมุดบุคคลที่สามซึ่งมีความซับซ้อนนี้ควรได้รับการชื่นชมในทันทีซึ่งต้องมีการดึงและสร้างห้องสมุดอื่น ๆ อีกโหลให้สามารถใช้งานได้
นี่อาจเป็นมุมมองที่ถกเถียงกันมาก แต่ฉันต้องการการทำสำเนารหัสที่ไม่ซับซ้อนไปมากตรงกันข้ามถ้าผลลัพธ์สุดท้ายนั้นผ่านการทดสอบแล้วอย่างดี หากตัวเลือกอยู่ระหว่างรหัสซ้ำ 3 บรรทัดเพื่อคำนวณเวกเตอร์ครอสโปรดักส์หรือดึงในห้องสมุดคณิตศาสตร์มหากาพย์เพียงเพื่อกำจัดรหัส 3 บรรทัดฉันขอแนะนำทีมเก่ายกเว้นว่าทีมของคุณทั้งหมดอยู่บนกระดานด้วยห้องสมุดคณิตศาสตร์นี้ ณ จุดนี้คุณยังอาจพิจารณาเพียงแค่เขียนโค้ด 3 บรรทัดแทนที่จะเป็น 1 หากเล็กน้อยเพื่อแลกกับผลประโยชน์การแยก
การใช้รหัสซ้ำเป็นการกระทำที่ทำให้เกิดความสมดุล นำมาใช้ซ้ำมากเกินไปและคุณถ่ายโอนความซับซ้อนทางปัญญาในแบบหนึ่งต่อหลายอย่างเช่นในรหัส 3 บรรทัดที่คุณบันทึกไว้ด้านบนนั้นมีค่าใช้จ่ายในการกำหนดให้ผู้อ่านและผู้ดูแลรักษาเข้าใจข้อมูลมากกว่ารหัส 3 บรรทัด . นอกจากนี้ยังทำให้รหัสของคุณมีเสถียรภาพน้อยลงเพราะหากห้องสมุดคณิตศาสตร์มีการเปลี่ยนแปลงรหัสของคุณก็เช่นกัน นำมาใช้ใหม่น้อยเกินไปและคุณทวีคูณโสหุ้ยทางปัญญาและรหัสของคุณสิ้นสุดลงเพื่อรับประโยชน์จากการปรับปรุงส่วนกลางดังนั้นจึงเป็นการกระทำที่สมดุล แต่ความคิดที่ว่าการกระทำที่สมดุลนั้นมีค่าควรแก่การกล่าวถึงตั้งแต่พยายามประทับตรารูปแบบเล็กน้อย กับผลลัพธ์ที่ยากต่อการรักษาถ้าไม่มากไปกว่าสิ่งที่ตรงกันข้าม
ทดสอบอึออกจากมัน
นี่คือการกำหนด แต่ถ้ารหัสของคุณไม่ได้จัดการกรณีการป้อนข้อมูลทั้งหมดและพลาดกรณีขอบบางอย่างแล้วคุณจะคาดหวังให้คนอื่นรักษารหัสที่คุณเขียนว่าคุณไม่ได้รับสิทธิก่อนที่จะโอนไปยังตาและมือของพวกเขา? มันยากพอที่จะทำการเปลี่ยนแปลงโค้ดที่ทำงานได้อย่างสมบูรณ์แบบโดยไม่ต้องใช้โค้ดในตอนแรก
ยิ่งไปกว่านั้นรหัสที่ผ่านการทดสอบอย่างละเอียดโดยทั่วไปจะพบว่ามีเหตุผลน้อยกว่าที่จะเปลี่ยนแปลง ที่เกี่ยวข้องกับความมั่นคงซึ่งเป็นจอกศักดิ์สิทธิ์มากกว่าที่จะได้รับการบำรุงรักษาเนื่องจากรหัสที่เสถียรซึ่งไม่จำเป็นต้องเปลี่ยนมีค่าใช้จ่ายในการบำรุงรักษา
เอกสารประกอบอินเตอร์เฟส
จัดลำดับความสำคัญ "สิ่งที่ทำ" เหนือ "วิธีที่สิ่งเหล่านั้นทำ" หากคุณไม่สามารถอุทิศเวลาเท่ากันในการจัดทำเอกสารทั้งสอง อินเทอร์เฟซที่ชัดเจนที่เห็นได้ชัดในความตั้งใจของมันเกี่ยวกับสิ่งที่มันจะทำ (หรืออย่างน้อยที่สุดสิ่งที่มันควรจะทำ) ในทุกกรณีป้อนข้อมูลที่เป็นไปได้จะให้ความชัดเจนของบริบทเพื่อการดำเนินงานของตนเอง เพื่อใช้รหัส แต่ยังทำงานอย่างไร
ในขณะเดียวกันรหัสที่ขาดคุณสมบัติเหล่านี้ซึ่งผู้คนไม่รู้ด้วยซ้ำว่าควรทำอะไรคือ SOL ไม่ว่ารายละเอียดการใช้งานจะเป็นอย่างไร คู่มือ 20 หน้าเกี่ยวกับวิธีการนำซอร์สโค้ดมาใช้นั้นไม่มีค่าสำหรับผู้ที่ไม่สามารถเข้าใจได้อย่างชัดเจนว่าควรใช้ในตอนแรกอย่างไรและควรทำอะไรในสถานการณ์ที่เป็นไปได้ทั้งหมด
สำหรับด้านการนำไปใช้ให้จัดลำดับความสำคัญของการบันทึกสิ่งที่คุณทำแตกต่างจากคนอื่น ยกตัวอย่างเช่น Intel มีลำดับชั้นของขอบเขตสำหรับเมล็ด raytracing ของพวกเขา เนื่องจากฉันทำงานในสาขานี้ฉันสามารถจดจำได้ว่าโค้ดของพวกเขาทำอะไรได้อย่างรวดเร็วโดยไม่ต้องเปลี่ยนผ่านเอกสาร แต่พวกเขาทำสิ่งที่ไม่ซ้ำกันซึ่งเป็นความคิดของ traversing BVH และการแสดงทางแยกในแบบคู่ขนานโดยใช้แพ็คเก็ตเรย์ นั่นคือสิ่งที่ฉันต้องการให้พวกเขาจัดลำดับความสำคัญเอกสารของพวกเขาเพราะส่วนเหล่านี้ของรหัสแปลกใหม่และผิดปกติจากการใช้งาน BVH ประวัติศาสตร์
การอ่าน
ส่วนนี้เป็นอัตนัยมาก ฉันไม่ได้สนใจอะไรมากเกี่ยวกับความสามารถในการอ่านของชนิดที่ใกล้เคียงกับกระบวนการคิดของมนุษย์ รหัสที่มีเอกสารที่ดีที่สุดที่อธิบายสิ่งต่าง ๆ ในระดับสูงสุดยังคงเป็นเรื่องยากสำหรับฉันที่จะติดตามหากผู้เขียนใช้กระบวนการคิดที่แปลกประหลาดและซับซ้อนซึ่งทำให้เข้าใจผิดในการแก้ปัญหา ในขณะเดียวกันโคลงสั้น ๆ ที่ใช้ชื่อตัวละคร 2 หรือ 3 ตัวมักจะเข้าใจง่ายขึ้นถ้าตรรกะตรงไปตรงมา ฉันเดาว่าคุณสามารถตรวจสอบและดูว่าคนอื่นชอบอะไร
ฉันส่วนใหญ่สนใจในการบำรุงรักษาและที่สำคัญยิ่งกว่าคือความมั่นคง รหัสที่พบว่าไม่มีเหตุผลในการเปลี่ยนแปลงคือสิ่งที่ไม่มีค่าบำรุงรักษา