คุณจัดการกับโค้ดที่ไม่ดีอย่างตั้งใจได้อย่างไร?


21

มีเรื่องราวมากมายเกี่ยวกับรหัสที่ไม่ดีโดยเจตนาไม่เพียง แต่ใน TheDailyWTF แต่ยังเกี่ยวกับ SO กรณีทั่วไปรวมถึง:

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

คะแนนเหล่านี้แสดงทัศนคติที่เป็นอันตรายไม่มากก็น้อย (แม้บางครั้งจะเกิดขึ้นโดยบังเอิญ) โดยเฉพาะอย่างยิ่งประเด็นแรกที่เกิดขึ้นค่อนข้างบ่อย

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


10
มันเป็น "บางครั้งโดยอุบัติเหตุ" หรือ "เลวโดยเจตนา" หรือไม่? ฉันไม่เห็นว่ามันจะเป็นไปได้อย่างไร

คำตอบ:


7

รหัสที่ไม่ดีส่วนใหญ่เกิดจากการขาดความเข้าใจและวิธีแก้ปัญหาคือการศึกษา

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

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

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


28

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


2
ตกลง ไม่มีใครเขียนรหัสไม่ดีโดยเจตนา พวกเขากำลังแก้ปัญหาและพวกเขากำลังแก้ไขในวิธีที่ดีที่สุดที่พวกเขารู้ พวกเขาอาจถูกเข้าใจผิดได้รับการศึกษาต่ำไม่รู้ ฯลฯ แต่ฉันไม่สามารถเข้าใจนักพัฒนาที่ตั้งใจเขียนสิ่งที่พวกเขารู้ว่าไม่ดี
Dan Ray

8
แม้ว่าจะไม่ถูกกฎหมายอย่างน้อยก็มีข้อผูกมัดทางจริยธรรม
Chris Farmer

@ChrisFarmer คุณไม่สามารถแยกข้อผูกพันทางจริยธรรมออกจากบริบทที่กว้างขึ้น - มีบริบทบางอย่างที่รหัสที่ไม่ดีแสดงถึงการต่อต้านกลุ่มโดยชอบด้วยกฎหมายไม่ว่าจะเป็นทางเศรษฐกิจหรือการเมือง (และสัญญาการจ้างงานเท่านั้นที่สมควรได้รับเกียรติโดยสุจริตเมื่อความสัมพันธ์ที่เป็นทางการไม่ได้เป็นการแสวงหาผลประโยชน์เป็นรายบุคคลหรือเชิงโครงสร้าง)
234461

11

ขึ้นอยู่กับวัฒนธรรมของ บริษัท บ่อยครั้งที่ไม่ใช่งานของคุณที่จะแก้ไขและทำความสะอาดโค้ดที่ไม่ดีทั้งหมด

จากCoders at Workความคิดของ Jamie Zawinski ในเรื่อง overengineering ซึ่งสามารถนำไปใช้ในสถานการณ์นี้:

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

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

ดูเพิ่มเติมที่โพสต์ของ Joel Spolsky: The Duct Tape Programmer


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

+1 ด้วย มีหลายวิธี "รหัสสะอาด" - หนังสือหลายเล่มออกไปข้างนอกที่รับรองมุมมองที่เบ้เกี่ยวกับสิ่งที่สำคัญ คุณภาพของรหัสเป็นสิ่งสำคัญมาก ผู้ชนะไม่ใช่ผู้ที่มีผลิตภัณฑ์ที่ดีที่สุด มันคือคนที่มีผลิตภัณฑ์ที่ดีพอส่งได้เร็วพอ
Joonas Pulakka

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

@Hila ฉันเชื่อว่าประเด็นของฉันยังคงอยู่หรือไม่ว่ารหัสที่ไม่ดีเป็นความตั้งใจหรือไม่ เว้นแต่จะเป็นปัญหาที่อยู่ในรายชื่อโครงการ / งานที่ได้รับมอบหมายก็ไม่ได้ความรับผิดชอบของโปรแกรมเมอร์ท่อเทปที่จะแก้ไขและทำความสะอาดรหัสที่ไม่ดีทั้งหมด วัฒนธรรมนอกนั้นไม่มีวิชาการและการเขียนโค้ดที่สะอาด / สวยงาม มันเกี่ยวกับการขนส่งและการสนับสนุนผลิตภัณฑ์ / ธุรกิจ โดยส่วนตัวฉันชอบที่จะแก้ไขรหัสที่ไม่ดีทั้งหมดที่ฉันเจอ แต่ฉันไม่สามารถอุทิศเวลา 100% ให้กับฉันได้ - ฉันจะไม่สามารถทำภารกิจ / โครงการที่มอบหมายให้ฉันได้
spong

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

4

ทัศนคตินั้นเป็นอาการของบางสิ่งที่แย่กว่านั้น

  • ฝ่ายบริหารสนับสนุนการแข่งขันของนักพัฒนาหรือไม่?

  • จิตวิญญาณของทีมอยู่ที่ไหน

  • มีการมอบหมายงานจากบุคคลอื่นนอกเหนือจากทีมหรือไม่

  • ...

ไม่ว่าในกรณีใดการลบรหัสที่กระทำผิดนั้นไม่เพียงพอ การบ่นกับผู้จัดการของเขาจะไม่ช่วยพัฒนาจิตวิญญาณของทีม

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

ในกรณีส่วนใหญ่พฤติกรรมเชิงสร้างสรรค์นั้นทำให้เกิดปัญหาจริง (ยิ่งแย่กว่านั้น) ภายใต้ความสว่างและจากนั้นคุณสามารถทำงานได้

ถ้ามันใช้ไม่ได้ผลจริงๆ ลบนักพัฒนานั้นออกจากทีม


4

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


2

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

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

อย่างไรก็ตามเนื่องจากเราไม่ทราบข้อเท็จจริงที่แท้จริงและคนที่เกี่ยวข้องจริง ๆ ไม่มีทางที่คนที่อยู่ในตำแหน่งที่คุณกำลังอธิบายควรให้ความสนใจมากกับคำแนะนำของเรา / 2 เซนต์ที่คุ้มค่า

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

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

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