주니어, 미드레벨, 시니어 개발자의 차이점

개발자 성장을 위해 우린 무엇을 해야할까요?

먼저 개발자를 나누는 등급에 대해 알아보죠.

주니어, 미드레벨, 시니어 개발자의 차이점은 무엇일까요?

오늘의 주제는 주니어, 미드레벨(중니어), 시니어 개발자의 차이점에 대해서 이야기 해보겠습니다.

이제 개발자가 되시고, 열심히 현업을 하시는 분들이 가장 걱정하시는 것은 성장과 관련된 고민입니다.

내가 제대로 하고 있나? 나는 성장 중인가?
남이 봤을 땐 난 시니어가 맞는가? 시니어가 되려면 어떻게 해야 하지?

이런 고민을 하시는 분들에게 조금이나마 가이드가 되지 않을까 해서 제 생각과 아래에 참고 자료에서 나온 이야기를 섞어서 이야기하고자 합니다.

저는 현재 8년 차 개발자로 현재 미드레벨의 중니어라고 판단하고 있습니다. 그렇다면 각각의 단계는 어떤 차이점이 있을까요? 주니어 개발자가 시니어 개발자보다 나이가 많을수도 있고, 오로지 기술로 판단하게 됩니다. 시니어가 주니어보다 모든 방면에서 뛰어나야한다는 것은 아니지만 훨씬 더 능숙하다고 말할 수 있습니다.

그렇다면 어떤 기술들이 있을까요?

지식

확실하게 개발 지식은 시니어가 주니어, 중니어 보다 많은 지식을 가지고 있습니다. 주니어에서 벗어나는 지식들인 디자인 패턴, 아키텍처, 테스트 자동화, 성능, 보안, 빌드/배포 등은 시니어의 가치를 높여주는 지식입니다. 역으로 주니어는 기본적인 코딩 실력도 중요하지만 위와 같은 지식들을 쌓아가면서 시니어로 넘어가는 과정을 겪어야 합니다.

소프트웨어 개발을 하는 방법을 아는 것은 당연히 중요합니다. 하지만 이것만 알고서는 시니어와 주니어의 차이점이 생기는 것은 아닙니다.

코딩

코딩은 컴퓨터와 사람 간에 커뮤니케이션을 도와주는 언어입니다. 코드는 인간이 이해할 수 있도록 되어 있으며, 이것을 컴파일해서 1과 0으로 변환하여 컴퓨터가 이해할 수 있도록 번역됩니다.

이러한 이유로 코드는 다른 개발자가 보더라도 이해하기 쉽고 빠르게 수정할 수 있도록 작성해야 합니다. 즉, 사람이 이해하기 어려운 코드를 작성하는 것은 코딩 실력이 낮다고 이야기할 수 있습니다. 이 부분은 주니어와 시니어의 가장 큰 차이점이라고 할 수 있습니다.

코드를 복잡하고 어렵게, 그리고 불필요한 문법을 사용하는 사람을 주니어 개발자라고 볼 수 있습니다. 누가 와서 보더라도 “왜 이렇게 작성했지?” 란 생각이 들면 잘못된 코드입니다. 물론 다른 사람이 익숙하지 않은 코드 스타일을 짰다고 해서 주니어는 아닙니다. 다만 코드 스타일을 이해하고도 코드에 대한 습득력이 낮아지면 작성자는 다른 사람들이 보기 좋은 코드를 짤 수 있는 시니어는 아닐 것입니다.

중니어는 시니어와 주니어 사이에 있기 때문에 명확하게 정의하기 어렵습니다. 주니어에서 벗어나 코드 스타일을 확립하고, 일관성 있는 코드를 작성하고, 예측 가능한 코드를 작성하고 있는 과정이라 시니어에 가깝다고 할 수는 있습니다. 또한 경험이 어느 정도 있어서, 문제 해결 능력이 쌓이고 있으며, 추가적인 기능 개발을 할 때 시니어처럼 일관성 있고 성능 좋은 코드를 작성하고자 노력합니다.

