คุณเขียน 'clean code' หรือไม่ [ปิด]


54

ฉันได้เห็นโปรแกรมเมอร์บางคน tweaking รหัสของพวกเขาซ้ำแล้วซ้ำอีกไม่เพียง แต่จะทำให้มัน 'ทำงานได้ดี' แต่ยังทำให้มันดูดี '

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

ดังนั้นจำนวนของคุณเขียน 'รหัสสะอาด' จริง ๆ ? เป็นการปฏิบัติที่ดีหรือไม่? ประโยชน์หรือข้อเสียอื่น ๆ ของสิ่งนี้คืออะไร


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

เหนือสิ่งอื่นใด - เหนือความสามารถในการอ่าน, ความงาม, ของแข็ง, อย่างอื่น - ฉันพบว่ามีประโยชน์ในการจัดลำดับความน่าเชื่อถือและ "ความมั่นคง" (คุณภาพของการเปลี่ยนแปลงในหนังสือของฉันและยิ่งขาดความต้องการหรือปรารถนาที่จะเปลี่ยนแปลง ต่อไป) สิ่งที่น่าเชื่อถือและมั่นคงคือสิ่งที่ทำให้ฉันผ่านกาลเวลาและบางครั้งพวกเขาก็ไม่ได้ทำความสะอาดหนังสือของหลาย ๆ คน (บางรหัสที่ฉันใช้ซ้ำมากที่สุดคือรหัส C ย้อนหลังไปถึงช่วงปลายยุค 80 และต้นยุค 90) ซึ่งใช้สิ่งต่าง ๆ เช่นการแฮ็กบิตที่เล่นซอซึ่งแทบไม่มีใครเข้าใจอีกต่อไป - ยังทำงานได้อย่างน่าเชื่อถือ)

คำตอบ:


52

ฉันจะยืนยันว่าพวกเราหลายคนไม่ได้เขียนรหัสสะอาด และโดยทั่วไปที่ไม่ได้เป็นงานของเรา งานของเราในฐานะนักพัฒนาซอฟต์แวร์คือการส่งมอบผลิตภัณฑ์ที่ตรงต่อเวลา

ผมนึกถึงบล็อกโพสต์ของโจ Spolsky: ท่อเทปโปรแกรมเมอร์

เขาพูดจากCoders ที่ทำงาน :

ในตอนท้ายของวันส่งสิ่ง f ***** g! เป็นเรื่องดีมากที่จะเขียนโค้ดของคุณใหม่อีกครั้งและทำให้มันดีขึ้นและในครั้งที่สามมันจะสวยมาก แต่นั่นไม่ใช่ประเด็น - คุณไม่ได้อยู่ที่นี่เพื่อเขียนโค้ด คุณมาที่นี่เพื่อจัดส่งผลิตภัณฑ์ - เจมี่ซาวินสกี้

ฉันยังนึกถึงการตอบสนองบล็อกของRobert Martin :

ดังนั้น. ฉลาด. ทำความสะอาด เรียบง่าย เรือ! และเก็บเทปพันท่อที่พร้อมและอย่ากลัวที่จะใช้ - ลุงบ๊อบ

หากรหัสนักพัฒนาเขียนว่าเป็นงานที่สะอาดและทำงาน (ส่งมอบ) ดังนั้นไม่ว่าจะเป็นสิ่งที่ดีสำหรับทุกคน แต่ถ้านักพัฒนาพยายามแก้ไขโค้ดที่สะอาดและอ่านได้โดยเสียค่าใช้จ่ายในการส่งมอบทันเวลาแสดงว่าไม่ดี ทำให้ใช้งานได้ใช้เทปพันสายไฟและส่งต่อ คุณสามารถ refactor ได้ในภายหลังและทำให้มันสุดยอดและมีประสิทธิภาพ

