이 기사는 Dann님의 글을 번역한 것입니다
번역이 이상한곳이나 오타를 알려주시면 감사하겠습니다.
주니어, 미드레벨, 시니어 개발자는 수년간의 프로그래밍 경험과 연관된 것만이 아닙니다.
주니어 개발자가 시니어 개발자보다 더 나이가 많을 수도 있습니다. 오로지 기술에 관련이 있습니다.
시니어 개발자가 모든것에서 뛰어나야한다는 것을 의미하는 것은 아니지만 주니어와 미드레벨 개발자보다 훨씬 더 능숙하다고 할 수 있습니다.
하지만 코딩 기술 그 이상은 미드레벨과 주니어 개발자와 시니어 개발자를 구분합니다. 그럼 차이점이 정확이 무엇일까요?
지식
명백하게 시니어 개발자는 주니어와 미드레벨 개발자보다 더많은 지식을 보유하고 있습니다. 디자인 패턴, 아키텍처, 테스트 자동화, 성능, 보안, 등을 아는 것은 주니어 개발자가 미드레벨, 시니어 개발자와의 지식 격차를 좁힐 수 있는 좋은 방법입니다.
소프트웨어 개발을 하는 방법을 아는 것이 중요합니다. 하지만 이런 지식들을 아는 것만으로는 시니어 개발자가 될 수 없습니다. 지식은 개발자들 사이의 가장 큰 차이점이 아니라 그저 요소 중 하나입니다.
코딩
대부분의 사람들의 생각과는 다르게 코딩은 컴퓨터와 커뮤니케이션에 관한 것이 아닙니다.
코딩은 인간과 커뮤니케이션 할 수 있도록 가르치는 것입니다. 특히, 코드는 컴파일되어 0과 1로 번역됩니다.
코드는 앞으로 작업하게될 다른 개발자들이 이해할 수 있어야합니다. 이전에 코드를 본 적이 없는 새 팀이 코드를 보고 새로운 기능이나 버그 수정 작업을 할 수 있어야 합니다. 이것이 주니어와 시니어 개발자 사이의 가장 큰 차이점입니다.
미드레벨 개발자는 코딩 기술과 관련하여 회색 영역이기 때문에 미드레벨 개발자는 제외하고 비교하겠습니다.
명백하게, 코딩 기술은 주니어와 시니어 사이의 어딘가에 있습니다. 아마도 시니어 측에 더 기울어 있을겁니다. 미드레벨 개발자가 아마도 개발주기 전체를 한번 이상은 겪었으므로 주로 경험과 관련이 있습니다. 그들은 가장 쉬운 실수를 많이하기도 하고 보통은 시니어로부터 배웠습니다.
주니어 개발자를 알아내는 방법?
주니어 개발자들은 경험이 없습니다. 일부는 막 졸업했거나 첫 정규직을 시작했습니다. 주니어 개발자의 사고 방식은 자주 코드를 작동시키는 것입니다. 동작하는 소프트웨어와 좋은 소프트웨어는 같은 것으로 생각합니다.
간단한 코드 작성은 어렵습니다. 그리고 주니어 개발자가 하지 않는 것입니다. 주니어 개발자는 멋진 코드를 작성합니다. 기발한 코드 한 줄과 복잡한 추상화로 주니어 개발자로 인식할 수 있습니다. 이것이 주니어 개발자들이 다른 개발자들에게 그들이 코드를 잘 작성할 수 있는지 알려주는 방법입니다. 그리고 그 방법은 틀렸습니다.
주니어 개발자들은 비용을 희생시키면서까지 코드에 집중합니다.
시니어 개발자는 어떤가요?
시니어 개발자의 코드를 볼때 다음처럼 생각할 수 있습니다. 이게 전부인가요? 나머지 코드는 어디에 있나요?? 시니어 개발자는 간단하고 직관적이고 바보같은 코드를 작성합니다. 이것은 개발자가 프로그래밍과 관련하여 가질 수 있는 가장 큰 특성들 중 하나입니다. 시니어 개발자는 KISS 원칙을 따릅니다. Keep it simple, stupid.
시니어 개발자는 주니어 개발와는 다른 방식으로 코드를 생각합니다. 시니어 개발자가 작성한 코드는 유지보수와 확장성을 염두에 두고 작성합니다. 주니어 개발자와는 완전 다른 사고방식입니다. 시니어는 코드를 다뤄야하는 누군가들에 대해 생각하고, 주니어는 컴퓨터에서 작동시킬 생각만 합니다.
코딩 기술 그 이상의 것
코딩 기술 외에서도 개발자의 유형을 알려주는 다른 요소가 있습니다.
주니어 개발자는 일반적으로 가장 간단한 작업이나 영향이 적은 작업을 수행합니다. 주니어들은 아키텍처 디자인을 하지 않습니다. 미드레벨 개발자들은 솔루션 디자인을 하지않고 작업만 합니다. 주니어 개발자와의 차이점은 루틴한 일이 할당되어 있는한 감독이 적은 업무를 수행한다는 것입니다. 시니어 개발자는 자체적으로 완전한 애플리케이션을 개발할 수 있습니다.
시니어 개발자에게도 모르는 것이 없다는 의미가 아닙니다. 모든 개발자에게는 매일 많은 질문들을 가지고 있고 바뀌지 않습니다. 시니어 개발자들도 마찬가지입니다.
차이점은 시니어 개발자가 올바른 질문을 하는 방법과 질문을 처리하는 방법을 알고 있다는 것입니다. 미드레벨 개발자들은 상대적으로 루틴한 일과 관련하여 질문을 할 수 있지만 복잡한 작업에 대해서는 도움이 필요합니다.
시니어 개발자는 길을 잃지 않고 올바른 조치를 행하여 질문을 수행하는 방법을 알고 있습니다. 시니어 개발자가 다른 개발자에게 도움을 요청할 수 없다는 의미가 아닙니다. 때때로 가장 좋은 방법은 해당 분야에 경험이 있는 개발자에게 도움을 요청하는 것입니다.
미드레벨 개발자는 깊이있는 지식이 필요한 매우 복잡한 작업을 할당받지 않는 한 올바른 질문을 할 수 있어야합니다. 주니어 개발자가 바로 올바른 질문을 할 수 있다고 기대해서는 안됩니다. 주니어 개발자는 경험이 없기때문에 좀 더 숙련된 개발자의 도움이 필요합니다. 주니어 개발자는 필요한 리소스를 제공받거나 올바른 방향으로 크게 밀어줘야합니다.
다음 단계로 더 나아가기
우리 모두는 자신을 개선하고 개발자로서 발전하기를 원합니다. 그러면 다음 단계로 나아가기 위해 할 수 있는 것은 무엇일까요?
주니어 -> 미드레벨
주니어 개발자들은 경험이 없기에 전체 개발 과정을 최소한 두번 반복하는 것이 중요합니다. 이렇게하면 많은 함정에 빠지고 다음에는 이를 회피하는 방법을 배우게 됩니다.
코딩과 관련하여 간단하게 작성하는 방법을 배워야합니다. 코드의 일부분을 보고 다음에 작성할 사람에 대해 생각해보십시오. 또한 프로세스 진행 상황을 더 잘 이해할 수 있도록 디버깅하는 방법도 배워야합니다.
또한 모범 사례에 익숙해지고 아키텍처, 성능, 보안 등에 대해서 배워야합니다. 미드레벨에 도달하기위해 필요한 지식의 격차를 메꾸십시오.
미드레벨 -> 시니어
미드레벨에서 시니어로 가는 길은 매우 어려울 수 있습니다. 일부 개발자는 개발 경력기간동안 미드레벨 수준에 게속 머물러 있습니다.
시니어 개발자들은 어떤 모서리를 자를 수 있고 어떤 것은 자르지 않아야한다는 것을 알고 있습니다. 과거에 실수를 함으로써 열심히 배워야합니다.
시니어 레벨에 도달하려면 아무도 모르는 작업을 수행할 준비가 되어있어야합니다. 작업을 수행하는방법 이상의 것을 알아야합니다.
시니어 개발자로서 중요한 업무는 경험이 부족한 개발자를 돕는 것입니다. 다른 개발자가 무언가를 수행하는 방법을 모르는 경우를 대비합니다.
또한 시니어 개발자가 기술 스택을 마스터한다는 것에 놀라지 않을 것입니다. 코딩 기술 이상의 것이 있습니다. 회사 내에서 사용중인 모든 도우과 애플리케이션에 대해 알아보십시오.
결론
주니어, 미드레벨, 시니어 개발자간의 차이점은 수년간의 경험에 의한것만이 아닙니다. 물론, 시니어 개발자는 주니어와 미드레벨 개발자들보다 숙련되어 있다고 할 수 있습니다. 하지만 지식이 가장 중요한 요소는 아닙니다.
시니어 개발자들은 더 쉬운 코드를 작성하고 주니어 개발자와는 다른 사고방식을 갖습니다. 그러나 코딩 스킬 그 이상의 것이 있습니다. 어떤 질문을 하고 그 질문에 대해 조치를 취하는 법을 아는 것입니다. 그리고 풍붕한 경험을 가진 시니어 개발자만이 모든 상황에 대해 수행하는 방법을 알고 있습니다.
주니어 개발자가 성장하려면 간단한 코드를 작성하고 여러 개발 사이클을 거쳐야합니다. 미드레벨에서 시니어가 되기 위해서는 루틴은 작업을 수정하는 것 이상을 배우는데 중점을 두어야합니다. 가장 어려운 작업을 기꺼이 수행하고 기술 스택의 마스터해보십시오.
Martin Fowler는 다음과 같이 말합니다. “어떤 바보라도 컴퓨터가 이해할 수 있는 코드를 작성할 수 있습니다. 훌륭한 프로그래머는 인간이 이해할 수 있는 코드를 작성합니다.”