토스 러너스 하이에서 해당 질문을 보고 한 번도 이에 대해 제대로 고민해본 적이 없는 것 같아서 글을 쓰게 되었다.
토스가 건넨 질문은 다음과 같았다.
"잘하는 개발자란 어떤 역량을 가진 사람일까요?"
일주일 동안 틈 날 때마다 생각을 해봤는데, "잘하는 개발자" 라는 게 추상적으로 느껴져서 답하기 너무 어려웠다.
그래서 이 글을 쓰면서 고민해보고, 결론을 도출하고자 한다.
무슨 역량이 필요해? 라는 질문에 답하려면, 어떤 역량들이 후보에 있는지 아는 게 필요할 것 같다.
여러 글도 참고해보고, 나도 고민해보면서 아래와 같이 분류해봤다. 기술적 역량이나 협업 능력은 다른 역량들을 포괄하는 의미를 가진 것으로 판단했다.
물론 더 많은 역량을 가질수록 더 잘하는 개발자이겠지만, 이 모든 걸 갖추지 않았다고 해서 잘하는 개발자가 아닌 것일까?
그렇다면, 이 중에 최소한 어떤 걸 가져야 잘하는 개발자라고 할 수 있을까..? 정답이 없어 더 어려운 질문이다. 그래도 특히 더 중요하다고 생각하는 역량을 뽑아봤다.
1. 문제 해결 능력
2. 커뮤니케이션 능력
3. 성장에 대한 의지와 지속적인 학습
물론 연차에 따라 잘하는 개발자가 되기 위해 갖춰야할 역량은 좀 다를 수 있을 것 같다. 특히 요즘 들어 우선순위를 판단하고 그에 맞게 일정을 조율하는 것의 중요성을 느끼고 있긴 하다. 하지만, 내가 2년이 살짝 넘었으니 <신입 ~ 3년 사이>를 기준으로 역량을 고려해봤다.
사실 "개발"은 "문제 해결의 연속"이라고 말해도 과언이 아니라고 생각한다. 기획과 디자인에 맞게 구현하는 것 또한 문제이며, 버그도 문제이다. 문제 해결을 하지 못한다면, 좋은 개발자라고 말하기 어렵다.
그렇다면, 문제 해결을 위해서는 어떤 게 필요할까?
원인을 알아야 고칠 수 있기 때문에 문제가 발생한 정확한 포인트를 찾아야한다. 만약 그럴 수 있는 상황이 아니라면, 가설을 세우고 여러 테스트를 하며 범위를 좁혀나가야한다. 원인을 찾았다면, 그걸 해결할 수 있는 방법을 찾아가야한다.
=> 이런 식으로 문제를 해결할 경우, 문제가 발생한 포인트를 끝까지 찾으려는 "끈기" 와 스트레스를 버텨낼 "인내" 가 필요하다.
하지만, 만약 아주 급한 상황이라서 조치가 우선인 상황이라면? 얘기는 달라진다. 우리 회사는 언론사이기에 기사를 내보내는 게 무조건적으로 중요하다. 원인보다 해결이 우선순위가 높을 때가 있다.
=> 이럴 때는 "판단" 이 중요하다고 생각하다. 아무리 급하더라도 이 결정이 맞는지 판단을 잘해야한다. 어떻게 조치할 것인지, 이에 대한 영향도는 어떤 게 있는지, 후속 조치는 뭐가 필요한지 등등
그리고 위 2가지 경우를 모두 포함하여 "기록"이 중요하다. 수동 조치 방법, 문제 발생 원인, 문제 발생 시 봐야하는 부분들을 잘 정리해둬야 추후에도 잘 해결할 수 있다.
혼자 기획,디자인,개발을 다 하는 1인 기업이 아닌 이상 무조건 다른 사람들과 협업이 필요하다.
커뮤니케이션을 잘한다는 건 뭘까?
이 기능이 필요한 배경, 사용자의 불편함 등을 충분히 파악해야 의도에 맞게 개발할 수 있다.
=> 따라서 모르는 게 있으면 "질문" 해야한다.
좋은 기술을 사용하는 건 좋다. 다만, 나 혼자 결정하고 기존 코드를 수정해버리면 혼란을 초래할 것이다.
=> 수정해야하는 범위나 영향도가 크다면, 독단적으로 사용하지 않고 "공유"하고 필요하다면 "설득"해야한다.
열심히 하더라도 일정에 맞추기 어려울 수 있고, 변수가 생길 수도 있다.
=> 좌절하며 스스로를 갉아먹기 보다 협업하고 있는 사람들에게 상황을 "전달"하고 "조율"하자.
잘하는 개발자가 되기 위해서 역량3은 필수가 아닐까 생각한다. 역량3은 "문제 해결 능력"이나 "커뮤니케이션"과 같이 의미 해석이 필요한 부분은 아닌 것 같다. 그래서 아래의 포인트에 대해 풀어나가보려한다.
성장에 대한 의지를 가지고 지속적으로 학습해나간다면, 어떤게 좋을까?
환경과 트렌드는 지속적으로 변해가고 사용하고 있는 언어 또는 플랫폼의 신규 버전들도 나온다.
=> 지속적으로 학습하며 언어와 기술, 버전의 특징을 알아두고 트렌드를 파악해야 해당 부분을 고려하여 더 좋은 판단을 내릴 수 있다.
시간이 갈수록 더 어려운 문제들이 주어질 것이며 기대도 높아질 것이다. 꼭 누군가 내게 문제를 주지 않는다고 해도 서비스를 운영하다보면 생각치도 못한 에러를 만날 수 있다.
=> 어려운 문제이더라도 피하지 않고 해결하기 위해서 공부하다보면 그만큼의 경험을 쌓을 수 있다. 그걸 바탕으로 더 어려운 문제를 풀고 더 많은 경험을 할 수 있게 된다면, 선순환이 될 것이라 생각한다.
잘하는 개발자란 아래 3가지 역량을 필수적으로 가져야한다고 생각한다.
1. 문제 해결 능력
2. 커뮤니케이션 능력
3. 성장에 대한 의지와 지속적인 학습
첫째로 문제 해결 능력을 갖추기 위해서는 해결하기까지 버텨낼 "끈기"와 "인내"가 필요하며, 상황에 맞게 판단할 수 있어야한다. 또한 동일한 문제가 발생할 경우를 대비하기 위한 기록도 중요하다.
두 번째로 커뮤니케이션을 잘하기 위해서는 모르는 게 있을 때 질문하고 내 상황을 전달하면서 조율할 줄 알아야한다. 그리고 아무리 좋은 기술이더라도 독단적으로 사용하기보다 공유와 설득을 통해 사용할 수 있는 환경을 만들자.
마지막으로 성장에 대한 의지를 가지고 지속적인 학습을 한다면, 부족한점이 있더라도 지속적으로 더 나은 개발자가 되기 위한 바탕이 될 수 있고 선택이 필요한 순간에 더 좋은 판단을 할 수 있을 것이다.