ใช่เป็นวิธีปฏิบัติที่ดีในการเขียนโค้ดที่สะอาด แต่ไม่มีค่าใช้จ่ายในการส่งมอบ ประโยชน์ของการส่งมอบผลิตภัณฑ์ที่มีเทปกาวตรงเวลานั้นมีมากกว่าข้อดีของโค้ดที่สะอาดซึ่งไม่เคยเสร็จสิ้นและส่งมอบ

อันดีของรหัสที่ฉันเจอไม่สะอาด บางคนก็น่าเกลียดอย่างจริงจัง แต่พวกเขาทั้งหมดได้รับการปล่อยตัวและใช้ในการผลิต บางคนอาจบอกว่ามันไม่เป็นมืออาชีพในการเขียนรหัสยุ่ง ๆ ฉันไม่เห็นด้วย. สิ่งที่เป็นมืออาชีพคือการส่งมอบรหัสที่ใช้งานได้ไม่ว่าจะสะอาดหรือยุ่ง นักพัฒนาจะต้องทำอย่างดีที่สุดเขา / เธอสามารถกำหนดเวลาใด ๆ ที่ได้รับการจัดสรรก่อนส่งมอบ จากนั้นกลับไปทำความสะอาด - นั่นเป็นอาชีพ หวังว่ารหัสที่ส่งมาไม่ใช่เทปพันท่อที่บริสุทธิ์และ 'สะอาดพอ'


44
ตราบใดที่หนี้ทางเทคนิคของคุณ ( en.wikipedia.org/wiki/Technical_debt ) ไม่นำคุณไปสู่ ​​"การล้มละลายทางเทคนิค" (ไม่สามารถส่งมอบคุณสมบัติใหม่การแก้ไขส่วนหนึ่งที่แตกต่างกัน ฯลฯ ... ) และให้คุณดู เมื่อฉันเห็นด้วย
Matthieu

3
@HeathLilley เห็นด้วย ฉันไม่เชื่อนักพัฒนาที่บอกว่าควรเขียนโค้ดที่สะอาดเท่านั้น นั่นเป็นของปลอม รหัสยุ่งเกิดขึ้น แนวคิดที่ว่าผู้พัฒนาควรเขียนโค้ดที่สะอาดและถูกต้องตั้งแต่ต้นเป็นภาพลวงตา ฉันส่งเสริมความคิดที่ว่าเราจะทบทวนและปรับโครงสร้างใหม่ทุกครั้งเมื่อความเข้าใจในโดเมนของเราดีขึ้น
spong

40
ปัญหาของ "เพียงแค่ส่งสิ่งที่เป็นร่วมเพศตอนนี้" คือการจัดการที่จะไม่ซื้อเหตุผลของคุณสำหรับการ refactoring ในภายหลัง แต่ถ้าคุณทำอย่างล่องหนตอนนี้มันจะดีทั้งหมด
งาน

5
อีกภาพลวงตาคือการคิดว่าคุณจะมีเวลาทำความสะอาดในภายหลัง นั่นจะไม่เกิดขึ้น คุณจะมีสิ่งอื่นที่จะจัดส่ง คุณไม่ควรส่งรหัสที่ยุ่งเหยิง และโดยวิธีการที่คุณควรจะทำงานในกำหนดเวลาเช่นกันคุณเป็นคนที่มีเทคโนโลยีที่รู้ว่าต้องใช้เวลานานเท่าไหร่ในการเขียนโค้ดที่สะอาด นั่นไม่ได้หมายถึงการทำความสะอาดและการซ่อมแซมเป็นเวลานานนั่นหมายถึงเวลาที่จะทำการรีแฟคเตอร์ก่อนที่คุณจะส่งรหัส
Steve Chamaillard

3
"คุณสามารถ refactor ภายหลัง"
Carl Leth

39

คุณต้องแน่ใจว่ารหัสของคุณนั้นสามารถอ่านได้สะอาดและบำรุงรักษาได้ดี นั่นคือสิ่งที่โปรแกรมเมอร์ทุกคนต้องทำ

