개발자가 독서로 10배 이상 성장하는 방법
<맨먼스 미신>의 저자 프레더릭 브룩스는 1986년에 "은 탄환은 없다 - 소프트웨어 공학에 있어 본질과 부수성" 라는 논문에서, 앞으로 10년 동안 프로그래밍 생산성을 10배 이상 향상시키는 발전은 없을 것이라고 예견했고, 이 예측은 현대에 이르러도 사실인 것으로 보인다. 브룩스가 주장한 핵심은, 모든 발전이 프로그래밍의 부수적 문제만을 해결할 뿐, 본질적인 문제는 해결하지 않으므로 본질적으로 빠른 발전이 불가능하다는 것 이다. 나는 개발자가 올바른 독서 습관을 가지면 이로 인해 소프트웨어 개발의 본질적인 문제인 문제 해결 능력이 향상되어 개발자의 생산성을 10배 이상 높일 수 있다고 생각한다. 즉 현대 사회의 “은 탄환”은 “독서”인 것이다.
당신의 취미는 무엇인가? 아마 음악이나 운동, 넷플릭스나 유튜브 시청 등 다양한 답변이 나올 수 있을 것이다. 요리나 사랑하는 친구나 연인과 이야기하는 것일 수도 있다.
내 취미는 독서다. 하루하루가 정신없이 바쁠 때면, 끝내주게 재밌는 책을 읽고 싶다는 책이 먼저 든다. 물론 당신이 지금 생각하는 것 처럼 현대 사회에서 이런 생각이 일반적이지는 않아 보인다. 현대 사회에서는 책보다 흥미로운 것들이 넘쳐난다. 유튜브, 넷플릭스와 같은 정적인 책보다 훨씬 자극적인 영상 매체는 물론, SNS, 메신저, 게임 등 다양한 시간을 보낼 수 있는 매체들이 풍부하다. 이러한 다양한 매체들에 쉽게 접근할 수 있기 때문에, 휴일에도 책을 읽는 시간을 찾는 것은 매우 어렵다.
물론 나도 그랬다. 여기 시간이 생기면 핸드폰으로 유튜브를 보거나 주말에는 넷플릭스로 영화를 즐기곤 했다(영화는 지금도 좋아한다). 하지만 현재는 여가 시간이나 휴일에는 평소에 읽고 싶었던 책을 읽는다. 책의 종류도 다양하다. 주로 내 전공 분야인 프로그래밍 관련 서적을 가장 많이 읽긴 하지만, 그 외에도 뇌 과학과 심리학에 대한 책도 자주 읽는다. 개인적으로 소설은 거의 잘 읽지 않는다.
이런 변화의 이유는 개인적으로 기존의 삶에서 한계를 느꼈기 때문이다. 내가 원하는 수준의 성장을 이루기 위해서는 더 강한 집중력과 문제 해결에 필요한 양질의 정보가 필요했다. 이러한 목표와 책은 부합했고, 책을 가까이 한 덕분에 내가 원하는 모습과 더 가까워 질 수 있었으며, 이 전보다 더 많은 것을 이룰 수 있었다. 또한 앞으로의 삶에서 이전에 상상하지 못한 것들을 이룰 수 있다는 확신이 생겼다
위에서 언급한 여러 매체가 강한 중독성을 가진 것처럼, 책도 강한 중독성을 가지고 있다. 내 생각에는, 어떤 매체보다 책의 중독성은 더 강하고 지속적이다. 단순히 변화와 성장을 이루려는 생각을 넘어서, 이제는 책의 매력에 완전히 빠져있다. 다시 말해, 지금의 나는 넷플릭스나 유튜브와 같은 매체를 자제하고 절제하는 것이 아니라, 단순히 책이 더 재미있기 때문에 읽는 것이다.
이번 포스팅에서는 책을 읽는 것이 왜 중요한지, 개발자의 성장에 있어서 책이 어떤 역할을 하는지, 책을 어떻게 읽어야 완전히 내 것으로 만들고, 성장할 수 있는지에 대해서 내 생각과 노하우를 공유하려고 한다.
디지털 시대 독서가 정말 중요한가?
독서에 대한 내 생각과는 다르게, 독서량은 매년 빠르게 감소하는 추세이다. 2022년 기준으로, 1년 동안 책을 한 권도 읽지 않는 성인이 53%에 달한다고 한다. 이유는 아마도 책 외의 다양한 매체가 발달하여 정보를 얻을 수 있기 때문일 것이다. 디지털 시대에는 굳이 책을 보지 않더라도, 인터넷을 통해 지식을 검색하고, 글뿐만 아니라 유튜브 영상과 같은 다양한 매체를 통해 정보를 얻을 수 있다. 이런 시대에 정말 독서가 중요할까?
모든 지식의 원천은 ‘글’이다.
모든 지식의 근원은 글이다. 우리가 보는 유튜브 영상도, 먼저 누군가가 원고를 편집하고 작성한 후 영상으로 변환되어 진다. 다시 말해, 어떤 정보 획득 매체가 발달하더라도 모든 논리와 지식의 근본은 글이다. 그래서 글을 이해하고 정보를 처리하는 능력을 키우면, 정보를 습득할 뿐만 아니라 원하는 방식으로 정보를 편집하고 활용할 수 있다. 반대로 말하면 글 이외의 매체를 통한 정보는 이미 누군가가 추상화한 것이기 때문에, 이해하기는 쉽고 받아들이기도 좋지만, 활용 가능성은 줄어 든다.
온라인 공간에서는 “Why?”가 없다
그렇다면 온라인 아티클은 어떨까? 글로 이루어져 있기 때문에 더 좋은 정보를 제공할 수 있다는 가능성이 있지만, 경험에 따르면 매체의 특성상 많은 내용을 담기 어렵다는 한계가 있다. 스크롤이 너무 길어지면 보기 힘들어지고, 심지어 읽지 않기 때문이다. 그래서 온라인 아티클은 요점을 정리한 축약된 정보가 많다.
이것이 바로 책과 아티클의 가장 큰 차이인데, 정보를 요점으로 축약하는 과정에서 '왜?'라는 부분이 생략되기 때문이다. 글의 구조는 크게 '왜', '무엇', '어떻게'로 나눠져 있는데, 축약 과정에서 '무엇'과 '어떻게'만 남고 '왜'는 생략된다. '왜'라는 부분이 생략되면 저자의 깊은 사고를 이해할 수 없을 뿐 아니라, 스스로 질문하는 기회도 상실하게 된다. '왜'가 없는 내용은 자신의 것으로 만드는 데 어려움을 겪을 뿐만 아니라 쉽게 휘발되어 사라진다.
개발자에게 독서란
개발자는 처음에 보면 책과 가장 거리가 멀어 보이는 직업이다. 디지털 사회의 산물인 개발자와 아날로그 시대의 산물인 책 사이에 심리적 거리감이 분명 존재한다. 그러나 나는 독서가 개발자에게 매우 중요하다고 생각한다. 그 이유는 다음과 같다.
1. 평생 학습
개발자라는 직업은 평생 학습이 필요하다는 것은 모두 알고 있다. 우리는 경쟁력을 유지하기 위해 평생 학습하며, 이 과정에서 수많은 기술 블로그와 공식 문서를 읽는다. 그리고 이런 자료들도 모두 '글'이다. 독서라고 표현하지만, 앞으로 소개할 독서 원칙은 모든 글로 된 정보를 읽을 때도 동일하게 적용할 수 있다. 생각해 보자, 책 한 권도 제대로 읽지 못하는 개발자가 어떻게 평생 학습할 수 있겠는가?
2. 훌륭한 책이 많다.
소프트웨어 개발 분야도 이제 어느 정도 시간이 축적되어 많은 훌륭한 책들이 나왔다. 이 글 서문에서 언급한 <맨먼스 미신> 뿐만 아니라 <피플웨어>, <Extreme Programming Explained>, <피닉스 프로젝트>, <클린 아키텍처>, <리팩토링> 등 많은 훌륭한 책들이 있다. 저자로는 XP와 TDD의 켄트 백, 리팩터링의 마틴 파울러, 클린 코드의 로버트.C. 마틴 등 훌륭한 우리 분야의 구루들이 자신의 생각과 사고를 아낌없이 공유하고 있다. 온라인 멘토링이 수십 수백 만원 씩 하는 시대에, 책은 2~3만원으로 구루들의 생각을 엿볼 수 있다. 이보다 좋은 기회가 있을까?
3. 문제해결을 위한 양질의 정보
개발자에게 책이 중요한 이유가 단지 개발 분야의 책 때문은 아니다. 개발자는 단순히 코드를 작성하는 사람이 아니라, 세상의 문제를 해결하는 사람이다. 그러나 세상의 문제를 해결하는 사고와 힌트는 컴퓨터 세상에만 존재하지 않는다. 내 경험에 따르면, 책을 통해 평소 접하지 못했던 다양한 주제와 분야의 정보를 얻는 것은 문제 해결 능력에도 분명 도움이 된다. 내 말만 들으면 신뢰가 안갈지도 모르니까 덧붙이면, 구글의 래리 페이지, 테슬라의 일론 머스크, 메타의 주커버그, MS의 빌 게이츠 등 모두 독서를 좋아하며, 인터뷰에서 독서의 중요성을 강조한 바가 있다. 독서가 이들의 유일한 공통점이 아닐까 생각이 든다.
책을 내 것으로 만드는 독서 원칙
그렇다면 책은 어떻게 읽어야 할까? "책 따위를 읽는데 방법이 필요하다고?"라고 생각할 수 있겠지만, 방법 없이 그냥 책을 읽는다면, 아마 책을 덮는 순간 당신은 책의 내용을 아무것도 기억하지 못할 것이다. 악담이 아니라 경험담이다. 물론 아직경험이 아직 부족하겠지만, 여기서는 나름 책을 읽으면서 쌓아온 내 독서 노하우를 원칙과 실천 방법 형태로 공유하고자 한다. 혹시 본인만의 더 좋은 노하우가 있다면 공유 해주면 감사하겠다.
제 1원칙: 더럽게 읽어라. 절대로 중고로 팔지 못하도록
첫 번째 원칙은 책을 더럽게 읽는 것이다. 나는 도서관에서 책을 빌리거나, 책을 산 후 깨끗하게 유지해 다시 중고로 파는 것을 권장하지 않는다. 돈이 많아서가 아니라 책에 내 생각을 남김으로써 얻어갈 수 있는게 더 많기 때문이다. 따라서, 책을 직접 구매하고, 그 안에 자신의 생각을 필기하는 것을 추천한다. 처음에는 책 값이 비싸다고 느낄 수 있지만, 책 한 권을 완전히 자신의 것으로 만드는 경험을 한 후에는 전혀 아깝다는 생각이 들지 않을 것이다.
물론 더럽게 하기 위해 책에 낙서를 한다고 해서 책의 내용을 내 것으로 만들 수는 없을 것이다. 여기서는 책의 내용을 내 것으로 만들기 위한 효과적인 방법 5가지를 소개한다.
1. 책에 질문을 던져라
첫 번째 방법은 책을 읽기 전에 질문을 던지는 것이다. 책을 읽기 전에 얻고 싶은 정보, 배우고 싶은 내용, 해소하고 싶은 의문, 그리고 책을 읽는 이유 등을 질문 형태로 미리 적어둔다. 이 방법은 책을 읽는 이유와 동기를 부여하며, 어떤 관점과 목적으로 책을 읽어야 하는지를 명확히 하는 효과가 있다. 질문에 대한 답은 책을 다 읽은 후에 작성하면 된다. 아래에는 실제로 내가 책을 읽으면서 질문과 답을 적어둔 예시이다. 예시에서는 질문과 답변이 많아 포스트잇을 사용했지만, 책마다 다르고 간단하게 2~3줄로 끝나기도 한다.
2. 효율적으로 밑줄 쳐라
밑줄 치기에서 가장 주의할 점은 내용 전체에 밑줄을 그으는 것이다. 책을 처음 읽을 때는 중요한 부분과 그렇지 않은 부분을 구분하기 어렵다. 이는 연습이 필요한 영역이다. 두 가지 팁을 공유하면, 먼저 나는 책을 다시 읽을 때 반드시 봐야 하는 내용에만 밑줄을 긋는다. 그리고 실제로 책을 복습할 때는 전체를 읽지 않고 밑줄 그은 부분 위주로 읽는다. 이 방법을 사용하면 다시 볼 필요가 있는 중요한 부분에만 밑줄이 그어지고, 다시 읽을 때 중요하지 않았던 부분이 무엇인지 학습하여 밑줄 치는 감각을 효과적으로 기를 수 있다.
또한 나는 책에서 질문이 나오는 부분은 반드시 밑줄을 친다. 질문은 저자가 말하고자하는 바를 집접적으로 드러내는 부분이기도 하면서, 동시에 내가 사고할 수 있는 기회를 제공한다. 처음에는 질문에 답하지 못할지라도 다시 읽을 때 해당 질문에 답을 하면서 효과적으로 책과 상호작용할 수 있다.
3. 내 생각을 적기
가장 중요한 부분으로 책을 읽으면서 떠오르는 내 생각을 바로바로 책에 적는 것이다. 실제로 책의 내용을 읽는 것 자체보다는, 읽으며 드는 내 생각이 훨씬 더 중요하다. 이러한 내 생각들이 책의 내용과 연결지어지고, 책을 읽고 반복하는 동안 강화되면서 비로소 책의 내용이 내 것이 되는 것이다.
내 생각이라면 어떤 것이라도 적어도 좋다. 책의 내용에 동의하면 ‘내 생각도 같다’라고 적어도 되고, 책의 내용과 다른 생각이라면 그 생각을 적는다. 의문이 든다면 질문을 남긴다. 나중에 이 질문이 책 뒤에서 해소되면 다시 돌아와 그 답을 적는다.
이러한 능동적인 읽기가 가능하다는 것이 다른 매체와 구분되는 책의 가장 큰 장점이다. 특히 요즘 정보 습득으로 많이 사용되는 영상 매체의 경우 이러한 능동적인 정보 습득이 어렵다. 정해진 속도와 길이에 맞춰서 정보가 수동적으로 주입되기 때문이다. 하지만 책은 얼마든지 내가 속도를 조정할 수 있고, 뒤와 앞을 자유롭게 오가면서 탐색적이고 주도적으로 습득할 수 있다.
4. Index 페이지를 만들어라
이 방법은 어디선가 보고 마음에 들어서 적용하게 된 것이다. 원래 다른 이름이었던 것 같은데 기억이 정확하게 나지 않아서 나는 'Index 페이지'라고 부르고 있다. 이 방법은 나만의 Index 페이지를 만드는 것이로, 나중에 다시 찾아볼 것 같은 부분이나 중요한 부분을 간단한 내용과 페이지 번호로 기록하는 것이다. 책의 가장 큰 단점은 원하는 정보를 검색하고 찾기 어렵다는 것인데, 이 방법을 사용하면 이를 어느 정도 보완할 수 있다. 아래 예시를 보면 알겠지만, 글씨는 그다지 중요하지 않다. 나만 알아볼 수 있으면 된다.
5. 책 번호를 기록해라
마지막 방법은 책을 다 읽은 후에 진행하는 것으로 읽은 책의 순서를 기록하는 것이다. 이는 책을 읽는 방법은 아니지만, 경험상 매우 유용하여 소개하고자 합니다. 이 방법을 사용하면, 책을 읽는 동기부여가 생기며, 내가 읽은 책을 순서대로 나열하면, 그 시기에 어떤 주제에 관심을 가졌고, 어떤 패턴으로 책을 읽었는지 쉽게 파악할 수 있다. 무엇보다, 내가 읽은 책의 순서대로 나열하면 기분이 매우 좋다!
제 2원칙: 집중하라
두 번째 원칙은 책을 읽을 때 집중해야 한다는 것이다. 이는 간단해 보일 수 있지만, 우리는 생각보다 많은 부분에서 집중의 중요성을 잊어버리곤 한다. 책을 가볍게 읽어내려가기만 한다면, 책의 내용도 가볍게 잊혀질 것이다. 책을 제대로 이해하기 위해서는 집중력을 유지하는 것이 필수이다.
또한 많은 사람들의 생각과 다르게, 집중은 생각보다 내 마음대로 할 수 없는 것이다. 집중하기 위해서는 훈련이 필요하며, 집중할 수 있는 환경을 만드는 것도 중요하다. 여기서는 집중력을 높이기 위해 환경을 조성하는 세 가지 방법을 소개하고자 한다.
1. 디지털 기기를 멀리 하라
집중을 위한 환경을 조성하기 위해 가장 먼저 해야할 것은, 우리의 집중력을 뺏어가거나 방해하는 것들을 정리하는 것이다. 무엇이 당신의 집중력을 뺏어가는가? 바로 스마트폰이다. 스마트폰에 SNS나 유튜브는 책보다 더 자극적이며 때론 우리를 완전히 통제하기도 한다. 특히 최근에 나온 숏폼 플랫폼은 정말 강력한데 내가 원하지도 않은 정보를 1분마다 끊임없이 주입해준다. 우리가 책을 읽는 이유는 이런 수동적인 학습에서 벗어나 주도적인 학습을 이루기 위해서이다. 이를 위해서는 의식적으로 멀리할 필요가 있다. 스마트폰이 해로운건 이뿐만이 아니다. 스마트폰에서 울리는 메신저, 이메일 등 다양한 알림은 우리의 집중을 방해한다.
스마트폰을 완전히 멀리하라는 것이 아니다. 현대 사회에서 원활한 사회 활동을 영위하기 위해서는 스마트폰은 필수적이다. 하지만 분명한 것은 스마트폰이 우리의 집중력을 방해하며, 이는 앞으로 더욱 발달하며 강해질 것이다. 그래서 스마트폰을 의식적으로 통제하는 훈련이 필요하다.
책을 읽는 동안에는 스마트폰을 멀리하도록 습관을 만들어보자. 그럼 책에 더 집중할 수 있을 뿐만 아니라, 스마트폰을 의식적으로 통제하는 능력을 기를 수도 있다. 이 능력은 앞으로의 삶에서 매우 중요한 역할을 할 것이다.
2. 수첩을 옆에 놔라
책을 읽다 보면 내가 고민하고 있는 문제에 대한 아이디어가 많이 떠오르곤 한다. 이는 정말 신기한 일인데, 내 고민과 관련이 없는 분야의 책을 읽어도 마찬가지이기 때문이다. 이는 책의 중요한 순기능 중 하나다. 문제는 이런 아이디어 한번 떠오르면 이에 사로잡혀 책에 집중하지 못하게 되는 것이다.
그래서 책을 읽을 때 옆에 수첩을 두는 것을 추천한다. 떠오른 아이디어를 수첩에 기록한 후, 책을 다 읽고 나서 그것에 대해 생각해보는 것이 좋다. 아이디어를 수첩에 적어두면 걱정 없이 다시 책에 집중할 수 있다. 수첩을 사용하는 이유는 앞에서 말했 듯 책을 읽는 동안 스마트폰을 멀리하기 위해서 이다.
3. 시간을 측정하라
애자일 원칙에 대해 알고 있는가? 반복적으로 짧은 주기의 작업을 수행하면, 큰 수의 법칙에 따라 처음에는 불안정했던 추정치가 점차 안정화된다. 이 원칙을 책 읽기에도 적용해 볼 수 있다.
책을 읽는 동안 한 시간에 몇 페이지를 읽을 수 있는지 측정하고, 이를 기록하라. 또는 한 챕터를 읽는 데 얼마나 시간이 걸리는지 측정해보는 것도 좋다. 이런 측정치들이 축적되면, 나중에는 책을 읽는 데 걸리는 시간을 꽤 정확하게 추정할 수 있다.
한 장 혹은 페이지를 읽는데 소요되는 시간을 추정할 수 있다면, 책에 집중할 시간을 확보하고 계획하는데 도움이 된다. 예를 들어, 한 장을 읽는데 30분이 걸린다는 것을 알면, 하루 중 30분의 집중 시간을 계획할 수 있다. 추정치가 없다면 얼마나 시간을 배정해야 할지 모르고 책 읽기를 미룰 수 있으나. 추정치가 있으면 그럴 걱정이 없다. 하루에 30분 정도 집중할 시간을 마련하는 것은 그다지 어렵지 않기 때문이다
제 3원칙: 내 언어와 사고로 정리하라
마지막 원칙은 책을 읽고 내용을 정리하는 것이다. 우리 뇌의 기억력은 한계가 있어서, 곧바로 학습한 내용의 대부분을 잊어버린다. 따라서 책을 읽은 후 그냥 덮는 것보다, 한번 더 읽고 내용을 정리하면 책의 내용을 훨씬 오래 기억할 수 있다.
여기서 중요한 것은 책의 내용을 '나만의 언어와 사고'로 정리해야 한다는 점이다. 예를 들어, 책에 "객체 지향 프로그래밍은 프로그램 구현에 필요한 객체를 파악하고, 각각의 객체들의 역할이 무엇인지를 정의하여 객체들 간의 상호작용을 통해 프로그램을 만드는 것을 말한다"라는 내용이 있다면, 이 정의를 그대로 필기하는 것은 큰 도움이 되지 않는다. 이를 읽고 생각한 후, 그것을 스스로 정리한 내용을 적어야 합니다. 예를 들어, 같은 내용을 보고 나는 다음과 같이 정리할 수 있습니다. "객체 지향 프로그래밍은 충분히 협력적이면서 동시에 충분히 자율적인 객체들로 시스템을 구성하는 것을 의미한다. 이는 문제 해결과 변화에 대응을 위해 '독립성'을 가진 객체로 시스템을 구성하는 것이다. 즉, 소스 코드 의존성에 대한 절대적인 제어 권한을 획득할 수 있는 능력이라고 볼 수 있다." 내용이 완전히 달라진 것 같지만, 실제로는 같은 내용을 말하고 있다. 나만의 언어와 사고로 나만의 정의를 만들어낸 것이다. 책의 정의 자체를 암기하려 하면 내용이 금방 사라집니다. 하지만 나만의 언어와 사고로 만든 정의는 잘 잊혀지지 않으며, 활용가능한 내 지식이 된다.
이에 대한 중요성을 아무리 강조해도 지나치지 않는다. 나는 학습한 내용을 내 언어와 사고로 표현할 수 있어야만 진정으로 책의 내용이 내 것이 되었다고 생각한다. 어짜피 내 언어와 사고로 표현할 수 없다면, 이 지식은 활용 불가능한 지식이다. 시험을 볼 때는 이러한 주입식 지식이 도움이 될지 모르겠지만, 시험이 끝나면 아무 짝에도 쓸모없는 지식이 된다. 배운 내용을 완전히 내 것으로 만들 수있어야만 진정으로 학습이 이뤄지고 성장해나갈 수 있다.
'개발자 이야기' 카테고리의 다른 글
처음으로 사용자의 지갑을 열다(ft. 서비스 출시 후기) (32) | 2024.06.22 |
---|---|
좋은 리더란 무엇인가?: 우리는 다르기 때문에 협력한다 (0) | 2024.04.16 |
아마추어 개발자가 풀스택 개발자가 되어야 하는 이유(ft. 제너럴리스트) (25) | 2024.03.22 |
다가오는 새로운 시대와 개발자의 역할 (2) | 2023.11.18 |
프레임워크 만능주의 (5) | 2023.10.15 |