무엇이 탁월한 개발자를 만드는가?

2023년에 인프콘에서 발표했던 내용 중 일부를 이전 블로그에서 정리했는데, 그 일부를 가볍게 요약해서 소개합니다.

좋은 개발자의 조건, 태도 등에 관련된 글이 최근 눈에 좀 띄어서요. 저 자신이 더 좋은 개발자가 되고, 더 좋은 개발자를 알아보고, 주니어를 성장시킬 수 있게 도움을 준 연구를 하나 소개해드려고 합니다. (원본 글: [인프콘 2023 발표] 1. 무엇이 탁월한 개발자를 만드는가)

<What makes a great software engineer?> 라는 Li Paul Luo의 2015년 박사학위 논문인데요.

결론부터 말씀드리면, 저는 이 연구를 통해 다음 5개를 탁월한 개발자의 핵심 역량으로 생각하게 됐어요.

  1. 훌륭한 코드를 짠다
  2. 근거 기반 의사결정을 연습한다
  3. 동료의 효과적 의사결정을 돕는다
  4. 작업의 현재 가치를 극대화한다
  5. 효과적으로 꾸준히 학습한다

주니어를 위한 핵심 메시지

이 논문을 읽고 제가 정리한, 주니어 개발자를 위한 핵심 메시지는 다음과 같습니다:

  1. 훌륭한 코드를 기반으로 하여, 근거 기반 의사결정을 연습하고 동료의 효과적 의사결정을 도움으로써 작업의 현재 가치를 극대화하라.
  2. 효과적으로 학습하는 법을 꾸준히 학습하라. 더 훌륭한 코드를 짜는, 근거 기반 의사결정을 더 잘 연습하는, 동료의 효과적 의사결정을 더 잘 돕는, 작업의 현재 가치를 더 높이는 방법을 학습하라.
  3. 주니어 개발자라면 훌륭한 코드 짜기, 그리고 효과적이고 꾸준한 학습을 최우선 목표로 삼아라.
  4. 이 모든 것은 현실의 구체적 문제에 대한 이해와 관심을 바탕으로 해야 한다.

재밌는 건, 여기서 '개발자'를 다른 직군으로 바꾸고 '코딩'을 그 직군의 핵심 하드 스킬로만 바꾸면 어떤 직군에서나 제법 효과적인 역량 판단 기준 및 성장 방향으로 써먹을 수 있다는 겁니다. 그래서 이 연구는 제가 (다른 직군에 대한) 면접관으로서 성장하는 데에도 도움을 주었습니다.

연구는 어떻게 했나

혹시 궁금하신 분이 있으실까 해서 저자 Li Paul Luo가 어떻게 연구했는지 덧붙여보면요.

  • A) 개발자에게 필요한 교육, 역량, 행동 등에 대한 기존 연구 분석
  • B) 마이크로소프트에서 레벨 2 이상(어느정도 역량을 인정받은) 개발자 59명을 심층 인터뷰
  • C) A, B를 통해 개발자가 가져야 할 만한 개인적 특성(성격, 지식, 행동 등) 후보 54개 도출
  • D) 마이크로소프트 개발자 2,000여명 대상 설문조사하여 항목별 중요도 평가

D의 질문은 이런 식이었습니다.

(자세한 특성 묘사 후) 만약 숙련된 개발자가 이 특성을 가지고 있지 않다면, 당신은 그가 탁월한 개발자라고 평가할 것인가?

그리고 이렇게 답변하게 했죠.

  1. 이것 없이는 탁월한 개발자가 될 수 없다
  2. 이것 없이 탁월한 개발자가 되는 게 불가능하진 않으나 굉장히 어렵다
  3. 이것 없이도 탁월한 개발자가 될 수는 있겠으나, 있으면 도움이 된다
  4. 이건 탁월한 개발자가 되는 것과 관계가 없다
  5. 탁월한 개발자에게는 이게 있어서는 안 된다
  6. 잘 모르겠다
💡
저자는 의도적으로 설문조사에서 ‘소프트웨어 엔지니어(software engineer)’ 대신 ‘개발자(developer)’라는 용어를 썼습니다. 엔지니어링 팀에 속하지만 코드를 작성하지 않는 사람을 구분하기 위해서였다고 하더군요.

MS만을 대상으로 한 건 연구의 한계점이기도 했으나, MS에는 여러 나라에서 여러 분야의 소프트웨어 팀이 있었고 MS만의 용어와 문화에 익숙한 것이 분석의 일관성을 더해주는 이점이 더 크다고 봐서 MS만을 대상으로 했다고 언급되어 있습니다.

설문조사 결과는 이랬습니다.

  • 1위: 코딩 디테일에 주의를 기울이기
  • 2위: 복잡성을 관리하는 마음가짐
  • 3위: 꾸준히 스스로를 개선하기
  • 4, 5위: 정직함과 개방성
  • 6위: (분석하느라 실행 못하는 게 아니라) 실천하기

재밌는 건 최하위 2개인데요.

  • 53위: 초과근무(하루 8시간 이상) 하며 빡세게 일하기
  • 54위: 개인적 신뢰자산을 쌓아 호의를 주고받기

이 둘만 '탁월한 개발자는 이러면 안 된다'는 비율이 5%가 넘었습니다. 즉 개발자로서 성장하는 데 해가 되는 특성이라는 것이죠.

저자가 이 결과에 놀라서 후속 심층 인터뷰를 해보니, 이 특성들이 본질적으로 개발자에게 안 좋은 특성이라기보다는, 개발자가 이래야만 하는 상황에 처해있다는 것 자체가 안 좋다는 뜻에 가까웠습니다.

  • 초과근무가 필요하다는 건 설계가 잘못됐거나, 지속 불가능한 실천법을 따르는 상황이라는 뜻일 수 있고,
  • 호의를 주고받아야만 한다는 건 의사결정이 합리적 근거보다는 주관적 의견을 따르는 문화라는 뜻일 수 있다는 거죠.

이는 탁월한 개발자라면 이런 상황을 피할 수 있도록 조직과 문화를 바꾸는 노력을 해야 한다는 의미로 읽을 수도 있습니다.

제가 속한 조직에서도 물론 열심히 일하고 호의를 주고받는 것이 당면한 문제에 대한 해결책이 될 수 있음을 잘 알고 있습니다만, 이들에 의존하지 않고도 효과적으로 일할 수 있는 환경을 조성하도록 노력하고 있습니다.

각 역량에 대한 제 더 자세한 해석은 아래 글에 담겨 있습니다. 궁금하시면 한번 읽어보세요!

[인프콘 2023 발표] 1. 무엇이 탁월한 개발자를 만드는가
탁월한 개발자가 되기 위해 어떤 노력을 하면 될까? 2015년 논문 What Makes a Great Software Engineer? 를 자세히 파헤치면서 탁월한 개발자의 5가지 필수 요건에 대해 설명한다. 그리고 이 지식을 주니어와 시니어, 프론트엔드의 관점에서 어떻게 써먹을지 논한다.