본문 바로가기
Book

[독서 기록] 소프트웨어 장인, 산드로 만쿠소

by Renechoi 2023. 5. 28.
 
소프트웨어 장인
이 책에서 풀어낸 소프트웨어 장인정신의 프로페셔널리즘, 기술적 탁월함, 고객 만족은 애자일, 린(lean) 원칙들과 시너지를 일으켜 소프트웨어 업계를 한 단계 도약시킬 수 있다. 또한 프로젝트와 개발자를 공장 운영과 생산 라인 노동자로 보는 관점을 바꾸는데 기여할 것이다. 그리고 책에서 다룬 경험을 바탕으로 한 사례와 실용적인 조언은 소프트웨어 개발자뿐만 아니라 프로젝트와 연관이 있는 모든 참여자에게 도움이 될 것이다.
저자
산드로 만쿠소
출판
길벗
출판일
2015.09.25

 

"이 코드는 지금 수정 못해. 담당자가 휴가에서 돌아와야 해. 다른 사람은 이 코드를 이해할 수가 없거든."이라는 식의 이야기가 흔한 때였다.

- 28p 

 

 

 

해가 가면서 '고참'이라는 것이 '일시적'이고 '상대적'임을 알게 되었다. 일시적이라는 이유는 기술이 발전함에 따라 고객이 기존과 다른 형태의 시스템과 기술을 요구할 수 있기 때문이다. 나만 해도 15년 동안 클리퍼로 폭포수 모델 개방 방법론을 적용해 개발했지만, 현대의 모바일 어플리케이션과 애자일 방법론에서는 전혀' 고참'이라고 할 수 없다.

- 32p 

 

 

좋은 프로그래밍 관례나 기술이 서로 다른 종류의 시스템이나 환경에 공통으로 적용될 수는 있지만, 코딩은 개발자가 해야 하는 많은 일들 중에 하나일 뿐이다. 코딩을 잘 하거나 특정 언어나 프레임워크에 매우 익숙하다고 해서 고참 개발자가 되는 것은 아니다. 

- 32p 

 

 

소프트웨어 개발자가 소프트웨어 개발 업무만 하면 되던 시절은 지나갔다. 코딩과 관련된 거이 아니면 개발자와 상관없는 문제라는 태도는 이젠 용납되지 않는다. 기업들은 더 작아지고 기민해지며 조직 계층 구조도 평탄해지고 있다. 한 가지밖에 할 줄 모르는 지엽적인 전문가들은, 이제 자기 전문 분야와 더불어 비즈니스에 관련된 여러 방면에 조예가 있는 사람들로 바뀌고 있다.

- 34p 

 

 

애자일은 어떤 단일 개념이 아니다. 애자일은 서로 다른 여러 맥락에 따른 방법론과 테크닉의 조합이다. 소프트웨어 프로젝트는 변화 자체가 기본 속성이다. 애자일은 개발팀과 기업들이 그러한 변화에 적응할 수 있도록 변화와 관련된 위험들을 줄인다.

- 38p 

 

 

애자일 방법론들은 모두 빠르고 짧은 피드백 루프에 대한 것이다.

- 39p 

 

 

애자일 매니페스토에서는 분명하게 '절차와 도구보다는 개성과 화합을' 중요시 함을 선언하고 있지만, 애자일 전환은 온통 절차와 도구로 끝나 버린다. 스크럼을 도입하고, 스탠딩업 미팅을 하고, 백로그 관리툴을 사용하는 것만으로 갑자기 소프트웨어의 품질이 더 좋아지거나 개발자들의 역량이 높아질 수는 없다. 기술적 탁월함의 개선 없이 절차만 개선하는 것은 무의미하다.

-54p 

 

 

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

- 57p 

 

 

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

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

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

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

- 67p 

 

 

소프트웨어 개발자들이 내향적인 모버맹이어도 괜찮다는 것은 이제 옛날 이야기다. 아이디어를 주고 받고, 페어 프로그래밍을 하고, 사회적으로 교류할 수 있는 인적 네트워크를 형성하는 것은 성공적인 커리어를 위해 상당히 중요하다.

- 95p 

 

 

같은 작업량의 기능이라도 프로젝트 초기에는 금방 구현할 수 있었던 것이 나쁜 코드들이 쌓인 프로젝트 중후반에는 훨씬 더 오랜 시간을 들여야만 구현이 완료된다. 코드의 품질이 낮아질수록 새로운 기능을 추가하거나 버그를 수정하거나 어떤 기능을 테스트하는 일이 점점 더 어려워진다. 

- 129p 

 

 

 

