lee-seungjae.github.io

프로그래머가 빠지기 쉬운 함정

2019-05-02

어려운 문제를 푸는 즐거움

어려운 문제를 풀어내면 기분이 좋습니다.

내가 뭔가 해낸 것 같고, 가치있는 것 같고, 똑똑한 것 같은 느낌이 들지요.

어떻게 보면 어려운 문제를 푸는 것이

프로그래머가 살아가기 위해 때때로 섭취해야 하는 필수 영양소인 거 같기도 합니다.

그러나 해결책을 적용하는 과정에서 비용이 얼마나 드는지,

이 문제를 풀면 어떤 가치가 생겨나는지를 생각해보지 않으면

굳이 풀 필요가 없는 문제를 풀기도 하고

가성비가 더 좋은 해결책을 놓치기도 합니다.

그러니 어떤 문제를 발견했을 때, 문제를 풀고 싶은 기분이 강하게 들었을 때

단지 어려워보여서, 재미있어보여서 그런 기분이 든 것은 아닌지 점검해 봅시다.

해결책을 먼저 정하고 나서 문제를 선택하기

얼마 전에 다른 회사 다니는 분께 들은 얘기인데

현재 문제없이 잘 작동하고 있는 레거시 시스템을

요즘 인기인 모 미들웨어를 도입해서 재구현하자고 주장하는 분들이 있어서 골치가 아프다고 합니다.

왜 재구현해야 하냐면

그 미들웨어가 요즘 대세이기 때문이라고 합니다...............

망치의 오류라는 말이 있습니다.

손에 망치를 들고 있으면 모든 것이 못으로 보인다는 뜻입니다.

새 도구를 들었으면 신나지요.

빨리 써보고 싶게 마련입니다.

망치를 들고 나서, 그것으로 두들길 못을 '찾아보는' 것까지는 좋습니다.

그런데 못 두들기는 일을 정식으로 추진할 업무로 제안하려면

이것이 (다른 것이 아니라, 망치로 두들겨야 하는) 못이고,

시간과 예산을 들여 이 못을 두들길 가치가 있다는 것을

사람들에게 설득할 준비를 해야 합니다.

객관식 시험처럼 생각

객관식 시험은 답이 보통 다섯 개 중 하나이고,

제한된 시간 안에 여러 문제의 답을 골라야 합니다.

따라서 잘 모르겠으면 가장 그럴싸한 하나를 찍고 다음 문제로 넘어가는 것이

객관식 시험에서 좋은 점수를 얻는 전략입니다.

우리는 초중고등학교를 다니며 10년에 걸쳐 꾸준히 객관식 시험을 봐왔기 때문에

그런 습관이 사고 과정에 알게모르게 배어있습니다.

그런데 현실 문제에 대한 의사결정을 내릴 때는

빨리 결정해야 하는 문제도 있고, 그렇지 않은 문제도 있습니다.

해결책 후보 둘 다 하는게 가장 좋은 경우일 때도 있고

아무것도 안하는 게 가장 좋은 경우일 때도 있습니다.

때로는 결정을 보류하고 더 기다려봐야 할 때도 있고

정보를 더 얻어야 할 때도 있습니다.

여러개 고르기 / 아무것도 안고르기 / 기다리기 / 정보를 더 얻기가

항상 선택지에 있다고 생각합시다.

완벽한 해결책에 집착

골치아픈 문제가 있을 때

완벽한 해결책을 찾으려고 애쓰다가

현재 상황에 적절한 해결책을 놓치는 경우가 있습니다.

대학교 수업에서 나오는 과제들은 내가 성실하게 한다면

대부분의 경우 모든 스펙을 만족시킬 수 있었습니다.

그런데 현실의 문제는 그렇지 않은 경우가 많습니다.

모든 스펙을 만족시키는 솔루션이 존재하지 않는 경우도 있고

모든 스펙을 기계적으로 달성하려다가 비용이나 유지보수성 등

스펙 문서에 명시되어 있지 않은 보편 가치를 희생하게 되기도 합니다.

모든 문제를 완벽하게 풀어야 할 필요는 없습니다.

맥락을 좀더 의식하고, 이 문제를 어느 정도로 해결하면 얼마만큼의 가치가 생겨나는지 생각합시다.

무지를 인정하지 않음

내가 이해하지 못하고 있는 것, 내가 모르는 것을 만났을 때 흔히 빠지는 함정이

그것을 잘못된 것, 필요없는 것으로 규정하는 것입니다.

당장 마음은 편하겠지만 이해의 지평을 넓힐 기회를 잃게 됩니다.

이건 딱히 프로그래머가 아니라도 누구에게나 일어나는 심리적 방어기제(합리화)인데

이것이 방어기제에 의한 충동임을 의식하면 이겨내기 쉽습니다.

내가 이해하지 못하는 것, 내가 모르는 것이 있을 수 있다는 것을 인정하고

판단을 보류하고, 조금만 더 다른 사람들의 이야기를 들어봅시다.

목록으로
@0xcafea1fa RSS