소프트웨어 장인 정신은 소프트웨어 개발의 프로페셔널리즘에 대한 것이다.

굉장한 책이다. 내가 처음 일을 시작할 때 듣고싶었던 말, 일을 시작하는 누군가에게 해주고 싶은 말, 내가 겪었던 일, 지금 겪고있는 일 모든 것이 이 책에 담겨있다.

아마도 책에서 표현하는 장인 정신의 마음을 조금이라도 가지고 있는 개발자라면 모두가 이 책에 공감할 것이다. 그만큼 이 책은 잘 구성되어 있다. 예전부터 추천받은 책이지만 왜 이제서야 읽었는지 지난 날이 아쉬울 따름이다.

제목을 보면 알겠지만 이 책은 소프트웨어 개발자의 장인 정신에 대해 이야기한다. 코드를 한땀 한땀 장인 정신으로 짜야한다는 의미가 아닌 장인으로서의 마음 가짐을 말하는 것이 주내용이다.

서문 만으로 큰 울림이 있는 책

거의 대부분의 내용이 흥미롭지만 책을 읽을 시간이 없다면 서문 만이라도 읽는 것을 추천한다. 이 책의 서문은 저자의 20대 초반에 있었던 일화를 다루는데 이 책의 모든 내용을 관통한 내용이 담겨있다. 다음은 서문 중에서 감명 깊게 읽은 내용이다.

“다 끝냈습니다. 동작도 합니다.”라고 외치자, 그는 타이핑을 멈추고 나를 돌아봤다. “코딩이 직업인 사람이 동작하는 코드를 만드는 건 기본이에요.” 그는 조용히 말했다. “일을 끝냈다는 말에는 제대로 동작한다는 것이 당연히 포함되어 있죠.”

내가 얼마나 똑똑한지 보이려고 난해한 코드들을 조금 집어 넣었다. 나무르는 순간, 그 코드가 무엇을 하는지 알아냈다. 나는 내 기분을 띄워줄 말을 기대했다. “이 코드가 얼마나 무례한지 알고 있습니까?” 그는 조용히 말했다. “많은 팀과 개발자들이 같은 코드 베이스에서 아주 큰 시스템을 만들고 있습니다. 모든 개발자들이 이런 식으로 으스대려고 난해난 코드를 만들면 코드를 이해하기가 얼마나 어려워질지 생각해봤나요? 수천 라인, 아니 수백만 라인의 코드가 이런 식이라고 상상해보세요”

“일을 하는 것도 중요하지만 그에 못지 않게, 일을 어떻게 하느냐도 중요합니다.”

우리는 프로답게 일하는가?

직업 정신, 장인 정신, 주인 의식 등의 말이 천박한 농담이 된 시대가 아닐까하는 요즘이지만 나는 이러한 말들을 적극적으로 지지한다. 특히 개발자라면 반드시 가져야하는 사고 방식이라 생각한다.

여기서 오해하면 안되는 것은 주인 의식이라 하여 회사에 대한 주인 의식을 가지라는 말이 아닌 나의 일, 나의 직업으로서 주인 의식을 가져야한다는 뜻이다.

개발자는 법적으로 전문직은 아니지만 전문가라고 할 수는 있을 것이다. 고용-피고용 관계와 다르게 전문직은 스스로 일을 선택할 수 있다. 그리고 대부분의 개발자는 고용-피고용 관계로서 일을 하지만 전문가로서 의견을 내고 일을 선택할 수 있어야 한다. 이 과정에서 나 스스로가 일의 주인이라 생각하고 주인 의식을 가지는 것이 중요하다.

서문에 나온 내용 중에 “일을 하는 것도 중요하지만 그에 못지 않게, 일을 어떻게 하느냐도 중요합니다.”라고 말하는 부분이 있다. 이 책 내용을 관통하는 말이라고 볼 수 있는데, 결국 일에 대한 프로페셔널리즘이 있는가를 말한다. 개발자는 스스로 어떻게 행동하는가에 따라 만드는 제품의 결과물이 크게 달라진다. 사실 일부러 일을 못하고 싶은 사람은 없을 것이다. 이왕이면 더 잘하고 싶고, 훌륭한 결과물을 만들어서 큰 보상을 받고싶은 사람이 대부분이다. 그리고 그럴수록 다시 프로페셔널리즘이 무엇인가에 대해 고민할 필요가 있다.

