jgjgill

'소프트웨어 장인'을 읽고

5 min read
the-software-craftsman

소프트웨어 장인: 프로페셔널리즘 / 실용주의 / 자부심

소프트웨어 장인정신

소프트웨어 장인정신은 마스터가 되어가는 긴 여정이다. 소프트웨어 장인정신은 소프트웨어 개발자 스스로가 선택한 커리어에 책임감을 가지고, 지속적으로 새로운 도구와 기술을 익히며 발전하겠다는 마음가짐이다. 소프트웨어 장인정신은 책임감, 프로페셔널리즘, 실용주의 그리고 소프트웨어 개발자로서의 자부심을 의미한다.

정의 이상의 의미

저자는 소프트웨어 장인정신에서 정의 이외에도 여러 의미를 부여한다.

자신이 하는 일에 주인의식을 가지고 프로페셔널하게 행동하고, 고객이 원하는 것이 무엇이든 달성할 수 있도록 돕는다. 다른 개발자들에게 배우고 자신의 지식을 나누며, 경험이 부족한 개발자들을 멘토링하는 것들이다.

소프트웨어 장인정신의 토론 이력

동작하는 소프트웨어뿐만 아니라, 정교하고 솜씨있게 만들어진 작품을

거대하고 복잡한 애플리케이션을 상대할 때 가장 큰 문제는 두려움이다. 소스 코드는 예측가능하고 유지보수될 수 있는 상태여야 한다.

변화에 대응하는 것뿐만 아니라, 계속해서 가치를 더하는 것을

소프트웨어가 오래될수록 고통과 비용이 아닌 그 가치가 커져야 한다.

개별적으로 협력하는 것뿐만 아니라, 프로페셔널 커뮤니티를 조성하는 것을

소프트웨어 장인정신의 중심에는 멘토링과 공유가 있다. 소프트웨어 장인은 항상 열정적으로 자기발전을 추구한다.

고객과 협업하는 것뿐만 아니라, 생산적인 동반자 관계를

파트너십과 프로페셔널한 행동을 계약 관계보다 상위에 둔다.

소프트웨어 장인의 태도

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

해당 파트에서는 주체성을 많이 강조한다고 느꼈다. 굳이 소프트웨어에 국한해서 바라보기 보다는 삶을 살아가는데 가져야할 태도가 아닌가 싶다.

주체성 이외에도 책에서 소개하는 방법들에 대해서는 다음과 같이 요약하고자 한다.

  • 끊임없는 훈련: 더 많이 훈련할수록 더 편안해지고 별도의 노력없이 달성하려고 하는 목표에만 집중할 수 있다.
  • 사회 활동: 다른 개발자와 어울리기
  • 의도한 발견: 모르는 것을 모른다고 말할 수 있는 용기
  • 일과 삶의 균형: 우리는 항상 시간이 있다. 단지 시간을 최적화하지 못할 뿐이다.

영웅, 선의 그리고 프로페셔널리즘

'아니오'라고 말하는 방법 배우기

  • 이미 불가능하다고 알고 있는 것에 대해 '해보겠다'라고 말하지 말기
  • 현실적으로 행동하기
  • 우리가 영웅이 될 수 있다는 망상에 사로잡혀 프로페셔널하게 행동하지 않기
  • 그저 실망시키지 않기 위해 말하는 '네'는 거짓말에 불과(중독적이고 파괴적인 습관)
  • 다툼을 피하지 말고 부딪혀서 어려운 결정을 내리기

이 부분이 참 어려운 것 같다. 내가 할 수 있는 영역과 할 수 없는 영역을 구분하는 것이 중요해보인다. 언뜻 보면 메타인지와도 관련이 있나 싶다.

하지만 그러면서도 '아니오'라고 말하는 것에는 스스로에게 패배했다는 느낌을 받게 된다. 책에서 말하고자 하는 바는 이해가 되지만, 그 적절함이 크게 와닿지가 않는다. 아무래도 아직 이와 관련된 경험이 부족해서이지 않을까? 계속해서 생각하고 고민해야할 부분인 것 같다.

대안 제시

무책임하게 '아니오'에 그치는 것이 아닌 현명하게 문제를 접근하자.

  • 모든 '아니오'에는 하나 이상의 대안들이 따라와야 한다.
  • '아니오'라고 대답하기 전에 문제를 분석해서 대안이 있어야 한다.
  • '아니오'라고 대답해야 하는 상황에서도 항상 '네'라고 말할 방안을 탐색한다.
  • 문제를 어떻게 풀어야 할지 방법을 모를 때 최대한 이른 시점에 정직하게 알려야 한다.
  • 문제 대응이 어떻게 되고 있는지 계속 공유한다.

깨어있는 관리자

솔직함과 투명함을 앞세우자. 현명한 사람은 자신이 모든 것을 알 수 없음을 안다. 문제를 숨기지 않고 드러내는 태도가 모두를 하나의 팀으로서 움직이게 만든다. 이를 통해 성과를 낼 수 있는 것에 몰입하는 분위기와 공동체 의식을 만들도록 하자.

동작하는 소프트웨어

정원 돌보기

프로그래밍은 집을 짓는다기보다는 정원을 돌보는 것에 더 가깝다. - 실용주의 프로그래머 인용

정원이라는 비유가 참 적절하다는 생각이 든다. 기본적이고 지속적인 유지보수만으로도 정원을 훌륭하게 가꿀 수 있다. 하지만 오래 방치하면 그에 따른 수고는 점점 커지게 된다.

시간에 대한 잘못된 인식

다시 한 번 투명성을 잊지 말자. 진행 상황을 투명하게 공유하면 계획과 예측에 의존할 수 있게 된다.

