며칠 전, 한빛미디어로부터 『육각형 개발자』 라는 책을 제공받았습니다. 지난달 말에 출간된 새 책이었는데, 제목이 상당히 재밌더라구요.
이런 육각형 그래프는 스포츠 선수나 게임 캐릭터의 능력치를 나타내는 것으로 곧잘 쓰이는데, 이것을 개발자에게 적용해 본다는 개념이 신선했습니다.
그냥 왠지 이런 게임에서의 능력치(…) 그래프가 떠올랐다.
이런 접근이 흥미로운 이유가, 생각해 보면 개발자라고 해서 정말 개발만 하는 경우는 드물기 때문이죠. 주어진 스펙을 구현할 능력도 필요하지만, 기존 코드를 유지보수가 용이하도록 리팩터링 하는 작업도 필요합니다.
또한 다른 사람과 협업을 잘하기 위한 노하우도 필요하며 때론 프로젝트를 전반적으로 매니징 할 수 있는 능력이 요구되기도 합니다. 마지막으로 흐름에 뒤처지지 않도록 끊임없이 동기부여를 유지하는 방법도 필요하죠.
그래서 오늘은 이런 덕목을 종합적으로 갖추면서 더 나은 시니어 개발자가 되기 위한 팁을 제공하는 책 『육각형 개발자』를 소개하려고 합니다. 이번 포스트를 통해 시니어 개발자에게 요구되는 능력에 대해 궁금하신 개발자 분들께 도움이 되었으면 좋겠습니다.
책 소개
이 책은 한국의 개발자 최범균 님의 저서로, 좋은 개발자가 되기 위한 역량을 육각형 그래프에 비유해 풀어내는 책입니다. 개발자로 필요한 기술적 역량뿐만 아니라 커리어에 대한 내용도 종합적으로 다루고 있어서 기술 서적과 자기계발서의 중간 정도의 느낌이 들었습니다.
이 책에서 다루는 내용은 크게 10가지로 구분되며, 각각의 내용은 다음과 같습니다.
- 효율적으로 구현 기술을 적용하고 학습하는 방법
- 소프트웨어 가치를 이해하고 유지보수 비용을 낮추는 방법
- 이해하기 좋은 코드를 작성하는 법
- 높은 응집도, 낮은 결합도 원칙으로 설계하는 방법
- 변경 비용을 낮추는 기본적인 리팩터링 기법
- 테스트 코드의 중요성, 자동화된 테스트와 TDD의 필요성
- 아키텍처의 중요성과 패턴의 유용함
- 업무 전반을 관리하기 위해 필요한 사항
- 협업과 소통을 위한 글쓰기와 시각화, 지식 공유의 가치
- 리더와 팔로워의 역할 이해
전체 분량은 275쪽이며, 다루는 개념이 크게 복잡하거나 어렵지는 않고 예제 코드도 짧아서 읽는 데에 큰 부담이 없었습니다. 저의 경우에는 이틀 정도의 시간을 들여서 나눠 읽었습니다.
모든 내용을 설명하기엔 분량이 너무 많으니… 표지에서 언급한 육각형 능력치에 해당하는 섹션의 내용을 간략하게 소개하고, 제가 가장 인상 깊었던 내용을 중심으로 소개하려고 합니다.
구현 기술
소프트웨어를 만드는 데 꼭 필요한 능력인 구현 기술을 다루는 섹션입니다. 여기에는 프로그래밍 언어, 프레임워크, 라이브러리를 비롯해 별도 툴, 운영체제, 클라우드 서비스 등이 포함되며 직군에 따라 그 중요도가 달라집니다.
구현 기술은 너무 많고 빠르게 변화하기 때문에, 이를 학습하는 방법도 중요합니다. 저자는 학습 대상을 두 가지로 구분하고 있는데요, 바로 현재 사용 중인 기술 과 문제를 해결하기 위한 기술 입니다.
현재 사용 중인 기술은 당장 잘 활용하는 것이 중요하기 때문에 당연히 학습해야 하는 것이지만, 처음부터 모든 것을 익히려고 하기보단 필요한 부분부터 먼저 익히는 효율적이라고 말합니다.
문제를 해결하기 위한 기술은 다시 두 가지로 구분되는데, 당장 해결해야 하는 문제와 가까운 미래에 해결해야 할 문제입니다. 다만 문제가 닥쳤을 때 그 즉시 알맞은 구현 기술을 선택하는 것은 어렵기 때문에, 평소에 구현 기술을 탐색하고 학습하는 습관을 들이는 것이 중요하다고 말합니다.
품질, 코드 이해
소프트웨어 공학에 대한 맛보기(?)가 담긴 품질, 코드 이해 섹션입니다. 저자는 소프트웨어가 출시에서 끝이 나는 것이 아니라 출시부터 본격적인 시작이라고 이야기하는데요, 변화하는 세상에 맞추어 소프트웨어를 쉽게 변경할 수 있도록 유지보수 비용을 낮추는 것이 중요하다고 말합니다.
그러기 위해서는 코드를 좋은 품질로 유지하는 것, 그리고 작성된 코드를 잘 이해하는 것이 중요한데요. 코드를 좋은 품질로 관리했을 때의 생산성 지표를 소개하고, 이해하기 좋은 코드를 작성하는 방법도 설명합니다.
아키텍처, 패턴
프로젝트의 시스템을 추상화한 구조인 아키텍처 와 이를 정형화된 방법으로 구분하는 패턴 에 대해 다루는 섹션입니다. 주니어와 시니어를 구분 짓는 가장 큰 요소라고도 설명하고 있죠. 프로젝트의 골격, 품질, 기능과 한계, 성능 모두에 영향을 줄 수 있는 요소이기 때문에 큰 그림 을 잘 볼 수 있는 능력이 필요하다고 말합니다.
아키텍처와 패턴 선택에는 정답이 있는 것은 아니지만, 한 번 선택하고 나면 변경이 어렵기 때문에 신중하게 선택해야 하고 개선은 점진적으로 진행해야 한다고 말합니다. 또한 아키텍처와 패턴을 선택할 때는 프로젝트의 특성과 요구사항을 고려해야 하며, 이를 위해 다양한 아키텍처와 패턴을 학습하는 것이 중요하다고 말합니다.
응집도, 결합도
모듈의 독립성을 나타내는 지표인 응집도, 결합도를 설명하는 섹션입니다. 응집도는 모듈의 요소가 한데 모여있는 정도를, 결합도는 모듈 간의 의존성 정도를 나타내는 지표입니다.
보통 응집도는 높을수록 좋고 결합도는 낮을수록 좋다고 하죠. 이 두 지표는 코드의 품질을 나타내기도 하고, 변경의 위험도를 나타내기도 하는데요, 이 섹션에서는 실제 Java 예제 코드를 기반으로 응집도와 결합도를 설명하고 있습니다.
리팩터링, 테스트
코드를 변경하지 않고 내부 구조를 개선하는 리팩터링 과 코드의 동작을 검증하는 테스트 를 다루는 섹션입니다.
소프트웨어가 출시되고 시간이 지나다 보면 필연적으로 기존 코드를 수정해야 하는 일이 생기는데, 이 과정에서 버그를 발생시키거나 이해하기 어려워지는 코드가 만들어지곤 합니다. 그래서 일반적으로 개발자들은 기존에 동작하는 코드를 건드리는 것을 꺼리게 되는데요. 저자는 리팩터링은 코드를 이해하기 쉽고 변경하기 쉽게 만들어주며, 테스트는 코드의 일관적인 동작을 검증하기 때문에 중요하다고 말합니다.
업무 관리, 공유, 리드 및 팔로우
마지막 섹션은 업무 관리, 공유, 리드 및 팔로우 입니다. 이 섹션에서는 개발자로서의 업무를 관리하는 방법과 태도, 자료의 공유 방법, 프로젝트에서 리더와 팔로워의 역할에 대해 다루고 있습니다.
특히 주니어 개발자일수록 업무를 잘게 나누고, 진행 상황을 공유하고, 약속된 일정을 지키며, 위험 요소를 처리하는 방법이 익숙하지 않은데요, 이런 상황들에 대한 저자의 경험 이야기가 많이 담겨있습니다. 또한 프로젝트에서 우리는 항상 리더와 팔로워 중 하나의 역할을 수행하게 되니 각 역할에서 최선을 다할 수 있는 방법에 대해서도 설명합니다.
후기
선배님… 이거 이렇게 하는 거 맞아요?
이 책을 읽고 난 후의 전체적인 소감은 훌륭한 시니어 개발자로부터 개발자 생활에 대한 팁을 직접 전해 듣는 느낌이 들었다는 것 입니다. 이 책에서 다루는 내용은 크게 코드를 다루는 섹션 과 코드를 다루지 않는 섹션 으로 구분할 수 있을 것 같은데요.
코드를 다루는 섹션(코드 이해, 응집도와 결합도, 리팩터링, 테스트) 에서는 직접 예제 코드를 기반으로 설명하고 있습니다.
Java로 작성된 코드이긴 한데, 길이도 짧고 내용도 어렵지 않아서 이해하는 데에는 어려움이 없었습니다. 대부분의 예제 코드가 객체지향 프로그래밍 기반으로 작성되어 있어서, 함수형 프로그래밍 위주로 공부하신 분이라면 살짝 어려울지도…? 저는 최근에 객체지향 프로그래밍을 다루는 책 『파이브 라인스 오브 코드』를 읽고 온 덕분인지 괜찮았습니다.
코드를 다루지 않는 섹션(구현 기술과 학습, 소프트웨어 가치와 비용, 아키텍처와 패턴, 업무 관리, 정리하고 공유하기, 리더와 팔로워) 에서는 개념 설명과 함께 저자의 개인적인 경험을 근거로 이야기하는 부분이 많아서 좋았습니다.
특히 저자가 한국 분이시고 지금까지 다녀오신 회사 생활을 기반으로 설명을 해주셔서 공감이 많이 갔습니다. 해외 도서에서도 저자의 경험 이야기는 K-사회생활과는 전혀 어울리지 않기도(?) 하니까요. 개념 설명과 저자의 경험이 등장하는 밸런스도 적절하고, 내용도 깊게 들어가지 않아서 읽는 데에 큰 부담이 없었습니다.
좋은 점만 언급하면 그러니, 아쉽게 느껴질 수도 있는 점을 꼽아보자면… 육각형 개발자라는 제목처럼 개발자에게 필요한 덕목을 넓고 얕게 다루다 보니, 깊이 있는 정보를 원하는 독자에게는 약간의 갈증(?)이 남을 것 같기도 합니다. 책 초반에 저자가 설정한 대상 독자가 좋은 시니어 개발자가 되길 원하는 주니어 또는 중니어 개발자 였거든요.
주니어 개발자에게는 큰 방향성을 잡아줄 수 있을 것 같아서 꽤 추천하고 싶은 책이지만, 중니어 개발자에게는 이미 아는 내용들을 다시 설명하는 것처럼 느껴질 수도 있어 보였거든요. 그래도 저자만의 경험 이야기가 들어있으니, 원래 알고 있던 개념들을 새로운 관점에서 생각해볼 수 있는 기회로도 생각할 수 있겠습니다.
개인적으로 이 책을 가장 추천하고 싶은 대상은 회사에 사수가 없어서 고민하는 주니어 개발자 라고 생각이 들었습니다. 저자가 직접 경험한 내용을 바탕으로 사수가 없어도 어떻게 성장할 수 있는지에 대한 팁을 제공해주고 있으니까요.
전체적으로 구성과 내용이 괜찮아서 추천하고 싶은 책입니다.