같이 일하고 싶은 개발자 (1)
2024. 07. 29.
내가 일하는 팀에서 함께 건축 설계 관련 알고리즘을 개발할 사람을 구한다면 어떤 요소들을 중점적으로 볼까? 아래의 능력을 갖추고 있다면 더할 나위 없을 것이다.
- 구현력. 생각한 것을 코드로 짜는 능력을 말한다. 그러니까, 눈 앞에 문제가 하나 주어지면 어떤 방법으로든 돌진해서 풀어내는 것이다. 나는 구현력이 좋은 사람들을 힘이 좋다고 표현한다.
- 학습 능력. 무언가를 구현하지 못하겠다면 누군가 구현한 것을 보고 배워서 다음 번에 같은 문제를 다시 마주쳤을때는 풀 수 있어야 하고, 구현하는 데에 성공했더라도 더 좋은 구현 방식을 찾으면 기저에 깔린 아이디어를 기꺼이 흡수할 수 있어야 한다.
- 설명 능력. 무언가를 구현했다면 그것이 어떻게 작동하는 것인지, 왜 그렇게 구현한 것인지 잘 설명할 수 있어야 한다. 코드에 주석을 상세히 달아놓는 것도 좋고, 설명을 위해 구현에 참고한 레퍼런스를 잘 남겨두는 것도 좋고, 내용을 문서화하는 것도 좋다. 설명 능력은 불특정 다수를 대상으로 하는 소통 능력이라고 볼 수도 있겠다.
- 소통 능력, 혹은 협업 능력. 팀으로 일한다는 것은 혼자서는 만들어낼 수 없는 성과를 여러 명이서 시너지를 내서 만든다는 것이다. 그리고 이 시너지가 나려면 서로 소통이 잘 되어야 한다. 팀에서 뭘 만들어야 한다고 하면 잘 알아듣고, 팀에서 사용하는 도구나 특정한 소통 방식이 있다면 이를 잘 숙지하고, 본인에게 할당된 일이 있으면 어떻게 업무가 진행되고 있는지 잘 보고하고, 일정에 영향을 줄만한 문제가 발생해도 잘 보고하는 것 등이 소통에 포함된다. 즉, 소통은 팀의 리소스가 효율적으로 활용되기 위해 1) 나에게 필요한 정보를 잘 인지하고 2) 나만 알고 있는 정보 중 다른 팀원들도 알아야 하는 정보가 있다면 이를 잘 공유하는 과정이라고 보면 된다.
이 중 소통 능력은 혼자서 프로젝트를 진행하면서 향상시킬 수 있는 능력도 아니고 이를 입증/검증하는 것도 어려우니 우선 제쳐놓고 생각하자. 남은 세 능력인 구현력과 학습 능력, 설명 능력은 충분히 혼자서도 기를 수 있고, 이를 입증하는 것도 어렵지 않다고 본다. 제일 좋은 방법은 무언가를 구현하고, 구현하기 위한 기술들을 계속 찾아보면서 새로운 것을 배우고, 구현한 결과물과 구현 과정을 계속 기록으로 남기는 것이다.
구현할만한 것이 잘 떠오르지 않는다면 알고리즘 문제를 푸는 것을 추천한다. 내 경우에는 새로운 언어를 써야 할 일이 생기면 해당 언어로 Baekjoon Online Judge (acmicpc.net)에 있는 문제를 하루에 적어도 하나씩 풀면서 점차 언어에 익숙해지는 식으로 구현력을 기른다. 처음 개발을 공부하는 사람이라면 알고리즘 문제를 풀때 주석을 열심히 남기면서 설명 능력을 기르는 것도 나쁘지 않다. 그리고 문제를 풀든 작은 프로젝트를 진행하든 하면서 배운 내용들을 어딘가에 지속적으로 기록해두는 것도 습관을 들이면 좋다.
그리고 이 과정에서 git을 쓰면 정말 좋은데... git에 대해서는 다른 글에서 좀 더 자세히 설명하도록 하겠다.