"좋은 개발자란 무엇인가?"
근 몇 개월 간 계속해서 마음속에 품고 있던 화두이다.
마침 이에 대하여 집중해서 살펴볼 시간이 있어, 같은 주제에 대하여 다른 분들의 생각이 담긴 글들을 읽어보았다.
여러 생각 및 의견 그리고 조언이 있었고, 어렴풋이나마 좋은 개발자가 어떤 개발자인지 알 수 있었다.

다만 여전히 내 스스로가 정의하는 "좋은 개발자"는 아직 분명해지지 않았다.
글을 쓰신 분들에 비하여 지식과 경험이 부족해서일까?
하여, 본 글은 나의 생각을 남기기보다는 내가 참고한 여러 글을 간단히 요약하기 위한 공간으로 사용하고자 한다.


1. 좋은 개발자란 무엇일까? by 유리

1) 컴퓨터 활용 능력
2) 프로그래밍 언어 활용 능력
3) 개발자 자신에게 주어진 비즈니스 및 그 상황에 대한 이해도와 유연성
4) 개발자로서의 방향성, 목표를 갖고 있는지의 여부


2. "내가 생각하는 좋은 개발자란?" by TADA 리드 엔지니어 MK

- "같이 일하고 싶다는 생각이 드는 사람"
- 개발 실력은 기본. 커뮤니케이션 능력과 책임감 있는 태도를 갖는 것이 중요.
- 커뮤니케이션 능력이 좋은 사람?
  - 자신의 의견만을 주장하지 않고 남의 의견도 경청할 줄 아는 사람
  - 어떤 문제가 생겼을 때 즉각적이고 투명하게 현재 상황을 알리고 같이 해결책을 찾으려는 태도를 가진 사람


3. 좋은 개발자란 무엇일까? by Evan Moon

- 기술뿐만 아니라 비즈니스나 유저에 대한 생각도 많이 하는 개발자
- 같이 일하고 싶은 사람(=좋은 개발자를 넘어 좋은 동료가 될 수 있는 사람)
  - 나와 다른 의견이든, 나보다 경력이 낮든 상관없이 상대방의 의견을 존중해 주는 태도를 가진 사람
  - 다른 사람이 감정적으로 힘들 때 프로답지 못하다고 비난하기 보다, 그 고민을 들어주고 얼른 제자리로 돌아올 수 있게 돕는 사람
  - 상대방의 감정이 이해는 안 되더라도 그 사람이 그런 감정을 느꼈다는 것을 최소한 인지할 수 있는 사람


4. Good Developer 1 | 좋은 개발자의 5가지 기준 by Code States

1) 코드의 reading과 writing
  - reading: 자신의 업무 파악 및 타인과의 커뮤니케이션에 중요
  - writing: Naming을 잘하고 이해하기 쉽게 코드를 작성하는 것
2) 빠른 생산성: 같은 시간 동안 더 많은 코드를 짜는 것
3) 원활한 커뮤니케이션:
  - "단지 사람이 좋고 나쁨을 떠나서, 대화를 하는데 숨이 턱 막히는 사람이 있고 대화를 하면 할수록 막혔던 부분이 풀리거나 새로운 아이디어를 떠오르게 하는 사람이 있다."
4) 업무 관리, 사람 관리 능력
  - 개발을 한다는 것 = task를 나눠 할당하고 기간에 맞춰 완성시키는 일
  - 업무 관리 = 자신에게 주어진 task를 스스로 관리하는 능력
  - 한국에서 개발자의 종착지는 관리자 -> 사람 관리 능력이 중요
5) 지속적인 학습


5. Good Developer 2 | 커뮤니케이션 잘하는 개발자가 되는 방법 by Code States

- 프로그래머와 개발자는 다르다.
  - 프로그래머: 컴퓨터를 이용해서 프로그램을 제작 또는 수정하는 사람(ex. 외주 프로젝트 프리랜서, 학교 과제 수행하는 컴공 학생)
  - 개발자: 회사나 조직에 소속되어 다른 사람들과 함께 일하며 개발하는 사람
