함께 자라기 서평 - 자라기편에서 부족했던 ‘함께’ 파트를 보완한 글입니다.
함께
1) 집중
그룹 차원의 몰입이 가능하며, 팀원들이 상시 대면 의사소통을 할 수 있는 공간이 생산성 향상에 도움이 된다. 팀 전체가 공유할 수 있는 ‘시끄러운’ 공간을 주는 것도 (어쩌면 더 많이) 생산성 향상에 도움이 된다고 주장한다.
우아한테크코스 캠퍼스를 다시 생각해보게 해준 말이다. 조용한 편이 아니라 약간의 불만을 가지고 있던 우아한테크코스 캠퍼스가 어쩌면 더 집중을 하기에 적절한 환경이지 않았을까? 돌이켜보면 언제든지 떠들 수 있는 환경이었기에 오며가며 크루들과 코드에 관해서도 이야기를 나누고, 개발과 관련된 고민에 관해서도 이야기를 나누고는 했었다. 이러한 환경이 생산성 향상에 오히려 큰 도움이 되었던 것이 아니었을까.
2) 협력
실력이 뛰어난 프로그래머는 보통 정도의 실력을 가진 프로그래머에 비해 커뮤니케이션, 협력 능력이 더 뛰어나다. 게다가 실력이 뛰어난 프로그래머는 커뮤니케이션과 협력에 더 오랜 시간을 들인다. 반면 설계나 코딩, 테스팅에 들이는 시간에는 통계적으로 큰 차이가 없다. 시각화 없이 협력하는 것보다 중간 매체(화이트보트, 종이 등)을 두고 협력하는 것이 훨씬 낫다는 등의 연구들이 있습니다.
실력이 뛰어난 프로그래머는 커뮤니케이션, 협력 능력이 더 뛰어나다. 왜 그럴까? 왜 실력이 더 뛰어난 사람은 설계, 코딩같은 하드스킬이 뛰어난 것 뿐 아니라 커뮤니케이션과 협력 능력이 더 뛰어날까?
결국 개발은 혼자 하는 게 아니어서 그렇다. 복잡한 시스템은 한 사람이 다 이해하고 만들 수 없으니, 잘하는 사람일수록 지식을 나누고 같이 일하는 걸 중요하게 여기게 된다. 그리고 남이 짠 코드를 오래 유지보수해본 사람이라면 문서화랑 명확한 소통이 왜 중요한지 몸으로 겪었을 거고.
그렇다. 개발은 기획자, 디자이너, 백엔드 개발자, 프론트엔드 개발자(다른 팀원)와 함께 하나의 서비스를 만들어나가는 과정이다. 결코 혼자서 전부 다 할 수 없다. 그렇기 때문에 필연적으로 서로가 소통을 해야하며, 이 소통을 잘해야 서비스를 잘 만들어나갈 수 있다. 마라톤 선수가 잘 달리기 위해서 호흡을 잘하는 것이 중요하듯, 개발자에게 타자 실력이 중요하듯, 팀의 구성원에게는 의사소통 능력이 중요한 것이다.
앞으로도 이 ‘의사소통’을 어떻게 더 잘해야할지 끊임없이 고민을 하며 우테코 생활을 해야겠다고 생각했다.
복잡한 현상에 대한 이해를 발전시켜 나갈 때, 인간 지성에서 가장 강력한 도구는 추상화다. 실세계의 특정한 대상체, 상황, 과정 간의 유사성을 인식하는 데에서, 그리고 이러한 유사성에 집중하고, 차이점은 일시적으로 무시하는 결정에서 추상화가 생겨난다. 짝 프로그래밍은 대화를 통해 추상화를 높이게 한다. 한 컴퓨터라는 구성은 구체화를 통해 검증하게 된다.
자신이 작성하는 코드의 추상화를 높이고 싶다면 혼자 고민하지 말고 다른 사람들과 협력하고 대화하세요. 같이 그림도 그려보고 함께 소스코드를 편집하세요. 인간에게는 다른 인간과 소통하고 협력할 수 있는 놀라운 능력이 있습니다. 대화는 기적입니다.
우아한테크코스에서는 페어 프로그래밍을 자주 진행한다. 나는 이 활동이 단순히 소프트 스킬을 기르는 시간이라 생각했다. 내 의견을 논리정연하게 이야기하는 능력, 상대방의 의견을 수용하는 능력, 둘의 의견을 조율하는 능력, 내가 개발하는 행위에 대해 메타인지하는 것 등의 소프트 스킬을 기르는 시간 말이다.
이 책에서는 더 나아가 ‘추상화’를 강조한다. 추상화는 여러 대상, 상황, 과정 간의 유사성을 인식하고, 이러한 유사성에 집중하며, 차이점은 일시적으로 무시하는 과정을 말한다. 페어 프로그래밍을 하며 다양한 관점과 경험을 교환하며 서로가 놓칠 수 있는 패턴이나 유사성을 발견할 수 있다. 코드를 계속 설명하다 보면 자연스럽게 일반화해서 생각하게 되고, 즉각적인 피드백이 오가면서 추상적인 개념도 더 빨리 다듬어진다.
내 페어 프로그래밍을 다시 돌이켜보게 되었다. 페어 프로그래밍의 핵심은 ‘대화’이다. 대화를 하며 서로의 다양한 관점과 경험을 공유하고, 코드를 설명하고, 즉각적인 피드백을 교환하는 것이 핵심이다. 초반에는 이러한 페어 프로그래밍 요소에 신경을 쓰지만 후반부가서는 시간에 쫓겨 기능 요구사항을 구현하는데에 더 집중을 하게 되고는 했다. 앞으로는 기능 요구사항을 전부 다 충족시키지 않더라도 페어 프로그래밍의 핵심에 집중을 해야겠다고 생각했다.
3) 공유
각자 여러 개의 디자인을 만들고 그걸 모두 공유한 경우 신뢰가 유의미하게 증가했다. 나의 작품이 하나밖에 없을 때는 ‘작업물 = 나‘가 된다.
4) 성장
성장이 속도가 빠른 팀은 도전 자체를 학습 능력에 대한 도전으로 받아들였고, 같이 학습해야 한다고 생각했습니다. 학습을 팀의 중대한 목표로 받아들였습니다. 리더는 기회와 가능성, 큰 변화의 흐름에 동참하는 중요성과 즐거움 등을 강조했습니다. 우선 자신의 학습 환경을 만드세요.
학습과 일을 굳이 분리하지 말고 동체로 만드세요. 학습과 실행은 하나입니다. 진정한 학습은 실행 속에서 이뤄지고, 진정한 실행은 학습을 수반합니다.
“작지만 유용한 프로그래밍들을 매일 작성할 것을 추천합니다.” - 워드 커닝햄 학습 공동체를 구축하세요. 주변에서 나와 함께 학습 환경을 만들 수 있는 동지를 찾아보세요. 그것이 쾌속 학습으로 가는 지름길입니다.
팀과 성장. 팀원들과 함께 성장하고 싶다. 팀이 아직 만들어지지 않은 현재에 어떻게 이런 ‘학습 공동체’를 만들 수 있을까? 지금 내가 하고 있는 스터디가 곧 학습 공동체라 할 수 있지 않을까? 스터디에서 적극적으로 공유하고, 주제를 던지고 이야기를 나누자.
맺으며
우아한테크코스는 이 책에서 이야기하는 ‘함께’를 실천하기에 최적의 공간이다. 매일 부대끼며 생활하고, 데일리 미팅으로 함께 이야기를 나누며 하루를 시작하고, 페어 프로그래밍으로 함께 개발을 하고, 스터디도 함께 한다. 회사에서도 충분히 ‘함께’를 실천할 수 있을 것이다. 회사에서는 회의를 진행하기도 하고, 수시로 코드에 관해 이야기를 나눌 수도 있기 때문이다.
결국 개인의 성장과 팀의 성장은 별개가 아니다. 나는 그 첫 걸음을 동료에게 "이 코드 어떻게 생각해?"라고 물어보는 것부터 시작하려 한다.