แต่คุณกำลังพูดถึงover styling(เช่นคำที่ดีกว่าที่รหัสเด็กผู้หญิง ) ซึ่งทำหน้าที่อะไร แต่อัตตาของผู้เขียน

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

มันมากเกินไป

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


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

14
รหัสที่สง่างามนั้นสามารถบำรุงรักษาได้มากกว่าและอ่านง่ายกว่าที่ฉันคิด
Craige

6
+1, ฉันเคยเห็นรหัส SPAGHETTI สไตล์ที่สมบูรณ์แบบในอดีต
Jas

23
ฉันเห็นด้วยกับความรู้สึก แต่ฉันจะเขียนรหัสของฉันด้วยจำนวนช่องว่างที่ถูกต้องระหว่างสมาชิกและฉันกำลังหงุดหงิดโดยคนที่ไม่ มันเป็นเรื่องง่ายที่จะทำ (ทำง่ายยิ่งขึ้นด้วยเครื่องมืออัตโนมัติเช่น StyleCop) และความสอดคล้องที่มันมีอยู่นั้นคุ้มค่ากับความพยายามเพียงเล็กน้อย
Robert Harvey

3
@sunpech: เขียนให้สะอาดและทำความสะอาดได้ง่ายกว่ามาก
David Thornley

23

ฉันไม่เห็นด้วยกับคำตอบที่ยอมรับในคำถามนี้

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

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

ฉันรู้ว่ามีสถิติลอยอยู่รอบ ๆ เกี่ยวกับเรื่องนี้ แต่จากประสบการณ์ของฉันในหลาย ๆ โครงการแต่ละบรรทัดของโค้ดที่เขียนจะถูกอ่าน 5-20 ครั้งในระหว่างการขยายและบำรุงรักษา

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


2
ไม่คุณต้องล้างข้อมูลรหัสของคุณเมื่อถึงเวลาและงบประมาณและความเสี่ยงในการทำเช่นนั้นจะน้อยกว่าความเสี่ยงที่จะไม่ทำเช่นนั้น ในสภาพแวดล้อมการผลิตซึ่งหมายความว่าบ่อยครั้งที่คุณจะไม่ขัดรหัสที่มีอยู่ให้สวยขึ้นมันไม่คุ้มค่า แต่จะทำให้เกิดความเสี่ยงในการแนะนำบั๊กใหม่
jwenting

สิ่งนี้ยังขึ้นอยู่กับมุมของการพัฒนาซอฟต์แวร์ที่คุณทำงานด้วยฉันเคยทำงานให้กับ บริษัท Digital Marketing ที่มีความสุขมากกว่าที่จะส่งค่าใช้จ่ายไปยังลูกค้าของพวกเขาหากขั้นตอนต่อไปต้องใช้เวลานานกว่าเนื่องจากปัญหาพื้นฐานของรหัส การผลักดันของเราให้มากขึ้นในช่วงเวลาที่ dev เพื่อแก้ไขปัญหาที่มีอยู่ถูกส่งไปเพื่อสนับสนุนเวลา dev ที่เพิ่มขึ้นซึ่งเท่ากับเงินที่มากขึ้นสำหรับธุรกิจ
Simon Whitehead

1
ฉันเห็นด้วยกับที่คุณควรส่งรหัส แต่ถ้าคุณไม่สามารถแก้ไข / อัปเดต / อัพเกรดสิ่งที่คุณส่งไม่ใช่รหัส แต่เป็นรูเงิน ฉันพบว่าคนที่ต่อสู้กับความคิดนั้นใช้ในการทำงานในสภาพแวดล้อมที่ไม่ดีและโต้แย้งระบบที่พวกเขาไม่เคยมีประสบการณ์มาก่อน ฉันได้ทำการบำรุงรักษาโค้ดที่สะอาดและไม่สะอาดและจะบอกคุณว่าโค้ดสะอาดนั้นราคาถูกกว่าและเร็วกว่าในการดูแลและพัฒนา
Jdahern

