저에게 개발자로서 추구하는 방향을 물어본다면 항상 효과적인 방법으로 최선의 결과물을 만든다라고 말씀 드리는데요
최근 개발자가 아닌 사람들과 이야기 하던 중 비슷한 주제에 대해 말하게 되었습니다.
조금 더 자세히 설명드리려고 “주어진 상황에 맞는 기술들을 선택하고 욕심 부리지 않는 것” 이 중요하다고 말씀 드렸는데 나중에 생각해보니 그렇게 공감을 이끌어낼 수 있었던 설명은 아닌 것 같았어요
그래서 어떻게 설명하면 좋을까 혼자 고민하다가 좋은 예시가 될 수 있을만한 재미있는 아이디어가 떠올라서 한번 적어보려고 합니다.
손가락으로 숫자 세기
한국에서는 일반적으로 펼쳐진 손가락의 개수로 숫자를 표현합니다. (몰랐는데 나라마다 방법이 다르긴 하네요😂)
손가락으로 숫자를 셀 때 조금 더 효율적으로 셀 수는 없을까요?
고민해보니 2진법를 사용하면 더 효율적으로 숫자를 셀 수도 있겠다는 생각이 들었어요
오른손 엄지부터 시작해서 손가락이 접혔다면 0, 펴졌다면 1로 사용하는 방식으로 말이죠!
그렇다면 손가락은 10개이니 2^10
이니 0 ~ 1023까지 총 1024개 숫자를 표현할 수 있게됩니다.
최대 10 까지 표현할 수 있는 방법을 1024개로 표현할 수 있으니 즉, 한정된 자원으로 더 많은 상태를 표현할 수 있으니 효율적이라고 말 할 수 있겠습니다.
효율적! 효과적?
이 효율적인 방식을 일상에서 활용한다면 어떨까요? 펼쳐진 손가락의 개수로 숫자를 표현하는 방법보다 효과적일까요?
저는 No라고 답변할 것 같습니다. 어떤 이유에서일까 생각해보면
- 사회적인 합의가 없는 방식
- 상대방이 2진수를 알아야함 등
많은 이유가 있지만 결과적으로 복잡하기 때문에 효과적이지 않은 방식이라는 생각이 듭니다.
그리고 숫자 4를 표현한다면… 조금 곤란할 수도 있을 것 같아요😅
오버엔지니어링
손가락 하나를 비트로 사용하는 방식은 효율적입니다. 하지만 실제 손으로 숫자를 표현해야하는 상황을 고려하면 효과적이라고 말할 수 없습니다.
이러한 문제가 소프트웨어를 만드는 개발자 측면에서는 오버엔지니어링을 잘 설명할 수 있는 표현이라는 생각이 들었어요
작은 문제들을 불필요하게 복잡한 방법으로 풀어내는 것을 오버엔지니어링 이라고 합니다.
앞서 말씀드렸던 효과적인 방법으로 최선(최적)의 결과물을 만든다와는 상반된다고 말씀 드릴 수 있겠네요
하지만…
오버엔지니어링은 인지하는 것 자체가 매우 어렵습니다.
대부분의 경우 내가 생각하는 것 보다 한, 두번 더 덜어야 하더라구요. 앞서 말씀드렸던 손가락으로 숫자 세기를 다시 예로 들자면…
대부분 개발자들(저 포함)이 “손가락을 3진수로 쓰는건 너무 복잡하니 2진수로 타협합시다!” 라는 양상을 보이는 것 같습니다. (다시 말하지만 저 포함)
마무리
효과적인 방법으로 최선의 결과물을 만드는건 정말 어려운 것 같습니다.
정답은 당연히 없겠지만, 좋은 예시들을 많이 보면서 의식적으로 덜어내려는 노력을 하는 수 밖에 없겠네요
쓰고 보니 뭘 말하려고 했던 건지 모르겠네요😂 뻘글 끝까지 읽어주셔서 감사합니다!