Morgan Housel이 이런 말을 했다. "복리는 치트키를 쓰려고 하면 작동하지 않는다." 이건 돈 이야기였지만, 나는 이걸 읽으면서 돈이 아니라 개발 공부가 떠올랐다.
3년 전의 나를 떠올려보면, 배움에 대한 접근이 완전히 달랐다. "이번 달에 React 마스터하겠다" 같은 목표를 세우고, 주말에 8시간씩 몰아서 강의를 들었다. 첫 주말은 열정이 넘치고, 둘째 주는 좀 힘들고, 셋째 주에는 "다음 달부터 다시 하자"가 된다. 그리고 2달 뒤에 또 다른 강의를 결제한다.
이 패턴을 3번쯤 반복하고 나서 뭔가 이상하다는 걸 깨달았다.
복리가 배움에서도 작동하는 이유
투자에서 복리는 단순하다. 원금에 이자가 붙고, 그 이자에 다시 이자가 붙는다. 시간이 지날수록 가속이 붙는 구조. James Clear는 이걸 학습에 적용해서 "매일 1% 나아지면 1년 뒤에 37배가 된다"고 말했다.
수학적으로야 맞지만, 처음엔 와닿지 않았다. 1%가 대체 뭔데? 근데 개발 공부에서의 1%는 생각보다 구체적이다.
- 오늘
Array.reduce()의 동작 원리를 이해한다 - 내일 그걸 써서 장바구니 합산 함수를 짠다
- 모레 그 패턴을 응용해서 그룹별 통계를 만든다
여기서 핵심은, 어제 배운 게 오늘의 밑거름이 된다는 거다. reduce를 모르면 그룹별 통계를 짤 때 for문을 중첩하게 된다. reduce를 알면 한 줄로 끝난다. 그리고 reduce를 자유자재로 쓸 줄 알면, 나중에 함수형 프로그래밍 개념을 배울 때 진입 장벽이 확 낮아진다.
이게 복리다. 배운 것 위에 다음 배움이 쌓이고, 쌓인 위에 또 쌓인다.
나의 경험: CSS Grid가 디자인 시스템으로 이어지기까지
2년 전에 CSS Grid를 제대로 공부했다. 당시에는 그냥 "레이아웃 잡는 법 하나 더 배워두자" 정도의 마음이었다. grid-template-columns, fr 단위, grid-area 같은 걸 일주일 정도 매일 30분씩 연습했다.
그 다음 달에 Flexbox를 다시 복습할 일이 있었는데, Grid를 이해하고 나니까 Flexbox의 한계가 명확하게 보였다. 이전에는 "둘 다 레이아웃 잡는 건데 뭐가 다른 거야"였는데, Grid를 배운 뒤에는 "아 이건 1차원 정렬이고 저건 2차원 배치구나"가 직관적으로 이해됐다.
6개월 뒤, 회사에서 디자인 시스템을 만드는 프로젝트에 투입됐다. 레이아웃 컴포넌트를 설계하는 역할이었는데, Grid와 Flexbox의 차이를 정확히 이해하고 있어서 "이 컴포넌트는 Grid 기반으로, 저 컴포넌트는 Flex 기반으로" 같은 판단이 자연스럽게 나왔다. 그 판단을 근거와 함께 설명할 수 있었고, 팀 리드가 그 설계를 거의 그대로 채택했다.
CSS Grid 하나 배운 게, Flexbox 이해도를 높이고, 디자인 시스템 설계까지 이어진 거다. 처음부터 "디자인 시스템을 만들기 위해 Grid를 공부하자"고 한 게 아니었다. 그냥 매일 조금씩 배웠을 뿐인데, 그게 예상치 못한 곳에서 터졌다.
몰아치기 vs 매일 조금씩
같은 팀에 입사 동기가 있었다. 비슷한 시기에 프론트엔드를 시작했고, 실력도 비슷했다. 차이가 있다면 공부 방식이었다.
동기는 6개월마다 부트캠프 스타일로 공부했다. "이번 달은 TypeScript 집중의 달"을 선언하고, 2주 동안 하루 3-4시간씩 몰아서 했다. 나는 매일 출근 전 30분, 점심 먹고 15분 틈틈이 공부하는 스타일이었다.
1년 뒤 차이가 눈에 보이기 시작했다.
동기는 TypeScript를 2주 집중 학습한 뒤 한 달을 쉬었다. 한 달 뒤에 다시 보니까 절반은 까먹어 있었다. 다시 복습하느라 시간을 쓰고, 그 뒤에 또 한 달 공백. 반복이었다. 에빙하우스 망각곡선이 정확히 작동하고 있었다.
나는 매일 조금씩 했더니 까먹을 틈이 없었다. 월요일에 배운 제네릭을 화요일에 회사 코드에 써보고, 수요일에 에러가 나서 디버깅하면서 더 깊이 이해하고, 목요일에는 동료 코드 리뷰하면서 다른 사람의 타입 설계를 읽게 되고. 학습 → 적용 → 실패 → 교정의 사이클이 일주일 안에 여러 번 돌았다.
2년이 지난 지금, 솔직히 말해서 실력 차이가 꽤 벌어졌다. 동기가 게을렀던 게 아니다. 오히려 공부할 때는 나보다 더 열심히 했다. 다만 복리가 작동하려면 "끊기지 않는 것"이 핵심이다. 몰아치기는 원금을 넣었다 뺐다 하는 것과 같다. 이자가 쌓일 시간을 안 주는 거다.
지식은 서로 연결된다
복리의 진짜 마법은 "예상치 못한 연결"에서 온다.
HTTP 상태 코드를 공부한 적이 있다. 프론트엔드 개발자인데 백엔드 쪽 지식이 필요할 때가 있어서 가볍게 훑었다. 200, 400, 404, 500 정도만 알고 있었는데, 301 리다이렉트, 304 캐시, 429 요청 제한 같은 것들을 알게 됐다.
그로부터 3개월 뒤, 서비스에 원인 불명의 느려짐이 있었다. 네트워크 탭을 까보니 같은 API를 반복 호출하고 있었는데, 304 응답을 제대로 활용하지 못하고 있었다. HTTP 캐시 메커니즘을 이해하고 있어서 원인 파악이 빨랐고, Cache-Control 헤더를 백엔드 팀에 요청해서 문제를 해결했다.
만약 HTTP 상태 코드를 공부하지 않았다면? 아마 "API가 느려요"라고 백엔드 팀에 던지고 끝났을 거다. 내 문제가 아니니까.
이런 식이다. JavaScript의 이벤트 루프를 이해하면 → React의 상태 업데이트가 비동기인 이유가 자연스럽게 이해되고 → 그러면 useEffect의 의존성 배열이 왜 필요한지도 명확해지고 → 그러면 React Query의 staleTime 개념도 직관적으로 와닿는다.
하나를 깊이 이해하면, 다음 것을 배우는 비용이 줄어든다. 그리고 그다음 것의 비용은 더 줄어든다. 이게 배움의 복리다.
복리의 적: 조급함
Morgan Housel의 글에서 가장 기억에 남는 문장이 있다. "기대가 소득보다 빠르게 자라면, 아무리 돈을 많이 벌어도 만족하지 못한다." 배움에도 똑같이 적용된다.
매일 30분씩 공부하면 한 달 뒤에 눈에 보이는 변화가 거의 없다. 주변에서는 "나 이번에 Next.js 부트캠프 완주했어" 같은 소리가 들리고, 나는 아직 TypeScript 제네릭 하나 붙잡고 있다. 조급해진다. "나도 뭔가 큰 걸 해야 하나" 싶어진다.
근데 3개월이 지나면 감이 온다. 6개월이 지나면 확실히 달라진 걸 느낀다. 1년이 지나면 주변에서 "언제 그렇게 된 거야"라고 묻는다. 복리는 그런 거다. 초반에는 변화가 안 보이고, 어느 순간 가속이 붙는다.
James Clear는 이걸 "실망의 계곡(Valley of Disappointment)"이라고 불렀다. 기대하는 성장 곡선은 직선인데, 실제 성장 곡선은 초반에 한참 바닥을 기다가 나중에 치솟는 모양이다. 대부분의 사람들은 그 바닥에서 포기한다. "이거 효과 없는 거 아냐?" 하면서.
나도 처음 3개월은 의심이 있었다. 매일 30분이 정말 의미가 있는 건지. 차라리 주말에 몰아서 하는 게 낫지 않은지. 근데 3개월을 버텼더니 4개월째부터 뭔가 달라지기 시작했다. 코드를 읽는 속도가 빨라지고, 에러 메시지를 보면 원인이 직관적으로 떠오르고, 새로운 라이브러리의 공식 문서를 읽을 때 이해 속도가 확 올랐다.
매일 배우기를 지속하는 방법
거창한 건 없다. 내가 2년 동안 유지한 방법은 이렇다.
1. 단위를 작게 쪼갠다. "TypeScript를 공부한다"가 아니라 "오늘은 Partial<T>이 뭔지 알아본다." 30분 안에 끝낼 수 있는 크기로 쪼개야 한다. 끝내지 못하면 다음 날 이어서 하면 된다.
2. 배운 걸 바로 써본다. 30분 공부하고 끝내는 게 아니라, 그날 회사 코드에서 써볼 기회를 찾는다. 기회가 없으면 사이드 프로젝트에라도 써본다. 적용하지 않은 지식은 3일 안에 절반이 사라진다.
3. 기록한다. 나는 노션에 "오늘 배운 것" 페이지를 만들어두고 한 줄이라도 적는다. "Partial<T>은 모든 프로퍼티를 optional로 만드는 유틸리티 타입이다. 폼 업데이트 함수에서 유용." 이 정도면 충분하다. 기록의 목적은 나중에 검색하기 위해서가 아니라 배운 걸 한 번 더 정리하기 위해서다.
4. 완벽하지 않아도 된다. 오늘 컨디션이 안 좋으면 10분만 해도 된다. 핵심은 "안 하는 날"을 만들지 않는 거다. 10분이라도 하면 습관의 연결 고리가 유지된다. 0분은 그 고리를 끊는다.
시간이 아니라 방향이다
Housel은 또 이런 말을 했다. "과거는 기억하는 것만큼 좋지 않았고, 현재는 생각하는 것만큼 나쁘지 않으며, 미래는 예상하는 것보다 나을 것이다."
지금 이 글을 읽으면서 "나는 이미 늦었다"고 생각할 수도 있다. 근데 복리의 본질은 시작 시점이 아니라 지속 기간이다. 지금 시작해서 2년 뒤에 터지는 게, 6개월 전에 시작해서 3개월 만에 포기한 것보다 낫다.
개발 공부에서 가장 과소평가되는 전략은 "매일 조금씩, 오래"다. 화려하지 않고, 인스타에 올릴 것도 없고, "이번 주 공부 기록"으로 보여줄 것도 별로 없다. 근데 복리가 작동하려면 원래 그래야 한다. 조용하고 꾸준하게.
10년 뒤 나를 만들 가장 강력한 투자는 오늘 30분의 공부다. 복리는 치트키를 쓰려고 하면 작동하지 않으니까. 그냥 매일 조금씩, 끊기지 않게 하는 수밖에 없다.
돈에서든 지식에서든, 복리의 원리는 같다. 기간이 길수록, 끊기지 않을수록, 결과는 기하급수적으로 커진다. 그리고 대부분의 사람들은 그 기하급수를 기다리지 못해서 직선적인 결과만 얻는다.
매일 30분. 그게 전부다.