주니어는 위에 대한 내용을 인지하고 코드를 작성하기 시작하면 빠르게 시니어들처럼 코드를 작성할 수 있습니다. 새로운 코드를 짤 때도 생산성이 높게 나올 것입니다.

결국 주니어 개발자란 무엇인가요?

주니어 개발자의 가장 큰 특징은 경험이 없다는 점입니다. 일부는 막 일을 시작했고, 일부는 막 졸업한 상태입니다. 주니어 개발자의 사고방식은 자주 코드를 작동시켜서 디버깅을 합니다. 동작하는 소프트웨어는 좋은 소프트웨어와 같은 생각을 갖고 있습니다.

간단한 코드는 작성하기 어려워합니다. 주니어 개발자는 멋진 코드를 작성합니다. 기발한 코드와 복잡한 추상화를 좋은 코드라 생각합니다. 주니어 개발자는 코드 작성 및 이해에 들어가는 비용을 무시하고 코드를 멋지게 짜기 위해 모든 노력을 집중합니다. 그리고 그것이 좋은 코드라고 설파합니다.

물론 기발한 코드와 복잡한 추상화가 필요할 때가 있습니다. 적절한 타이밍에 사용하면 좋은 코드에 대한 생각을 하지 못하고, 모든 상황에 접목시키려고 노력합니다. 자료구조와 알고리즘도 상황에 따라 선택해야 하는 것처럼 코드 작성도 상황에 따라 선택해야 한다는 사실을 잘 모릅니다.

이런 모든 상황을 생각하기 시작한다면 주니어에서 벗어나기 시작한다고 볼 수 있습니다. 기발한 코드와 복잡한 추상화를 도입하는 것과 일관성 있게 코드를 작성하는 것은 다른 것입니다. 이것을 구별해야 합니다. 새로 개발을 시작한다면 코드 스타일을 만들어야 하고, 이미 코드 스타일이 잡힌 코드에는 그 방식을 따라가야 합니다.

혹시나 변경을 원한다면 의논을 통해 하나씩 바꿔나가야 합니다.

그럼 시니어 개발자는 어떤가요?

시니어 개발자의 코드를 보면 의문이 생깁니다.

“코드가 이게 전부라고요? 다른 코드는 어디 있습니까? 왜 이리 쉬워 보이는 코드를 작성했나요? 이 문제가 이 코드로 정말 해결이 되나요??”

이런 생각이 든다면 수준 높은 시니어 개발자를 만난 것입니다. 시니가 개발자의 가장 큰 특징은 KISS. 원칙을 잘 따른다는 것입니다. Keep it simple, stupid. 직관적인 코드, 간단한 코드로 문제를 해결한다면 매우 생산성이 좋아집니다. 개발자는 문제를 해결하는 해결사입니다. 그걸 빠르고 간단하게 한다면 좋은 개발자라고 합니다.

프로그래머는 코딩하는 사람이 아닙니다.

시니어 개발자는 주니어 개발자와 다른 방식으로 코드를 생각합니다. 시니어 개발자는 유지보수, 확장성 좋은 코드에 대해 고민하고 작성합니다. 주니어 개발자와 완전히 다른 사고방식입니다. 대체하기 힘든 사람이 돼야 한다는 말이 자신만 알아보고 수정할 수 있는 코드를 작성하라는 말이 아닙니다. 사업은 커지고, 확장하기 때문에 많은 사람들과 협업을 할 수밖에 없기에 자신의 코드를 누가 봐도 이해할 수 있어야 함께 일하고 싶은 사람이 됩니다. 그것을 시니어는 이미 알고 있습니다.

코딩 기술 그 이상의 것들은 무엇이 있나?

그 외에도 개발자 유형을 알 수 있는 방법이 있습니다.