- 좋은 개발자가 되기 위한 첫 번째 방법, '소통'
  - 건설적인 대화 하기
    - 문제점 (1) 대화가 끝났어도 명확한 합의점이나 결과, action item, 해결책이 나오지 않았다.
      - 해결책 (1) 대화의 목적과 목표를 분명히 하기
      - 해결책 (2) 대화가 끝난 후에는 반드시 대화에서 얻어낸 결과물들을 태스크로 전환하고 각자에게 배분하기
    - 문제점 (2) 논쟁을 하다 삼천포로 빠지고, 논쟁이 논쟁을 위한 논쟁으로 변질된다.
      - 해결책 (1) 논쟁의 지점을 분명히 하기
      - 해결책 (2) 용어를 분명히 하기(용어 통일)
  - 커뮤니케이션의 핵심은 '나 자신'
    - 커뮤니케이션을 잘 하기 위한 조건 3가지
      - 조건 (1) 자신과 상대방의 커뮤니케이션 스타일 파악하기
      - 조건 (2) 상대방이 당신에게 망설임 없이 커뮤니케이션할 수 있게 하
        - 주변에 커뮤니케이션하기 망설여지는 상대를 찾아보기 -> 이후 나 자신을 되돌아보기
        - 다른 사람에게 솔직하게 물어보기
      - 조건 (3) 동료와 친밀한 관계를 형성하고 공감하기
- 대화뿐만 아니라 협업 툴 등을 사용하여 커뮤니케이션하기
  - 자신이 하고 있는 일을 공유 & 상대방의 업무 파악하기
  - 도구를 잘 쓰는 것도 커뮤니케이션 능력 향상의 일환


6. 개발자의 생명은 커뮤니케이션 능력 by 임백준

- 프로그래머와 개발자의 차이
  - 프로그래머: 강호를 혼자 떠돌며 칼을 쓰는 무사 -> 칼솜씨가 중요
  - 개발자: 거대한 군사 조직에 속한 정규군 -> 규칙과 규율이 중요(칼솜씨도 중요)
  - 결국 개발자는 커뮤니케이션 능력이 중요
- 개발자의 커뮤니케이션 능력이란?
  - 아닌 것
    - 다른 사람들 앞에서 준비한 슬라이드를 이용해서 발표하는 능력
    - 논쟁이 벌어졌을 때 자기주장을 관철시키는 능력
    - 고객을 설득해서 특정한 제품이나 서비스를 판매하는 능력
    - 말을 아나운서처럼 또박또박 발음하는 능력
  - 맞는 것
    - 명확하지 많은 이야기 속에서 지엽적인 것을 걸러내고 본질을 파악하는 능력
    - 복잡한 논리나 추상적인 개념을 상대방이 이해할 수 있게 설명하는 능력
    - 타인의 감정을 이해하는 공감능력
- 커뮤니케이션 능력을 키울 수 있는 방법
  - 독서: 컴퓨터를 끄고, 전화를 내려놓고, 호흡이 긴 독서하기
  - 좋은 사람 만나기:
    - 만나서 감정 소모되거나 자기를 자기답게 만들어주지 않는 사람은 만날 필요가 없다.
    - 인맥관리나 사회생활 핑계대지 말기


7. 좋은 개발자가 되고 싶다면 다음 5가지 소양을 갖추세요. by F-Lab

1) 항상 의문을 제기하기
2) 긍정적으로 생각하기
3) 의사소통은 말로 하기
4) 중요한 것은 아이디어
5) 항상 겸손하기


8. 채용 전쟁에서 '슈퍼루키' 개발자를 찾는 기준 by claudia(채널톡)

- 좋은 개발자란, 빠르게 배우고 깊게 고민한 사람
  - 좋은 제품을 만들기 위해서는 변화에 빠르게 적응해야 함
- 빠르게 배우는 개발자의 특징: 몰입(Deep dive)의 경험
  - 몰입: 자신이 좋아하는 분야의 본질을 이해하기 위해 시간을 쏟고 실제로 구현한 사람
  - 좋은 개발자는 무엇이 됐든 본질적인 프로토콜을 한번 깊게 파보고 구현한 사람
    - 이런 사람은 큰 문제를 맞닥뜨렸을 때 구조적으로 핵심을 파악해서 문제를 해결함
- 좋은 개발자의 회사 선택 기준
  - 좋은 개발자 동료가 있는 곳
  - 제품 개발이 회사 성장에 핵심 영향력을 주는 곳


8. 10배 이상 뛰어난 개발자가 되는 법(요즘IT 번역글) by Michael Lin

