의도적으로 잘못된 코드를 어떻게 처리합니까?


21

TheDailyWTF뿐만 아니라 SO에도 의도적으로 잘못된 코드에 대한 많은 이야기가 있습니다. 일반적인 경우는 다음과 같습니다.

  • 쓸모없는 시간 낭비 구조 (예를 들어, 빈 루프는 큰 값으로 계산)를 갖기 때문에 프로그래머는 작업을 수행 할 때 응용 프로그램을 제거하여 쉽게 "속도를 높일"수 있습니다.
  • 고가의 지원 요청을 생성하기 위해 의도적으로 오도하거나 잘못되었거나 문서를 제공하지 않은 경우
  • 모든 것이 제대로 작동하더라도 오류를 생성하거나 더 나쁘게 생성하여 응용 프로그램을 잠그므로 잠금을 해제하려면 값 비싼 지원 요청이 필요합니다.

이러한 점은 다소 우발적 인 태도를 나타내며 (때로는 우연히 발생하더라도), 특히 첫 번째 점은 다소 자주 발생합니다.

그러한 구조를 어떻게 다루어야합니까? 문제를 무시하거나 문제가되는 코드를 제거 하시겠습니까? 관리자에게 알리거나 "기능"을 소개 한 사람에게 이야기 하시겠습니까?


10
"때때로 우연히 발생합니까?" 둘 다 어떻게 될 수 있는지 모르겠습니다.

답변:


7

대부분의 잘못된 코드는 이해 부족으로 인한 것이며 솔루션은 교육입니다.

의도적으로 잘못된 코드는 코더의 경험이나 프로젝트의 나머지 부분과 전혀 관련이 없기 때문에 완전히 다릅니다. 따라서 코드 가 의도적으로 코드 방해하는 이유를 찾아 해당 문제를 해결해야합니다. 이것은 종종 사무 정치가 아니라는 것을 의미하며, 그 누구에게도 유쾌한 상황은 아닙니다.

정치 측면을 다루는 방법은 많은 (위에 언급되지 않은) 상황에 달려 있습니다. 코드를 처리하는 방법은 먼저 내가 잘못 이해 한 사람이 아닌지 (정말 나쁜 코드 인지) 확인한 다음 명백한 결함을 수정하는 것입니다. 합리적으로 가능한 경우, 잘못된 코드가 실패 할 것이라는 테스트를 작성하십시오. 내가 올바르게 이해했다는 이중 확인은 코드를 작성한 사람과 대화하는 것을 의미합니다. 그것은 의도를 가정하지 않고 아주 훌륭하고 정중 한 방법으로 이루어져야하며 나중에 필요한 근본적인 (정치적) 이유를 찾는 데 도움이 될 수 있습니다.

배송은 상아탑 완벽보다 중요하지만 해결해야 할 두 가지 점이 있습니다. 명백한 결함을 수정하면 노력의 20 %로 결과의 80 %를 얻을 수 있으며, 이런 낮은 매달린 과일 은 무시할 가치가 거의 없습니다. 그러나 더 중요한 것은 근본적인 (정치적) 이유를 해결하지 않으면 의도적으로 잘못된 코드가 작성되어 추가 문제를 일으켜 배송을 방해 할 수 있습니다.


28

나는 (20 홀수 년 동안) 의도적으로 나쁜 코드를 본 적이 없지만, 당신이 인용 한 예제는 (적어도 IANAL이지만) 고용주 또는 고객을 사기하려는 시도 인 것처럼 보입니다. 관리자에게 지적해야 할 의무.


2
동의했다. 아무도 의도적으로 잘못된 코드를 작성하지 않습니다. 그들은 문제를 해결하고 있으며, 그들이 아는 가장 좋은 방법으로 문제를 해결하고 있습니다. 그것들은 잘못 안내되고, 교육을받지 못하고, 무지하게 될 수 있습니다. 그러나 나는 그들이 의도적으로 나쁜 것을 의도적으로 작성하는 개발자를 실제로 추측 할 수는 없습니다.
Dan Ray

8
합법적이지 않더라도 최소한 윤리적 의무가 있습니다.
Chris Farmer