주니어 개발자는 간단한 작업이나 영향이 적은 작업을 수행합니다. 디자인 아키텍처도 진행하지 않습니다. 미드레벨은 솔루션을 디자인하지 않고 작업만 합니다. 중니어 개발자와 주니어 개발자의 차이는 루틴 한 일이 할당되어 있는 한 감독이 적은 업무를 수행한다는 점입니다. 시니어 개발자는 자체적으로 완전한 애플리케이션을 개발할 수 있습니다.

시니어 개발자가 만능은 아닙니다. 모든 걸 알 수도 없습니다. 다만, 올바른 질문을 하는 방법과 질문을 처리하는 방법을 알고 있다는 점입니다. 중니어 개발자는 상대적으로 항상 하던 일에 대한 질문은 잘하지만, 복잡한 작업에 대해서는 도움이 필요합니다.

시니어 개발자는 문제 해결에 대한 길을 알고 있습니다. 어떤 문제를 제시해도 자신의 많은 경험과 지식으로 어느 정도 길을 파악하고 찾아놓을 줄 압니다. 특히 새로운 분야에 대해서도 자신이 직접 관련 분야 공부를 어느 정도 하고 해결책을 가져옵니다. 그리고 계획을 설계할 줄 압니다.

시니어 개발자는 앞서 말한 대로 모든 것을 아는 것이 아닙니다. 잘 아는 다른 전문가에게 잘 물어보고 해결할 수 있도록 발 빠르게 대비할 줄 안다는 것입니다.

미드레벨 개발자는 매우 복잡한 작업을 할당받지 않는 한 올바른 질문을 할 줄 알아야 합니다. 특히 자신이 맡고 있는 일에 대해서는 확실하게 알아야 합니다. 그것은 주니어와 미드레벨을 가르는 매우 중요한 기준입니다. 그래서 자신이 처리하는 일에 대해서 깊이가 있는 개발자를 미드레벨 개발자라고 이야기합니다. 주니어한테는 깊이 있고 좋은 질문을 할 것이라고 생각해서는 안됩니다. 그것은 주니어 개발자를 미드레벨 이상으로 생각한 것으로 그에 맞는 대우를 해야 합니다.

가장 중요한 다음 단계로 넘어가는 방법은?

개발자는 평생 주니어로 남고 싶진 않을 것입니다. 최소한 미드레벨, 아니면 시니어까지는 도달하고 싶어 하고, 자아실현을 하고 싶어 합니다. 그렇다면 어떻게 해야 다음 단계로 넘어갈 수 있을까요?

주니어 → 미드레벨

주니어 개발자는 스스로가 경험이 없다는 것을 인정해야 합니다. 즉, 한 프로젝트의 전체 개발 과정을 최소 두 번 이상 경험해야 합니다. 이렇게 하면 그 과정에서 나오는 문제 발생, 의견 충돌, 커뮤니케이션 문제에 대해 해결하는 과정을 배울 수 있습니다. 특히, 시니어급과 함께 한다면 시니어가 어떻게 문제 해결하는 꼭 봐야 합니다. 그걸 옆에서 듣고 습득하며 단계를 올려야 합니다.

그다음 코드를 간단한 게 작성하는 방법을 배웁니다. 코드의 일부분을 보면서 다음에 작성할 사람에 대해 생각해봅시다. 그러면 이다음에 코드를 보고 추가 작업을 할 때 어떤 코드가 이해하기 쉬운지, 확장하기 좋은지를 생각할 수 있습니다.

마지막으로 모범 사례 코드를 많이 봐야 합니다. 특히 아키텍처, 성능, 보안 등을 자세히 배워야 합니다. 아키텍처는 스타가 많은 Github Repository를 확인해봅니다. 그중에서 이해하기 쉬운 프로젝트를 먼저 보면서 왜 이렇게 아키텍처를 짰는지 이해해 봅니다. 전혀 모르겠으면 직접 물어보는 것도 좋습니다. 성능 측정 툴을 이용해서 성능이 좋은 프로젝트와 자신이 짠 코드와 비교해봅시다. 이 과정은 성장에 매우 중요한 과정입니다. 많이 움직이고 연습한 만큼 성장합니다.