- 초급 개발자가 저지르는 3가지 실수
  1) 사용하는 도구에 대한 연구가 없음
    - 초급 개발자가 저지르는 흔한 실수: 무작정 코딩부터 시작함
    - 자신이 알고 있는 도구만 고집하고, 이를 모든 곳에 적용하려고 함
    - 다른 대안을 찾는 데 시간을 투자하지 않음
  2) 도움을 요청하지 않음
    - 초급 개발자는 스스로 상황을 판단하고 정보를 해석할 능력이 부족함 -> 자기 혼자 고민에 빠짐
  3) 비즈니스 가치를 제공하지 않음
    - 코드: 비즈니스 목표를 달성하기 위한 수단
    - 초급 개발자들이 비즈니스 목표를 간과하는 경우
      - 신기술 적용 -> 제품 전략과 일치하지 않을 수 있음
      - 코드 리팩토링 -> 기회비용. 수익 창출을 위한 다른 기능 개발에 시간을 보낼 수 있음
      - 새 플랫폼으로 마이그레이션 -> 확실히 좋아지는 것이 있나?


각각의 글을 간단하게 요약해보았는데, 전체적으로 봤을 때 좋은 개발자를 구성하는 요소로 3가지를 들 수 있어 보인다.

1. 기술 사용 능력(코드 작성 능력, 자료구조/알고리즘 및 하드웨어에 대한 이해 등 포함)
2. 커뮤니케이션 능력
3. 비즈니스에 대한 이해

1번은 개발자로서의 기본기라고 할 수 있겠고, 어찌 보면 위 3가지 중 가장 쉽게 접근할 수 있겠다.
(난이도가 쉽다기보다는 이를 구성하는 요소들이 명확하게 드러나있음과 동시에 수준 파악이 비교적 용이하다는 생각)

3번의 비즈니스에 대한 이해는 어찌 보면 자신이 몸 담고 있는 분야에 대한 지식과 시장 상황 등을 알면 될 것처럼 보인다.
그러나 해당 분야에 대해서 어디까지 알아야 하는가(어느 정도 이해하는 수준? or 완전 전문가 수준까지?)에 대해서는 끝이 없어 보인다.
그리고 단순히 지식을 앎에 그치지 않고, 개발자로서 비즈니스 가치를 확보할 수 있는 결과물을 만들어내는 능력은 별개일 것이다.

2번의 커뮤니케이션 능력은, 당연한 말이지만, 개발자에게만 국한된 것은 아니다.
세상의 어떤 일을 하든 이 커뮤니케이션은 중요하다(심지어 혼자 일을 하더라도 스스로와의 커뮤니케이션이 필요하지 않겠는가?).
이러한 맥락에서, 나에게 있어 '커뮤니케이션 능력'에 대한 고민은 마치 "어떻게 하면 더 좋은 사람이 될 수 있을까"에 대한 길을 찾아가는 것과 같다.

아직 내 스스로 정의내린 "좋은 개발자"가 무엇인지 모르겠지만, 다른 분들의 글을 통해 얻어낸 기준으로 봤을 때 나는 과연 좋은 개발자인가 하는 의문이 든다.
- 나의 기술력은 충분히 뛰어난가?
- 나는 나의 분야에 대하여 충분히 알고, 이해하고, 이를 토대로 개발로서 가치를 전달하고 있는가?
- 나는 다른 사람들과 좋은 커뮤니케이션을 하고 있는가?
위 질문들에 대한 나의 대답은 "모르겠다"이다.
선뜻 "예"라고 하기는 좀 그렇고, 그렇다고 "아니요"라고 할 정도는 아닌 것 같고, 그 사이 어느 지점에 있는 "모르겠다"이다.
아마도, 적어도 몇 년간은 계속 "모르겠다"이지 않을까 싶다.
(그전에 나 스스로 "좋은 개발자"가 무엇인지 정의하는 게 우선이겠지만)


비록 이 글이 다른 훌륭한 개발자분들의 생각을 모아 조잡하게 요약한 글이긴 하나,
그럼에도 나와 같은 화두("좋은 개발자란?")를 가진 다른 분들이 각자의 생각을 펼침에 조금이나마 도움이 되길 빈다.


<참고 자료>
- 좋은 개발자란 무엇일까? by 유리
- "내가 생각하는 좋은 개발자란?" by TADA 리드 엔지니어 MK
- 좋은 개발자란 무엇일까? by Evan Moon
- Good Developer 1 | 좋은 개발자의 5가지 기준 by Code States
- Good Developer 2 | 커뮤니케이션 잘하는 개발자가 되는 방법 by Code States
- 개발자의 생명은 커뮤니케이션 능력 by 임백준
- 좋은 개발자가 되고 싶다면 다음 5가지 소양을 갖추세요. by F-Lab
- 채용 전쟁에서 '슈퍼루키' 개발자를 찾는 기준 by claudia(채널톡)
- 10배 이상 뛰어난 개발자가 되는 법(요즘IT 번역글) by Michael Lin

+ Recent posts