장인은 정원사다. 장인은 꾸준히 코드 베이스를 돌보고 두려움 없이 빠르게 리팩토링을 한다. 장인은 전체 애플리케이션을 몇 분만에 테스트할 수 있는 자동화 테스트를 구축하고 활용할 줄 안다. 장인에게 시간적인 제약이나 요구사항의 변경이 나쁜 코드를 위한 변명이 될 수는 없다. 장인은 좋은 디자인 원칙들과 테크닉을 전체 애플리케이션의 생에에 걸쳐 적용했을 것이기 때문이다. 

- 131p 

 

 

개발자들이 의도적으로 나쁜 코드를 작성하지는 않는다. 다만 항상 왜 그렇게 될 수밖에 없었는지 핑곘거리를 찾는다. 

- 133p 

 

 

단위 테스트 작성은 별개의 업무인가

... '단위 테스트 구현'을 별도의 작업 항목으로 정의하는 개발자들이 많다. 단위 테스트 구현에 정규적인 업무 시간을 따로 할당하려는 의도이다. 절대 그래서는 안 된다.

- 137p 

 

 

 

테스트하지 않았다면 코드 작성을 완료했다고 할 수 없다.

- 138p

 

 

지속적인 통합과 TDD 

 

 

 

역량이 더 높아질수록, 스스로에게 기쁨을 주는 일을 찾기가 쉬워진다. 

- 176p 

 

 

 

채용 공고에 직무 요건 목록을 나열하는 것은 지양한다. 직무 요건을 꼭 작성해야 한다면 태도와 책임, 프로젝트 종류, 사용 기술(요구 조건이 아니라 참고 정보로서) 그리고 가치관과 회사의 문화에 집중도니 내용으로 채워져야 한다.

- 185p 

 

SQL을 사용할 줄 아는 자바 개발자, 5년 이상의 J2SE 또는 J2EE 경력, 3년 이상의 SQL 사용 경력, 이러한 것들은 이 회사가 고참 개발자의 기준을 개발자가 가진 지식이 아니라 특정 기술을 얼마나 오래 사용했었는가를 판단한다는 것을 알 수 있다. 

- 187p

 

'시스템 아키텍트, 자바 팀 리더, ... 긴밀히 협력하여'라는 부분은 자기 조직화되는 팀이 아닌 계층 구조임을 암시한다.

- 187p 

 

시작과 마지막 부분에서는 '금융 서비스, 뱅킹, 투자 관리 및 관련 비즈니스를 배우고 경험을 쌓을 기회가 있다'는 것을 강좌고 있다. 은행 업계에서 일해 본 경험을 바탕으로 비즈니스를 더 배워서 관리자가 되는 커리어 개발 기회를 얻을 수 있다는 의미임을 알 수 있다.

- 187p

 

'기술에 대한 열정과 ... 배움을 얻고자 하는 개발자를 환영'한다는 부분을 뒷받침하는 내용을 직무 요건에서 전혀 찾을 수 없다. 그러한 열정이 어떻게 보상받고 가치를 부여받는지, 회사의 개발 문화와는 어떻게 연결되는지 아무런 내용이 없다.

- 187p 

 

 

 

이런 분을 찾습니다.

- 소프트웨어 자체를 중요시하고 돌볼 줄 알아야 합니다. 글자에 지나지 않는 이력서의 공허한 다짐들이 아니라, 자신의 업무를 명확히 하고 그 행동에 책임질 수 있는 열정이 있어야 합니다.

- 소프트웨어 설계에 대한 안목이 있어야 하며 여러 주제들에 대해 당신의 경험이나 자료, 실험을 바탕으로 유창하게 의견을 개진할 수 있어야 합니다.

- 당신에게 있어서 일은 단순히 직장에 출퇴근하는 것 이상의 의미가 있어야 합니다.

- 188p 

 

 

우리는 코드 타이핑이 일의 병목점이 아니라는 것을 알고 있습니다.

- 188p 

 

 

 

일은 단순히 일이 아니다.

훌륭한 개발자들에게 일은 그냥 일이 아니다. 일은 취미이자 열정이다. 좋아하는 일을 하면서도 돈을 벌 수 있어서 행운이라고 느낀다. 일은 단순한 의미의 일 이상이기 때문에 훌륭한 개발자들은 회사도 같은 방식으로 생각하기를 바란다. 개발자들은 그들이 빛날수 있는 기회와 재미난 일거리를 많이 제공해줄 회사를 찾는다. 

- 191p 

 

 

 

내가 가장 중요하게 생각하는 개발자의 자질이 무엇인지, 개발팀에 어떤 문화를 심고 싶은지 곰곰이 생각해보았다. 결론은 열정적인 소프트웨어 장인이었다. 열정은 기술적인 역량이나 프로그래밍 언어에 대한 이해보다도 더 중요한 조건이었다. 나는 항상 새로운 것을 시도하고, 배우고, 지식을 공유하고, 커뮤니티 활동에 적극적인 사람을 원했다.

- 194p 

 

 

