이번 해에 진급을 하였다. Senior Developer 혹은 '고급 개발자' 는 타이틀인데 사람들이 일반 개발자 와 고급 개발자가 다른점은 어떤건지 궁금할수도 있어서 이 글을 적어본다.
우선 기본적으로 기대하는 역할이 다르다. 쥬니어 레벨 개발자가 아무것도 알지 못하고 아직 다른 경험있는 개발자에게 궁금한게 있으면 질문해서 배우고 스스로 깨우쳐 나가는 직급이라면 일반 개발자는 어느정도 자율적으로 할수 있지만 여전히 여러가지 멘토링이 필요한 직급이라고 할수 있다.
고급 개발자는 경험이 쌓여서 다른 사람들은 멘토할수 있고 어려운 문제가 있으면 리소스를 잘 활용할수 있는 개발자라고 볼수 있다. 하지만 직장에 오래 있었다고 고급 개발자 위치로 갈수 있다고 생각하면 큰 오산이다. 물론 회사 또는 부서마다 틀려서 시간이 어느정도 지나면 진급을 시켜주는 경우도 있는데 이건 그 팀 방침이 크게 잘못된것이다. 개발자의 공부는 끝이 없어서 정말 배워야 할게 방대하다. 무한하다고 볼수 있다. 그렇지만 어느정도 이렇게 기술적인게 갖추어 졌다고 했을때 시니어 레벨이다 고급 개발자 레벨이라고 측정할수 있어야 한다.
회사를 다니면서 여러 사람들을 많이 보게 되었다. 그 중 열심히 배울려는 열정이나 궁금증이 없으면서 오로지 성공하기 원하는 사람들. 그 그룹도 정치적인 방법을 쓰는 사람 그리고 아무 방법도 모르는 사람 크게 두개로 나누어진다. 하지만 만약 그 팀이 성공할려면 경험이나 직장에 있는 기간에 상관없이 실력있는 사람을 빠르게 인정하고 진급 시켜주는 제도가 있어야 된다고 믿어 의심치 않는다.
다시 고급 개발자의 적합성으로 돌아가서 필요한 스킬은 아래와 같다.
1. 멘토링 (mentoring) 능력
2. 배우기 능력
3. 비즈니스 이해 능력
4. 기술
4.1. 기본적인 algorithm & data structure 실력
4.2. 기본적인 architecture 이해
4.3. 기본적인 design pattern 이해
4.3. 기본적인 GUI 디자인, 여러가지 데이타 저장 방법, 개발툴, etc
앞서 말했듯이 무엇보다 제일 중요한건 멘토링 능력이다. 다른 개발자들을 가르치지 못하고 그런 열정이 없는 개발자는 절대로 진급을 시켜주셔는 안된다. 이 능력은 팀이 같이 성공하지 못하는걸 좌지우지할수 있을만큼 가장 중요한 능력이다.
두번째는 배우기 능력이다. 배우는 자세를 어떻게 능력이라 하냐고 물어볼순 있지만 개발자로서 끓임없이 배우는게 필요하다고 인식을 못한다면 난 그 사람이 아직 고급 개발자로 될 자격이 없다고 딱 단정 지어 말할수 있다. 이제 매해가 아니라 매달 가끔은 매주마다 끓임없이 새로운 기술과 프로그래밍 방식이 나오는 시대이다. 다른 회사들이 Docker, Serverless 이야기 하고 있을때 그 개발자가 아직 클라우드에 대한 이해조차 없다면 이 팀은 무언가 잘못되어 있고 발전을 할수가 없다. 그런 개발자가 고급 개발자가 된다고 상상해보아라! 어떻게 밑에 있는 사람들이 나아지겠는가?
비즈니스 이해 능력도 중요하다. 회사에서 일하는 개발이란 학교나 개인이 하는 취미 코딩하고 틀리다. 물론 취미로 코딩하는 개발자가 있다면 이것 또한 뛰어난 장점이지만 Pragmatic Programmer 라는 자격 또한 갖추어야 한다. 비즈니스의 이해란 내가 이 앱을 왜 개발하는지 어떤 사용자가 이걸 쓰는지 필요한 리소스는 어떤것인지 위해서 방대하게 큰 그림을 그리며 볼수 있는 능력을 말한다. 또한 사용자가 내가 만든 앱을 불편한걸 느끼거나 문제가 있으면 이걸 공감하고 나 자신의 문제처럼 여거서 해결할려는 노력을 하는 공감 능력을 요구로 한다.
마지막으로는 개발자가 필요한 여러가지 기술 지식이다. 이건 매우 방대한데 사실 여기서 2번째 배움의 태도가 영향을 끼치게 된다. 학교에서 기본적으로 배운 algorithm & data structure 는 코딩을 할때 필수다. 내가 왜 이 Map 을 List 대신 쓰는지 왜 quicksort 대신 merge sort 를 쓰는지 이런 결정을 할수 있어야 한다. 기본적인 architecture 에 대한 이해도 필수다. 아무리 적어도 front end, backend, DB 등을 연결하며 시스템 구성에 대한 효율성이나 사용성을 칠판에 그릴수 있는 지식을 가지고 있어야 한다. 그 이유는 개발자는 한가지만 이해하면 전체적으로 그림을 그릴수 없고 또한 senior developer 의 미래 포지션은 architect 이기 때문이다. 디자인 패턴 또한 중요한데 이건 코딩을 효율적이게 짤수 있는 능력을 말한다. 최소한 Singleton, Factory Pattern 정도의 이해는 가지고 있어야 한다. 나머지는 GUI, database 의 이해 등등인데 이 분야는 너무 방대해서 모든걸 다 알고 있어야 한다고 말할순 없지만 회사 포지션에 필요한 분야를 이해하는게 중요하다.
이와 같이 고급 개발자의 자격에 대해서 알아보았다.
'테크놀로지 이야기 > 직장' 카테고리의 다른 글
Firebase 로 웹사이트 개발하기 [소개 + 장단점] - 1편 (0) | 2016.12.29 |
---|