21

พวกเราคนใดจะซื้อรถถ้าเรารู้ว่าภายใต้ประทุนนั้นทั้งหมดยุ่งและยากที่จะแก้ไขบำรุงรักษาหรือแก้ไขและต้องใช้ทรัพยากรมากขึ้นในการทำงานมากกว่าที่ควร?

เหตุใดจึงควรแตกต่างจากซอฟต์แวร์ชิ้นหนึ่ง

เพียงเพราะผู้ใช้ไม่สามารถดูภายใต้ประทุนได้ไม่ได้หมายความว่าพวกเขาจะไม่รู้เลย ไม่ช้าก็เร็วมันจะปรากฏขึ้น

ตอบคำถาม "คุณเขียน 'clean code' จริง ๆ หรือไม่" -- โอ้ใช่.!


ฉันไม่เห็นด้วย - ซอฟต์แวร์ไม่เป็นสนิม (เหมือนที่ Joel ใส่ไว้) ซึ่งแตกต่างจากด้านในของรถ คุณอาจยืนยันว่าเมื่อมีการอัพเกรดระบบปฏิบัติการซอฟต์แวร์ต้องอัพเกรดด้วย แต่นั่นเป็นสิ่งที่แตกต่าง นอกจากนี้ผมทำเขียนรหัสสะอาด แต่ฉันไม่คิดว่ามันเป็นลักษณะที่สำคัญที่สุดของการมีส่วนร่วมของฉัน
K.Steff

18

ถ้าด้วย 'รหัสที่สะอาด' คุณหมายถึงฉันจะออกนอกเส้นทางเพื่อให้แน่ใจว่ารหัสนั้นชัดเจนที่สุดหรือไม่

เฮ้ใช่

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


15

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

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

บางครั้งฉันรู้สึกผิดเล็กน้อย แต่ไม่มาก คุณควรเห็นความน่ากลัวบางอย่างที่ฉันจัดการในชีวิตประจำวัน ทศวรรษของรหัสที่กำหนดเองในภาษาที่ไม่ชัดเจนด้วยเอกสารศูนย์ เพื่อนร่วมงานคนหนึ่งของฉันพัฒนาขึ้นโดยเฉพาะใน Visual Basic 6.0 และปรับใช้ไบนารีที่มีชื่อเข้ารหัสทุกที่ ผู้หญิงคนนั้นฉันแทนที่โปรแกรมเฉพาะในเกม RPG

เป็นเรื่องยากมากสำหรับฉันที่จะเชื่อว่าอึที่น่ากลัวที่สุดเท่าที่ฉันเคยเห็นในช่วงหลายปีที่ผ่านมาในฐานะโปรแกรมเมอร์ซึ่งทุกคนสร้างโค้ดที่สะอาด


ตกลง คนส่วนใหญ่จะไม่เขียนโค้ดสะอาดเพื่อจัดส่ง / ปล่อยครั้งแรก มีเทปพันท่อที่เกี่ยวข้องเพื่อให้งานเสร็จ
spong

2
พอกับเทปพันท่อ! Spolsky ไม่ใช่พระเจ้า เขาวางกางเกงของเขาในขาเดียวในเวลาเหมือนที่เราทำ!
งาน

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

1
@ ปีเตอร์: และในสองทศวรรษที่ผ่านมาฉันไม่เคยเห็นสถานที่ที่โค้ดทุกชิ้นสะอาด ฉันไม่ค่อยเห็นสถานที่ที่ครึ่งหนึ่งอยู่ คุณทำงานที่ไหน? นาซ่า?
Satanicpuppy

2
@Satanicpuppy ฉันได้เห็นรหัสสกปรกจำนวนมากในเวลาของฉันและฉันได้เขียนส่วนแบ่งของฉัน แต่เกือบทั้งหมดมันเสียเวลาของฉันหรือคนอื่น ฉันยืนยันว่ารหัสสะอาดสามารถเขียนได้เร็วกว่ารหัสสกปรกในทุกช่วงเวลานานกว่าสองสามชั่วโมง
PeterAllenWebb

