더 나은 개발자가 되기 위해

PeaceSong·2022년 3월 14일
1
post-custom-banner

0. Intro

네이버에서 매달 발행하는 fe-news 3월호에 정곡을 찌르는 포스트가 소개되었다. JS 개발자의 "근본"을 논하는 글인데, 꽤 감명깊게 읽어서 번역 및 요약하여 이 포스트에 렉카질을 한다.

1. 더 나은 개발자가 되기 위한 시스템

주니어 개발자들에게 기술적인 이슈를 맡기면 종종 기초적인 부분에서 막히곤 한다. 며칠을 고민해서 짠 코드를 다른 사람들에게 설명하기 어려워할 때나, 리액트 훅이나 리덕스와 같이 항상 사용하는 프레임워크나 라이브러리가 그 안쪽에서 어떻게 동작하는지 전혀 이해하지 못할 때가 그렇다.

이럴 때 개발자들은 쓰라린 현실을 목도하게 된다. 즉 기술은 너무나 빠르게 발전하고 있고, 우리는 시간과의 싸움에서 지고 있다는 것이다.

인간 두뇌의 연산 속도는 한계가 있기 때문에 기술의 발전속도를 따라잡지 못한다. 새 기술을 맞닥뜨릴 때 마다 기술 책이나 강의를 보면서 공부하는 것은 시간낭비일 뿐이다. 이 문제를 해결하기 위해서는 더 나은 개발자가 되기 위한 "시스템"이 필요하다.

이러한 시스템은 1. 내가 아는 지식의 기술적인 틈새를 파악하게 해 주고, 2. 프로그래밍의 근본을 배양하여 오랫동안 써먹을 수 있게 해 주어야 하며, 3. 큰 그림을 이해하여 "코더"에서 "소프트웨어 엔지니어"로 빠르게 변모시킬 수 있는 시스템이어야 한다.

2. 시스템의 구성 요소

이러한 시스템은 인터넷에서 흔히 찾아볼 수 있는, 프레임워크를 가르쳐주는 글이나 튜토리얼 따위가 아니다. 그보다 더 선행하는 개발자로서의 마음가짐과 근본에 대한 시스템이다. 프레임워크나 라이브러리 따위는 결국 개발자로서의 근본적인 실력에 따라 좌우되는 디테일일 뿐이다.

2.1. 너는 이미 앞서 있다

  • 이 글을 읽을 법한 사람들은 이미 개발을 시작한 사람들이다. 이것만으로도 코드를 짜보지 않은 대부분의 사람들보다 한참 앞서있는 것이다.
  • 그렇기 때문에 우리가 지금 해야 할 것은 뭔가 새로 배우는 게 아니라, 근본적인 소프트웨어 개발 지식을 이미 알고 있는 지식에 "융합"시키는 것이다.
  • 이 마인드셋이 중요한 이유는, 이렇게 생각함으로써 시니어를 "언젠가는 이룰 것"이 아니라 "지금 당장 시작할 수 있는 지향점"으로 인식할 수 있기 때문이다.
  • 그러니까 스스로를 시니어와 그만 비교하고, 지금 당장 시니어가 되기 위해 무언가를 시작하면 된다는 것이다.

2.2. 틈새를 찾아라

  • 자기의 현 주소를 아는 것은 매우 중요하다. 과거 대항해시대 시절, 세계 최강이었던 영국 해군도 지도상에서 자기의 위치를 몰라서 수도 없이 가라앉았다.
  • 마찬가지로 많은 개발자들도 스스로의 기술적 수준을 알지 못해 막혀 있다.
  • 자기가 어떤 수준인지 알기 전까지는, 얼마나 많은 시간을 공부에 쏟든지 밑빠진 독의 물 붓기일 것이다.

2.3. 더 적은 자원으로 더 많이 해라

  • 자신의 기술적 수준을 알았다고 해도, 닥치는 대로 모든 것을 공부하려는 "학생" 멘탈리티는 번아웃과 혼란, 그리고 짧은 커리어의 원인이 된다.
  • 개발자로서의 자신의 가치는 "현재 알고 있는 것"이 아니다. 기술이 발전하면 우리가 구현하는 구체적인 방법, 즉 프레임워크나 라이브러리, 언어가 바뀌게 된다. 이러한 가변적인 지식에 집중하면 "프레임워크 쳇바퀴"에 빠지게 된다.
  • 시장에서 내 가치는 "일을 해내는 것"에 있다. 즉 클린 코드를 짜고, 높은 품질의 소프트웨어를 작성하는 것이다.
  • 가치있는 일을 해내기 위해서 필요한 것은 "우선순위"이다. 무엇을 배워야 하고 무엇을 잊어버려야 하는 지 우선순위를 매겨야 한다는 것이다.
  • 이러한 우선순위는 가치에 기반해야지, 현재의 중요성에 기반해서는 안 된다.

