개발자라는 직업에서 갖춰야 할 역량이 무엇일까? 내가 생각하는 것은 아래와 같다.
관리 능력
여기서 표현하고 싶었던 것은 업무 관리 뿐만 아니라 사람 관리도 포함한다. 이 부분은 아마 개발자 뿐만 아니라 모든 일과 관련된 부분이라면 다 해당될 것이라고 생각하며, 일을 잘하기 위해서 가장 중요한 역량이 어떤것인지 질문을 받는다면 주저없이 관리 능력이라고 꼽을 것 같다.
보통 자기자신을 업무적으로 관리하는 부분은 개발자들은 잘 하는 반면, 사람 관리나 커뮤니케이션적인 부분의 경우 어려워하는 부분이 있다. 직업 특성적인 부분도 있다고 생각한다. 나 역시, 자기 자신에 대한 관리는 엄격한 편인 거 같아 잘 하고 있는데, 커뮤니케이션 적인 부분은 상대적으로 부족한 것 같다. 진정성 있는 태도로 꾸준히 노력하면 어떻게든 되지 않을까? (뭐 어떻게든 되겠지.)
지속적인 학습
개발자라는 직업을 위하여 배워야 할 지식은 굉장히 많다. 컴퓨터 기초 지식부터 각 직업의 특성에 맞는 전문 지식까지 각 영역의 기술적인 부분들은 정말 하루가 다르게 변하고 있다. 시대의 흐름에 따라 트렌드도 계속적으로 변하고 있다. 예를들어, 10년전에는 모바일 앱 개발이 화두였고, 몇년전만 하더라도 블록체인, 요즈음은 머신러닝이나 AI가 인기가 많다. 언어적으로는, Java 라는 언어가 인기가 있었으나 요즈음은 Python이 대세가 되어가고 있으며 아키텍처나 개념적으로도 시대가 요구하는게 달라지고 있다. (소스코드 관리 방식이나, 테스팅 환경, 업무 프로세스 등등)
나는 이러한 여러가지 지식들을 반드시 다 알아야 할 필요는 없다고 생각한다. (물론 아에 몰라도 된다는 것은 아니고, 트렌드를 놓치지 않을 정도로 꾸준히 노력은 해야 한다.) 대신, 내가 정말로 하고 싶은 것을 스스로 알아내서 그와 관련된 부분은 누구보다 전문가로서 인정받기 위해 노력하며 작은 것이라도 만들어내기 위해 꾸준히 연습을 해야한다고 생각한다. 돈을 벌기 위해서 직업을 찾는다면 오래 버티기 힘들다고 믿고 있다. 최소한 일단 이 직업을 선택했으면, 끝을 보기 위해 악착같이 노력해야 한다고 믿는다. 다행히도, 나는 사용자 인터페이스를 개발하고 나아가 사용자 경험이 개선되는 부분을 좋아하는 거 같다.
Code
결국 개발자의 일은 ‘코드를 작성하는 것'이 매일 매일의 주요 업무다. 나는 함께 일하는 사람이 봤을 때 이해가 될 수 있는지, 시간이 지났을 때 내가 봐도 이해가 될 수 있는지에 대한 부분을 고민하면서 작성하려고 노력하는 편이라고 생각한다. 학창시절 소스코드 라는 것은 컴퓨터와 사람이 대화하는 ‘언어' 라고 배웠다. 그 언어의 종류가 시간이 흐를수록 변해가고 있고, 시대에 맞춰 유행이나 어떤 문화가 생기는 것처럼 바뀌어 간다고 생각한다.
어떤 언어를 사용하던지 간에 내가 작성한 코드는 잘 읽힐 수 있어야 한다고 생각한다. 동일한 동작을 하는 코드라고 해도, 지나치게 짧게 작성 되었을 경우 협업하는 동료는 물론, 1년후 내가 다시 그 코드를 봤을 때 이해하기 어려울 수도 있다. 이러한 관점에서 고민하다보면 단순히 결과를 만들어내는데 그치지 않고, 일반적으로 말하는 구조적인 관점이나 디자인 패턴, 테스트 주도 개발 등에 관심을 갖게 되고, 더 나아가 함께 개발하는 분들과 성장하는 것에 관심을 갖게 되는 것 같다.