F-Lab
🚀
깊이 있는 개발자 커뮤니티, 데브클럽에 함께 하세요

실력있는 개발자로 살아남는 방법

writer_thumbnail

F-Lab : 상위 1% 개발자들의 멘토링

개발자로 살아가는 이들의 공통된 목표는 당연히 ‘개발을 잘하고 싶다’ 일 것이다. 어떠한 문제 혹은 버그를 만났을 때 자신의 개발 실력으로 전문가처럼 손쉽게 해결하거나, 코딩 테스트의 문제들을 숨 쉬듯이 쉽게 풀고, 뛰어난 기술력과 다양한 프로젝트 경험을 통해 원하는 회사에 취업을 하기 위해선 결국 개발을 ‘잘’ 해야 하는데 어떻게 하면 개발을 ‘잘’할 수 있을까? 너무 막연한 질문이 될 수도 있지만 그에 대한 이야기에 앞서 필자가 배드민턴을 했던 경험에 빗대어 이야기해 보고자 한다.

 

 

누구나 한 번쯤은 약수터에서 배드민턴을 하듯 그저 셔틀콕을 라켓에 맞춰 넘기는 배드민턴을 해본 적이 있을 것이다. 필자도 딱 그 정도의 실력으로 호기롭게 배드민턴 동호회에 가입해서 사람들과 시합을 했는데 처음엔 점수도 잘 냈지만 그것도 잠시뿐 호흡은 가빠지고 매일같이 어깨와 손목에 통증을 달고 살아야 했다. 즉, 잘못된 자세로 배드민턴을 했기 때문이다. 그 후 제대로 된 레슨을 받은 뒤 시합을 해보니 자꾸 실수를 하고 매번 지기 일쑤였다. 그렇게 레슨을 받으며 3개월, 6개월이 지나니 어느 순간 상대팀의 공격을 받아내는 나를 볼 수 있었고 시합에서 이기는 횟수도 늘어나며 매번 아팠던 몸도 더 이상 아프거나 다치지 않고 배드민턴을 재밌게 즐길 수 있었다. 돌이켜보면 나도 모르게 자세 즉, 습관이 잘못된 것이었다.

 

모든 삶 속을 들여다보면 습관이라는 것은 삶에 막대한 영향을 끼치는 걸 알 수 있다. 건강한 몸짱이 되고 싶은 마음은 있지만 밤이 될 때마다 짜고 매운 음식으로 야식을 챙겨 먹는다면 몸짱이 되는 데에 좋지 않은 영향이 될 수 있다. 당연하게 개발자로 살아감에 있어서도 습관은 매우 중요하다. 구글링을 통해 찾은 코드를 그대로 복사+붙여넣기 하며 문제를 해결만 한다거나, 팀에서 함께 사용하는 코드에서 지저분한(리팩토링을 할 수 있는) 코드를 보고도 내가 작업한 게 아니니 못 본 척 넘어가고, 개발한 API 혹은 기능에 대해 바쁘다는 핑계로 문서화를 하지 않는 등 이러한 좋지 못한 습관들을 가지고 있으면서 개발을 ‘잘’하고 싶다는 건 손 안 대고 코푸는 격으로 정말 잘못된 마음가짐이라 생각한다. 그렇다면 보다 괜찮은 개발자로 성장하기 위한 습관들은 어떤 것들이 있을까? 중요하다 생각하는 몇 가지만 간추려 이야기해 보고자 한다.

 

 

첫 번째, 기술적 상상을 하자.

 

집에서 배달음식을 시키게 되면 기술적으로 어떤 과정을 거쳐서 최종적으로 배달음식을 받을 수 있게 될까? 콘서트 티켓팅을 할 때 정해진 시간에 수십~수백만 명이 안정적으로 티켓팅을 하려면 어떤 아키텍처가 필요할까? 대형 스타가 SNS에 글을 올리면 수많은 팔로워들에게 어떻게 빠르게 알림이 갈 수 있을까? 운영하는 서버의 전원이 내려가 장애가 발생했다면 무엇을 먼저 해야 하고 이를 예방하기 위해 어떤 것들을 해야 할까?

 

IT 기술은 우리가 살아가는 삶에 있어 꼭 필요한 존재를 넘어서 이제는 없어서는 안 될 정도로 중요도가 높아졌다. 이러한 IT 기술을 아무렇지 않게 사용할 정도로 우리 주변에서 쉽게 찾아볼 수 있는데 이러한 부분들을 개발자라면 한 번쯤 해당 담당자가 된 것처럼 상상을 하며 어떻게 구현을 할지 고민해 보는 습관을 만들어 보면 어떨까. 개발이라는 영역은 넓은 시야에서 이야기하면 결국 ‘문제 해결 능력’이라 생각한다. 여기서 말하는 ‘문제’는 ‘Problem’을 말할 수도 있지만 ‘Specification’도 될 수 있다. 즉, 주어진 상황을 기술로써 해결하는 게 목표다. 해당 서비스가 본인의 담당이 아니거나 사회적 이슈가 된 문제가 본인에게 발생한 문제가 아니더라도 그것들을 기술로써 어떻게 해결할 수 있을지에 대해 고민해 보는 것만으로도 충분히 좋은 경험이 될 수 있다. 간접 경험을 통해서 고민을 하는 과정, 그 과정 속에서 배우게 되는 새로운 기술적 포인트들에 대해 많이 배울 수 있게 되기 때문이다. 물론 그것들을 실제로 구현까지 해본다면 더할 나위 없이 좋다.

 

 

