네이버에서 매달 발행하는 fe-news 3월호에 정곡을 찌르는 포스트가 소개되었다. JS 개발자의 "근본"을 논하는 글인데, 꽤 감명깊게 읽어서 번역 및 요약하여 이 포스트에 렉카질을 한다.
주니어 개발자들에게 기술적인 이슈를 맡기면 종종 기초적인 부분에서 막히곤 한다. 며칠을 고민해서 짠 코드를 다른 사람들에게 설명하기 어려워할 때나, 리액트 훅이나 리덕스와 같이 항상 사용하는 프레임워크나 라이브러리가 그 안쪽에서 어떻게 동작하는지 전혀 이해하지 못할 때가 그렇다.
이럴 때 개발자들은 쓰라린 현실을 목도하게 된다. 즉 기술은 너무나 빠르게 발전하고 있고, 우리는 시간과의 싸움에서 지고 있다는 것이다.
인간 두뇌의 연산 속도는 한계가 있기 때문에 기술의 발전속도를 따라잡지 못한다. 새 기술을 맞닥뜨릴 때 마다 기술 책이나 강의를 보면서 공부하는 것은 시간낭비일 뿐이다. 이 문제를 해결하기 위해서는 더 나은 개발자가 되기 위한 "시스템"이 필요하다.
이러한 시스템은 1. 내가 아는 지식의 기술적인 틈새를 파악하게 해 주고, 2. 프로그래밍의 근본을 배양하여 오랫동안 써먹을 수 있게 해 주어야 하며, 3. 큰 그림을 이해하여 "코더"에서 "소프트웨어 엔지니어"로 빠르게 변모시킬 수 있는 시스템이어야 한다.
이러한 시스템은 인터넷에서 흔히 찾아볼 수 있는, 프레임워크를 가르쳐주는 글이나 튜토리얼 따위가 아니다. 그보다 더 선행하는 개발자로서의 마음가짐과 근본에 대한 시스템이다. 프레임워크나 라이브러리 따위는 결국 개발자로서의 근본적인 실력에 따라 좌우되는 디테일일 뿐이다.
이러한 시스템을 안다고 하더라도, 이를 수행함에 있어서 몇 가지 난관에 봉착하게 될 것이다. 보통 많이 만나는 문제들은 아래와 같다.
"시니어들은 짬만 몇 년을 먹었잖아요. 내가 이 시스템을 따른다고 하더라도 빠르게 주니어를 졸업할 것 같지는 않은데요?"
짬은 물론 중요하다. 하지만 의자에 앉아서 10년 넘게 짬을 먹는다고 하더라도 자동으로 시니어가 되지는 않는다. 경험을 쌓기 위해 더 효과적인 자기만의 방법이 있을 수 있다. 일단 해 보고 말하자.
"하루 종일 코드짜며 일하고 나니 다른 걸 공부할 힘이 없어요."
위의 시스템을 제대로 적용했다면, 일주일 중의 단 5시간만으로도 충분할 것이다. (그리고 그 절반은 일하면서도 채울 수 있는 시간일 것이다.)
"아 근데 제가 지금은 개인 용무가 좀 많아서 바쁘네요 ㅎㅎ. 다음에 할게요."
너만 바쁘냐? 개인 용무는 항상 있다. 개인 용무 먼저 할 거면 성장은 언제 할 거니?
성공하는 개발자와 그렇지 않은 개발자의 차이는 짬도 아니요, 학력도 아니요, 코딩을 시작하는 나이나 재능의 문제도 아니다.
위대한 개발자는 "현재를 산다".
코드가 더럽다면 그들은 지금 당장 리팩토링을 시작한다. 파이프라인이 죽으면 그들은 당장 고친다. 돈을 적게 받는 것 같다면 지금 당장 연봉을 협상한다. 뒤쳐지는 것 같다면 그들은 지금 당장 공부한다. 문제가 생기면 그 문제를 해결한 사람을 찾아 지금 당장 조언을 구한다.
우리도 지금 당장 시작할 수 있다.
요즘 무엇을 먼저 공부해야 하는 지 방향을 잃어버려서 고민하고 있었다. 어떻게 시의적절하게 이런 포스트를 발견하게 되어, 간만에 영어영문학과 주전공 바이브를 발휘하여 내가 이해한 대로 패러프레이징을 해보았다.
우리 팀에서 쓰는 기술 스택만 공부하기도 벅차다고 생각하고 있었는데, 우선순위가 바로 정리된 느낌이다. 역시 사람이 근본이 있어야 하는 법이다. 눈만 뜨면 바뀌는 세상에서 변하지 않는 것이라니, 매우 근본적이지 않은가? 이 포스트대로라면 아마 내가 돼지불백을 구울 일은 없지 않을까 한다.
혹시 저작권 관련 이슈가 생긴다면 이 포스트는 바로 폭파 후 원작자 앞에 납작 엎드려 용서를 구할 것이다.