우리는 삶에 변화를 만들고, 새로운 도전을 할 때 두려움을 느낀다. 두려움을 느끼는 도전에 맞서 극복하는 방법으로 작은 성공 패턴을 추천해 본다. 작은 성공으로 책을 쓰는 나의 경험담을 2018년에 집필한 성공하는 프로그래밍 공부법의 내용을 인용해 전해 본다.
실패가 두렵다. 실력 없음이 드러날까 봐 두렵다. 나 또한 두렵다.
대한민국 교육을 받은 사람들이라면 대부분 완벽한 것이 아닌 것, 성공이 보장된 것이 아닌 것, 아무도 가보지 않은 길을 가는 것을 두려워한다. 누군가 바보 같은 행동이라고, 멍청한 짓이라고, 쓸데없는 짓이라고 놀림을 받을 것 같아 두렵다. 이러한 두려움이 새로운 것에 도전하는 것을 주저하게 만든다.
시작부터 너무 잘하려는 마음, 완벽하려는 마음, 실패하지 않으려는 마음을 버리고 일단 시작해 보는 것은 어떨까? 작은 목표를 세우고 일단 시작해 보자. 작은 성공의 맛을 봐라. 작은 성공을 통해 꾸준히 성장해 가는 나 자신과 발전해 가는 나의 결과물을 보면서 자신감과 에너지를 얻어라.
대부분의 사람들은 처음부터 거창한 목표를 세운다. 거창한 목표를 세우고 완벽함에 집착할 경우 한 발자국도 나가지 못하고 포기하는 경우가 대부분이다. 처음부터 너무 높은 목표를 세워 도전 자체를 포기하는 것보다 보잘것없는 결과물일지도 모르지만 무엇인가를 시작했다는 것이 더 큰 의미를 가진다.
나는 프로그래밍 교육을 할 때 TDD(테스트 주도 개발)에 상당히 집착한다. TDD에 집착하는 이유는 처음부터 완벽한 설계를 하고 프로그래밍을 시작하는 것이 아니라 쉬운 기능 구현부터 시작해 작은 성공을 맛보고, 즉각적인 피드백을 받으면서 프로그래밍하도록 유도하기 때문이다. TDD는 작은 단위로 기능을 구현하고 지속적으로 개선해 가는 방식으로 프로그래밍을 한다. 일정한 리듬감을 가지면서 프로그래밍을 하는 것이 가능하며, 지속적으로 개선되어 가는 코드를 보며 프로그래밍에 대한 즐거움을 느끼게 만든다.
나는 프로그래밍의 이 경험을 바탕으로 책을 쓴다. 처음 책을 쓸 때는 1장부터 완벽하게 쓰려는 마음이 강했다. 하지만 이런 완벽함을 추구하는 자세는 부담감으로 작용해 글이 써지지 않았다. 글이 써지지 않으면서 시간이 지나가고 이는 결과적으로 더 큰 부담으로 작용하는 악순환의 고리에 빠져 책 쓰기를 포기하게 만든다.
나는 책을 쓸 때 일정 기간 동안의 작은 목표를 세우고, 이 목표를 달성하기 위해 집중하다. 이 작은 목표를 달성하는 기간을 반복주기로 정해 책 쓰는 과정을 살펴보면 다음과 같다.
내가 기준으로 잡은 첫 번째 반복 주기는 목차를 정하는 것에서 한 단계 더 나아가 각각의 장(Chapter)의 시작과 끝을 미리 쓰는 것이다. 각 장의 시작과 끝을 먼저 써보면 전체적인 흐름이 잘 유지되는지를 파악해 볼 수 있다. 이렇게 짧은 반복 주기를 통해 완성한 원고는 편집자에게 전달해 전체적인 책의 줄거리가 기획의도와 맞는 것인지 확인할 수 있다. 책의 기획의도와 맞는지를 빨리 파악하는 것은 편집자뿐 아니라 저자에게도 특히 중요하다. 이 같은 공감대가 형성되지 않은 상태에서 진행하면 최초 기획 의도와는 완전히 다른 방향으로 진행해 원고를 다시 써야 하는 상황도 발생할 수 있기 때문이다. 나는 첫 번째 반복 주기를 진행하면서 최초 정했던 목차의 순서를 바꾸기도 하고, 부록으로 빼기도 하면서 전체적인 줄거리를 잡아 나갔다. 이 같은 흐름을 유지하면 특히 좋은 것은 저자에게 마음의 여유와 자신감을 준다는 것이다. 책을 쓰는 작업이 원래 부담스러운 작업인데 1장에서 더 이상 집필되지 않는 상황이 지속되면 자신감도 없어지고 불안감만 커지다 보니 상당한 스트레스를 받게 된다. 이러면 점점 더 글도 쓰기 싫어지고 경우에 따라서는 집필을 포기하는 상황이 발생할 가능성도 높아진다.
두 번째 반복주기는 각 장에서 반드시 다루어야 하는 내용을 추가한다. 글을 쓰는 중에 다소 확신이 서지 않거나 추가적인 학습이 필요한 부분은 원고에 주석을 남겨 놓은 상태로 계속해서 원고 작업을 진행한다. 원고의 내용도 물론 중요하지만 자신이 계획한 날짜에 원고를 작성하는 것에 집중한다. 원고의 내용이 다소 만족스럽지 않아도 된다. 가능한 빠른 시간 내에 반복 주기를 완료한다. 반복 주기를 완료한 후 한 동안 원고 쓰는 작업을 중단하고, 반복 주기를 진행하면서 추가적으로 학습이 필요한 부분에 대한 학습을 진행하면서 마음의 여유를 가진다. 몇 주 동안 원고 쓰는 작업에 대한 부담감을 떨쳐버린 후 다시 한번 써보겠다는 마음이 생기는 시점에 다음 반복 주기를 진행한다. 이 같은 과정을 본인의 원고가 만족스러울 때까지 반복한다. 일정 수준으로 원고를 완성한 후 한 달 이상 쉰 후에 다시 한번 원고를 검토하는 것도 좋은 방법이다. 한 달 후에 내가 쓴 원고를 보면 어색한 부분이 보이고, 새로운 영감으로 글을 쓸 수 있는 부분도 보인다. 책을 집필할 때는 기간 내에 책을 써야 한다는 부담감 때문에 사고가 좁아진다. 그런데 일정 수준으로 원고가 완성되고 한 동안 쉬면서 마음의 여유를 가지면 집필할 때는 고려하지 못했던 부분이 보이고, 더 좋은 아이디어가 생각난다.
이와 같이 짧은 기간 동안 작고, 구체적인 목표를 세우고 그 목표를 달성하는데만 집중한다. 부족한 부분이 보일 것이다. 부족한 부분이 아니라 조금씩 발전해 가는 결과물에 집중하자. 아니 집중할 필요도 없다. 조금씩 발전해 가는 결과물을 보면 자연스럽게 자신감과 에너지가 생기면서 더 어려운 문제에 도전할 수 있다. 지금까지 쌓아온 에너지가 다음 단계의 도전을 이끈다는 것이 더 적합한 표현일 수도 있겠다.
의식적인 연습을 통해 빠르고 효과적으로 역량을 향상하는 것이 중요하다. 하지만 의식적인 연습을 하기 전에 프로그래밍 연습 자체를 시작할 수 있어야 한다. 일단 무엇이라도 시작해야 성장하고 싶은 욕심이 생기고 효과적으로 연습하는 것에도 관심을 가지게 된다. 그 시작은 작은 성공을 맛볼 수 있는 작고, 보잘것없는 그 무엇이다. 그 무엇을 찾아 일단 도전해 성공을 맛보는 첫 경험이 프로그래밍 공부의 시작이다. 아니 시작이어야 한다.
끊임없는 작은 성공을 통해 프로그래밍의 진정한 즐거움을 느낄 수 있기를 기대한다.