이와 더불어 책임감을 갖자. 소프트웨어 개발자의 삶에 있어 압박은 피할 수 없다. 항상 프로젝트에 다른 사람들도 있다는 사실을 인식하고 책임있게 행동하자.

레거시 코드

태도는 큰 차이를 가져올 수 있는 작은 요소다. - 윈스턴 처칠

무언가가 마음에 들지 않는다면 바꾸어라. 그것을 바꿀 수 없다면, 그에 대한 당신의 생각을 바꾸어라. - 마리 앵겔브레이트

작은 것부터 하나씩. 점진적으로 해결해 나가자.

기술적 실행 관례

실행 관례와 가치

  • 실행 관례는 우리가 매일 같이 습관처럼 해야 하는 것이다.
  • 실행 관례로부터 성과를 얻으려면 진심으로 받아들이고 내재화해야 한다.
  • 실행 관례가 효율적이려면 모든 팀 구성원들에 의해서 그 가치가 납득되어야 한다.
  • 가치와 행동이 일치하는지 봐야 한다.
  • 실행 관례의 도입을 설득할 때는 그것이 가져올 이익에 집중해야 한다.

이 파트를 읽으면서 든 생각은 나뿐만 아니라 다른 사람들의 행동을 변화시키는 건 참으로 어렵다는 것이다. 나 자신부터 책임감과 열정이 있어야 한다. 그리고 팀에 대한 관심과 합리적이게 상황을 분석할 수 있는 시야가 필요해 보인다.

어떻게 하면 내가 속해 있는 조직의 문화를 이상적으로 만들 수 있을까? 계속 고민하고 좋은 사례들을 찾아볼 필요성을 느낀다.

낮은 사기의 대가

일하는 방식을 개선하지 못하는 이유는 동기가 낮기 때문이다.

개발자들에게 열정을 불어넣기

무엇보다 중요한 것은 열정이다.

  • 기존 개발자들에게 자극을 주고 동기를 부여하는데 가장 효과적인 방법은 외부로부터 소프트웨어 장인을 수혈받는 것이다.
  • 소프트웨어 장인에게 항상 최선을 추구하는 것은 내재된 본능과도 같다.
  • 개발자들에게 동기를 부여할 수 있는 최선의 사람은 바로 동료 개발자이다.

배움의 문화

배움의 문화 만들기

배움의 문화를 만들면 효율적으로 열정을 주입할 수 있다. 항상 더 나은 방법을 찾고 스스로 개발하고자 하는 사람들로 가득찬 환경을 만들자. 높은 수준의 동기가 부여된 사람들은 일을 재미있게 할 뿐만 아니라 항상 회사 바깥 세상에 관심을 갖는다.

아무도 참여하려 하지 않는다면

무언가에 관심을 갖도록 사람들의 행동을 변화시키기는 어려운 일이다. 더 나은 일터로 만들기 위해 모든 사람을 바꿀 필요는 없다.

  • 모범을 보여라
  • 관심을 보이는 사람들에게 집중하라
  • 강제하지 마라
  • 모두를 변화시키려 들지 말라
  • 모임에 대한 약속을 제때하라
  • 허락을 구하지 마라
  • 투덜대지 마라
  • 리듬을 만들라

기술적 변화의 실행

기술 변화를 시도할 때 많은 회의론과 부딪히게 된다. 이때 새로운 아이디어에 좀 더 열린 태도를 갖도록 어떻게 설득할 수 있을까?

준비

가장 중요한 것은 용기다. 스스로에 대한 자신감이 필요하다.

  • 단순함을 추구한다.
  • 상대방의 언어로 말해야 한다.
  • 말한 내용에 대해 스스로 제대로 이해하고 있어야 한다.
  • 상대방을 존중해야 한다.
  • 경청하는 법을 배운다.

기술적 변화를 시작하는 방법

  • 신뢰를 쌓으라
  • 전문성을 확보하라
  • 모범을 보여 사람들을 이끌라
  • 신중하게 싸울 곳을 정하라
  • 점진적으로 반복, 관찰, 수용하라

두려움과 자신감 부족

두려움은 프로페셔널로서 행동하고 자신의 의견을 표현하는 것을 막는다. 무능함은 우리를 둘러싼 일들을 올바른 방향으로 변화시키기 위한 싸움을 할 수 없게 한다.

주변을 바꾸고 싶다면 두려움을 버리자!

소프트웨어 장인으로서의 커리어

장인의 길

열정. 이 단어 하나가 모든 것을 요약한다.

항상 주어진 문제에 가장 적합한 도구를 찾고 단순한 해결책을 추구한다. 코드 작성이 아니라 문제 해결에 집중한다. 코드를 짤 때는 높은 품질의 코드를 작성하는데 집중한다.

장인은 긍정적인 일들로 연상되는 존재여야 한다. 통찰력있는 기여, 열정, 지식, 훌륭한 동료로서 인정 받는다면 더할나위 없다.

장인의 커리어는 정직과 용기 위에 세워진다. 장인은 고객에게 무언가를 숨기지 않는다.

마무리

장인. 멋있는 말인 것 같다. 책에서 추구하는 가치와 목표를 방향으로 삼아 나도 소프트웨어 장인이 되고 싶다. 😆

아직은 경험이 많지 않아 내가 겪어보지 못한 상황들도 여러 존재했고 아직 내 수준에 맞지 않는 내용도 어느 정도 있었다. 그래서 향후에 여러 경험을 쌓은 뒤에 다시 읽으면 더 많은 영향을 받을 수 있겠다는 느낌을 받은 책이다.

@2023 powered by jgjgill