6.1 경력 단계
프로그래머들도 자격에 따라 등급이 나뉘어. 예전에는 "코더", "프로그래머", "해커" 같은 용어가 사용됐지만, 이제는 미국 IT의 영어 명칭으로 모두 바뀌었어.
개발자에게는 6개의 주요 등급이 있어:
- Intern Software Engineer
- Junior Software Engineer
- Middle Software Engineer
- Senior Software Engineer
- TechLead
- Principal Software Engineer
나라마다, 심지어 회사마다도 일부 매개변수는 다를 수 있지만, 본질은 이래:
Intern Software Engineer — 인턴이야. 이들은 프로그래밍을 배우는 과정에 있으며, 상업적인 경험도 없고 대규모 프로젝트에 참여한 경험도 없어. 보통 더 경험 많은 동료들의 감독 하에 일해. 주된 임무는 코드 베이스를 학습하고 소프트웨어 개발의 기초를 배우며, 단순한 코딩 작업을 수행하고 테스트에 참여하는 거야.
Junior Software Engineer는 이미 프로그래머이지만 진지한 상업적 경험이 없거나 경험이 1년 미만이야. 더 경험 많은 개발자들의 지도 아래 프로젝트의 일부를 구현하고 코드 리뷰 사이클에 참여해. 이 단계의 경력은 기술적 역량을 심화하고 프로젝트 과제를 이해하는 데 집중해.
Middle Software Engineer (또는 그냥 Software Engineer): 기술적 결정을 독립적으로 내릴 수 있으며, 프로젝트의 중요한 부분을 책임지고, 덜 경험 많은 동료를 멘토링하며, 아키텍처 논의에 더 적극적으로 참여해. 보통 2–5년의 실무 경험이 있어.
Senior Software Engineer: 복잡한 시스템을 설계하고 구현하는 책임을 지며, 팀 내에서 멘토링과 지도를 제공하고, 프로젝트의 전략적 계획에 참여하며 종종 고객 및 다른 이해 관계자와 소통할 때 팀을 대표해. 보통 5–10년의 경험이 있어.
TechLead: 프로젝트의 최종 기술 결과를 책임지고, 개발을 지도하며, 가장 복잡한 문제를 해결하고, 기술 표준 준수를 보장하며, 개발자의 활동을 조정해.
Principal Software Engineer: 최고 수준의 기술적 작업을 수행하며, 종종 회사의 기술 전략을 형성하고 혁신적인 솔루션을 개발하며 기술 표준을 설정하고, 기술 리더에게 주요 멘토 역할을 하며 복잡한 기술적 문제에 대한 핵심 전문가야.
재미있는 사실. 대형 회사는 추가적인 역할과 하위 역할이 있을 수 있어. 예를 들어, Google에는 다음과 같은 역할이 있어:
- Staff Software Engineer (L6): 자신의 부서의 기술 정책에 상당한 영향을 미쳐.
- Senior Staff Software Engineer (L7): 대규모이고 복잡한 프로젝트에 참여하며 회사의 기술 발전 방향을 설정해.
6.2 레고 제품
과거에 (1975년에) Pascal 언어의 창시자인 Niklaus Wirth는 "알고리즘 + 데이터 구조 = 프로그램"라는 책을 썼어. 그 이후로 많은 것이 변했어.
현대 소프트웨어 제품은 10년 전과는 다르고, 확실히 20년 전과도 달라. 1975년은 말할 것도 없어 — 그때로부터 50년이 지났어.
현대의 프로그래머는 더 이상 프로그램을 직접 작성하지 않아. 오히려 기존의 부분(라이브러리)으로 프로그램을 조립하고 이 부분들이 상호작용하도록 코드를 작성해.
현대의 소프트웨어 제품은 수십에서 수백 개의 프로그램으로 구성될 수 있어. 일부는 사용자의 컴퓨터나 모바일 기기에서 실행되며, 대부분은 데이터 센터의 서버에서 실행돼.
이 프로그램들 중 많은 것, 예를 들어 웹 서버나 데이터베이스는 이미 작성됐어. 그저 올바르게 구성하는 것만 하면 돼. 하지만 시간이 지나면 구성 과정이 너무 복잡해져서 실제로 개발이 될 수도 있어. (*facepalm*)
프로그래머들은 스스로와 끊임없이 싸워. 비슷한 코드를 여러 프로그램에 다시 작성하는 대신, 자신에게 필요한 설정을 할 수 있는 라이브러리를 작성하고, 그런 다음 필요에 따라 이 라이브러리를 연결해.
지난 20년 동안 프로그래머들은 아주 많은 라이브러리, 프레임워크, 오픈 소스 리포지토리를 작성했어. 정말 수백만 개야. 이제 처음부터 모든 코드를 작성하는 것은 나쁜 습관으로 여겨져. 대신 프로그램을 고품질의 검증된 솔루션 — 라이브러리, 프레임워크, 패키지, 모듈로 구성해야 해.
하지만 이런 접근 방식도 이미 낡아가고 있어. 지난 10년간의 추세는 클라우드로의 이전이야, 큰 데이터 센터가 우리의 프로그램에 필요한 모든 것을 제공해. 데이터베이스가 필요해? 선택할 수 있는 수백 가지가 있어. 희귀하고 독특한 웹 서버가 필요해? 그런 것도 있어! 어떤 요구도 여러분의 비용에 맞춰.
6.3 "나는 엔지니어다" © Elon Musk
이제 복잡하고 지루한 것들을 직접 쓸 필요가 없어. 멋진 복잡한 기능이 필요하다면, 이미 거기에 대한 라이브러리가 있어. 그저: a) 라이브러리가 있다는 것을 알고, b) 필요한 것을 찾아내고 (다양한 품질의 유사품이 수십 개 있을 수 있어), c) 그것을 프로젝트에 통합하는 방법을 알아내면 돼.
이 접근 방식으로 인해 작업이 훨씬 더 흥미로워졌어. 이제 10배 더 빨리 제품에 새로운 기능을 추가할 수 있어. 30년 전에는 웹 서버가 필요하면, 직접 작성해야 했어. 20년 전에는 구매하고 설치하고 설정해야 했어. 지금은 그냥 "클라우드" 관리자에 들어가서 켜면 돼.
그것은 Python 언어가 인기 있는 이유 중 하나이기도 해. Python은 큰 복잡한 솔루션을 작성하기보다는 다양한 부분을 서로 "붙이는" 데 매우 적합해. 그리고 그 인기를 보면, 이 역할을 훌륭하게 수행하고 있어.
또한 Python 개발자의 직업이 Python Fullstack Software Engineer로 변모했어. 현대의 Python 개발자는 데이터베이스가 어떻게 작동하는지 이해하여 올바르게 작업할 수 있어야 하고, HTML & JavaScript를 이해하여 Python 백엔드와 프론트엔드를 설정할 수 있어야 해. 그리고 Docker도 필요해 — 이제는 산업 표준이야.
현대 개발은 20년 전과 사뭇 달라. 현대의 프로그래머는 자신의 시간의 50%를 코드를 작성하는 데 사용해. 나머지 시간은 문서를 읽고, 새로운 기술을 배우고, 회의에 참석하는 데 사용해. 과거의 고립된 프로그램 개발자는 오랫동안 사라졌어.
GO TO FULL VERSION