brunch

You can make anything
by writing

C.S.Lewis

by 방자 Feb 07. 2023

실용주의 프로그래머

북리뷰 _ homo eruditio #2


실용주의 프로그래머 _ 데이비드 토머스, 헨드류 헌트 지음 / 2022(20주년 기념판) / 인사이트 


나는 프로그래머가 아니다. 하지만 2022년에 읽은 46권의 책 중 추천하고 싶은 책 5선에 이 책을 꼽았다. 이 책은 프로그래머라면 실용주의 프로그래머가 되기 위해 읽어야 할 필독서이지만, 프로그래머가 아니어도 실용주의 관점으로 문제를 해결하는 접근법을 이해하고, 어떻게 기술을 이상적으로 사용하여 세상을 개선할 수 있는지 이해하는데 도움을 얻을 수 있는 책이다.  


프로그래밍은 무엇을 할 수 있는가? 


저자는 프로그래밍이 프로그래머 혹은 그들의 고객인 사용자가 원하는 것을 컴퓨터가 하게 만드는 기예(craft. 숙련된 작업)라고 말한다. 프로그래머는 훌륭한 프로그래밍을 함으로써 인류의 미래를 덜 고통스럽게 혹은 더 편안하게 만들 수 있다. 그런 의미에서 프로그래머는 숙련된 maker, designer라고 할 수 있겠다. 하지만 저자는 프로그래밍을 건축이 아니라 정원 가꾸기에 비유한다. 한 번에 완벽하게, 멋지게 만들어 내는 것이 아니라 꾸준히 조금씩 자주 개량해야 한다는 것이다. 이것이 실용주의 프로그래밍의 기저이다. 우리는 프로그래머를 "소프트웨어 개발자"나 "소프트웨어 엔지니어", “코더" 등 다양하게 부르지만, 실용주의 프로그래밍의 관점에서 프로그래머의 진짜 역할은 "문제 해결사"다. 이것이 그들이 하는 일이고, 실용주의 프로그래머의 본질이다. 실용주의 프로그래머는 프로그래밍을 통해 문제를 해결하고, 세상을 개선할 책임을 가진다.


실용주의 철학


약점을 보이는 것에 대한 두려움이 가장 큰 약점이다. - J.B. 보쉬에

나는 내가 실용주의자라고 생각한다. 어쩌다보니 그렇게 성장한 것 같다. 나는 실험이나 경험을 통해 배우는 것을 선호하고 지식의 유용성을 중시하는 편이다. 지식은 문제를 해결함으로써 유용성을 가지고, 모든 것은 변화하기 때문에 세상에 절대적 진리라 할 것은 없고, 결국 상황에 맞춰 지속적으로 적용, 탐구해야 한다고 믿는다. 내가 프로그래밍을 할 수 있다면, 나는 아마도 이러한 나의 성향, 철학을 반영하여 책에서 말하는 실용주의 프로그래머가 될 것 같다. 그래서인지 책에 나오는 실용주의 프로그래머가 역량 강화를 위해, 실용주의 팀을 꾸리기 위해 실행해 보면 좋을 것들이 매력적으로 다가왔다. 코드 한 줄 적을 줄 모르지만 코딩을 왜 해야 하는지, 어떻게 해야 하는지, 내 행위의 결과를 무엇을 얻게 될 것인지에 대한 설명이 비교적 잘 이해되고 타당하게 읽혔다. 이야기를 나눈 주변의 프로그래머들은 조직생활의 현실에서 책의 이상을 따라 행동하고 산다는 것이 얼마나 어려운지, 거의 불가능에 가깝다고 했다. 하지만 책에서 언급한 것처럼 누구에게나 주체적으로 원하는 행동을 고르고 행할 수 있는 능력인 에이전시가 있다. 문제가 있다면 일하는 곳을 다른 조직으로 바꿀 수도 있고, 혹은 일하고 있는 조직 내부를 바꿀 수도 있다. 실용주의자는 그렇게 생각하며, 그것을 효과적으로 해 낼 수 방법과 지식을 습득하는데 시간과 노력을 아끼지 않는다. 프로그래머이든 아니든 말이다.



