a) C ++ 프로그래머 만이 예제의 기술적 장점을 판단 할 수 있습니다. b) 프로그래머 만이 이와 같은 코드를 작성하는 다른 프로그래머의 기질을 느낄 것입니다.
HR과 이사들은 단순히 현장에서 증거를 볼 수 있기 때문에 문제가 있음을 알고 있습니다. 우리가 문제의 프로그래머에게 더 많은 시간을 줄지 여부는 저의 전화입니다. 많은 오류는 매우 기본적인 수준에 있습니다. 프로그래머에게 내 질문은 수석 C ++ 개발자라고 공언하는 사람이 현재 코드 샘플을 기반으로 의심의 혜택을 받아야하는지 여부입니다. 프로그래머가 아닌 사람들, 심지어 C ++ 프로그래밍 외부의 사람들조차도 이것에 대해 판단 할 수 없습니다.
배경을 위해, 저는 잘 설립 된 회사의 개발자를 관리하는 임무를 맡았습니다. 그들은 모든 C ++ 코딩을 전문으로하는 단일 개발자를 가지고 있지만 (영원히) 작업의 품질은 끔찍합니다. 코드 검토 및 테스트 결과 메모리 누수 중 최악의 문제 중 하나 인 많은 문제가 밝혀졌습니다. 개발자는 자신의 코드에서 누수를 테스트 한 적이 없으며 애플리케이션을 1 분만 사용하면 많은 MB가 누수 될 수 있음을 발견했습니다. 사용자는 엄청난 속도 저하를보고했으며 "나와는 아무 상관이 없습니다. 종료했다가 다시 시작하면 다시 시작됩니다."
누수를 감지하고 추적 할 수있는 도구를 제공했으며 도구 사용 방법, 문제 발생 위치 및 해결 방법을 시연하기 위해 몇 시간 동안 그와 함께 앉았습니다. 6 개월이 지났고 새 모듈을 작성하도록 지명했습니다. 더 큰 코드베이스에 통합되기 전에 검토했으며 이전과 동일한 나쁜 코딩을 발견하지 못했습니다. 이해할 수없는 부분은 코딩의 일부가 아마추어보다 나쁘다는 것입니다. 예를 들어, 그는 다른 클래스 (Bar)의 객체를 채울 수있는 클래스 (Foo)를 원했습니다. 그는 Foo가 Bar에 대한 참조를 보유하기로 결정했습니다.
class Foo {
public:
Foo(Bar& bar) : m_bar(bar) {}
private:
Bar& m_bar;
};
그러나 (다른 이유로) 그는 Foo의 기본 생성자가 필요했으며 초기 디자인에 의문을 제기하지 않고이 보석을 썼습니다.
Foo::Foo() : m_bar(*(new Bar)) {}
따라서 기본 생성자가 호출 될 때마다 Bar가 누출됩니다. 설상가상으로 Foo는 2 개의 다른 객체에 대해 힙에서 메모리를 할당하지만 소멸자 또는 복사 생성자를 작성하지 않았습니다. 따라서 Foo의 모든 할당은 실제로 3 개의 서로 다른 객체를 유출하므로 Foo를 복사 할 때 무슨 일이 있었는지 상상할 수 있습니다. 그리고 그것은 더 나아졌습니다-그는 다른 세 클래스에서 같은 패턴을 반복했기 때문에 일회성 슬립이 아닙니다. 전체 개념은 여러 수준에서 잘못되었습니다.
이것이 완전한 초보자로부터 온다면 더 많은 이해를 느낄 것입니다. 그러나이 사람은 몇 년 동안이 일을 해왔으며 지난 몇 달 동안 훈련과 조언에 매우 중점을 두었습니다. 나는 그가 대부분의 시간 동안 멘토링이나 동료 리뷰없이 일하고 있다는 것을 알고 있지만, 그가 바꿀 수 없다고 느끼기 시작했습니다. 그래서 내 질문은, 당신은 분명히 나쁜 코드를 작성하는 사람과 함께 할 것입니까?