ฉันวางคำถามนี้ให้โปรแกรมเมอร์ C ++ เพราะ: ก) โปรแกรมเมอร์ C ++ เท่านั้นที่สามารถตัดสินข้อดีทางเทคนิคของตัวอย่าง; b) มีเพียงโปรแกรมเมอร์เท่านั้นที่จะรู้สึกถึงอารมณ์ของโปรแกรมเมอร์คนอื่นที่เขียนโค้ดแบบนี้
ฝ่ายทรัพยากรบุคคลและกรรมการตระหนักว่ามีปัญหาเพียงเพราะพวกเขาเห็นหลักฐานในสนาม มันเป็นการโทรของฉันไม่ว่าเราจะให้โปรแกรมเมอร์มีเวลามากกว่านี้หรือไม่ ข้อผิดพลาดหลายอย่างอยู่ในระดับพื้นฐานมาก - คำถามของฉัน (สำหรับโปรแกรมเมอร์) คือว่าคนที่ยอมรับว่าเป็นนักพัฒนา C ++ อาวุโสควรได้รับประโยชน์จากข้อสงสัยจากตัวอย่างของรหัสปัจจุบันหรือไม่ ผู้ที่ไม่ใช่โปรแกรมเมอร์ - แม้แต่คนที่อยู่นอกการเขียนโปรแกรม C ++ - ไม่สามารถตัดสินใจเรื่องนี้ได้
สำหรับพื้นหลังฉันได้รับมอบหมายงานบริหารนักพัฒนาให้กับ บริษัท ที่มีชื่อเสียง พวกเขามีนักพัฒนาเดียวที่มีความเชี่ยวชาญในการเข้ารหัส C ++ ทั้งหมดของพวกเขา (ตั้งแต่ตลอดไป) แต่คุณภาพของงานเป็นสุดซึ้ง การตรวจสอบรหัสและการทดสอบพบว่ามีปัญหามากมายหนึ่งในปัญหาที่แย่ที่สุดคือความจำรั่ว นักพัฒนาซอฟต์แวร์ไม่เคยทดสอบโค้ดของเขาว่ามีรอยรั่วและฉันค้นพบว่าแอปพลิเคชันอาจรั่วไหลไปหลาย MB ด้วยการใช้งานเพียงไม่กี่นาที ผู้ใช้รายงานการชะลอตัวครั้งใหญ่และสิ่งที่เขาทำก็คือ "มันไม่เกี่ยวอะไรกับฉัน - ถ้าพวกเขาเลิกและเริ่มใหม่มันก็ดีอีกครั้ง"
ฉันได้ให้เครื่องมือแก่เขาในการตรวจจับและติดตามรอยรั่วและนั่งลงกับเขาเป็นเวลาหลายชั่วโมงเพื่อแสดงให้เห็นว่ามีการใช้เครื่องมืออย่างไรเมื่อเกิดปัญหาขึ้นและจะแก้ไขอย่างไร เราใช้เวลาประมาณ 6 เดือนในการติดตามและฉันมอบหมายให้เขาเขียนโมดูลใหม่ ฉันตรวจสอบก่อนที่จะถูกรวมเข้ากับฐานรหัสที่มีขนาดใหญ่ขึ้นของเราและผิดหวังที่ค้นพบการเข้ารหัสที่ไม่ดีเหมือนเดิม ส่วนที่ฉันเข้าใจยากคือการเข้ารหัสบางอย่างแย่กว่าความชำนาญ ตัวอย่างเช่นเขาต้องการคลาส (Foo) ที่สามารถเติมวัตถุของคลาสอื่น (บาร์) เขาตัดสินใจว่าฟูจะถือการอ้างอิงไปยังบาร์เช่น:
class Foo {
public:
Foo(Bar& bar) : m_bar(bar) {}
private:
Bar& m_bar;
};
แต่ (ด้วยเหตุผลอื่น ๆ ) เขาต้องการตัวสร้างปริยายสำหรับฟูและแทนที่จะถามคำถามการออกแบบเริ่มต้นของเขาเขาเขียนอัญมณีนี้:
Foo::Foo() : m_bar(*(new Bar)) {}
ดังนั้นทุกครั้งที่มีการเรียกใช้ตัวสร้างค่าเริ่มต้นแถบจะรั่วไหล เพื่อให้เรื่องแย่ลงฟูจัดสรรความทรงจำจากฮีปให้กับวัตถุอื่น 2 ตัว แต่เขาไม่ได้เขียนตัวทำลายหรือตัวสร้างสำเนา ดังนั้นการจัดสรร Foo ทุกครั้งจะรั่วไหลวัตถุ 3 ชนิดที่แตกต่างกันและคุณสามารถจินตนาการได้ว่าเกิดอะไรขึ้นเมื่อคัดลอก Foo และ - มันจะดีขึ้นเท่านั้น - เขาซ้ำแบบเดียวกันกับคลาสอื่นอีกสามคลาสดังนั้นมันจึงไม่ใช่สลิปครั้งเดียว แนวคิดทั้งหมดผิดในหลายระดับ
ฉันจะรู้สึกเข้าใจมากกว่านี้ถ้ามันมาจากสามเณร แต่ผู้ชายคนนี้ได้ทำสิ่งนี้มาหลายปีแล้วและได้รับการฝึกฝนและให้คำแนะนำในช่วงไม่กี่เดือนที่ผ่านมา ฉันรู้ว่าเขาได้ทำงานโดยไม่ต้องคอยให้คำปรึกษาหรือวิจารณ์เพื่อนร่วมงานส่วนใหญ่ แต่ฉันเริ่มรู้สึกว่าเขาไม่สามารถเปลี่ยนแปลงได้ ดังนั้นคำถามของฉันคือคุณจะยังคงอยู่กับคนที่เขียนโค้ดที่ไม่ดีอย่างเห็นได้ชัดหรือไม่?