바퀴를 다시 발명하라 - Reinvent the Wheel

2 weeks ago 4

  • "바퀴를 다시 발명하지 말라" 는 조언은 창의성과 탐구심을 억누르는 부정적 영향을 줌
  • 새로운 바퀴, 즉 기존 도구나 기술을 재창조하는 과정에서 깊은 이해와 배움을 얻음
  • 단순하거나 익숙해 보이는 기초 구성 요소도 실제로는 복잡성과 다양한 트레이드오프를 포함함
  • 자신만의 바퀴를 발명해봄으로써 성장, 문제 해결, 실험에 대한 역량이 강화됨
  • 기존 결과물을 활용하는 것과 재창조하는 것 사이에서 목적에 따라 균형 있게 선택할 필요성 강조됨

Reinvent the Wheel

  • "바퀴를 다시 발명하지 말라"는 말은 의도는 좋지만, 두 부류에서 나온 조언임
    • 직접 바퀴를 만들어보고 그 어려움을 체험한 사람들
    • 시도해본 적 없이 기존 조언을 맹목적으로 따르는 사람들
  • 이러한 조언이 반복되면 호기심과 탐구정신이 위축되는 분위기 조성임
  • 만약 이 조언을 모두가 따랐다면, 많은 현대적 편의와 발전을 이루지 못했을 것이라는 점 강조임
  • 실제로 바퀴는 초기 발명 이후에도 여러 번 재창조되어 발전을 거듭해왔음

참고: 여기서 '바퀴'는 어떤 도구, 프로토콜, 서비스, 기술, 기타 창작물로 대체해서 생각할 수 있음

바퀴를 직접 발명해보는 것이 곧 배움임

"내가 만들 수 없는 것은 이해했다고 할 수 없다"
— 리처드 파인만

  • 무언가를 진정으로 깊이 이해하기 위해서는 작은 버전이라도 직접 구현해보는 경험이 필요함
  • 결과물이 완벽하지 않아도, 심지어 활용하지 않아도 구현해보는 과정 자체가 중요함
  • 컴퓨터 과학의 여러 개념—프로토콜, 암호화, 웹서버 등—은 어렵게 느껴질 수 있으나, 실제로는 누구나 시도해볼 수 있음
  • 더 많은 사람들이 직접 만들어보는 경험을 통해 기존 기술의 구조와 본질을 이해하는 기회가 생김

모든 것은 끝없는 탐구 과정임(Rabbit Hole)

  • 우리가 당연하게 여기는 기본 구성 요소—예를 들어 문자열, 파일 경로 등—도 실제로는 매우 복잡함
  • 자신만의 문자열이나 경로 라이브러리 구현 시도는 많은 배움의 계기가 됨
  • 이 과정을 통해 다음과 같은 사실을 깨달음
    • 일상적인 것에도 무한에 가까운 복잡성이 존재함
    • 다른 사람에게 유용한 무언가를 만드는 것은 겸손함을 배울 기회임
    • 모든 추상화는 인간이 만들었으며, 완벽하지 않고 자신만의 (다른) 트레이드오프도 가능함
  • 구현 도중 정확성, 단순성, 성능, 확장성, 이식성 등 수많은 선택지와 문제에 직면함
  • 자신이 만든 해결책은 일부 영역에서 뛰어날 수 있지만, 모든 사용자/상황에 맞지는 않음
  • 기존 솔루션에도 한계가 있고, 내 문제에 맞지 않을 수도 있음
  • 하나의 문제에 끝까지 파고드는 경험은 엔지니어로 성장하는 과정임
  • 만약 프로젝트를 자주 이리저리 옮기기만 한다면 의미 있는 학습은 얻을 수 없음

바퀴를 다시 발명해야 하는 이유

  • 기존보다 더 나은 바퀴를 만들고자 함(‘더 나은’의 정의는 다양함)
  • 바퀴가 어떻게 만들어지는지 학습하는 목적임
  • 다른 사람에게 바퀴의 원리를 가르치는 교육적 목적
  • 바퀴의 발명 과정을 탐구하면서 새로운 깨달음을 얻음
  • 고장났을 때 직접 수리 또는 개선할 수 있는 능력 배양
  • 바퀴를 만드는 데 필요한 다양한 도구와 기술을 습득하게 됨
  • 복합 시스템(예: 자동차 등)의 일부로서 바퀴의 역할 이해
  • 특정한 필요에 맞는 아주 특별한 바퀴를 만들기 위한 시도(예: 휠체어, 스케이트보드, 도자기용 바퀴 등)
  • 자신이 만든 바퀴가 원래 목적과 달리 전혀 다른 용도로 더 잘 쓰일 수도 있음
  • 세상에는 틀에 박히지 않은 새로운 발상이 중요한 역할을 할 수 있음

Reuse vs Reinvent

  • 다른 사람의 결과물을 무시해서는 안 되며, 그들의 작업을 연구하고 적절히 활용할 필요가 있음
  • 단순히 불신이나 무지로 기존 것을 버리고 새로 만들지 않도록 주의해야 함
  • 그러나 직접 구현하거나 실험해보지 않으면 해당 분야의 핵심 이해와 발전이 어려움
  • 소프트웨어 엔지니어링에서는 작은 실험과 프로토타입 제작이 쉽고 빠르므로 개인 문제 해결에 효과적임
  • 작게 시작해 단순하게 구현하고 반복하는 과정을 추천함
  • 그래서 마지막 나의 조언은
    • 통찰(insight) 을 원한다면 직접 재발명에 도전
    • 영향력(impact) 을 원한다면 이미 검증된 솔루션을 재사용

"Reinvent for insight. Reuse for impact."
"통찰을 위해 재발명하고, 영향력을 위해 재사용하세요"

Read Entire Article