평안하자

[실용주의 프로그래머] 실용주의 철학 본문

Review

[실용주의 프로그래머] 실용주의 철학

eeeeerrr 2024. 2. 14. 08:57
이 책은 당신에 대한 것이다. 

당신이 이 책을 손에 든 이유는 당신이 더 나은 개발자가 될 수 있음을 알기 때문이다. 다른 사람이 더 나아지는 것을 도울 수 있음을 알기 때문이다. 당신은 '실용주의 프로그래머'가 될 수 있다.


실용주의 프로그래머는 무엇이 다른가?
직면한 문제 너머를 고민한다. 문제를 더 큰 맥락에 놓고 더 큰 그림을 보려고 노력한다.
실용주의 프로그래밍은 실용적 사고의 철학에 뿌리를 두고 있다.
이 장에서는 그 철학의 기본을 제시한다.

 

Topic 1 당신의 인생이다.

당신에게는 에이전시(agency)가 있다. 

당신에게는 스스로의 행동을 직접 결정할 수 있는 힘이 있다. 업무 환경이 엉망인가? 하는 일이 지루한가? 문제를 고치기 위해 노력하라. 하지만 너무 오랫동안 노력하지는 말라. 

기술에 뒤쳐지는 기분이 든다면 여가 시간을 쪼개서 재미있어 보이는 것을 공부하라. 자신에게 투자하는 것이니 업무 외 시간에 하라. 

이 업계는 여러분에게 놀랄 만큼 다양한 기회를 준다. 주도적으로 행동해서 그 기회를 잡아라.

 

Topic 2 고양이가 내 소스코드를 삼켰어요.

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

철저한 테스트, 훌륭한 문서화, 탄탄한 자동화 등에도 불구하고 예상치 못했던 기술적 문제가 발생할 수 있다. 우리는 자신의 능력에 자부심을 가질 수 있지만, 실수나 무지 같은 단점도 인정해야 한다.

 

팀 내 신뢰

무엇보다 여러분의 팀과 여러분이 서로를 의지할 수 있어야 한다. 연구에 따르면 창의성과 공동 작업에는 팀 내의 신뢰가 절대적으로 필요하다고 한다. 신뢰에 바탕을 둔 건강한 환경에서는 안전하게 여러분의 생각을 말하거나 아이디어를 제안할 수 있다.

 

책임지기

개인적으로 최선을 다하는 것이 전부가 아니다. 자신이 통제할 수 없는 위험 요소가 있지는 않은지 상황을 분석해야 한다. 여러분에게 불가능하거나 위험 요소가 너무 큰 상황, 또는 결과가 윤리적으로 심각하게 우려되는 상황에서는 책임을 맡지 않을 권리가 있다. 자신의 가치관과 판단에 따라 결정해야 할 것이다.

결과에 대한 책임을 지기로 했다면 그 결과를 감당해야 할 것이다. 다른 사람 혹은 다른 무언가를 비난하거나 변명을 만들어내지 말고, 대안을 제시하라. 안된다고 하지 말고 상황을 개선하기 위해 무엇을 할 수 있는지 설명하라. 

  • 코드를 지워야 하나? 지워야 한다고 말하고 리팩터링의 가치를 설명하라.
  • 최선의 방법을 결정하기 위해 프로토타입을 만들 시간이 필요한가? 
  • 테스트를 개선하거나 재발을 방지하기 위해 자동화를 도입해야 할까?
  • 자원이 더 필요한가? 특정한 기법이나 기술을 더 깊이 있게 배워야 하는가?
  • 사용자와 더 시간을 보내야 하는가? 
부탁을 어려워하지 말고 도움이 필요하다는 사실을 인정하라.
"잘 모르겠어요." 뒤에, 꼭 바로 이어서 "하지만 알아볼게요."라고 말하라. 모른다는 것은 인정하더라도 전문가답게 책임을 지는 좋은 방법이다. 

 

 

Topic 3 소프트웨어 엔트로피

소프트웨어의 무질서도가 증가할 때 우리는 이를 '소프트웨어 부패', '기술 부채'라고 부른다.

 

소프트웨어가 부패하는 데에는 많은 요소가 관여하지만 가장 중요한 것은 프로젝트에서 발생하는 심리학적 혹은 문화적 요소다. 

 

깨진 창문을 내버려 두지 말라.

나쁜 설계, 잘못된 결정, 혹은 형편없는 코드 등이 모두 깨진 창문이다. 발견하자마자 바로 고쳐라! 

적절히 고칠 시간이 없다면 일단 판자로 덮는 것만이라도 하라. 불쾌한 코드를 주석 처리 하거나, '아직 구현되지 않았음'이라고 메시지를 표시하거나, 가짜 데이터로 대치해 놓거나 하라. 더 이상의 손상을 예방하기 위해 어떤 조치든 취하고 여러분이 상황을 잘 관리하고 있음을 보여 줘라. 방치는 다른 어떤 요인보다도 부패를 더 가속시킨다. 

프로젝트의 깨진 창문을 전부 치울 만한 시간이 있는 사람이 없다면, 큰 쓰레기 통을 구하거나 다른 곳으로 이사 갈 계획을 세우는 편이 나을 것이다. 

 

우선, 망가트리지 말라.

부유하고 깨끗한 사람의 집에 불이 났고, 소방관들은 크고 더러운 소방 호스를 집안으로 끌고 들어가기 전에 깔개를 먼저 편 뒤 불을 진압했다고 한다. 당연히 소방관의 최우선순위는 불을 끄는 것이고 2차 피해 따위는 신경 쓰지 않아야 한다. 하지만 그들은 상황을 냉정하게 평가했고 불을 진압할 수 있다는 확신이 있어 그 집에 또 다른 불필요한 피해를 주지 않기 위해 조심했다. 

소프트웨어도 마찬가지이다. 어떤 위기가 찾아왔다고 해서 부가적인 피해를 일으키지 말라. 깨진 창문은 하나로 충분하다.

 

  • 프로젝트를 함께 하는 동료와 깨진 창문을 두세 개 고른 뒤, 무엇이 문제고 그걸 고치기 위해 무엇을 할 수 있는지 토론하라. 
  • 창문이 처음 깨졌을 때 목소리를 낼 수 있겠는가?