조직 기술

개발자의 프로그래밍 능력을 크게 두 가지로 분류하라고 하면 알고리즘 기술과 조직(organizational) 기술로 나눌 수 있다.

알고리즘 기술은 작게는 stack, heap, hash table, balanced binary tree, sorting 등을 얼마나 잘 이해하고 구현할 수 있는지를 의미하고, 크게는 주어진 문제를 컴퓨터로 어떻게 풀 것인지 생각하여 답을 내는 사고 능력을 의미하기도 한다.

반면 조직 기술이란 소프트웨어의 복잡도를 줄이고, 수정 및 유지보수의 편의를 증대시키는 모든 종류의 기술을 통칭한다. 작게는 함수나 변수 이름을 잘 짓는 것부터 시작해서, 크게는 디자인 패턴, 리팩토링, 아키텍처, DSL 등을 망라한다.

혹자는 알고리즘이 문제다라며 알고리즘을 강조하지만, 사실 알고리즘의 중요성은 이미 대중적으로 널리 알려져 있고 충분히 강조되고 있다. 정보올림피아드나 ACM-ICPC 같은 프로그래밍 대회에서 알고리즘 문제를 출제하고 있고, 대학에서도 최소 2-3개 이상의 데이터 구조와 알고리즘 과목을 전공 필수로 가르치고 있다. 더불어 구글, 페이스북, 마이크로소프트 등 많은 기업들이 입사 면접에 알고리즘 문제를 출제하고 있기도 하다. 우린 이미 알고리즘 기술 없이 좋은 개발자란 평가를 받기 힘든 시대에 살고 있다.

반면 프로그램을 잘 작성하기 위해 필요한 조직 기술은 간과되고 있다. Organizational Skills Beat Algorithmic Wizardry라는 글에서도 비슷한 문제 제기를 하는데, 조직 기술은 명확한 기준도 평가 방법도 없기 때문에 상대적으로 기준이 명확한 알고리즘 기술만 강조되는 면이 있다. 하지만 대부분의 개발자가 정작 필요로 한 기술은 알고리즘 기술이 아니라 조직 기술인 경우가 많다. 앱이든 웹서비스든 수많은 요구사항을 코드로 반영하고, 지속적으로 수정, 유지보수할 필요성이 있기 때문이다.

복잡한 알고리즘 문제를 풀고 힘들게 입사했더니, 정작 출근 첫날 주어진 업무는 서비스 중인 웹페이지의 버튼을 1px 옮기는 일이었다는 말이 농담만은 아니다.

Advertisements