많은 개발자들과 이 주제에 대해서 오랫동안 이야기를 나누어 왔지만 그중 단 한번도 특정 기술에 대한 지식이나 경력년수 또는 학위가 훌륭한 개발자의 조건이라고 말하는 사람은 없었다.

- 195p 

 

 

 

미래의 성공 가능성을 높이기 위해서는 열정적인 개발자를 찾아야 한다. 열정적인 개발자는 개방된 사고로 항상 무언가를 배우기를 원하기 때문이다. 그들은 스스로 동기가 부여되어 혁신하고 기술 변화를 이끈다. 그들은 누가 무엇을 하라고 할 때까지 기다리지 않는다. 무언가를 시킬 때까지 그저 가만 있는 사람들은 회사를 정체 상태로 이끌어 피해야 할 사람들이다. 열정적인 개발자는 성장하기 위해 개인 시간을 기꺼이 투자한다. 당장 오늘은 미숙하더라도 그리 길지 않은 시간이 지나면 훌륭한 프로페셔널이 될 가능성이 매우 높다.

- 199p 

 

 

좋은 면접은 자유 토론과도 같아야 한다. 소프트웨어 개발과 관련하여 지식과 정보를 교환하고, 기술/도구/방법론들에 대해서도 의견을 나누어야 한다.

- 207p 

 

 

- 어떤 테스트를 작성할지 얼마나 빨리 결정하는가? (경험 수준)

- 개발 도구(IDE, 언어, 테스팅/목업 프레임워크, 단축키 등)에 얼마나 익숙한가?

- 클래스, 메서드, 변수 네이밍을 얼마나 적합하게 하는가? 

- 코드를 얼마나 깨끗하고 명료하게 작성하는가?

- 면접관이 제안이나 조언을 할 때 어떻게 반응하는가?

- 지원자가 어떤 방식으로 생각을 전개하는가?

- 문제 해결만이 아니라 문제 해결을 위한 방법과 과정에도 얼마나 주의를 기울이는가? 

- 210p 

 

 

개발자에게 동기를 부여할 수 있는 최선의 사람은 바로 동료 개발자다. 실력있는 개발자, 본받고 싶고 영감을 일으키는 개발자, 바로 소프트웨어 장인이야 말로 최고의 동기 부여가 될 수 있다.

- 240p 

 

 

 

1. 모든 테스트의 통과

2. 중복의 최소화

3. 명료성의 최대화

4. 구성요소의 최소화 

- 301p

 

 

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

- 309p 

 

 

단순히 좋은 코드를 작성하고 비즈니스 가치를 전달하는 것만으로는 좋은 개발자는 될 수 있지만 장인은 될 수 없다. 장인은 일종의 삶의 철학이다. 우리의 삶 전체에 걸쳐서 최선을 다해 역량을 마스터할 과업으로 소프트웨어 개발을 선택한 것이다. 항상 최고의 코드를 만들도록 다른 것들을 희생해서라도 계속해서 배우고 남을 도우리라는 각오를 하는 것이다.

- 310p 

 

 

직장은 그들의 커리어를 위한 지속적인 투자다.

- 314p 

 

단순히 일을 하는 곳이 아니라 배우고 성장하는 장이 되게 한다. 일터를 더 나은 곳으로 만드는 데 투자한다는 의미는 우리의 커리어를 더욱 풍요롭게 할 수 있는 기회를 늘린다는 것과 같다.

- 314p 

 

 

- 나의 커리어로부터 나는 무엇을 원하는가?

- 그것을 성취하기 위한 다음 단계는 무엇인가?

- 이 일은 나의 커리어 방향과 합치하는가?

- 내가 이 회사에 줄 수 있는 가치의 양은 얼마나 되는가?

- 그러한 투자에 대한 이익은 무엇인가?

- 그러한 투자는 대략적으로 얼마 동안 지속되어야 하는가?

- 내가 되고자 하는 프로페셔널에 이르는 데 이일은 어떻게 도움이 되는가?

- 이 일에서 나는 자율성, 통달, 목적의식을 가질 수 있나?

- 나의 고용주와 생산적인 동반자 관계를 맺을 수 있나? 양측 모두 가치 얻고 행복할 수 있나?

- 316p 

 

 

소프트웨어 장인은 아침에 일어나서 출근하고 급여를 받는 것 이상을 생각한다. 소프트웨어 장인은 주변의 것들을 더 나아지게 하고 우리가 사는 세상을 변화시킬 것을 생각한다. 소프트웨어 장인이 된다는 것은 잘 짜여진 코드를 만드는 소프트웨어 개발자가 되는 거세서 훨씬 더 나아간다. 그것은 삶의 철학이다. 탁월함에 헌신하고, 탁월함의 추구를 본성처럼 만든다. 우리 사회의 진화를 이끄는 일에 무한한 자부심을 갖는다.

- 322p 

 

 

반응형