7

ฉันไม่คิดว่าฉันชอบคำว่า "รหัสเด็กผู้หญิง" แต่รหัสสะอาด = รหัสที่บำรุงรักษาได้ สิ่งที่น้อยกว่าคือไม่เป็นมืออาชีพ

ตามกฎทั่วไปฉันพิจารณานักพัฒนาคนต่อไปที่ต้องมองดูความยุ่งเหยิงของฉัน

หลายครั้งที่มันเป็นฉัน ... หลายเดือนต่อมา ... เมื่อฉันจำไม่ได้ว่ามันทำงานอย่างไรและฉันมีเวลาน้อยลงในการเปลี่ยนแปลง


5

ฉันพยายามเขียน "clean code" ในความหมายของ Bob Martin (เช่นการออกแบบ OO) มีค่ามากในการเขียนโค้ดที่สะอาด มันสามารถบำรุงรักษาได้มากขึ้น

จากนั้นฉันก็ปล่อยให้ ReSharper สร้าง "โค้ดสวย" ให้ฉัน (เช่นการจัดเรียงตัวแบ่งบรรทัด ฯลฯ ) มีความคุ้มค่าในการเขียนโค้ดสวย แต่มีผลตอบแทนลดลง การตั้งค่าบางอย่างทำให้สามารถดูแลรักษาได้ง่ายขึ้นเนื่องจากความสะดวกในการอ่าน

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

หากฉันไม่มี ReSharper ฉันจะยังคงมีโค้ดที่สะอาด แต่มันก็ไม่สวยเท่าไหร่

ฉันไม่คิดว่าฉันควรใช้เวลาในการเขียนโค้ดมากกว่า 5% ซึ่งหมายความว่าตัวแก้ไขของฉันมีประสิทธิภาพยิ่งขึ้นและยิ่งฉันมีความเชี่ยวชาญมากเท่านั้นฉันก็ยิ่งมีความน่าสนใจมากขึ้นเท่านั้น


4

ดูเหมือนว่าไม่มีใครยกประเด็นของสิ่งที่เป็นประโยชน์สูงสุดของ บริษัท ของคุณ?

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

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

อีกตัวอย่างหนึ่ง - บริษัท อยู่ในสถานะทางการเงินที่ไม่ดีและต้องการระดมเงิน เดาว่าใครสนใจคุณภาพ คุณสามารถแก้ไขได้ในภายหลังหากคุณต้องการเพียงแค่ส่งมัน!

อาร์กิวเมนต์อาจเป็น "ทำไมฉันจึงควรขายออกและเขียนรหัสเส็งเคร็ง?" ทำไม บริษัท ของคุณถึงจ่ายเช็คให้คุณเป็นประจำทุกเดือนล่ะ? ทางเลือกเพื่อนของฉัน หากคุณหลังจากอุดมคติลองมูลนิธิซอฟต์แวร์เสรี ; ฉันได้ยินมาว่าพวกเขากำลังทำสิ่งที่เจ๋ง ๆ (ฉันหมายถึงอันนี้และฉันเคารพ FSF และ OSS)

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

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

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


3

ฉันไม่แน่ใจว่า "ดูดี" และเป็น "สง่างามเข้าใจและบำรุงรักษาได้อย่างสมบูรณ์" เทียบเท่า

ฉันพยายามเขียนโค้ดนั่นคือ "สง่างามเข้าใจและบำรุงรักษาได้อย่างสมบูรณ์" ฉันปรับโครงสร้างรหัสของฉันเองเพื่อให้ตรงกับเกณฑ์เหล่านั้นดีขึ้น

ฉันไม่เห็นข้อเสียใด ๆ ยกเว้นค่าใช้จ่ายที่เกิดขึ้นตามเวลา

