시작부터 아래의 내역은 소프트웨어 장인정신이 아니라고 한다.
아름다운 코드
테스트 주도 개발
스스로 조직화된 개발 그룹
특정 기술 또는 방법론
자격인증
종교
개발자라면 중요하다고 생각할 요소인데 아니란다.
도대체 소프트웨어 장인정신의 실체는 무엇일까?
드디어 이 주제에 대한 언급이 시작되며 여러가지 정의를 언급한다.
위키피디아에서의 정의
'소프트웨어 장인정신'은 소프트웨어를 개발할 때 개발자 스스로의 코딩 스킬을 강조하는 개념이다...(생략)
저자는 이러한 정의가 굉장히 딱딱하고, 핵심 의미를 담아내지 않는다며 좋아하지 않는다고 한다.
좀더 주관적인 정의
소프트웨어 장인정신은 마스터가 되어가는 긴 여정이다. 소프트웨어 장인정신은 소프트웨어 개발자가 스스로가 선택한 커리어에 책임감을 가지고, 지속적으로 새로운 도구와 기술을 익히며 발전하겠다는 마음가짐이다. 소프트웨어 장인정신은 책임감, 프로페셔널리즘, 실용주의 그리고 소프트웨어 개발자로서의 자부심을 의미한다.
짧은 정의
소프트웨어 장인정신은 소프트웨어 개발의 프로페셔널리즘에 대한 것이다.
저자가 이 책에서 가장 중요하게 생각하는 짧은 정의다.
정신 이상의 의미
소프트웨어 장인정신은 어떤 이념이나 마음가짐에 더 가깝다고 생각한다. 자신이 하는 일에 주인의식을 가지고 프로페셔널하게 행동하고, 고객이 원하는 것이 무엇이든 달성할 수 있도록 돕는다. 다른 개발자들에게 배우고 지식을 나누며, 멘토링하는 것들이다.
지금도 유튜브나 블로그에 다양한 지식을 나누는 개발자가 많다. 시니어부터 개발지망생까지 다양한 지식이 공유되어 개발자 역량 상승에 이바지하고 있다. 여가시간을 투자하여 지식을 나누는 모습을 보면 대단할 뿐이다.
하지만 가끔 잘못된 지식도 존재해서 교차검증이 필요하다.
책에선 여러가지 비유가 나온다. 공예나 예술, 사업 등 다양하지만 저자는 비유에 초점을 맞추지말고, 그 비유가 상징하고 장려하는 가치와 행동을 중요하게 생각해달라고 한다.
소프트웨어 장인정신 매니페스토 📃
소프트웨어 장인을 열망하는 우리는, 스스로의 기술을 연마하고, 다른 사람들이 기술을 배울 수 있도록 도움으로써 프로페셔널 소프트웨어 개발의 수준을 높인다. 이러한 일을 하는 과정에서 우리는 다음과 같은 가치들을 추구한다.
동작하는 소프트웨어뿐만 아니라, 정교하고 솜씨 있게 만들어진 작품을,
변화에 대응하는 것뿐만 아니라, 계속해서 가치를 더하는 것을,
개별적으로 협력하는 것뿐만 아니라, 프로페셔널 커뮤니티를 조성하는 것을,
고객과 협업하는 것뿐만 아니라, 생산적인 동반자 관계를,
이 왼쪽의 항목들을 추구하는 과정에서, 오른쪽 항목들이 꼭 필요함을 의미한다.
동작하는 소프트웨어뿐만 아니라, 정교하고 솜씨 있게 만들어진 작품을
5년 정도된 애플리케이션을 생각해보자. 별도의 테스트코드도 없고...
어떻게 동작하는지 아무도 모른다...
비즈니스 용어는 없고, 기술 용어, 인프라 용어만 가득하다...
클래스와 메서드는 수백~수천 라인이다...
이러한 애플리케이션에 새로운 기능을 추가한다고 생각해보자...
초창기 개발자는 모두 떠나 의지할 사람은 막 학교를 졸업하고 몇주 전 채용된 사람뿐이다.
전혀 아무것도 없이 레거시를 뜯어보고 기능을 추가해야한다니. 무섭다.
가장 큰 문제는 두려움이다...
전혀 이해할 수 없는 코드를 수정했을 때의 영향을 파악하고, 책임을 져야하기 때문이다...
동작하는 소프트웨어라고 해서 잘 만들어진 애플리케이션이라 할 수 있을까?
좋은 소프트웨어라면 얼마나 오래되었든 간에 개발자가 쉽게 이해할 수 있어야한다.
부작용도 알려져 있어야 하고, 관리가 가능해야한다.
...(생략)
애플리케이션이 진화하려면 수정하는 일을 부담스러워 하면 안된다. TDD, 단순한 디자인, 비즈니스 용어로 표현된 코드는, 코드를 건강하고 잘 만들어진 상태로 유지하는 최선의 방법이다.
지금까지 코드를 건강하게 만들고 유지했는지 되돌아보는 시간을 가지게 해주었다.
변화에 대응하는 것뿐만 아니라, 계속해서 가치를 더하는 것을
소프트웨어 프로젝트는 상당히 비싸다...(다양한 비용에 대한 이야기, 생략)
기업이 프로젝트에 비용을 들이는 이유는 돈을 벌거나, 아끼거나, 지키기 위해서다. 우리가 일하고 있음을 늘 인식해야 한다.
계속해서 가치를 더한다라는 의미는 기능 추가나 버그 수정만을 뜻하지는 않는다.
코드를 깔끔하게 정리하고 구조를 개선하며 확장성을 높이고, 테스트 가능하게 하고, 쉽게 유지보수할 수 있게 하는 것을 포함한다.
개인적으로 계속해서 가치를 더하기 위해선 개발자도 비즈니스 이해가 필요하다고 생각한다.
단순히 요구사항만 바라보고 개발을 한다면 어떤 부분의 구조를 개선하고 확장성을 높일 수 있겠는가? (플랫폼 구축 시절 요구사항만 바라봤다.)
사용자 입장에서의 비즈니스를 이해한다면 요구사항을 넘어서 추후 확장 요소까지 바라볼 수 있지 않을까? (오픈 후 비즈니스를 배우기 시작했다.)
소프트웨어가 나이를 먹고 덩치가 커지고 있다면 동시에 우리는 기업의 이익도 늘어나게 해야 한다.
프로젝트에 새로운 기능들을 추가하고 수정하는 속도가 프로젝트 초기와 다를 바 없으면 시장에 빠르게 대응할 수 있다.
소프트웨어가 오래될 수록 고통과 비용이 아닌 그 가치가 커져야 한다.
오래될 수록 고통과 비용이 아닌 가치가 커져야한다니 좋은 말이다.
개별적으로 협력하는 것뿐만 아니라, 프로페셔널 커뮤니티를 조성하는 것을
소프트웨어 장인정신의 중심에는 멘토링과 공유가 있다. 장인은 항상 열정적으로 자기발전을 추구한다. 이보다 더 큰 임무가 있다. 다음 세대의 장인을 준비시킬 책임이 있다.
업계를 발전시키는 가장 좋은 방법은 새롭게 참여하는 개발자들에게 영감을 주고 멘토링함으로써 우리가 배운 바를 공유하는 것이다...(생략)
지식, 아이디어, 성공 그리고 실패까지도 커뮤니티에서 공유하고 토론하여 업계가 한걸음씩 더 나아갈 수 있게 해야 한다.
커뮤니티를 잠깐이라도 활동해보면 주말마다 멘토링한다는 경력 30년이 넘는 개발자부터 다양한 지식을 전파하기 위해 블로그로 글을 남기는 개발자까지 열정이 가득한 장인들을 쉽게 만날 수 있다. 선도하는 기업들은 매년 주기적으로 컨퍼런스를 진행하여 기업의 경험을 공유한다. 모두 업계 발전에 이바지하는 행동이다.
소수의 개발자들이 소프트웨어 장인 커뮤니티가 엘리트 개발자들의 자발적인 모임이라고...(생략)
소프트웨어 장인정신이 엘리트 주의라고 생각한다면 이는 소프트웨어 장인을 오해하는 것이다.
소프트웨어 장인은 항상 다른 사람에게 배우려하는 겸손한 사람이어야 하고 경험이 적은 개발자와 지식을 공유하기를 주저하지 않은 사람이이어 한다.
'벼는 익을 수록 고개를 숙인다' 속담이 떠오른다.
고객과 협업하는 것뿐만 아니라, 생산적인 동반자 관계를
소프트웨어 장인은 공장 노동자가 아니다. 적극적으로 프로젝트의 성공에 기여해야 한다. 요구사항에 질문하고, 비즈니스를 이해하고, 개선사항을 제안하며, 고객 또는 고용주와 생산적인 동반자 관계를 맺어야한다.
신입이였던 SI 시절 파견나갔던 경험이 떠오른다.
개발자는 단순 공장 노동자 취급만 당하고, 대다수의 개발자는 이런 공장 노동자를 취급을 당연하게 생각하고 요구사항만 충족만 하면 된다는 생각을 가지고 있었다.
소프트웨어 장인정신에서 말하는 장인정신을 가진 것처럼 보이는 개발자는 끼껏해야 100명 중 1,2명? 밖에 없었다.
코드를 잘 작성하는 것은 꽤 중요하지만 프로젝트를 완성시킬 때 필요한 요소들 중 하나일 뿐이다.
고객을 도와 그들의 업무 절차를 개선하고, 좀 더 실현 가능성이 높은 선택지를 제공해야 한다...
고객의 비즈니스 도메인을 이해하며 그들이 생산하는 가치와 관련된 요구사항에 질문할 수 있어야 한다...
고객이 속한 산업의 본질이 소프트웨어 개발이 아닌 다른 것인 때가 많다. 이때는 소프트웨어 프로젝트가 성공하도록 돕는 것이 전적으로 우리들이 해야 할 일이다.
다른 개발자를 생각하면 코드 작성이 중요하지만, 이는 필요한 요수중 하나라는 말에 많은 생각이 스쳐간다.
개발자는 단순히 코드만 작성하는게 아닌 사용자의 입장에서 비즈니스까지 이해해야하니 배워야 할게 많다.
후기
이번 챕터는 책에서 주장하는 핵심 내용이 담겨있었다.
소프트웨어 장인정신은 소프트웨어 개발의 프로페셔널리즘에 대한 것이다.
저자가 말하는 문장 하나하나가
나의 경험들을 되돌아보게 만들어주었다.
나는 사용자의 생산적인 동반자였는가?
잘못된 고객에 대해 이야기도 했지만 언급을 안하겠다. (SI 경험이 대부분 해당된다.)
앞으로 어떤 개발자가 되어야할까? 에 대한 답을 알려주는 중요한 챕터였다.
'서적 > 소프트웨어 장인' 카테고리의 다른 글
[CHAPTER 5] 영웅, 선의 그리고 프로페셔널리즘 (0) | 2021.05.05 |
---|---|
[CHAPTER 4] 소프트웨어 장인의 태도 (0) | 2021.05.05 |
[CHAPTER 2] 애자일 (0) | 2021.04.27 |
[CHAPTER 1] 21세기의 소프트웨어 개발, Part1 이념과 태도 시작 (0) | 2021.04.24 |
소프트웨어 장인을 시작하면서... (2) | 2021.04.23 |