독서/실용주의 프로그래머

1장: 실용주의 철학

yesman9 2023. 11. 20. 16:08

Topic 1. 당신의 인생이다

불만이 많은 프로그래머들에게 이렇게 질문한다.

" 왜 직접 바꾸지 않습니까?"

Tip 3. 당신에게는 에이전시가 있다.

> 스스로 행동을 직접 결정할 수 있는 힘이 있다.

 

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

납품이 늦어지거나, 예상치 못했던 기술적 문제가 발생한다.

이런 일이 일어나면 우리는 가능한 전문가답게 처리하고 노력한다.

이는 정직하고 솔직해져야 한다는 것이다. 우리는 자신의 능력에 자부심을 가질 수 있지만, 실수나 무지 같은 단점도 인정해야만 한다.

Tip 4. 어설픈 변명 말고 대안을 제시하라.

> 상사에게 변명하기 전에 내면의 소리를 들어 보라. 곁에 놓인 고무 오리에게라도 이야기해 보라. 변명이 그럴싸하게 들리는가? 아니면 멍청하게 들리는가? 상사에게는 어떻게 들릴까?

코드를 지워야 하나? 지워야 한다고 말하고 리팩터링의 가치를 설명해 줘라.

부탁을 어려워하지 말고 도움이 필요하다는 사실을 인정하라.
"잘 모르겠어요" (X)
"잘 모르겠어요. 하지만 알아볼게요." (O)

 

Topic 3. 소프트웨어 엔트로피

엔트로피: 시스템 내의 '무질서'한 정도를 가리키는 물리학 용어.

소프트웨어의 부패: 소프트웨어내의 '무질서도'가 증가하는 것 (= 기술의 부채)

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

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

시간이 없다면 판자로 덮는 것만이라도 하라.
불쾌한 코드를 주석 처리, '아직 구현되지 않았음' 메시지 표시, 가짜 데이터로 대치 등

깨끗하고 잘 기능하던 시스템이 일단 창문이 깨지기 시작하면 급속도로 악화되는 경우를 많이 보았다.

이미 잘 설계되었으며 우아하다면, 비록 불길이 일어날지라도(데드라인, 출시 날짜, 시사회 데모 등) 코드를 엉망진창으로 만들고 필요 이상의 손상을 가하는 첫 번째 사람이 자신이 되는 것만은 피하려 할 것이다.

 

Topic 4 돌멩이 수프와 삶은 개구리

Tip 6. 변화의 촉매가 되라.

무엇을 해야 하는지, 어떻게 해야 하는지 정확히 아는 경우가 있다. 전체 시스템이 눈앞에 빤히 그려지고, 여러분은 그 시스템이 옳다는 걸 안다. 하지만일에 착수하려고 허락을 구하는 때부터, 뭔가가 지연되거나 사람들이 멍한 눈으로 여러분을 바라본다. 위원회가 생길 테고, 예산 승인이 필요하고, 일들이 복잡해지기 시작한다. 모든 사람이 각자 자신의 자원을 지키려고 할 것이다. 이걸 '시작 피로'라고도 부른다.

돌멩이를 내놔야 할 때다. 일단 무언가 생기면 사람들에게 보여 주고 그들이 경탄하게 하라.
"물론 ~~를 추가하면 더 나아질 수도 있겠죠."
물러나 앉아 여러분이 애초에 원했던 그 기능을 추가해 달라고 사람들이 부탁하기 시작할 대까지 기다려라.

Tip 7. 큰 그림을 기억하라.

프로젝트는 서서히 구제불능인 상태가 되어버린다. 소프트웨어 참사는대부분 너무 작아 알채기 힘들 정도의 문제에서 시작되고, 어느 날 갑자기 폭주한다. 시스템은 애초의 명세와 조금씩 조금씩 기능이 달라진다. 그러다 보면 코드에 패치가 하나 둘 적용되다가 원본이 하나도 남지 않을 지경이 된다.

큰 그림을 기억해라. 끓는 물 속의 개구리가 되지 말라.

 

Topic 5 적당히 괜찮은 소프트웨어

여기서 '적당히 괜찮은'이라는 표현은 형편없는 코드를 의미하지 않는다. 요구사항, 보안 등을 충족해야 한다.

보통 다른 사람을 위해 소프트웨어를 작성한다.
"가끔은 그들이 무엇을 원하는지 알아내야 한다는 것을 용케 기억하기도 한다."

Tip 8. 품질을 요구 사항으로 만들어라.

놀랍게도 많은 사용자가 멋지고 휘황찬란한 버전을 위해 1년을 기다리느니 차라리 오늘 당장 좀 불편한 소프트웨어를 사용하고 싶어한다.

사용자에게 뭔가 직접 만져볼 수 있는 것을 일찍 준다면, 피드백을 통해 종국에는 더 나은 해결책에 도달할 수 있을 것이다.

멈춰야 할 때를 알라.

그냥 넘어가고 코드를 현재 상태로 한동안 그대로 놓아두라. 완벽하지 않을 수 있다. 그래도 괜찮다.

 

Topic 6. 지식 포트폴리오

Tip 9. 지식 포트폴리오에 주기적으로 투자하라

지식 포트폴리오는 투자 포트폴리오와 비슷하다.

  1. 소량으로라도 주기적으로 투자해야한다.
  2. 더 여러 가지를 알수록 자신의 가치는 높아진다.
  3. 위험한, 안정적인 항목에 분산 투자하라.
  4. 새롭게 떠오르는 기술이 인기를 끌기 전에 미리 알고 학습
  5. 주기적으로 포트폴리오를 점검하라


포트폴리오의 종잣돈이 될 지식 자산 만들기

  1. 매년 새로운 언어를 최소 하나는 배워라
  2. 기술 서적을 한 달에 한 권씩 읽어라
  3. 기술 서적이 아닌 책도 읽어라
  4. 수업을 들어라
  5. 지역 사용자 단체나 모임에 참여하라
  6. 다른 환경에서도 실햄해 보라
  7. 요즘 흐름을 놓치지 말라

 

Tip 10. 읽고 듣는 것을 비판적으로 분석하라
  1. 왜냐고 다섯 번 묻기
  2. 누구에게 이익이 되나?
  3. 어떤 맥락인가?
  4. 언제 혹은 어디서 효과가 있을까?
  5. 왜 이것이 문제인가?

 

Topic 7. 소통하라!

Tip 11. 한국어든 영어든 하나의 프로그래밍 언어일 뿐이다.

> 사람과의 소통을 잘 해야한다.

"당신이 한 의사소통의 의미는 당신이 받은 반응이 결정한다"

  1. 청중을 알라
  2. 말하고 싶은 게 무언지 알라
  3. 때를 골라라.
  4. 스타일을 골라라
  5. 멋져 보이게 하라
  6. 청중을 참여시켜라
  7. 경청하라
  8. 응답하라
  9. 코드와 문서를 함께 둬라
Tip 12. 무엇을 말하는가와 어떻게 말하는가 모두 중요하다.

> 이메일이나 메모 등의 사소하더라도 항상 답을 하라.
    늘 사람들에게 응답해 주면 때대로 저지르는 실수에 대해 훨씬 더 관대해질 것이다.

Tip 13. 문서를 애초부터 포함하고, 나중에 집어넣으려고 하지 말라

> 불필요하거나 불가피하게 해야하는 일이라고 생각하지 말아라.