Featured image of post 효과적인 방법, 최선의 결과

효과적인 방법, 최선의 결과

그리고 오버엔지니어링

저에게 개발자로서 추구하는 방향을 물어본다면 항상 효과적인 방법으로 최선의 결과물을 만든다라고 말씀 드리는데요

최근 개발자가 아닌 사람들과 이야기 하던 중 비슷한 주제에 대해 말하게 되었습니다.

조금 더 자세히 설명드리려고 “주어진 상황에 맞는 기술들을 선택하고 욕심 부리지 않는 것” 이 중요하다고 말씀 드렸는데 나중에 생각해보니 그렇게 공감을 이끌어낼 수 있었던 설명은 아닌 것 같았어요

그래서 어떻게 설명하면 좋을까 혼자 고민하다가 좋은 예시가 될 수 있을만한 재미있는 아이디어가 떠올라서 한번 적어보려고 합니다.

손가락으로 숫자 세기

한국에서는 일반적으로 펼쳐진 손가락의 개수로 숫자를 표현합니다. (몰랐는데 나라마다 방법이 다르긴 하네요😂)

손가락으로 숫자 세기

손가락으로 숫자를 셀 때 조금 더 효율적으로 셀 수는 없을까요?

고민해보니 2진법를 사용하면 더 효율적으로 숫자를 셀 수도 있겠다는 생각이 들었어요

오른손 엄지부터 시작해서 손가락이 접혔다면 0, 펴졌다면 1로 사용하는 방식으로 말이죠!

이진법을 통한 숫자 표현

그렇다면 손가락은 10개이니 2^10이니 0 ~ 1023까지 총 1024개 숫자를 표현할 수 있게됩니다.

최대 10 까지 표현할 수 있는 방법을 1024개로 표현할 수 있으니 즉, 한정된 자원으로 더 많은 상태를 표현할 수 있으니 효율적이라고 말 할 수 있겠습니다.

효율적! 효과적?

이 효율적인 방식을 일상에서 활용한다면 어떨까요? 펼쳐진 손가락의 개수로 숫자를 표현하는 방법보다 효과적일까요?

저는 No라고 답변할 것 같습니다. 어떤 이유에서일까 생각해보면

  • 사회적인 합의가 없는 방식
  • 상대방이 2진수를 알아야함 등

많은 이유가 있지만 결과적으로 복잡하기 때문에 효과적이지 않은 방식이라는 생각이 듭니다.

그리고 숫자 4를 표현한다면… 조금 곤란할 수도 있을 것 같아요😅

오버엔지니어링

손가락 하나를 비트로 사용하는 방식은 효율적입니다. 하지만 실제 손으로 숫자를 표현해야하는 상황을 고려하면 효과적이라고 말할 수 없습니다.

이러한 문제가 소프트웨어를 만드는 개발자 측면에서는 오버엔지니어링을 잘 설명할 수 있는 표현이라는 생각이 들었어요

오버엔지니어링

작은 문제들을 불필요하게 복잡한 방법으로 풀어내는 것을 오버엔지니어링 이라고 합니다.

앞서 말씀드렸던 효과적인 방법으로 최선(최적)의 결과물을 만든다와는 상반된다고 말씀 드릴 수 있겠네요

하지만…

오버엔지니어링은 인지하는 것 자체가 매우 어렵습니다.

대부분의 경우 내가 생각하는 것 보다 한, 두번 더 덜어야 하더라구요. 앞서 말씀드렸던 손가락으로 숫자 세기를 다시 예로 들자면…

대부분 개발자들(저 포함)이 “손가락을 3진수로 쓰는건 너무 복잡하니 2진수로 타협합시다!” 라는 양상을 보이는 것 같습니다. (다시 말하지만 저 포함)

마무리

효과적인 방법으로 최선의 결과물을 만드는건 정말 어려운 것 같습니다.

정답은 당연히 없겠지만, 좋은 예시들을 많이 보면서 의식적으로 덜어내려는 노력을 하는 수 밖에 없겠네요

쓰고 보니 뭘 말하려고 했던 건지 모르겠네요😂 뻘글 끝까지 읽어주셔서 감사합니다!