@ChrisFarmer 당신은 더 넓은 맥락에서 윤리적 의무를 분리 할 수 ​​없습니다. 의도적으로 잘못된 코드가 경제적이든 정치적이든 합법적 인 집단적 저항을 나타내는 상황이 있습니다. (그리고
공식적인

11

회사의 문화에 따라 다릅니다. 종종 모든 나쁜 코드를 수정하고 정리하는 것은 단순히 당신의 일이 아닙니다.

에서 직장에서 코더 또한이 상황에서 적용 할 수 overengineering에 제이미 자윈 스키의 생각 :

하루가 끝나면 빌어 먹을 물건을 보내십시오! 코드를 다시 작성하고 깨끗하게 만드는 것이 좋으며 세 번째로 실제로는 예쁘게 보일 것입니다. 그러나 그것은 요점이 아닙니다. 여러분은 코드를 작성하려고하지 않습니다. 당신은 제품을 배송하기 위해 여기에 있습니다.

나쁜 코더와 코드가 많이 있으며, 현재 프로젝트 / 작업을 희생하면서 제품을 작동시킬 때 가치가 없을 수도 있습니다. 너무 자주, 우리는 모두 덕트 테이프 프로그래머입니다.

Joel Spolsky의 게시물 : 덕트 테이프 프로그래머 참조


+1 저는 제품 배송 개념의 팬입니다. 너무 많은 기술 프로파일이 그 개념을 놓치고 있다고 생각합니다.

나도 +1 중요한 것들에 대한 왜곡 된 견해를지지하는 너무 많은 "청결한 코드"– 종류의 책들 등이 있습니다. 코드 품질은 매우 중요합니다. 우승자는 최고의 제품을 가진 사람이 아닙니다. 충분한 제품을 빨리 배송하는 사람들입니다.
Joonas Pulakka

4
나는 당신이 문제의 요점을 놓쳤다 고 생각합니다. 남자는 단순히 나쁜 프로그래머가 작성한 코드가 아니라 의도적으로 나쁜 코드에 대해 이야기했습니다 .
Hila

@ 힐라 나는 내 요점은 여전히 ​​잘못된 코드가 의도적인지 아닌지를 유지한다고 믿는다. 할당 된 프로젝트 / 작업 목록에 문제가 있지 않은 한 모든 불량 코드수정하고 청소하는 것은 덕트 테이프 프로그래머의 책임이 아닙니다 . 문화는 학문적이지 않으며 깨끗하고 아름다운 코드를 작성해야합니다. 제품 / 비즈니스의 운송 및 지원에 관한 것입니다. 나는 개인적으로 내가 만나는 모든 나쁜 코드를 고치기를 원하지만 그 시간에 100 %를 바칠 수는 없습니다. 나는 그때 나에게 할당 된 작업 / 프로젝트를 끝내지 못할 것입니다.
spong

3
@sunpech 그러나 의도적으로 잘못된 코드를 청소하는 것은 코드를 청소하는 것과 다릅니다. 애플리케이션을 "아름답게"만드는 것이 아니라 의도적으로 해로운 코드를 수정하는 것입니다. 심장 흉부 수술은 바늘이 얼마나 예쁜지에 대한 것이 아니라 생명을 구하는 것이기 때문에 의사가 환자 내부에서 잊어 버린 가위를 꺼내서는 안된다고 말하는 것과 같습니다.
Hila

4

그 태도는 더 나쁜 것의 증상입니다.

  • 경영진이 개발자의 경쟁을 장려하고 있습니까?

  • 팀 정신은 어디에 있습니까?

  • 팀 자체 이외의 다른 사람이 작업을 할당합니까?

  • ...

어쨌든 문제가되는 코드를 제거하는 것만으로는 충분하지 않습니다. 그의 관리자에게 불만을 제기해도 팀 정신을 향상시키는 데 도움이되지는 않습니다.

나는 그 사람과 직접 대화하려고하고 그를 판단하지 않고 많은 질문을함으로써 그 이유를 이해하려고 노력할 것이다. 팀 전체가 공격적이지 않고해야합니다.

대부분의 경우, 그 건설적인 행동은 실제 문제 (가장 나쁜 문제)를 밝게 비추고 작업을 수행 할 수 있습니다.

실제로 작동하지 않는 경우. 해당 개발자를 팀에서 제거하십시오.


4

내가 의도적이라고 생각했다면 아마 그 사람을 해고했을 것입니다! 누군가가 충분한 프로그래머가 아니기 때문에 나는 그의 기술을 연구 할 것이다. 그것이 위에서 밀려났다면 아마 새로운 직업을 찾기 시작할 것입니다.


2

그러한 구조를 어떻게 다루어야합니까? 문제를 무시하거나 문제가되는 코드를 제거 하시겠습니까? 관리자에게 알리거나 "기능"을 소개 한 사람에게 이야기 하시겠습니까?

상황에 따라 그 중 하나가 가장 적합 할 수 있습니다. 다른 가능성으로는 다른 프로젝트로의 이전, 새로운 일자리 구하기, 다양한 의문의 도덕성 및 / 또는 합법성 행위 등이 있습니다.

그러나 우리가 실제 사실과 관련된 실제 사람들을 알지 못한다면, 당신이 묘사하는 직위의 누군가가 우리의 조언 / 2 센트 가치에 많은주의를 기울여야 할 방법은 없습니다.

이 얘기되는 실제 상황 있다면, 그것은 가치가있는 조용한 단어를 가지고있을 당신 , 관리자를 당신이 무엇을해야하는지에 대한 그들의 조언을 부탁합니다. 가능 하면 손가락을 가리 키지 말고 수있는 일 /해야 할 일 에 대해 대화 하십시오. 가능하면 이름을 지정하지 마십시오. 관리자가 이미 문제를 해결하고있을 가능성이 높습니다.

그러나 반대 측면은 당신이 이것을 비례 적으로 날려 버릴 수 있다는 것입니다. 무언가를하기 전에 그것에 대해 길고 열심히 생각하십시오. 귀하가 취한 조치가 귀하에게 역효과를 줄 수있는 가능성을 포함하여 그 결과에 대해 생각하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.