넓게 아는 것과 깊게 아는 것
기술 지식 습득에 관한 고찰
'여러 기술을 많이 알고 있는 게 중요한가요? 하나의 기술을 깊게 아는 게 중요한가요?'
개발자 후배들이 종종 이런 질문을 나에게 던진다. 결론부터 말하자면 넓고 깊게 아는 것이 중요하다. 넓게 아는 것과 깊게 아는 것 이 두 가지 상태는 양자택일의 대상이 아니다. 넓게 알지 못하면 깊게 알 수 없고, 깊게 알고 있지 못하면 넓게 아는 것도 힘들다. 그럼에도 우리가 둘 중 하나의 상태를 선택하려고 하는 것은 그것이 편하기 때문이다. 깊게 알지 못하는 것에 대한 핑계를 찾기 위해, 넓게 알려고 노력하지 않는 게으름을 감추기 위해서 일 가능성이 크다.
개발기술의 트렌드는 빠르게 변화한다. 개발을 업으로 삼고 있는 사람들은 끝없이 공부를 해야만 살아남을 수 있다. 단순히 살아남기 위한 공부는 재미가 없다. 기본적으로 개발 자체가 재밌어야 하고, 더 재밌게 자신의 업에서 성장하기 위해서 공부를 하는 것 자체도 즐거워야 한다. 공부를 해야 할 때는 어떻게 하는 게 좋을까? 흔히 우리는 고된 일을 할 때 속된 표현으로 '삽질한다' 또는 '땅을 파고 있다'라는 표현을 쓰곤 한다. 아마도 사회에 나온 후로는 대부분 땅을 직접 팔일은 없었을 것이다. 어린 시절 모래놀이를 할 때를 떠올려 보자. 땅을 팔 때 어떻게 파는가? 아래로만 내려가려고 해서는 깊게 팔 수가 없다. 결국 옆에 있는 흙이 무너져 내리거나 땅을 파는 도구가 더 깊이 내려가지 못하게 된다. 적당히 흙을 아래로 파낸 후에는 옆을 넓혀야 한다. 그리고 옆이 충분히 넓어지면 다시 아래로 흙을 파 내려가야 한다. 지식도 마찬가지다. 넓게 파고 깊게 들어가고, 다시 넓게 파고 깊게 들어가는 과정의 반복이 필요하다.
넓음이 중요한지 깊음이 중요한지 질문을 던지던 후배 개발자들은 대부분 문맥 전환을 할 준비가 된 친구들이었다. 그동안 열심히 넓이 우선 탐색을 했었기 때문에 깊이 우선 탐색을 할 시기가 되었던 경우나 아니면 그 반대의 경우였다. '나는 너무 수박 겉만 핥고 있는 것 같은데?'라는 생각이 들었다면 다시 파고들 시기가 되었다는 뜻이다. '나는 너무 땅만 파고 있는 것 같은데?'라는 생각이 들었다면 시계(視界)를 넓힐 시기가 된 것이다. 그러니 문득 어느 날 둘 중 하나에만 치우치고 있는 거 아닌가라는 의문이 스스로에게 들었다면 탐색 알고리즘을 전환하면 된다.
대부분의 경우에 질문은 답을 요구하지만, 때로는 질문이 생긴 것만으로도 결론에 도달하는 경우도 있다.