ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 좋은 개발자의 6가지 특징
    IT 이야기 2024. 1. 5. 10:00

    * 본 글은 그렙(Grepp)의 CSO 정두식 님의 글을 일부 재편집하였습니다.


    개발자의 역량을 평가하고 역량을 키우는데 도움을 주는 일을 하다 보니 ‘좋은 개발자’에 대한 이야기를 많이 듣는 것 같습니다. 그런데 무엇이 ‘좋은 개발자'일까요? 기본적인 코딩 역량은 갖춰야 안 좋은 개발자를 탈출할 수 있다는 건 알지만, 탈출이 아닌 지향할 곳은 어디가 되어야 할까요?

    이런 생각을 하다 보니 아래의 축구 게임처럼 개발자에게 필요한 능력을 정의해보고 싶어 졌습니다. 필요한 요소를 정의하고, 각각의 요소에 대해 어느 정도 수준인지를 살펴보면 누가 뛰어난 개발자인지 더 객관적으로 측정할 수 있을 거란 생각이 들었습니다.

    (설명을 위한 예시 / 출처: https://www.ea.com/games/fifa/fifa-22/ratings)

     

    요소 선정을 위한 인터뷰

    이런 능력 요소를 뽑아내기 위한 작업을 '전문성 연구'라고 부릅니다. '전문성 연구'의 한 방법으로 인터뷰를 하고, 거기에서 많이 언급되는 단어를 새어 보는 방법이 있다고 해서 실행에 옮겨 봤는데요.
    그에 앞서 일관된 인터뷰를 위해 다음과 같은 4개의 핵심 질문을 선정했습니다. 

    1. 같이 일해 본 개발자 중에 잘하는 것 같은데 뭔가 아쉬웠던 개발자가 있다면 떠올려주세요. 그 사람의 아쉬웠던 점은 무엇인가요?
    2. 정말 잘한다고 생각하는 개발자를 떠올려 주세요. 그 사람과 다른 개발자의 차별점은 무엇인가요?
    3. 같이 일하기 힘들었던 개발자가 있나요? 어떤 면 때문에 같이 일하기 힘들었나요?
    4. 인터뷰이가 다른 개발자보다 잘한다고 생각하는 부분은 무엇이고, 어느 시점부터 다른 개발자보다 잘하게 되었다고 생각하시나요?

    “잘하는 개발자란 어떤 특징을 가지는가?”라는 질문으로 바로 들어가기보다는 다양한 각도에서 개발자에게 필요한 역량 요소를 뽑아내기 위해 질문을 구성했습니다. 이 질문을 가지고 주니어에서 시니어까지, 백엔드에서 프론트까지, 게임/핀테크/유틸리티/SI 등 다양한 분야의 개발자를 인터뷰했고, 녹취록을 분석해서 여러 개발자에게 반복적으로 언급된 요소들을 추려 봤습니다. 

    💡 이렇게 뽑아낸 개발자에게 필요한 자질은  6개의 카테고리로 구분됩니다.

    1. 개발력
    2. 기획력
    3. 협업능력
    4. 학습능력
    5. 성향
    6. 도메인지식

    이 6개의 카테고리를 하나씩 살펴보도록 하겠습니다.


    좋은 개발자가 되기 위해 필요한 자질

    1️⃣ 개발력

    개발력에 대해서는 아래와 같은 세부 역량들이 언급되었습니다.

    • 설계능력
    • 클린코드를 짤 수 있는 능력
    • 버그 없는 코드
    • 다양한 라이브러리를 알고 활용하는 능력
    • 튜닝/리팩토링 하는 능력
    • 코드를 빠르게 파악하는 능력
    • CS지식
    • 디버깅 능력

    많이 언급된 순서대로 나열해 보았습니다. (이후로 언급되는 각 역량의 세부항목도 많이 언급된 순서로 나열하겠습니다.)
    각 항목마다 포괄적이거나 디테일한 역량을 다루고 있어 레벨이 맞지 않는 아쉬움은 있지만, 개발력이 뛰어난 사람이라면 갖추어야 할 요소들을 잘 설명해 주고 있습니다.
    이 요소들이 모든 경력의 개발자에게 다 같은 중요도로 요구되는 건 아닐겁니다. 예를 들어 설계능력은 시니어로 갈수록 중요도가 올라가는 능력이라면 버그 없는 코드를 짜는 능력은 모든 개발자에게 요구되는 능력일 겁니다.

    이 글을 읽는 분들이 위의 각 역량을 순서대로 키우려고 노력하기보다는 당장 자신이 바로 개선할 수 있는 부분부터 노력해 보시면 좋겠습니다. 예를 들어 아직 취업을 준비 중이라면 성능을 튜닝하거나 리팩토링 할 만한 서비스 중인 프로젝트에 접근하기는 어려울 겁니다. 그렇다면 버그 없는 코드를 작성하는 능력을 키우기 위한 노력을 하거나 CS지식을 먼저 키우는 것도 좋겠지요. 

    여기서 중요한 점은 ‘개발력이 뛰어난 사람’이 곧 ‘좋은 개발자’는 아니라는 점입니다. 어떻게 보면 개발력은 좋은 개발자가 되기 위한 선제 조건에 해당하는 것 같습니다. 인터뷰를 하면서 놀란 점은 좋은 개발자를 정의하는 데 있어서 생각보다는 개발력 이외에 다른 부분들에 대한 언급이 더 많았다는 점입니다. 

     

    2️⃣ 기획력

    좋은 개발자에게 필요한 역량에 기획력이 나오는 게 이상하게 보일 수 있지만 개발력만큼이나 많이 언급된 카테고리입니다.

    개발자에게 기획력이 왜 필요할까요? 

    기획적인 이해도가 부족하다면 만들어 놓은 코드가 성과를 내기 어렵기 때문입니다. 코드를 통해 구현하는 기능은 결국 어떤 문제를 해결하기 위한 건데 기획적인 이해도가 떨어진다면 그 문제를 잘 해결하지 못하는 결과물을 내게 됩니다. 기획자가 있더라도 모든 상황에 대한 처리를 명시해 주기는 어렵기 때문에 좋은 개발자라면 내가 만드는 코드가 어떤 문제를 해결하기 위해 필요한 것인지를 이해하고 작업해야 합니다.

    그렇다면 기획력을 키우기 위해서는 어떤 노력을 할 수 있을까요? 

    기획자 교육과정에 대한 리뷰를 한 적이 있는데요. 기존에 서비스 중인 사이트들을 분석해 보는 과정이 들어 있었습니다. 사이트를 분석하면서 기획의도를 추정해 보거나, 각각의 화면에서 어떤 예외케이스들이 있을지를 살펴보는 방식이었습니다. 어떻게 보면 개발을 배우면서 클론코딩을 하는 과정과 유사합니다. 여러분이 즐겨 사용하는 서비스를 한 번 분석해 보시는 것도 좋을 것 같습니다. 

    🔎 제가 즐겨하는 활동도 하나 소개드릴까 합니다. 서비스를 사용하다가 ‘이거 만든 사람 정말 바보 아니야? 왜 이렇게 불편해?’라는 생각이 든다면 혹시나 내가 생각하지 못한 어떤 케이스를 방어하기 위해 그렇게 만든 것일 수도 있습니다.
    그런 케이스를 생각해보고 나라면 이 문제를 어떻게 풀었을지 생각해 보는 것도 좋겠습니다.

     

    3️⃣ 협업능력

    협업 능력에 대해서는 다음과 같은 항목들이 언급되었습니다.

    • 함께 성장하기 위한 노력과 지식의 공유
    • 개방성
    • 적극성
    • 설득력

    개발자가 함께 일하는 대상에는 동료 개발자뿐만 아니라 기획/디자이너/영업/CS 등 다양한 이해관계자가 있습니다. 이런 다양한 분들과의 협업이 있어야 성과를 낼 수 있기 때문에 좋은 개발자라면 좋은 협업 능력을 가지고 있을 겁니다.

    인터뷰를 하다 보니 내가 배워왔던 방식만 맞다고 생각하면서 개방적이지 못한 모습을 보이거나 ‘내 일만 하면 되지 저것까지 내가 해야 할까?’하는 모습들에서 안타까움을 느끼는 경우를 많이 봤습니다.

     

    4️⃣ 학습력

    개발자만큼 계속해서 새로운 기술을 공부해야 하는 직업도 드물 겁니다. 그만큼 빠르게 기술 기반 자체가 변화하기 때문이지요. 그래서 학습력이 중요한 개발자의 역량으로 언급되었고 각각의 소항목은 다음과 같습니다.

    • 깊게 살펴보는 탐구성향
    • 새로운 시도에 대한 적극성
    • 학습 습관
    • 지속적인 개선

    학습이 자신의 이해를 넓혀가는 과정이라고 생각해 보면 1번은 깊이를 더해가는 과정으로, 2번은 넓게 알아가는 과정으로 이해할 수 있습니다.

    ‘깊게 살펴보는 탐구 성향’은 내가 이미 쓰고 있는 언어/라이브러리/프레임워크 등이 더 구체적으로는 어떻게 동작하는지를 깊이 살펴보는 성향입니다. 문서에 적혀있는 동작 방식만 알고 쓰는 것이 아니라 더 깊이 들어가서 실제로 어떻게 구현되어 있는지를 살펴보는 사람들이 이런 성향을 가지고 있다고 할 수 있습니다.
    가장 쉬운 예로 파이선에서 list에 아이템을 넣을 때 +=을 쓰지 않아야 하는 이유를 알기 위해서는 +=이 어떻게 동작하는지에 대해 살펴보아야겠지요. 내가 일상적으로 사용하는 기능들이 어떻게 동작하는지를 궁금해하고 하나씩 파 보는 것도 좋은 개발자로 가는 빠른 방법이라고 합니다.

    ‘새로운 시도에 대한 적극성’은 하나를 깊게 파는 것이 아니라 여러 가지를 알아가려는 노력인데요. 하나를 깊게 파는 것도 중요하지만 계속해서 새로운 시도를 해 보면서 하나의 tech stack에만 갇히지 않는 것도 좋은 개발자의 중요한 자질입니다.

    ‘학습 습관'과 ‘지속적인 개선'은 학습력을 유지하기 위해 필요한 요소입니다. 좋은 개발자들은 학습하는 게 습관이 되어 있고 이렇게 배운 것들을 자신의 프로덕트에 적용해서 지속적으로 개선해 나갑니다.

     

    5️⃣ 성향

    • 하드워킹
    • 근원적 문제해결
    • 끈기
    • 성실성
    • 진실성

    들이 언급되었는데요. 좋은 성향이라는 것이 좋은 개발자에게만 요구된다기보다는 모든 프로페셔널들에게 요구되는 부분일 겁니다. 그래도 많은 분들이 좋은 개발자라면 이런 성향이 필요하다고 공통적으로 언급해 주신 부분은 살펴볼 만한 가치가 있겠죠?

     

    6️⃣ 도메인 지식/경험

    백엔드 개발자더라도 게임 서비스의 백엔드 개발과 금융 서비스의 백엔드 개발은 다를 수 있습니다. 해당 도메인에서 요구하는 기본적인 지식이 다르기 때문이지요. 좋은 개발자라면 자신이 일하는 영역의 도메인 지식을 갖추고 있어야 합니다. 도메인 지식이 있는 경우 유사한 상황에 대한 경험이 많기 때문에 그만큼 빠른 의사결정을 할 수 있는 게 장점일 겁니다.


    이렇게 ‘좋은 개발자'가 가져야 하는 능력 요소를 크게 6가지로 나누어 봤는데요. 어떤 부분은 지금 당장 내가 개선을 위해 노력할 수 있는 부분도 있고 또 어떤 부분은 노력으로 얻기는 힘든 부분도 있을 겁니다. 

    모든 능력을 키우기 위해 노력하기보다는 한 번에 하나씩, 지금 내가 가장 효과적으로 키울 수 있는 항목들을 선정해서 노력해 보시는 걸 추천합니다. 한 번에 하나씩 자신에게 필요한 역량을 생각해 보고 조금씩 개선해 보세요. 조금씩 개선해 나간 사람과 그렇지 않은 사람은 10년 뒤에 분명히 다릅니다. 이 글이 여러분의 ‘좋은 개발자 되기’에 조금이나마 가이드가 되었다면 좋겠네요. 

     

    댓글

Programmers