book-the-software-crafatsman

ISBN: 979011086659-48-9 93560

목차

* 1부: 이념과 태도
    * 21세기의 소프트웨어 개발
    * 애자일
    * 소프트웨어 장인정신
    * 소프트웨어 장인의 태도
    * 영웅, 선의 그리고 프로페셔널리즘
    * 동작하는 소프트웨어
    * 기술적 실행 관례
    * 길고긴 여정
* 2부: 완전한 전환
    * 인재 채용
    * 소프투웨어 장인 면접하기
    * 잘못된 면접 방식
    * 낮은 사기의 대가
    * 배움의 문화
    * 기술적 변화의 실행
    * 실용주의 장인정신
    * 소프트웨어 장인으로서의 커리어

이 책은 소프트웨어 장인정신이라 칭하는 개발자가 가져야할 태도에 관한 책이다. 공감가는 부분이 꽤 있었고 도움이 되는 부분도 있었다.

소프트웨어 장인(이하 장인)은 엘리트나 슈퍼 개발자를 칭하지 않는다. 장인정신을 가진 개발자를 말한다. 주니어개발자도 장인이 될 수 있다. 장인 정신의 핵심은 열정이다. 열정이 있기 때문에 장인은 일을 일로만 바라보지 않는다. 즐거워야하고 그 즐거움을 나누고 싶기에 이를 전파한다. 이 열정은 다른 개발자도 장인이 되고자 하는 의지를 불태워 장인 파이를 키우고 종국적으론 소프트웨어 산업 전반의 역량을 향상시켜 사회에 기여하게 된다.

장인들은 열정이 있기 때문에 스스로 공부하고 이를 전파하고자 하는데 이에 대해 사회적인 가로막힘이 현실적으로 존재한다. 경직된 조직 문화, 연봉, 근무 시간, 환경 여러가지 요소가 있을 수 있는데 이에 대한 타개 방법을 프로페셔널리즘에 입각해서 풀고 있다. 개발자가 위에서 시키는 일만 하는 사람이 아니기 위해선 비즈니스를 이해해야하며 스스로 결정하고 책임을 지는 태도로 임해야한다. 침체에 빠진 조직을 구하기도 하며 구할 수 없을때는 떠나기도 해야한다. 저자는 5년이상 일한 기업이 없다고 적고 있다. 우리는 프로페셔널이기 때문에 단지 사람이나 이 기업이 마음에 든다고해서 영원히 있을 수 없고 자신의 커리와 회사의 이해가 맞을 때 우리는 함께 할 수 있다.

말도 안되는 인원과 일정이 주어지는 프로젝트에서 우리는 안된다고 의사를 전할 수 있어야하며(단순히 우리의 매니저가 아닌 마케팅 담당자 등에) 이를 영웅이 되고자하는 마음으로 푸는 프로페셔널하지 못한 결정을 하면안된다. 이건 개인을 위해서도 회사를 위해서도 옳지 못한 행위라는 것을 인지해야한다.

채용과 면접에 관해서도 나오는데 이 부분이 재밌다. 공감이 되어 기억에 남는 부분들을 적어본다.

채용과 관련해서는 장인을 찾기 위한 방법이 기재되어 있다. 장인에게 중요한건 단순 연봉이 아니기 때문에 이들을 찾기 위해서는 채용 공고부터 다시 써야한다. 일반적인 채용공고로는 장인을 꼬실 수도, 과한 오버스펙 공고로는 장인 풀 자체를 줄여 뽑을 수 없게 된다. 장인을 찾기 위한 몇가지 방법을 제시했는데

장인을 찾기 위한 그물망

* Github 계정
* 블로그
* 오픈 소스 활동
* 기술 커뮤니티나 사용자 그룹 활동 내역
* 펫 프로젝트 내용
* 트위터 계정
* 좋아하는 기술서적 목록
* 참석했거나 발표했던 콘퍼런스

위와 같다. 개인적으로 성향등을 고려하였을 때 우선순위를 두자면

* Github 계정
* 블로그
* 기술 커뮤니티나 사용자 그룹 활동 내역

위 정도가 맞을 것 같다. 코드나 오픈 소스 활동등이 그대로 오픈되는 Github 계정은 말할 것도 없고 블로그 또한 자신의 지식을 공유하겠다는 큰 의지표현이라 볼 수 있다(물론 블로그 글을 통해 장인정신이 있는지를 잘 봐야한다). 펫 프로젝트는 개인 프로젝트를 말하는 것으로 보이고 오픈 소스 활동 또한 Github 계정을 통해 모두 노출된다. 기술 커뮤니티에서의 활동 내역은 장인을 찾는데 도움이 될 것 같다. 하지만 트위터의 리트윗충(개인 블로그니 막말한다)이나 페이스북 커뮤니티에는 매우 낮은 수준의 글에도 따봉충이 따르는 경우가 있기 때문에 주의를 요한다. 회사에 다니면 컨퍼러스 참여에 한계가 올텐데 이 부분에 대한 우리나라 회사의 문화(일반화의 오류 일지도?)를 생각했을 때는 컨퍼런스충을 잘 걸러야 장인을 찾을 수 있을 것으로 보인다.

면접 질문

* 수수께기 문제를 내어 면접자를 바보로 만들어선안된다.
    * 버스안에 골프공이 몇개 들어가냐같은 잘문으로 뭘 판단하려는 건지 전혀 모르겠다.
* 코딩
    * 손으로 코딩문제를 풀게한다.
        * 글씨체를 테스트 하는 것인가? 굳이 왜 나쁜 환경에서 문제를 내는 것인가.
    * 인터넷을 못하게 한다.
        * 왜?
    * 알고리즘 문제를 낸다.
        공부해도 잊혀진다. 내 기억력을 테스트 하려는 것인가? 알고리즘은 답이 나와있는 문제다. 인터넷에 공유되어 있다. 이런 문제에 대한 답은. 직군에 따라서는 알고리즘 문제가 나오는 것도 이해한다.

소프트웨어 장인정신은 애자일, 린, XP등과 맥락을 함께 하는 점이 꽤 된다 소프트웨어 장인정신은 실행관례로써 XP를 지지한다. XP를 지지하는 만큼 책 전반에 걸쳐 TDD에 대한 언급이 상당히 많으며 페어프로그래밍을 하라고 하고 있다.

사실 경험적으로도 레거시 코드를 가지고 요구사항과 일정이 빡빡한 프로젝트를 만나게 되면 TDD의 중요성을 느끼게 된다. 프론트엔드 테스트 자동화가 쉽지 않은데 테스트 코드 위주로 코드를 짜지 않으면 추후 리펙토링 때 히스토리 운운하며 사이드 이펙트 날 까봐 아무 것도 건드리지 못하고 예외처리의 예외처리를 해서 코드량이 익스포넨셜하게 증가하는 매직이 일어나게 된다.


많은면에서 생각이 비슷해서 놀랬다. 회사와 장인은 서로 계약관계로 서로를 평가하고 서로 이해관계가 맞아야한다. 이외에도 기술적으로 장인이 되기 위한 글도 있고 해서 지금 앞이 보이지 않거나 뭔가 막혀 있다고 생각하면 생각을 열어 줄 수 있는 기회를 얻을 수 있을 지도 모르겠다.

코드를 넘어