두 번째, 나를 위해 기록하자.

 

우리는 개발을 하면서 정말 다양한 기술들을 만나게 된다. 그것들은 나온 지 얼마 안 된 정말 최신 기술이거나 이미 오래전에 나온 기술이지만 본인은 새롭게 알게 되는 경우도 있다. 혹은 이미 알고 있는 지식인데 얕게만 알고 있어 여러 삽질을 통해 보다 더 새롭고 깊게 알게 된 지식들도 있을 것이다. 그렇다면 이러한 기술이나 지식들을 경험하게 되었을 때 어떻게 해야 오래 기억에 남을까?

 

우리의 뇌는 기억력의 한계가 있다. 예컨대, 초등학교 입학식 때 먹은 점심 메뉴가 기억나는가? 너무 오래된 기억은 그렇다 쳐도 지금 당장 며칠 전의 최고/최저 온도를 기억하는 건 쉽지 않다. 물론 그러한 것들에 대해 관심이 없을 수도 있지만 우리가 보고 듣는 정보량은 늘 넘쳐난다. 그래서 기억을 하는 것보다 기록을 하게 되면 당장 기억은 못 할지라도 예전에 기록한 내용들을 찾아볼 수 있기 때문에 기록을 하는 것이 오래 기억을 하는 방법이 될 수도 있다. 개발자는 기술 블로그를 써야 한다는 소리를 많이 들었을 것이다. 요즘은 유행처럼 번져 이제 취업을 하려는 분들은 하나쯤 가지고 있는 기술 블로그. 왜 써야 하고 어떻게 써야 잘 쓰는 걸까?

 

기술 블로그를 쓰는 데 있어 1차적 목표는 자신이 경험했던 내용들을 다시 한번 정리하는 데에 있다. 시행착오를 통해 문제를 해결했다고는 하지만 소가 뒷걸음치다 쥐를 잡는 격으로 해결하는 경우도 종종 생긴다. 그렇기에 본인에게 주어진 문제가 무엇이고 어떤 시행착오를 겪다 결국 어떤 방법으로 문제를 해결했는지에 대해 정리를 하면서 몰랐던 혹은 얕게만 알고 있었던 지식을 다시 한번 정립할 수 있는 좋은 공부의 기회가 되기 때문이다. 2차적 목표는 복잡한 상황에 대해 정리하는 습관을 기를 수 있다는데에 있다. 단지 누군가와 대화를 할 때 또는 개발을 하며 상황을 정리할 때뿐만은 아니다. 코드를 작성할 때에도 무작정 돌아가게끔만 작성하는 코드가 아닌 누가 봐도 이해가 한 번에 되고 유지 보수가 쉬운 그야말로 ‘읽기 좋은 코드’를 작성할 때 큰 도움이 된다고 생각한다. 코드라는 것도 하나의 언어이기 때문이다. 3차적 목표는 누구나 접근이 가능한 공개적인 공간에 글을 작성함으로써 얻어지는 효과를 직접적으로 느끼는 데에 있다. 혹시 잘못된 정보가 있을 때 누군가가 피드백을 준다면 다시 돌아보는 기회가 될 수 있고, 블로그에 작성한 기술 관련 내용들이 결국 나의 개발 역사가 되기에 이직을 하거나 개인 브랜딩 측면에서 충분히 어필을 할 수 있게 된다.

 

위의 목표를 이루기 위해서는 단순히 ‘그냥 했다’ 가 아니라 주제에 관련된 비슷한 내용들까지 찾아보며 최대한 자세하게 (그렇다고 양이 중요하단 이야기는 아님) 작성할 필요가 있다. Set이라는 자료구조에 대하여 궁금해서 찾아보고 ‘중복이 없고 빠르네~’로 끝나는 게 아닌 Set이라는 Interface를 구현한 구현체들(HashSet, TreeSet, LinkedHashSet)의 차이점을 살펴보고 각 메소드들이 어떻게 구현되어 있는지 실제로 코드를 살펴보면서 알아보는 방식으로 꾸준히 정리한다면 분명 위에서 이야기했던 목표들로 더 깊고 진하게 성장할 수 있는 상황들이 주어질 것이다.

 

 

세 번째, 밖으로 나가자.

 

나 홀로 검은색 모니터 화면 앞에 앉아 묵묵히 코드를 작성하다 보면 자칫 기술적 고립화, 우물 안 개구리가 되기 쉽다. 더불어 자신감마저 부족하다 보면 (자신의 기술력이 부족하다고 느껴서) 내가 하는 것 또는 할 수 있는 것만 고집하게 되고 이는 성장과는 정 반대의 길로 가는 것과 마찬가지라 생각한다. 외부 공간에 자신을 위치시키는 걸 연습해 보자. 그 대상이 SNS 또는 커뮤니티가 될 수도 있고 코로나가 점점 풀려서 하나 둘 생기는 기술 콘퍼런스도 다녀와 보기도 하고, 회사 내/외에서 알게 된 사람들과 기술 스터디나 토이 프로젝트를 진행하며 자신의 코드를 상대방에게 설득시키는 걸 넘어서 다른 사람이 작성한 코드를 보며 이해하는 연습을 하다 보면 처음엔 두렵고 부끄럽지만 꽤 긍정적인 영향을 받을 수 있게 된다.

 

지금까지 보다 괜찮은 개발자로 성장하기 위한 습관에 대해 알아보았다. 습관을 유지한다는 건 정말 어렵다. 더불어 나에게 없던 습관을 만들면서까지 유지하는 것은 더욱더 어려울 수 있다. 그렇지만 이런 습관들을 만들기 위해 작은 것부터 시도해나간다면 당장의 드라마틱한 큰 성장의 효과는 없을지라도 보다 더 높은 곳으로 도약할 수 있는 굳은살 정도는 만들 수 있지 않을까 생각을 해본다. 그러한 굳은살이 하나 둘 쌓여 시간이 지나고 보면 훌쩍 성장해 있는 본인을 만날 수 있길 바라본다.

 

 
ⓒ F-Lab & Company

이 컨텐츠는 F-Lab의 고유 자산으로 상업적인 목적의 복사 및 배포를 금합니다.

조회수

멘토링 코스 선택하기

  • 코스 이미지
    Java Backend

    아키텍처 설계와 대용량 트래픽 처리 능력을 깊이 있게 기르는 백앤드 개발자 성장 과정

  • 코스 이미지
    Node.js Backend

    아키텍처 설계와 대용량 트래픽 처리 능력을 깊이 있게 기르는 백앤드 개발자 성장 과정

  • 코스 이미지
    Python Backend

    대규모 서비스를 지탱할 수 있는 대체 불가능한 백엔드, 데이터 엔지니어, ML엔지니어의 길을 탐구하는 성장 과정

  • 코스 이미지
    Frontend

    기술과 브라우저를 Deep-Dive 하며 성능과 아키텍처, UX에 능한 개발자로 성장하는 과정

  • 코스 이미지
    iOS

    언어와 프레임워크, 모바일 환경에 대한 탄탄한 이해도를 갖추는 iOS 개발자 성장 과정

  • 코스 이미지
    Android

    아키텍처 설계 능력과 성능 튜닝 능력을 향상시키는 안드로이드 Deep-Dive 과정

  • 코스 이미지
    Flutter

    네이티브와 의존성 관리까지 깊이 있는 크로스 플랫폼 개발자로 성장하는 과정

  • 코스 이미지
    React Native

    네이티브와 의존성 관리까지 깊이 있는 크로스 플랫폼 개발자로 성장하는 과정

  • 코스 이미지
    Devops

    대규모 서비스를 지탱할 수 있는 데브옵스 엔지니어로 성장하는 과정

  • 코스 이미지
    ML Engineering

    머신러닝과 엔지니어링 자체에 대한 탄탄한 이해도를 갖추는 머신러닝 엔지니어 성장 과정

  • 코스 이미지
    Data Engineering

    확장성 있는 데이터 처리 및 수급이 가능하도록 시스템을 설계 하고 운영할 수 있는 능력을 갖추는 데이터 엔지니어 성장 과정

  • 코스 이미지
    Game Server

    대규모 라이브 게임을 운영할 수 있는 처리 능력과 아키텍처 설계 능력을 갖추는 게임 서버 개발자 성장 과정

  • 코스 이미지
    Game Client

    대규모 라이브 게임 그래픽 처리 성능과 게임 자체 성능을 높힐 수 있는 능력을 갖추는 게임 클라이언트 개발자 성장 과정

F-Lab
소개채용멘토 지원
facebook
linkedIn
youtube
instagram
logo
(주)에프랩앤컴퍼니 | 사업자등록번호 : 534-85-01979 | 대표자명 : 박중수 | 전화번호 : 1600-8776 | 제휴 문의 : info@f-lab.kr | 주소 : 서울특별시 강남구 테헤란로63길 12, 438호 | copyright © F-Lab & Company 2024