실용주의자라면 어떻게 행동할까? 


오직 인간만이 무언가를 직접 보고, 정확한 예측에 필요한 모든 정보를 획득하고, 심지어 순간적으로는 정확한 예측을 한 후에도, 그런데 그것이 아니라고 말할 수 있다.  - 개빈 드 베커, 서늘한 신호 中

나는 비개발자 임으로 책에 나온 팁들 중 일반적으로 적용할 수 있는 내용 중심으로 기억에 남은 것을 정리했다.   

상대의 요구에 “No”라고 말하지 않고, 대안을 제시한다.  

깨진 창문은 그대로 두지 말고 바로 수리한다. 그래야 쓰레기가 쌓이지 않는다.   

완벽한 소프트웨어(결과물)를 만들 수는 없다. 당신도 그렇다. 기준을 마련하고, 실수에 대비한 방어책을 마련한라. > 계약으로 설계하고, 사용자, 고객의 요구사항은 문서화해서 명시할 수 있다.  

불확실성이 존재하는 개발할 때는  바꾸기 쉬운 설계 (Easy To Change)를 가치로 삶는다.   

자신의 직관과 본능(파충류의 뇌)을 존중한다. 필요한 순간에는 하고 있는 일을 멈추고 뇌에게 시간과 공간을 줄 수 있어야 한다.   

동료와 팀과, 고객과 꾸준히 소통한다. 그들의 참여시키고 경청하고 기록하고 응답한라.   

작고 안정적인 12인 이하의 팀을 유지한다. 서로가 환경 변화에 예민할 수 있도록 독려한다. 그래야 삶아지는 개구리가 되는 우를 범하지 않는다


책에서 흥미롭게 본 실용주의 관점에서 살피면 좋을 개발 관련 용어  

ETC(Easy To Change), DRY(Do not Repeat Yourself)   

애자일 매니페스토 : 애자일은 프로세스가 아니라 협동과 업무 진행을 함에 있어 추구하는 가치이다.  

리팩토링 : 결과의 변경 없이 코드 구조 재조정   

온갖 테스트 : 단위 테스트, 통합 테스트, 테스트를 테스트, 속성 기반 테스트, 성능 테스트 등   

프로토타이핑, 디버깅   



전 세계 인구의 절반 이상이 인터넷을 사용하는 시대이다. 많은 것이 컴퓨터 구현되고 온라인상 거래되고 있다. 그 세상이 어떻게 만들어지는지, 우리의 삶에 어떤 영향을 미치기 있는지 깊이 생각해 본 적이 있는가? 개인의 삶에서 가장 중요한 물품으로 핸드폰이 꼽히곤 한다. 결제도, 소통도, 정보습득도 모두 폰으로 하는 시대에 개별의 기능, 방식을 가진 앱을 만들고 시스템을 만드는 것이 프로그래머의 역할이다. 책에는 이런 구절이 있었다.

 "프로그래머의 작업은 시인과 마찬가지로 순수한 사고의 산물에 가깝다.
허공 위에 공기로 만든 성을 상상의 힘으로 짓는다." 


물론 프로그래머 모두가 커다란 영향력을 가지고 세상을 바꾸거나 개선하는  것은 아니다. 또한 이 컴퓨팅 세상으로 인해 발생되는 수많은 쓰레기와 불편의 측면도 무시할 수 없을 것이다. 하지만 그들은  백지에서 시작하여 우리가 상상할 수 있는 대부분의 것을 만들어 내고 있으며 그로 인해 새로운 세상이 만들어지고, 기존의 세상이 바뀌고 있다. 그것이 단지 기술이 아니라 철학으로서, 가치로서 실용주의적 관점으로 프로그래밍을 봐야 하는 이유일 것 같다. 

매거진의 이전글 프로페셔널의 조건
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari