“ Clean Code” มีการปฏิบัติจริง ๆ ที่สะอาดและมีประโยชน์หรือไม่? [ปิด]


11

ขณะนี้ฉันกำลังฝึกงานใน บริษัท ขนาดใหญ่และพวกเขาอยู่ระหว่างการเปลี่ยนแปลงโครงสร้างการส่งมอบซอฟต์แวร์จำนวนมาก (ย้ายไปที่เปรียว)

ในช่วงสองสามเดือนที่ผ่านมาฉันสังเกตเห็นความผูกพันทางศาสนานี้กับClean Codeการฝึกฝนและหนังสือเล่มนี้ เป็นเหมือนคัมภีร์ไบเบิลสำหรับนักพัฒนา

ตอนนี้หนึ่งในคุณสมบัติที่สำคัญที่สุดของรหัสสะอาดคือรหัสอธิบายตนเองซึ่งตั้งอยู่บนพื้นฐานของการตั้งชื่อที่เข้าใจได้และการแยกตัวประกอบอย่างเข้มงวด ตามด้วยno commentingกฎ

ฉันเข้าใจว่าโค้ดที่สะอาดนี้เป็นการลงทุนระยะยาวซึ่งจะช่วยให้การบำรุงรักษาและการปรับปรุงโค้ดง่ายขึ้น แต่ ... มันคุ้มค่าจริง ๆ ไหม

ทุกคนจะแบ่งปันประสบการณ์ของพวกเขาเกี่ยวกับรหัสสะอาดและความคิดเห็นใด ๆ ไม่ว่าฉันจะเป็นเพียงแค่หัวโบราณเกินไปหรือเป็นเพียงแนวโน้มชั่วคราว


1
คำถามที่ดีจำนวนมากสร้างความเห็นในระดับหนึ่งจากประสบการณ์ของผู้เชี่ยวชาญ แต่คำตอบสำหรับคำถามนี้มักจะอิงจากความคิดเห็นเกือบทั้งหมดมากกว่าข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญเฉพาะด้าน
ริ้น

4
ฉันไม่ได้มีความคิดเห็นที่สูงมากของหนังสือเล่มนั้น (แม้จะเป็นผู้แต่ง) โดยทั่วไปแล้วการจ่ายเงินจะต้องไม่ดื้อรั้นเกินไป คำแนะนำในการเขียนโปรแกรมส่วนใหญ่เป็นเพราะพวกเขาแสดงให้เห็นว่าทำงานจริง แต่พวกเขาไม่ใช่ความจริงที่สมบูรณ์ดังนั้นอย่ากังวลมากเกินไป อ่านต่อไปและไปกับสิ่งที่คุณรู้สึกว่าถูกต้องมากขึ้น โอกาสเป็นคนฉลาดกว่าที่เราได้หาทางออกที่ดีกว่าของเราแล้ว
DPM

2
วิธีการที่มีชื่อตัวละคร 70 อาจทำมากกว่าหนึ่งสิ่ง ฉันกำลังละเมิด SRP ใช่ไหม!
Tombatron

1
ต่อไปนี้เป็นความคิดอีก 5 หรือ 10 ปีนับจากนี้เมื่อคุณเป็นนักพัฒนาใน บริษัท ที่ไม่ใส่ใจเรื่องโค้ดสะอาดคุณจะประทับใจกับการออกกำลังกายแบบดื้อดึงนี้จริงๆ
Tombatron

3
หลังจากทำงาน (สั้น ๆ ) ภายใต้ "ไม่มีความคิดเห็น" ฉันชอบที่จะเป็นแนวทางที่ดีกว่ากฎ มีบางครั้งที่จำเป็นต้องมีการแสดงความคิดเห็น - มักอยู่ในตรรกะทางธุรกิจที่ไม่ชัดเจน วิธีการที่เรียกว่าCalculateFoonicityMetric()บอกคุณว่าสิ่งที่มันทำและรหัสดีเขียนจะแสดงวิธี ... แต่ไม่มีของเหล่านี้จะบอกคุณว่าทำไม รหัสสามารถเห็นได้ชัดในสิ่งที่ (คูณนี้โดยที่หารด้วยสิ่งอื่น ๆ สแควร์มันเพิ่มในบิตนี้ ... ) แต่ไม่ชัดเจนว่าทำไม (factor = a * b / c; สแควร์เพื่อบัญชีเชิงลบ foo ปรับ สำหรับดริฟท์ ... ) ฉันขอขอบคุณความคิดเห็นอย่างรวดเร็วที่อธิบายว่าทำไม
Anaximander

คำตอบ:


17

ฉันเข้าใจว่าโค้ดที่สะอาดนี้เป็นการลงทุนระยะยาวซึ่งจะช่วยให้การบำรุงรักษาและการปรับปรุงโค้ดง่ายขึ้น แต่ ... มันคุ้มค่าจริง ๆ ไหม

อย่างแน่นอน

การกู้แฟคตอริ่งใหม่นั้นสำคัญมาก แต่การใช้เวลา 75% ในการย้ายวิธีการและการใช้เวลาในการตัดสินใจเลือกชื่อที่เหมาะสมดูเหมือนจะไม่ได้ผล