성장에 대해

“커리어와 프로페셔널로서의 미래는 누구의 책임인가?”

책 중간에 회사가 자신이 성장하도록 도와주는 것이 없어서 불만이라고 저자에게 말한 직장 동료에 대한 이야기가 나온다. 이에 저자는 위와 같이 되물어보는데, 나는 이 말이 굉장히 중요하다고 생각한다.

흔히 많은 사람들이 회사에서 채용을 했다면 성장할 수 있도록 가르쳐야 한다는 말이 있다. 실제로도 좋은 회사는 채용 후 교육하는 과정을 반드시 거치고 경력자도 더 일을 잘 할 수 있도록 교육하거나 그에 따른 지원을 하는 경우가 많다.

하지만 교육과 성장은 다르다. 성장은 스스로 하는 것이다. 교육은 교육을 받는 대상이 최소한 가지고 있어야하는 지식을 알도록 만드는 것이 목표다. 그렇기 때문에 회사에서 교육을 한다면 일을 하는데에 있어서 최소한의 교육을 하게 될 것이다.

이것만으로 충분하다고 생각할 수도 있지만 만약 더 많은 기회를 얻거나 욕심이 있다면 성장에 대한 것을 잊어선 안된다. 결국 나의 커리어는 누군가가 책임져주지 않는다. 나 스스로 챙겨야하는 것이고 내가 전문가로서 나아가고 싶다면 스스로 성장하는 것을 멈춰서는 안된다. 성장을 위한 공부는 시간을 쓰는 것이 아니다. 시간을 투자하는 것이다.

나는 관리자로서 프로답게 했는가?

큰 반성이 필요하다. 관리자는 관리자로서의 프로 정신이 필요하다. 최근들어 여러 책을 읽고, 다양한 사람들에게 조언을 들으면서 내가 아직 부족하다는 것을 깨달았지만 정확히는 관리자로서 프로 정신이 무엇인가를 깨닫지 못한 것이 가장 크다는 것을 이 책을 읽고 느꼈다.

고객을 생각하고 훌륭한 제품을 만들기 위한 사고 방식은 관리자와 개발자 모두가 가져야 하지만 그렇게 만들기 위한 방법은 다르다. 관리자는 단순히 애자일 방법론으로 업무를 할 때 절차와 도구만 신경써서는 안된다. 팀의 역량을 키울 수 있도록 도와주고 최대한 기민(Agile)하게 팀이 움직일 수 있도록 신경써야한다. 뒤돌아봤을 때 나는 절차와 도구, 산출물에 대해서만 신경썼을 뿐 팀의 성장이나 팀의 방향성을 정하는 일에는 등한시 했다는 것이 떠올랐다.

나는 아직 초보 관리자다. 이를 명심하고 프로답게 무엇을 할 수 있는지, 그리고 어떻게 해야 더 잘할 수 있을지 끊임없이 고민해야 한다.

TDD에 대해

본래 나는 스타트업 업계에 오래있었고 주로 확실한 제품보다는 빠른 검증을 위한 작업을 할 때가 많았다. 그러다보니 테스트 주도 개발에 대해서 회의적인 입장이었는데, 최근에는 생각이 달라졌다.

회사의 생존을 위한 업무 프로세스와 제품의 품질, 그리고 지속적인 통합을 위한 업무 프로세스는 다를 수 밖에 없다. 최근에는 그것을 깨닫고 적극적으로 테스트를 도입하려고 하고 있다. 다시금 사용자 스토리 기반으로 작업할 것을 정하고 그것에 대한 인수를 자동화된 테스트를 통한 통합을 하려고 준비 중이다. 아직 결과가 나올정도로 진행되지는 않았지만 한 달정도의 과정을 거치면 어떻게 될지 기대 중이다.

마치며

신기하게도 딱 지금 내 상황에 맞는 책을 읽게 되었다. 책은 전부 읽었지만 내용에 대한 정리는 아직 전부하지 못했다. 온전히 내것으로 만들기 위해서는 한 번 더 읽고 정리할 시간이 필요할 것 같다. 앞으로 일할 날은 많다. 어떻게 커리어를 이어나갈 것인지는 나에게 달렸다.