2.4. 근본을 마스터하라

  • 그렇다면 무슨 가치에 기반하여 우선순위를 매겨야 하는가? 그것은 바로 근본이다. 단단한 근본이 없는 모래성은 파도에 무력하게 쓸려나가는 법이다.
  • 여기서 근본은 "변하지 않는 것"을 의미한다.
    • 예를 들어, 자바스크립트 기반 프레임워크가 수도 없이 많이 시장에 나와 있지만, 결국 가장 근본적이고 변하지 않는 것은 "HTTP를 통해 서버에서 브라우저로 전달되는 자바스크립트 번들"이라는 것이다.
    • 이 과정을 이해할 수 있다면, 프레임워크나 라이브러리같은 "implementation details"가 아무리 많이 등장한다고 하더라도 최소한의 노력으로 이들을 다룰 수 있을 것이다. 이것이 바로 근본의 힘이다.

2.5. 코드 그 이상을 봐라

  • 수학을 공부하는 학생들을 조사한 결과, 수학을 못 하는 학생들은 수학을 "set of instructions"로 생각하고 단순 반복하기만 하는 반면 수학을 잘 하는 학생들은 수학을 "상호 연결된 시스템"으로 생각한다고 한다.
  • 즉 개발을 남이 정해놓은 대로 따라하기만 해서는 주니어를 벗어났을 때 답이 없다는 것이다. 큰 그림을 봐야 한다.
  • 코드 그 이상을 본다는 것은 소프트웨어를 만들 때 코딩보다 더 많은 것이 필요하다는 것을 이해하는 것이다. 이는 큰 그림을 보고, 코드를 프로덕션으로 내놓기까지 모든 필요한 단계를 구현할 수 있음을, 다시 말해 하나의 완전한 소프트웨어 라이프사이클을 돌 수 있음을 의미한다.

3. 핑계분쇄기

이러한 시스템을 안다고 하더라도, 이를 수행함에 있어서 몇 가지 난관에 봉착하게 될 것이다. 보통 많이 만나는 문제들은 아래와 같다.

  • 속도

    "시니어들은 짬만 몇 년을 먹었잖아요. 내가 이 시스템을 따른다고 하더라도 빠르게 주니어를 졸업할 것 같지는 않은데요?"

짬은 물론 중요하다. 하지만 의자에 앉아서 10년 넘게 짬을 먹는다고 하더라도 자동으로 시니어가 되지는 않는다. 경험을 쌓기 위해 더 효과적인 자기만의 방법이 있을 수 있다. 일단 해 보고 말하자.

  • 시간의 부족

    "하루 종일 코드짜며 일하고 나니 다른 걸 공부할 힘이 없어요."

위의 시스템을 제대로 적용했다면, 일주일 중의 단 5시간만으로도 충분할 것이다. (그리고 그 절반은 일하면서도 채울 수 있는 시간일 것이다.)

  • 할 일이 많음

    "아 근데 제가 지금은 개인 용무가 좀 많아서 바쁘네요 ㅎㅎ. 다음에 할게요."

너만 바쁘냐? 개인 용무는 항상 있다. 개인 용무 먼저 할 거면 성장은 언제 할 거니?


성공하는 개발자와 그렇지 않은 개발자의 차이는 짬도 아니요, 학력도 아니요, 코딩을 시작하는 나이나 재능의 문제도 아니다.
위대한 개발자는 "현재를 산다".
코드가 더럽다면 그들은 지금 당장 리팩토링을 시작한다. 파이프라인이 죽으면 그들은 당장 고친다. 돈을 적게 받는 것 같다면 지금 당장 연봉을 협상한다. 뒤쳐지는 것 같다면 그들은 지금 당장 공부한다. 문제가 생기면 그 문제를 해결한 사람을 찾아 지금 당장 조언을 구한다.

우리도 지금 당장 시작할 수 있다.

4. Outro

요즘 무엇을 먼저 공부해야 하는 지 방향을 잃어버려서 고민하고 있었다. 어떻게 시의적절하게 이런 포스트를 발견하게 되어, 간만에 영어영문학과 주전공 바이브를 발휘하여 내가 이해한 대로 패러프레이징을 해보았다.

우리 팀에서 쓰는 기술 스택만 공부하기도 벅차다고 생각하고 있었는데, 우선순위가 바로 정리된 느낌이다. 역시 사람이 근본이 있어야 하는 법이다. 눈만 뜨면 바뀌는 세상에서 변하지 않는 것이라니, 매우 근본적이지 않은가? 이 포스트대로라면 아마 내가 돼지불백을 구울 일은 없지 않을까 한다.

혹시 저작권 관련 이슈가 생긴다면 이 포스트는 바로 폭파 후 원작자 앞에 납작 엎드려 용서를 구할 것이다.

profile
127.0.0.1
post-custom-banner

0개의 댓글