북리뷰 _ homo eruditio #4
소프트웨어 장인 _ 산드로 만쿠소 / 2015 / 길벗
“프로페셔널리즘. 실용주의. 자부심” 책 표지에 적혀있는 키워드이다. 이런 단어들을 보면 잠깐씩 그런 환상에 빠지곤 한다. 만약 내가 개발자가 되었다면 나는 아마도 장인정신을 갖춘 개발자가 되지 않았을까? 마인드셋(사고방식)과 사고능력이 동일하지 않음을 감안하면 능력 있는 개발자가 되었을지는 알 수 없는 일이지만 적어도 결과물을 위한 도구로서의 개발자가 아닌 자부심을 가진 메이커로서의 실용주의 정신에 입각한 개발자로 살려는 노력은 기를 쓰고 했을 것 같다. 그리하여 이 책 역시 정서적으로 흥미롭게 읽었다. 책은 기본적으로 개발의 방법보다는 개발자로서의 장인정신과 마인드셋을 다루고 있다.
많은 개발자가 스스로도 인지하고 있고, 외부에서도 개발자 그룹의 특성을 이야기할 때 “Nerd”라는 단어를 자주 언급한다. 지능은 뛰어나지만, 사회성이 부족하고 특정이슈에 대한 강박적인 집착, 전문성을 보이는 사람들을 일컫는 단어이다. 나는 이 단어가 비아냥이나 놀림보다는 그저 그룹의 특성을 반영하는 말이라고 생각한다. 사람이 다 잘해야 하는 건 아니니까, 그런 특성을 고려하고 활용하면 되는 거 아닐까? 하지만 대부분의 서비스가 디지털화되고 있는 세상에서 직접적 문제 해결사, 문제를 해결하는 플랫폼 메이커, 종종 문제를 야기하는 엉터리 시공사로서 개발자는 점점 더 크고 중요한 역할을 요구받는 듯하다. 그리고 그것을 감당할 수 있는 역량에 따라 “개발자”라는 같은 이름으로 불리지만 개별의 역할, 몸값, 명성에는 천지차이가 생기고 있다.
책을 읽으면서 어떤 개발자 혹은 개발자 집단이 만든 결과물이 Good과 Bad의 기로에 서는 기준은 여러 가지가 있겠지만 그 핵심에는 기술적 구현 능력뿐 아니라 고객과의 소통, 피드백 적용, 상호작용을 통해 결국 오랫동안 동작하는, 내가 아니어도 시스템을 개선할 수 있는, 바람직한 사용자 경험(UX)을 가진 결과물을 만들었는가라는 생각이 들었다. 이것을 이해하고 그것이 가능한 역량을 갖추기 위해 끝없는 학습과 성장의 길을 걷기고 결심한 수행자가 이 책에서 말하는 소프트웨어 장인이라 하겠다.
개발 분야는 넓고 빠르게 발전하고 변화하고 있다. 개발을 오래 했다고 ‘고참’이 아니다. 특정한 분야, 방법에 대한 많은 경험은 그 이슈에 대한 역량을 키울 뿐이다. 즉, 언제 어디서든 초심자의 마음으로 배울 수 있는 마음가짐이 중요하다.
애자일 개발 방식 _ 서로 다른 여러 맥락에 따른 방법론과 테크닉의 조합으로서 다양한 변화에 적응할 수 있도록 돕는 애자일 개발방식은 실제 빠른 피드백 루프를 통한 문제 인지와 개선 능력을 높인다는 장점을 가진다. 애자일 개발 방식이 잘 돌아가려면 구성원의 소프트웨어 장신정신이 필요하다.
페어 프로그래밍 / 리펙토링 _ 비효율적으로 느껴질 수 있고, 비교에 대한 두려움에 꺼려질 수도 있겠지만 들으면 들을수록 이보다 더 명확한 성장과 개선 동력이 있을까 싶었다. 특히 누구나 개선 가능한 개발을 하는데 큰 도움이 될 것 같다.
TDD _ 테스트 주도 개발 역시 속도를 늦춘다는 핑계로 현실 개발 생태계에서 지양되곤 하지만 실제 동작하는 완성도 있는 섬세한 결과물을 만들기 위한 가장 좋은 방법이라는 생각이 든다.
개발하는 데 있어 굳이 특정 실행 관례에 종속적일 필요는 없다. 추구하는 가치를 만들어 내기 위해 실행관례를 잘 이용하면 된다.
채용공고 _ 함께 책을 읽은 개발자들에게는 별 감흥이 없는 파트 같았지만, 좋은 개발자와 일하기 위해서는 가장 중요한 파트라는 생각이 들었다. 회사의 문화, 정서, 장점을 잘 담고, 해야 하는 일을 그저 기술 단위가 아닌 역할로서 잘 안내할 수 있는 게 중요하다.
면접 _ 면접은 쌍방이 서로 좋은 파트너가 될 수 있을지를 확인하는 자리이다. 개발자 면접은 개발자가 보는 것이 좋다. 가능하다면 면접자에 맞춘 개별화된 방식을 통해 자질, 역량, 선호 등을 확인하고 회사의 문화 혹은 구조와 핏이 맞을지 시간을 가지고 살피는 게 좋다. 사람을 키우는 것보다 사람을 잘 뽑는 게 훨씬 효율적인 일이다.
배움의 문화 _ 성장하고자 하는 열정적인 사람은 조직에서 더 이상 배울 게 없으면 떠난다. 꾸준히 배울 수 있는 환경, 상호 학습하는 문화를 만드는 것은 좋은 개발자와 일 하고 좋은 개발자를 키우는 핵심이다. 소프트웨어 장인은 다른 개발자들에게 영향을 미친다.
책에서는 회사 안에서의 커리어와 소프트웨어 장인으로서의 커리어를 구분하고, 일을 선택할 때 스스로 질문함으로써 소프트웨어 장인으로서의 커리어 여정을 만들어 가는 것을 독려한다. 나는 그 둘을 구분하는 것이 자신의 삶에서 무엇에 경중을 둘 것인가를 구체화하는데 도움이 될 것이라는 생각이 들었다. 장인이 된다는 것은 새로운 것에 대한 호기심을 가지고 실험한다는 것과 같은 의미로, 장인은 코드가 아닌 문제해결에 집중한다. 하지만 그게 승진을 보장하지 않는다는 것은 사회생활을 조금 해 보면 알게 되는 것이니 말이다. 점점 더 디지털화되어가는 세상에서 소프트웨어 개발은 다양성이 상당히 높은 분야로, 다양한 종류/프로젝트를 경험하는 것은 장인으로서의 커리어 개발에 도움이 될 듯하다. 역으로 개발자가 할 수 있는 일이 무궁무진하다는 생각도 들었다. 부럽다… 기왕 개발자라면 장인정신을 갖춘 개발자로서의 삶을 살아보는 것도 의미 있을 것 같다. 마흔에 개발을 시작하긴 어렵겠지만 개발자를 장인으로 키우는 교육을 잘 만들어 보면 그도 하나의 보람은 될 듯하다.
모든 소프트웨어 장인(탁월함에 헌신하고 탁월함을 추구하는 사람. 사회의 진화를 이끄는 사람)은 개발자이지만 모든 개발자가 장인은 아니다.
장인이란 프로페셔널한 태도, 추구하는 가치를 지칭하는 것이지 능력을 지칭하는 것은 아니다.