สำหรับรหัสที่ "ดูดี" มีเครื่องมืออัตโนมัติมากมายที่จะเยื้องและจัดวางทุกอย่างตามที่คุณต้องการ


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

3

สิ่งที่มากเกินไปไม่เคยดีเลย

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

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


3

นี่เป็นคำพูดจาก Clean Code โดย Bob Martin:

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

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


2

ฉันคิดว่า "รหัสสะอาด" ควรสะอาดหรือสะอาดกว่าที่คุณเคยเขียนลงในการสอบวิชาฟิสิกส์ / วิศวกรรม / คณิตศาสตร์ ถ้ามันยุ่งเกินไปนักเรียนจะไม่เข้าใจงานของคุณและอาจทำเครื่องหมายผิดแม้ว่ามันจะถูก


2

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

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

void function1(){
    //whatever code
}
int fooBar(){
    //whatever else
}
Foo* someOtherFooBar(int value){
    if(value){
        //do something
    }
    return ...;
}

เอ่อ ... มันดูแย่กว่านี้ด้วยวิธี Objective-C และมีหลาย ๆ อย่างซ้อนกันถ้าข้อความสั่งและบรรทัดยาวกว่า 80 อักขระ แต่มันก็ทำให้ฉันรำคาญ :)


2

ฉันจะไปยาวมากในการทำความสะอาดรหัส ฉันคิดว่ามันช่วยให้แมลงโดดเด่นมาก

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

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

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

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

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

นี่เป็นโค้ดที่แสดงให้เห็นถึงสไตล์การเขียนโค้ดของฉัน


1

เพียงหลีกเลี่ยง "รหัสมาน" มีนักพัฒนามากมายที่ทำสิ่งต่าง ๆ อย่างหมดจดไร้สาระ (หรือเนื่องจาก OCD) และไม่มีอะไรอื่นอีก กางเกงในของฉันถูกคนเหล่านั้นบิดเบี้ยวจริงๆ


เหมือนความคิดเห็นของกล่องปีกหรือ (แย่กว่า) พูดได้ไหม
David Thornley

1

ฉันเขียนโค้ดที่พยายามที่จะแก้ปัญหาที่เกิดขึ้นด้วยวิธีที่มีประสิทธิภาพและในทางทฤษฎี 'สง่างาม' ในแง่นั้นมันสะอาดเท่านั้น ถ้ามันเป็น 'สวย' เมื่อฉันทำเสร็จแล้ว

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


1

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

รหัสสะอาดดี แต่ก็เหมือนทุกอย่างมันแค่ต้องสะอาดพอ การย่อหน้า 5 บรรทัดของโค้ด 4 ช่องว่างและเว้นวรรคหนึ่งบรรทัด 5 จะไม่เพิ่มความยากในการอ่าน


1

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

ฉันคิดว่าการจัดแต่งทรงโค้ดของคุณนั้นยุ่งยากเล็กน้อย ดังที่ได้กล่าวไว้ข้างต้นงานของคุณคือการสร้างผลิตภัณฑ์ไม่ใช่โค้ดที่จัดรูปแบบ แต่ฉันจะบอกว่าอย่างน้อยที่สุดควรติดอยู่กับสไตล์ที่กำหนดไว้ในการแสดงความคิดเห็นและการเข้ารหัสสิ่งต่างๆ ฉันเกลียดที่จะเห็นตัวแปรครึ่งตัวอูฐใส่ลงไปและอีกครึ่งหนึ่งเป็นชาวฮังการี

แต่ยังขึ้นอยู่กับสิ่งที่คุณหมายถึงโดย 'โค้ดสะอาด'


0

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


0

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

int foo    = 1;
int bar    = 2;
int foobar = 3;

อ่านง่ายกว่า

int foo = 1;
int bar = 2;
int foobar = 3;

ซึ่งหมายความว่าจะง่ายกว่าเมื่อคุณทำการดีบั๊กในภายหลัง

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

// do x
{
    // ...
}

