개발 열정이 식어갈 때면 유튜브 개발바닥 채널의 여러 인터뷰를 반복해서 보곤 한다. 여러 분들의 인터뷰들을 보고 있으면 나도 열심히 살아야겠다는 생각이 뿜뿜 하기 때문이다.
이번에는 김영한님이 나오신 편을 봤는데 "함께 자라기"라는 책을 정말 강력 추천하셔서 읽어보기로 했다.
이 책은 총 세 파트로 구분되어 있다.
1. 자라기
2. 함께
3. 애자일
그 중 <Part 1 - 자라기> 까지 읽고 느낀 점을 나눠보고자 한다.
1. 경력과 실력의 관계
커리어 초창기에는 경력과 실력이 비례한다고 한다. 하지만 2년 이상 지나는 경우 경력과 실력은 거의 관계가 없어진다고 한다. 우리가 흔히 생각하는 의사들조차 고경력자와 저경력자 ( 2년 차 이상 )의 실력은 비슷하다는 결과가 있다고 한다. 이 글을 읽으면서 나는 희열을 느꼈다. "그렇다면 내가 열심히 한다면 고경력자 분들과도 어깨를 나란히 할 수 있다는 건가" 라는 생각에 말이다. 그런 후에 바로 든 의문은 그렇다면 어떻게 "열심히" 해야 하는지가 궁금했다. 당연하게도 그 방법은 책에 있었다.
2. 의도적 수련
사람은 너무 어렵거나, 너무 쉬운 일을 하게 되면 성장이 거의 일어나지 않는다고 한다. 내 실력에 맞는 적절한 난이도의 훈련을 할 때 실력이 성장한다는 것이다. 단순한 연습양이 아닌 적절한 난이도가 중요한 것이었다 ! ( 이 책에서는 양치질을 예로 든다. 생각해 보면 우리가 양치질을 아무리 많이 했다고 한들 양치질 전문가가 되는 것은 아니니까 말이다 ! )
하지만 현실에서는 나에게 맞는 난이도의 일만 할 수는 없다. 그 말은 우리가 난이도를 조절해야 한다는 것이다.
만약 나에게 너무 쉬운 일이 있다고 가정해 보자. 어떻게 난이도를 조절할 수 있을까 ?
1. 나의 실력을 낮추기 - 쉽게 생각하면 모래주머니 수련법이라고 생각하면 될 것 같다. 마우스를 사용하지 않고 코딩을 한다던가 라이브러리의 도움을 받지 않고 코딩하는 것이 여기에 속할 것이다.
2. 일의 난이도를 높이기 - 이는 내가 하고 있는 업무의 종류를 바꾸라는 것이 아니다. 1s 안에만 끝나면 되는 쿼리를 튜닝해서 0.5s 안에 들게 한다던지. 2시간 안에 해야 할 일을 1시간 안에 한다던지. 일의 기술적 목표를 높이는 것이다. ( 이렇게 쓰고 보니 위의 나의 실력을 낮추는 방법과 흡사한 것 같기도 .. ? )
이번에는 나에게 너무 어려운 일을 만났다고 가정해 보자. 어떻게 난이도를 조절할 수 있을까 ?
1. 일의 난이도를 낮추기 - 이 또한 일을 바꾸는 것이 아니라 내가 하고 있는 일의 난이도를 낮추는 것이다. 예를 들어 10가지 기능을 해야 하는 것을 간단한 한 두 가지 기능만을 구현한 프로토 타입을 만든다던지 일의 범위를 좁혀서 1가지 기능만을 먼저 구현해 보는 것이 여기에 속할 것이다.
2. 나의 실력을 높이기 - 스터디를 참여한다던지 강의를 듣는다던지 꾸준히 나의 성장을 위해 노력하면 되는 것이다 !
이렇게 나에게 어려운 일을 만났을 때 또는 쉬운 일을 만났을 때 나에게 맞는 난이도를 설정해 업무 중에도 나의 성장을 도모할 수 있는 방법을 적용한다면 의도적 수련을 하지 않는 사람보다 더 많은 성장이 있지 않을까?
3. 프로그래밍 언어를 배우는 방법
나는 제목을 읽었을 때 가장 먼저 나는 어떻게 배웠지 ? 라는 생각이 들었다. 생각해 보면 그냥 강의를 듣고 ? 알고리즘 문제를 조금 풀어보고 ? 했던 것 같다. 저자는 우연히 프로그래밍 고수의 새로운 언어를 배우는 과정을 눈으로 본 적이 있다고 했다. 그 고수의 방법을 배워보자 !
1. 새로운 것을 배울 때 무엇을 만들지 생각하기
그 고수는 처음에 주로 단어 수를 세는 프로그램을 만든다고 한다. 이렇듯 프로그램을 만들 것을 염두하면 배우니 더 적극적으로 책을 읽게 되어 더 빠르게 그 언어를 습득할 수 있다고 한다.
2. 이미 있는 기능에 새로운 것을 더하기
처음부터 끝까지 내가 만드는 것은 어려울 수 있으니 이미 있는 것에 새로운 기능을 더해 보는 것이다.
3. 표준 라이브러리 소스를 자주 읽는다.
표준 라이브러리 소스는 소수의 해당 언어의 달인들이 작성하는 코드이기 때문에 배울 것이 정말 많다고 한다. 해당 언어의 스타일부터 디테일한 문법까지 다양한 것들을 표준 라이브러리 소스를 통해 습득할 수 있다 !
4. 어떻게 잘할지를 물어보는 것이 아닌, 특정 사건을 통해 배우자 !
사람은 자기가 한 일의 50%도 제대로 설명하지 못한다고 한다. 이미 머릿속에 사고하는 방식이 체화되어 있어 자기가 내린 결정을 당연하다고 여겨 설명하지 못하는 것이다. 그렇기 때문에 고수에게서 무언가를 배우고 싶다면. 어떻게 잘할 수 있는지 물어보는 것이 아니라 굉장히 디테일한 특정 사건을 어떻게 해결했는지를 물어보는 것이 좋다고 한다. 그러면 그 문제를 해결해 나가는 과정을 통해서 고수의 사고하는 방식이나 고수의 방법을 배울 수 있다고 한다.
이러한 방법을 통해서 학습한다면 새로운 프로그래밍 언어도 어렵지 않게 습득할 수 있을 것이라고 생각한다 !
4. 실수를 대하는 법
우리는 항상 실수를 예방한다고 배우지 않았나 ? 하지만 책에서 제공하는 자료에 의하면 실수를 예방하려고 하는 집단보다 실수를 통해 배우려고 하는 과정을 통해 더 많은 성장이 일어난다고 한다. 그러니 실수를 두려워하지 말고 도전하고 실수를 범했을 때 예방하지 못했다고 탓하는 문화를 만드는 것이 아니라 실수를 통해 더 배우는 문화를 만들어 가자 ! 그리고 그런 마음가짐을 가지자 !
하지만 이 부분을 읽으면서 실수를 예방하려는 태도 자체에서도 배우는 것이 있지 않을까라는 생각을 했다. 예를 들어 실수를 예방하고 미연에 일어날 사건을 대비해 코드 수준을 더 높이고, 예외를 처리하고 더 꼼꼼하게 따져 코드를 구현한다면 그 과정 자체를 통해서도 더 배우는 것이 있을 것이라는 생각이 들었다. ( 물론 당연히 신경 써야 할 일 들이지만 실수를 예방하기 위해 더 신경 쓰자는 말이다 ! )
5. 나 홀로 전문가
우리는 흔히 고수를 상상하면 산속에서 혼자 무엇인가를 득도한 사람들을 상상한다. 하지만 현실세계는 다르다는 결과가 많아지고 있다고 한다. 혼자 끙끙 앓는 것보다 남들과 소통하고 남들을 통해 배우는 사회적 교류가 더 나은 개발자를 만든다는 것이다. ( 단순하게 개발자만의 얘기가 아니지 않을까 ? ) 특히 새로운 기술을 도입하는 과정에서 어려움을 겪는 큰 이유는 기술의 성숙도나 지식적 모자람이 아닌 사회적인 것에 있다고 한다. 가령 임원진들의 도움과 사회적 자본의 도움을 받지 못한다던가 팀 내에서 신뢰가 없다던가 하는 이유 말이다. 우리가 생각하는 것보다 사회적 교류와 사회적 신뢰는 기술 분야에 있어 큰 비중을 차지한다고 한다. 그러니 주니어 개발자가 새로운 것을 배우는 과정에서부터 새로운 기술을 도입하는 환경에까지 사회적 영향력은 너무도 중요하다. 그러니 이제는 골방에서 나와 사람들과 소통하고 나누는 것을 일상화하자!
책 <함께 자라기>의 약 40% 지점에 왔다. 짧은 책이고 짧은 양을 읽었지만 주니어 개발자로서 나의 성장에 많은 인사이트를 주었다.
이 책을 단순히 읽고 마는 것이 아니라 이 책을 읽고 3일간 나의 업무에 읽은 내용을 적용해 보니 나의 업무 시간도 많이 달라져 있었다.
먼저 이 책에서 얘기하는 의도적 수련을 많이 적용해 보려고 노력했다.
그래서 내가 선택한 방법은 나의 기술적 목표를 높여 일의 난이도를 올리는 것이었다. 현재 나는 SI 기업에서 근무하기 때문에 나에게는 이것저것 많이 시도해 볼 수 있는 기회가 많았다. 그래서 나는 기존에 3초 정도 소요되는 회원을 조회하는 쿼리를 1초 이하로 만들기로 목표를 잡았다.
우선 쿼리를 분석하기 위해 Mysql의 EXPLAIN을 사용해 실행 계획을 확인하고 Index를 사용하지 못하는 부분을 찾아내 Index를 설정해 주었다. 그러니 목표로 설정한 1초 이내로 쿼리문을 수행할 수 있었다. ( 3s가 넘게 소요되던 쿼리가 0.3s 가 걸린 순간에 얼마나 짜릿했는지 모른다 ! )
이렇듯 업무의 기술 목표를 높게 잡아 난이도를 올리니 더 다양한 것을 알게 되었다.
또한 이 책을 통해 실수를 다루는 방법을 알게 되니 업무를 대하는 태도도 많이 달라졌다. 다른 사람이 실수한 코드를 보며 한숨을 쉬는 것이 아니라 내가 고칠 수 있는, 나의 성장에 도움이 되는 공부거리를 찾았다는 생각이 들어 다른 사람의 실수가 귀엽고 재밌는 놀거리로 보였다. 그러니 당연히 일이 재밌어질 수밖에 ! 하루하루가 기대되기까지 했다.
그리고 이렇게 하루하루 쌓아가다 보면 언젠가 노련한 개발자가 되어있지 않을까라는 생각이 들었다. 그리고 내가 그런 노련한 개발자가 되었을 때 눈 덮인 산속의 백발 고수가 되어있기보다는 소박하게 웃으며 주변에 많은 사람들에게 도움을 주는, 나눌 줄 아는 개발자가 되었으면 좋겠다 !
'독서' 카테고리의 다른 글
[오브젝트] 책임 주도 설계 적용기 (근태관리) (0) | 2024.03.20 |
---|---|
[오브젝트] 2. 캡슐화 (1) | 2023.11.19 |
[오브젝트] 1. 객체,설계 (1) | 2023.11.16 |