미드레벨 → 시니어

미드레벨에서 시니어로 넘어가는 과정은 매우 어렵습니다. 많은 개발자들이 미드레벨에 머물고 있습니다. 그만큼 시니어 개발자가 되는 건 어렵습니다. 그걸 알고 시작하면 됩니다.

시니어 개발자는 기본적으로 실패, 실수 경험이 많습니다. 또한 그 경험에서 배운 것을 기억하고, 기억하고 발전시켜서 시니어 개발자가 되었습니다. 과거에 실수를 많이 접하고 그 과정에서 깨달음을 얻으세요.

시니어 레벨이 되면 아무것도 모르는 산업, 문제, 환경에서 작업을 수행할 수 있어야 합니다. 언제나 새로운 환경, 새로운 분야, 새로운 기술에 도전하세요. 그리고 빠르게 습득하는 방법을 익히세요. 작업을 수행하는 능력뿐만 아니라 예측, 방향성 설정 등 그 이상의 것도 할 줄 알아야 합니다.

시니어 개발자의 가장 큰 일은 다른 개발자를 도와주는 일입니다. 시니어 개발자는 적기 때문에 많은 시간 다른 개발자를 성장시키고, 키워야 합니다. 코드 작성 시간보다 다른 사람 코드를 리뷰하고, 확인하고, 가르치는데 시간을 더 많이 사용합니다.

시니어 개발자는 기술 스택을 마스터한다는 것은 당연한 것입니다. 모든 기술을 마스터할 것은 아니지만 사용 중인 모든 기술을 마스터하세요. 그렇지 않으면 문제 파악을 제대로 할 수 없기 때문입니다. 새로운 기술에 대해 무지할 수도 있지만 기존에 있는 자주 사용하는 모든 기술은 알아야 합니다. 그것이 시니어입니다.

미드레벨 개발자는 이러한 시니어 역할을 이해하고 공부하고, 다른 개발자를 가르칠 줄 알아야 합니다. 가르치기 가장 좋은 연습 방법은 블로그와 같은 기록을 남겨서 지식을 전달하는 방법입니다.

결론

주니어, 미드레벨, 시니어 개발자 간의 차이점은 계속해서 이야기 나옵니다. 특히 경험으로만 판단하는 것은 좋지 않습니다. 시니어 개발자가 주니어와 미드레벨 개발자보다 숙련되어 있긴 합니다. 하지만 지식이 가장 중요한 요소는 아닙니다.

시니어 개발자는 더 쉬운 코드를 작성하고, 항상 다른 사람들을 위해 생각하고 행동합니다. 어떤 질문을 하고 그 질문에 대해 조치를 취하는 법을 알고 있습니다. 풍부한 경험을 가진 시니어는 개발자만이 모든 문제 상황에서 문제를 해결할 수 있다는 것을 알고 있습니다. 할 수 없다가 아니라 이런이런 이유로 무엇이 필요하다. 이런 식으로 협의를 진행합니다. 그것을 모르는 개발자는 시니어 개발자라 할 수 없습니다.

주니어, 미드레벨 개발자는 시니어 개발자가 어떤 일을 하고, 어떤 사고방식을 하는지 위의 글을 보고 이해해야 합니다. 개발 스킬을 올리고, 경험을 쌓아 문제 해결 능력을 올려봅시다. 어려운 문제에 도전하고 해결하면 그 과정과 결과가 전부 자신의 능력으로 치환됩니다. 새로운 기술을 거부하지 말고 하나씩 마스터하면서 멋진 시니어 개발자가 되길 바랍니다.

어떤 바보라도 컴퓨터가 이해할 수 있는 코드를 작성할 수 있습니다.
훌륭한 프로그래머는 인간이 이해할 수 있는 코드를 작성합니다.
By. Martin Fowler

좋은 개발자가 되고 싶은 모든 분들에게

Leave a Comment