// do y
{
    // ...
}

นี่เป็นการเพิ่มนิยามที่ชัดเจนให้กับรหัสที่เกี่ยวข้อง

แก้ไข : ในฐานะโบนัสที่เพิ่มเข้ามาคุณสามารถนำหน้ารหัสบล็อกแบบลอจิคัลเหล่านั้นได้อย่างง่ายดายด้วยif (false)หากคุณต้องการข้ามมันชั่วคราว


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

1
@ stargazer712: ฉันเกลียดฟังก์ชั่นของ php เนื่องจากไม่มี namespaces ที่กำหนดไว้ อย่างหลีกเลี่ยงไม่ได้อ่านรหัสคนอื่นพวกเขามีหนึ่ง "รวม" ที่ด้านบนซึ่งตัวเองรวมถึง 5 สิ่งอื่น ๆ ซึ่งแต่ละคนรวมถึง 4 อีกแล้วฉันต้องทำการค้นหาบนฐานรหัสทั้งหมดเพื่อค้นหานิยามฟังก์ชั่น น่าผิดหวังมาก
Satanicpuppy

บ่อยครั้งที่นี่คือรหัสที่ไม่รับประกันการประกาศฟังก์ชั่น เช่น. ไม่มีความเป็นไปได้ในการนำกลับมาใช้ใหม่การคำนวณ / การตั้งค่าของตัวแปรที่กำหนดขอบเขตในท้องถิ่นและอื่น ๆ
Craige

ในทางกลับกันโค้ดที่ไม่มีความเป็นไปได้ในการนำกลับมาใช้ซ้ำนั้นหายาก หากคุณพบว่าคุณเขียนโค้ดจำนวนมากที่ไม่สามารถนำกลับมาใช้ใหม่ได้มีความเป็นไปได้ที่จะปรับปรุงได้ ... อย่างมาก
riwalk

-2

ฉันเพิ่งเขียนรหัสตามมาตรฐาน บริษัท ถ้าฉันต้องการมัน "prettied" ฉันสามารถเรียกใช้ผ่านรหัส beautifier


2
ยกเว้นสิ่งที่เกิดขึ้นโดยทั่วไปคือมีคนอื่นวิ่งผ่านมันไปด้วยตัวเสริมความงามที่พยายามทำความสะอาดสิ่งที่คุณไม่ได้ทำความสะอาด
riwalk

@ Stargazer712 ซึ่งเป็นเหตุผลว่าทำไมฉันไม่รำคาญมากไปกว่ามาตรฐาน บริษัท
Muad'Dib

@ Maud'Dib ปัญหาก็คือผลลัพธ์จะออกมาดีเท่าความงาม ในขณะที่ช่องว่างในแนวนอนนั้นเกี่ยวกับขอบเขตทั้งหมด (และทำความสะอาดได้ดีมาก) ช่องว่างในแนวตั้งนั้นมักเกี่ยวกับความตั้งใจ (จัดกลุ่มสิ่งที่เกี่ยวข้อง) และทำความสะอาดได้ไม่ดีนัก บรรทัดล่าง - มีความเมตตาต่อนักพัฒนาเพื่อนของคุณ
riwalk

@ Stargazer712 ปัญหาคือยกเว้น "มาตรฐาน บริษัท " ทุกอย่างอื่นเป็นเรื่องของรสนิยมซึ่งเป็นเรื่องส่วนตัว ตัวอย่างเช่นฉันต้องการวางช่องว่างในสถานที่ที่เพื่อนร่วมงานของฉันเกลียดพวกเขาในเชิงบวก ฉันทำให้มันดูดีสำหรับฉันและนั่นก็เท่าที่ฉันไป
Muad'Dib

1
ระวังด้วย "beautifiers" เพราะพวกเขาสามารถทำให้การรวมตัวกันเป็นครั้งใหญ่ (ฉันได้รับประสบการณ์มือแรก :))
Juha Untinen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.