책 소개
‘잘하는 개발자란 무엇일까?’에 대해 고민이 많은 요즘이다. 잘하는 개발자와 관련된 책도 찾아보고 컨퍼런스도 찾아보던 중 ‘함께 자라기’라는 책을 발견하게 되었다.
이 책은 애자일 코치이자 개발자인 김창준님이 쓴 책으로 개발자의 성장에 대한 새로운 시각을 제시한다. 저자는 개발자의 성장을 ‘자라기’와 ‘함께’ 두 가지 키워드를 중심으로 이야기를 펼쳐 나간다. 이를 통해 진정한 성장이란 혼자만의 기술적 숙련도를 높이는 것이 아닌 팀과 함께 발전하는 것임을 강조한다.
이 책에 대한 주요한 내용과 내 생각을 덧붙여 함께 이야기를 하고자 한다.
자라기
1) 자기계발
자기계발은 복리로 돌아온다. 매 년 책을 꾸준히 읽는다면 지금 당장에는 얻은게 없어보이지만 그 차이는 1년 후, 2년 후에 크게 돌아온다.
어제 읽은 책이 오늘 도움이 되지 않을 수 있다. 하지만 이 책을 차곡차곡 기록으로 남겨 다시 꺼내읽고, 행동으로 실천하고, 내 것으로 만들고를 반복하다보면 언젠가 책에서 얻은 지식인 완전한 내 것이 되어있다. 이는 결코 하루이틀 안에 만들어지지 않는다는 점을 저자는 강조한다.
내 예시를 들어보면 3달 전에 읽은 자존감 수업이라는 책이 있다. 이 책을 읽으며 자존감에 대해 처음으로 깊이 있게 이해하게 되었다. 책을 읽을 당시에는 ‘그렇구나’하면서 읽었지만 점점 이 책의 내용에 대해 하나씩 가슴 깊이 이해하게 되는 순간이 있었다. ‘내가 왜 일을 해야하지?’라는 의문이 들 때 자존감의 요소 중 하나가 ‘자기효능감’이라는 것이고, 이는 사회가 나를 필요로한다는 느낌을 받을 때 생기는 것이라는 문구가 떠올랐다. 또한 자존감은 곧 행복으로 직결된다. 그래서 일은 우리가 행복하기 위해 중요한 요소 중 하나라는 것이다. 내가 앞으로 ‘일을 해야하는 이유’에 대해 깨닫게 되는 순간이었다.
개발과 관련해서는 모던 자바스크립트 Deep Dive라는 책에서 ‘화살표 함수는 this바인딩을 가지지 않으며 상위 실행 컨텍스트의 this바인딩을 참조한다’는 사실을 알게되었다. 당시에는 당장 써먹을 데가 없었다. 하지만 최근에 프로젝트를 개발하며 막히던 부분이 있었는데 이 원인이 바로 위 화살표 함수의 특징과 관련된 문제였다는 것을 알게되었다.
아주 사소한 사례들이지만 조금조금씩 그 변화가 보이기 시작하고 있다. 특히 소프트웨어 장인 (2회독), 함께 자라기같은 방법론을 담은 책은 그 변화가 서서히 나타날 것이라 생각한다. 위와 같은 방법론 책을 읽고 얼마나 다시 되내이고, 기회가 될 때마다 내 삶에 녹여내느냐가 중요하다고 생각한다.
자신이 이미 갖고 있는 것을 잘 활용하라. 서로 하이퍼링크로 촘촘히 연결하라. 하나의 영역에서 다른 영역으로 왔다갔다하는 것을 자주해서 서로 넘나들기가 수월하도록 하라.
내가 요즘 가장 고민하는 것이다. 어떻게 내가 갖고 있는 것들을 연결할 수 있을까. 요즘 나는 웹 메모라는 프로젝트를 개발 중이다. 어떻게 내가 가지고 있는 것들을 잘 연결하여 프로젝트에 녹일 수 있을까, 그리고 프로젝트를 개발하며 새로운 것을 기존의 것과 어떻게 연결할 수 있을까? 이것이 참 중요한 걸 알면서도 참 실천하기에는 어려운 것 같다.
저자는 이어서 아래와 같이 이야기한다.
외부 물질을 체화하라
계속 내부 순환만 하다가는 일정 수준에 수렴할 위험이 있다. 주기적인 외부 자극을 받으면 좋다. 단 외부 자극을 받으면 그걸 재빨리 자기화해야 한다. 마치 인체가 음식을 먹어 자기 몸의 일부로 만들듯이, 외부 물질을 받아들이면 소화해 자신의 일부로 체화해야 한다.
이 내용을 다시 읽으며 뜨끔했다. 내가 요즘 내 프로젝트에만 집중하느라 ‘내부 순환만 하지 않았나’하는 생각이 들었다. 여기서 외부 물질이란 무엇일까? 강의, 컨퍼런스, 책, 아티클이 될 수 있겠다.
액션아이템으로는 무엇이 있을까?
- 강의, 컨퍼런스, 책, 아티클을 본다
- 내 프로젝트에 어떻게 녹일 수 있을지 고민한다.
- 그대로 녹인다.
이를 내일부터 즉시 행동으로 옮기고자 한다. 나는 요즘 내부 순환만 하며 외부 물질을 받아들일 여유를 주지 못했던 거 같다.
2) 적절한 난이도
우리는 적절한 난이도와 적절한 실력일 때 가장 몰입을 보이고, 이때 최고의 집중력을 보이고, 최대의 퍼포먼스와 학습 능력이 될 수 있다. 또한 그 때 최고 수준의 행복감을 경험한다.
이 책에서 강조하는 가장 중요한 포인트이다. 또한 내가 최근에 참여한 Untitled에서도 강조한 것이기도 하다. 바로 “몰입”
한편으로는 내가 요즘 가장 집중하고 있는 것이다. 몰입은 참으로 신기하다. 지루할 것만 같고 재미 없을 것만 같은 공부도, 개발도, 독서도 우리를 즐겁게 만들어준다.
이 몰입의 조건으로 적절한 난이도와 적절한 실력을 이야기한다. 하지만 항상 우리가 그러한 최적의 상황에서 개발을 할 수 있는 것은 아니다. 그렇다면 어떻게 우리는 적절한 난이도와 적절한 실력의 상황을 만들 수 있을까? 이는 난이도와 실력을 높이거나 낮춰서 해결할 수 있다.
적절한 난이도와 적절한 실력을 맞추는 법
- 시시할 때 : 실력 낮추기 / 난이도 높이기
- 실력 낮추기 : 키보드로만 개발하기, 디버거 쓰지 않기, 컴파일을 30초에 한 번 보던 것을 → 5분에 한 번씩 보기
- 난이도 높이기 : 하루 만에 개발하라고 주어진 업무를 한 시간만에 할 수 있는 방법 고안하기, 익숙한 작업을 새로운 언어로 진행하기, 리팩토링하기, 자동화 테스트 달기, 자신만의 도구 개발하기
- 어려울 때 : 실력 높이기 / 난이도 낮추기
- 실력 높이기 : 책, 스터디, 교육, 전문가의 도움, 짝 프로그래밍, 튜토리얼 문서, 오픈소스 라이브러리 사용
- 난이도를 낮추기 : 잘고 잘게 짤라 가장 핵심 기능을 하나씩 구현
덧붙이자면 적절한 난이도란 현재 내 수준이 아니다. 현재 내 수준에서 딱 한 단계만 올린 수준을 말한다.
예를 들어 UI퍼블리싱을 하는 작업이 있다. 항상 해왔던 작업이고 익숙하기에 난이도가 비교적 낮은 작업이라할 수 있다. 이를 적절한 난이도로 만들기 위해서는 어떻게 해야할까? 기존에 30분 동안 하던 작업이었다면 이를 10분이라는 시간 제한을 두고 작업을 하는 것이다. 벌써 흥미진진하지 않은가? 머리 속에서 ‘어떻게 10분 안에 이 작업을 완성하지? 어떤 순서로 작업하고, 얼마나 작게 작업을 나누어야할까?’라는 생각이 머릿 속을 스쳐 지나갔다면 당신은 난이도 높이기에 성공한 것이다.
실력 높이기는 우리가 평소에 줄곧 해오던 것이라 할 수 있다. 새로운 입력을 만들어 우리의 실력 자체를 높이는 것이다. 이 책에서 신선하게 다가왔던 것은 ‘실력 낮추기’와 ‘난이도 높이기’였다. 우리의 실력을 높이는 방법뿐 아니라 우리의 실력을 낮추거나 작업의 난이도를 높여 최적인 성장 환경을 만드는 것이다.
이와 같이 적절한 난이도를 만들기 위해서 우리가 평상시에 갖추어야할 마음가짐이 있다.
지속적으로 자신의 감정 상태를 살피면서 지금 지루한지 불안한지를 알아채고 만약 지루함이나 불안함을 느낀다면 앞의 네가지 전략을 적절히 사용해야한다.
그런 면에서 자기가 지금 어떤 상태인지 살피는 ‘알아차림’이 꼭 필요하다.
위 적절한 난이도를 만드는 4가지 전략을 사용하기 위해서는 ‘알아차림’이 반드시 필요하다. 다른 말로 ‘메타인지’라고도 한다. 우리가 지금 하고 있는 작업이 내 실력에 비해 난이도가 높은지 낮은지 알기 위해서는 나와 작업을 제 3자의 눈으로 객관적으로 살필 수 있어야한다.
메타인지를 하기 위한 방법으로는 아래와 같은 것들을 제시한다.
피드백을 자주 받아라. 1달, 1주 빠르게 피드백을 받는 것이 좋다. 매일, 매주 글을 쓰며 그 날, 지난 날을 돌아보라.
나의 예시로 들면 나는 매일 데일리스크럼과 매주 스프린트를 실천하고 있다. 내가 올바른 방향으로 가고 있는지, 현재 작업이 내 실력에 비해 너무 높거나 낮지는 않은지를 주기적으로 돌아보고 있다. 내 머릿 속에 둥둥 떠다니는 생각들을 글이라는 형식으로 담아내며 내 생각들을 정리할 수 있었다. 글로 쓰며 머릿 속에 있을 때는 발견하지 못했던 숨어져있던 문제를 발견할 때도 있고, 문제는 명확한데 원인을 파악할 수 없었다면 이 또한 글로 쓰며 발견될 때가 있다. 마지막으로, 앞으로는 어떻게 바뀌어야하고 액션 아이템을 실천할 수 있을지 고민해볼 수 있는 뜻깊은 시간이 되었다. 글의 힘은 참으로 대단하다.
함께
1) 커뮤니케이션
실력이 뛰어난 프로그래머는 보통 정도의 실력을 가진 프로그래머에 비해 커뮤니케이션, 협력 능력이 더 뛰어나다.
나는 ‘프로그래머는 단순히 개발을 잘하면 되는거 아니야?’라는 편협된 사고를 가지고 있었다. 하지만 이 책에서 절반이 ‘함께’에 대해 이야기를 할 정도로 커뮤니케이션의 필요성을 강조한다.
그렇다면 어떻게 커뮤니케이션을 잘할 수 있을까?
자신이 작성한 코드의 추상화를 높이고 싶다면 혼자서 고민하지 말고 다른 사람들과 협동하고, 대화하세요. 같이 그림도 그려보고 함께 소스코드를 편집하세요. 학습 공동체를 구축하라. 주변에서 나와 함께 학습 환경을 만들 수 있는 동지를 찾아보라.
그것은 쾌속 학습으로 가는 지름길이다. 애자일은 좋은 일에 대해서는 ‘그리고’ 확률을 ‘또는’ 확률로 바꾸고, 나쁜 일에 대해서는 ‘또는’ 확률을 ‘그리고’ 확률로 바꾸는 경향이 있다.좋은 일은 공유를 해서 한 사람만이라도 중요한 통찰이 있었다면 이걸 공유해서 ‘또는’ 확률로 만들고, 버그 같이 나쁜 일에 대해서는 여러 사람이 중복 검토해서 모두가 실수해야지만 구멍이 나게 ‘그리고’ 확률로 바꾸는 것이다.
이 책에서 ‘함께’의 장점에 대해 강조하는 문장들을 관통하는 문장이라 생각한다. 이 문장에 대해 가슴 깊이 와닿았고 ‘함께’에 대해 다시 곱씹어 생각해보게되었다.
내가 아직 회사같은 무언가에 소속해있는 것이 아니기에 2장 ‘함께’ 파트는 조금 거리감이 있게 느껴졌다. ‘함께’ 학습하는 것이 중요한 것은 알고 있지만 참 쉽지는 않은 거 같다. 이전에도 스터디를 많이 참여하고는 했다. 당시에는 ‘함께’ 학습하는 것이 강제성이 있고 다른 사람으로부터 객관적인 시야로 나를 돌아볼 수 있으며 더 배워가는 것이 많다고 생각했다. 하지만 요즘에는 혼자 공부를 하다보니 오히려 오로지 나에게 집중할 수 있고, AI를 통해 피드백을 받는 등 피드백 방법이 늘어나기도 했으며, 무엇보다도 내 페이스에 맞춰서 공부를 할 수 있다는 점에서 더 큰 매력을 느끼고 있다.
반면 팀 프로젝트를 진행하거나 회사에 속해있다면 이야기는 달라질 듯하다. 팀 혹은 회사의 프로젝트 팀원과 코드에 대해 끝없이 이야기를 나눌 수 있고 배운 점, 막힌 점 등에 대해 함께 이야기를 하면 배워갈 수 있는 것이 두 배, 아니 그 이상이 될 수 있을 것이라 생각한다.
맺으며
밑줄 그은 문장이 한둘이 아니었다. 아직 이 내용을 전부 적용하기엔 부족한 게 많지만, 지금 할 수 있는 만큼 하나씩 실천해보려 한다. 이런 작은 것들이 쌓이다 보면 언젠가 뭐라도 달라져 있겠지.