แน่นอน แต่ให้พิจารณาว่า บริษัท ขนาดใหญ่อาจมีโค้ดไม่ดีเป็นปีหรือหลายทศวรรษในการทำความสะอาด มันต้องใช้เวลาและความพยายามมากในการทำเช่นนั้น

สิ่งสำคัญที่ต้องตระหนักคือคุณทั้งคู่ถูกต้อง "รหัสสะอาด" เป็นสิ่งสำคัญมากและรหัสสะอาดเป็นวิธีที่ได้รับการยอมรับอย่างกว้างขวางในการเดินทาง เนื่องจาก บริษัท เพิ่งเริ่มต้นตามเส้นทางพวกเขาจะได้รับการยกย่องในหนังสือมากกว่ากลุ่มที่มีประสบการณ์มากกว่า เมื่อพวกเขาทำมันสักพักหนึ่งพวกเขาจะเริ่มเรียนรู้ว่าอะไรที่ใช้ได้ผลและอะไรที่ไม่ดี เมื่อพวกเขาเข้าใจดีขึ้นพวกเขาจะ (ตามหวัง) ปฏิบัติตามแนวทางปฏิบัติและเป็นธรรมชาติที่รักษาโค้ดที่สะอาด แต่จะไม่นำไปสู่ชื่อฟังก์ชัน char 70 ชื่อ


4

ตอนแรกฉันเขียนความคิดเห็น ฉันจะพยายามให้คำตอบน้อยกว่ามุมมองที่จะต้องพิจารณา อย่างไรก็ตามฉันรับรองการปฏิบัติ "รหัสสะอาด" อย่างเช่นการตั้งชื่อที่เข้าใจได้และการปรับโครงสร้างใหม่

ฉันไม่ชอบกฎความคิดเห็นเสมอเนื่องจากมีบางกรณีที่ความคิดเห็นมีความจำเป็นเพื่อป้องกันการแตกหักของรหัสในอนาคต ปกติแล้วพวกเขาควรถูก จำกัด ในสิ่งที่กำลังทำอยู่และทำไม ใช้เท่าที่จำเป็นเมื่อโค้ดกำลังทำสิ่งที่ไม่คาดคิดหรือจำเป็นต้องเปลี่ยนอัลกอริทึม

พิจารณาประสิทธิภาพการทำงานเมื่อคุณอ่านหรือบำรุงรักษาโค้ด ในช่วงอายุของรหัสสิ่งนี้อาจมีความสำคัญมากกว่าประสิทธิภาพเมื่อเขียนรหัส การปฏิบัติเหล่านี้จะช่วยเพิ่มผลผลิตในงานเหล่านี้หรือไม่?

ด้วยประสบการณ์การปฏิบัติเหล่านี้ควรฝังแน่นและลดประสิทธิภาพการทำงานลง การเลือกชื่อที่ถูกต้องอาจใช้เวลานานขึ้นเนื่องจากคุณกำลังชี้แจงสิ่งที่รหัสต้องทำ (คำชี้แจงนี้อาจทำให้การเข้ารหัสและการดีบักเร็วขึ้น) ผลลัพธ์นี้เป็นโค้ดที่ทำเฉพาะสิ่งที่ต้องการหรือมีข้อบกพร่องน้อยลงหรือไม่ สิ่งนี้มีผลกระทบต่อผลผลิตหรือไม่

เวลาในการเลือกชื่อวิธีการที่เหมาะสมมีแนวโน้มที่จะจ่ายออกไปทันทีเพื่อให้เข้าใจได้ดีขึ้นว่าจุดประสงค์ของวิธีการคืออะไร เปรียบเทียบชื่อวิธี "iterateOverCustomers" กับ "locateActiveCustomers" อันไหนบ่งบอกถึงความตั้งใจของฟังก์ชั่น? อันไหนจะง่ายกว่า refactor ถ้าจำเป็น?


3
ฉันต้องการจะชี้ให้เห็นว่ากฎ "ไม่มีความคิดเห็น" ที่ผู้คนต้องการระบุถึงหนังสือ Clean Code นั้นไม่ได้มีอยู่จริงในหนังสือ ในทางตรงกันข้ามมีทั้งบทเกี่ยวกับความคิดเห็นในช่วงครึ่งแรกซึ่งใช้ในการอธิบาย "ความคิดเห็นที่ดี" หลายประเภทตามด้วยหัวข้อ "ความคิดเห็นที่ไม่ดี" ความคิดเห็นของผู้เขียนเกี่ยวกับเรื่องนี้มีความสมเหตุสมผลมากกว่าที่หลายคนให้เครดิตเขา
Eric King

ฉันแสดงความคิดเห็นกับกฎ "ไม่มีความคิดเห็น" โดยทั่วไป ฉันทำงานเป็นภาษาที่มีข้อเสนอให้ลบความคิดเห็นออกจากคำจำกัดความภาษา ไม่มีความคิดเห็นดีหรือไม่ดี ในขณะที่เรามีความคิดเห็นในบล็อกของรหัสที่เป็นที่พึงปรารถนาที่จะผ่านในบางกรณี มีคำเตือนแสดงความคิดเห็นว่าเป็นกรณีนี้และไม่ต้องเพิ่มบล็อกโค้ดใหม่ ณ จุดนั้น
BillThor

ใช่ที่ดูเหมือนจะสุดขีดสำหรับฉัน
Eric King
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.