1 1부: 여러분의 코딩 커리어
코딩 커리어를 선택하신 것을 축하합니다! 소프트웨어 엔지니어에 대한 수요는 그 어느 때보다 높으며, 이 길은 매우 보람차고 수익성 높은 여정이 될 수 있습니다.
초보자용부터 고급자용까지 코딩하는 법을 다루는 자료는 많지만, 그 밖의 모든 것을 다루는 자료는 충분하지 않습니다. 이 책은 바로 그 문제를 해결하기 위해 쓰였습니다. 이 책은 여러분의 초기 코딩 커리어를 구성하는 다섯 단계에 걸쳐 필요한 원칙, 전략, 전술을 알려 드립니다:
- 코드 뉴비: 부트캠프, 대학, 온라인 강좌, 독학 등을 통해 이제 막 코딩을 배우는 단계입니다.
- Job Hunter: 첫 개발자 일자리를 손에 넣으십시오!
- 주니어 개발자: 새 직장에서 살아남고 성장하기.
- 주니어에서 시니어로: 시니어 개발자로 승진하거나 채용되는 방법입니다.
- 시니어 개발자: 업계에서 시니어로서 자신만의 역량을 갖추어 성장합니다.
- 그리고 마지막으로 사람들이 코딩 커리어 너머에서 하는 일들에 대한 통찰을 살펴보며 마무리하겠습니다.
참고: 이 책에서는 “개발자(Developer)”와 “엔지니어(Engineer)”를 같은 의미로 혼용합니다. 일부 연구에 따르면 “엔지니어”라는 직함을 달면 약 20% 더 많은 돈을 벌 수 있다고 합니다. 저는 얕은 생각을 가진 사람이 피상적인 원인에 집착한다고 생각합니다. 이 책은 얕은 생각을 가진 사람을 위한 책이 아닙니다.
대부분의 사람에게 이는 개발자 경력의 처음 4~8년에 해당합니다. 물론 그 이후에도 많은 직함과 단계가 있지만, 이는 이 책의 범위를 벗어납니다. 우리의 주된 목표는 그저 여러분이 최대한 좋은 출발을 할 수 있도록 돕는 것이며, 이것이 앞으로의 여정에서 복리처럼 불어나리라 기대합니다.
또한 우리는 코딩 경력에 초점을 맞춥니다. 즉, 경력 중에서 주로 “개인 기여자(Individual Contributor)”로서 코드를 작성하는 역할을 기대받는 시기입니다. 때로는 개발자가 관리직, 창업, 그리고 그 밖의 ‘코드 인접’ 역할로 올라가면서 코딩 커리어가 끝나기도 합니다(장 7).
1.1 직함보다 원칙
첫 번째 권고는 직함을 너무 진지하게 받아들이지 말라는 것입니다.
역할은 지어낸 것이고 직함은 중요하지 않은 테크 업계에 오신 것을 환영합니다. - Kelly Vaughn
누구나 어떤 일에서는 주니어이고, 또 다른 일에서는 시니어입니다. 시니어 개발자가 된다고 해서 마법처럼 새로운 것을 배울 필요가 없어지는 것은 아니며, 코딩 입문자라도 전문가들이 쓰는 모든 전략을 실천할 수 있습니다.
그렇기 때문에 이 부분은 책에서 유일하게 순서대로 읽도록 구성되어 있으며 각 경력 단계마다 그 시점에 맞는 조언을 제공합니다. 반면 책의 나머지 부분은 앞으로 X년에 걸친 코딩 커리어 동안 훑어보거나 건너뛰며 읽고, 필요할 때 다시 찾아볼 수 있도록 되어 있습니다.
직함은 분명히 중요합니다. 주로 직함에 따라 연봉과 책임이 정해지기 때문입니다. 회사는 커리어 사다리를 마련하고, 각 단계에 오르기 위해 충족해야 하는 구체적인 기대치를 정해 둡니다(항상 그런 것은 아니며, 특히 초기 단계 스타트업에서는 더욱 그렇습니다). 그렇지만 코딩 커리어 전체에 걸쳐 자신의 원칙, 전략, 전술을 계속 다듬어 나가야 한다는 요점은 변하지 않습니다.
1.2 회사 유형
코드 뉴비에서 시니어 개발자로 성장해 나가는 동안, 여러분은 다양한 유형의 회사와 고용 형태에서 커리어를 탐색할 기회도 얻게 될 것입니다. 여러분이 마주칠 수 있는 모든 유형을 다 다루는 것은 불가능하지만, 알아 두어야 할 몇 가지 사항과 함께 간단한 목록을 소개합니다:
- 스타트업(특히 시리즈 C 이전): 높은 자율성과 책임을 갖게 되지만, 상황이 순식간에 바뀔 수 있다는 점에 대비하십시오. 스타트업 스톡옵션이 실제로 인생을 바꿀 만한 금액으로 이어지는 경우는 드뭅니다. 고성장 스타트업에서 훌륭한 성과를 내며 얻는 커리어 자본이 더 확실한 자산입니다. 프로세스는 최소한으로만 갖춰져 있는데, 최고의 성과를 내는 데 무엇이 필요한지에 따라 장점이 될 수도 있고 단점이 될 수도 있습니다. 부트스트랩 스타트업과 인디 해킹은 VC 투자를 받는 스타트업의 대안으로 점점 인기를 얻고 있으며, 성장보다 수익성을 중시합니다.
- 에이전시: 다양한 프로젝트를 맡아 일하면서 많은 것을 배우게 되며, 대개 인도 기한이 정해져 있습니다. 특히 많은 프로젝트가 그린필드이기 때문에 실험할 여지가 많습니다. 프로젝트 관리와 클라이언트 관리 경험을 쌓을 수 있지만, 때로는 긴 근무 시간과 높은 스트레스를 대가로 치러야 합니다. 또한 일감이 경기 순환에 민감할 수 있습니다. 초봉은 매우 낮을 수 있으며(보수 수준은 국가별로 크게 다릅니다 – 이 에이전시 설문 조사를 참고하십시오), 이는 유명 클라이언트를 확보하고, 업계 상을 받고, 평균의 5배에서 10배를 받을 수 있을 만한 평판을 쌓기 시작할 때까지 이어집니다. 프리랜싱과 컨설팅은 개인 단위라는 점만 다를 뿐 이와 비슷합니다.
- 대기업: 높은 연봉을 받고 큰 영향력을 발휘하게 됩니다(수백만 명의 사용자에게 영향을 미치는 경우가 많습니다). 거대한 규모에서만 나타나는 독특한 문제를 마주하게 됩니다. 사람들은 흔히 FAANG을 이야기하지만, 물론 더 이상 스타트업이 아닌 훌륭한 기술 기업도 수천 곳이 있습니다. 일부 대기업/엔터프라이즈 기술 업무에서는 오래된 기술을 다루게 되는데, 이것이 보수가 좋은 이유이기도 합니다. 사용자에게 훌륭한 경험을 계속 유지하면서도 기술 부채를 청산하기 위해 레거시 코드를 발전시키는 법을 배우게 됩니다. 대기업은 더 많은 지원과 체계를 제공하므로 주니어에게 좋은 선택이 될 수 있습니다. 어떤 사람들은 그 규모 속에서 크게 성장하지만, 어떤 사람들은 거대한 기계의 부품이 되는 것과 몹시 느린 개발 속도를 꺼립니다.
이직할 때마다 여러분은 이러한 유형의 회사들 사이를 옮겨 다닐 기회를 얻게 됩니다(물론 제가 나열한 것보다 더 많은 유형이 있습니다). 자신이 어떤 환경에서 잘 성장하는지 알아 두는 것이 중요합니다. 단기적으로 연봉이나 명성을 좇는 것보다 자신에게 가장 잘 맞는 곳을 찾는 것이 장기적으로 커리어에 더 큰 보람을 가져다줄 것입니다.
팁: 기술 비즈니스 모델에 대한 더 깊은 논의와 그것이 여러분이 하는 일에 어떻게 반영되는지는 소프트웨어 비즈니스 장(장 27)을 참고하십시오.
1.3 커리어 계층
여러분이 탐구해 볼 세 번째 차원은 스택의 어느 지점에서 일하고 싶은가입니다.
여기서는 OSI 모델에서 영감을 받은 멘탈 모델을 살펴볼 수 있습니다. OSI 모델은 HTTP, TCP, IP, 802.11과 같은 서로 다른 기술이 어떻게 맞물려 각자 맡은 문제를 해결하고, (대부분의 경우) 매끄럽게 상호 운용되는지(몇몇 좁은 허리(Narrow Waist)의 도움을 받아)에 대한 사고의 틀을 제공합니다.
소프트웨어 직군의 세계도 같은 방식으로 나눠 볼 수 있습니다. 저는 늘 인간의 가치 사슬이 그 기반이 되는 기술과 어느 정도 비슷하다고 생각합니다. 원초적인 하드웨어 기능을 제공하는 펌웨어를 작성하는 사람들부터, 소프트웨어로 소프트웨어를 만드는 최종 사용자에 이르기까지, 그리고 그 사이에 있는 온갖 흥미로운 소프트웨어 직군까지 모두 아우릅니다.
그럼 서론은 이쯤 하고 바로 보겠습니다:

이 글에서 제가 초점을 맞추는 대상은 업무상 주로 코딩을 하도록 기대받는 사람들입니다. 창업자나 PM, 개발자 애드버킷이라면 가끔 코딩을 할 수도 있지만, 그때는 코딩을 본업으로 하는 것이 아니라 잠시 코딩 역할을 맡는 것입니다.
저는 주로 앱 레이어에서 일하기 때문에, 제 지식이 부족한 탓에 다소 편향된 부분이 보일 수 있습니다. 예를 들어, 데이터 과학과 사이버 보안 분야의 커리어를 다룬 다른 가이드도 있습니다. 저는 그런 가이드를 많이 검토했고, 이 책의 조언은 그중에서 제 마음에 남은 것들입니다.
서술적으로 보자면, 저는 소프트웨어 직업의 주된 축이 기계에서부터 최종 사용자에 이르기까지 가치를 더하는 것이라고 봅니다:
- 가장 낮은 층위에는 하드웨어를 다루는 사람들이 있습니다. 이들도 여전히 코드를 작성하지만, 이들의 임무는 칩, 펌웨어, 운영 체제를 설계하여 배고프고 또 배고픈 우리 소프트웨어 개발자들이 먹어 치울 수 있도록 날것의 역량을 드러내는 것입니다.
- 다음으로 클라우드/데이터센터 담당자들이 있습니다. 엄밀히 말해 꼭 필요한 존재는 아니지만, 요즘에는 현실적으로 빠질 수 없는 존재입니다. 이들의 주된 일은 가용성이며, 흔히 분산 시스템을 활용하는데, 이는 손쉬운 확장성을 제공하는 데에도 도움이 됩니다. 이들은 말하자면 CAP 정리와 싸우는 것으로 먹고삽니다. 어떤 면에서는 이들과 다른 클라우드 배포판이 나머지 개발자들이 그 위에서 프로그램을 돌릴 수 있도록 분산된 “가상 하드웨어”를 제공한다고 볼 수도 있습니다.
- 다음으로 런타임을 만드는 사람들이 있습니다. 여기에는 브라우저 개발자, 언어 설계자, 그리고 우리가 누리는 모든 개발자 경험을 사실상 책임지는 프레임워크, 도구, 인프라 개발자가 포함됩니다.
방금 살펴본 세 계층을 저는 플랫폼 개발이라고 부릅니다. 이 계층들은 다음 세 계층이 만들어 내는 제품과 특별히 직접적인 관련은 없지만, 그 모든 것을 가능하게 해 줍니다.
- 백엔드 개발자는 앱의 안전한 비즈니스 로직을 담은 내부용/비공개/사용자 비대면 서비스를 만듭니다. 여기서는 머신러닝, 연구, 프로세스 자동화, 보안, 컴플라이언스, 결제까지 포함하여 꽤 넓게 정의했습니다. 요점은 이들의 관심사가 UX가 아니라는 것입니다. 이들에게는 기능이 더 중요합니다.
- 다음으로, 앞선 모든 계층을 기반으로 애플리케이션을 만드는 개발자가 있습니다. 게임 개발자부터 플러그인 개발자, 세일즈/지원 엔지니어, 모바일/웹 개발자에 이르기까지 코드를 작성하는 나머지 모든 사람이 여기에 해당합니다. 이들은 훌륭한 사용자 경험을 만드는 일을 고유하게 책임집니다.
- 마지막으로, 우리가 제공한 소프트웨어로 소프트웨어를 만드는 최종 사용자가 있습니다. 최종 사용자 컴퓨팅(End User Computing)은 사용자가 전통적인 코딩 없이 소프트웨어를 만들 수 있게 해 줍니다. 여기에는 Excel로 작업하는 비즈니스 분석가부터 #NoCode 자동화를 구축하는 생산성 마니아까지 나머지 모든 사람이 포함됩니다.
여기서 주장하는 바는, 사용자에게 가까워질수록 이러한 직업의 수가 많아진다는 것입니다. 사용자는 더 다양하기 때문에 더 많은 맞춤화를 필요로 하기 때문입니다. 작업은 또한 “하드웨어에서 더 멀어집니다.” 상위 계층에서 코드를 작성할 때, 우리는 (개발자 경험을 위해) 하위 계층의 자원 제약이 존재하지 않는 것처럼 여기도록 점점 더 권장받습니다. 물론 이는 새는 추상화(leaky abstraction)이지만, 대부분의 경우에는 잘 작동합니다.
소프트웨어 산업의 일부 분야는 너무나 독자적이어서 이 모델에 전혀 들어맞지 않습니다. 예를 들어 게임 분야에서는 게임 AI, 절차적 생성, 물리 엔진, 대규모 멀티플레이어 실시간 백엔드를 다루는 경우가 많은데, 이 중 어느 것도 다른 스택에서는 흔한 작업이 아닙니다. 결국 소프트웨어 일자리는 소프트웨어를 작성해서 돈을 벌 수 있는 곳이라면 어디서든 생겨납니다. 그리고 그 일자리들이 어떤 계층 모델에 꼭 들어맞아야 하는 것도 아닙니다. 이것을 정확한 지도라기보다는 하나의 예시로 생각하십시오.
1.4 다양성
커리어 논의에서 다양성 문제를 무시할 수 있는 사람은 대개 시스젠더 이성애자 백인 남성입니다. 그 외의 모든 사람에게는 이 문제가 모든 직장, 모든 상호작용, 자기 의심의 모든 순간에 영향을 미칩니다. 정치적 성향과 관계없이, 기술 업계가 보수가 좋은 다른 어떤 사무직 업계보다도 다양성 면에서 객관적으로 더 뒤떨어져 있다는 사실을 인정해야 합니다. 이것은 단순한 인식이 아닙니다. 어떤 척도로 보더라도 통계적으로 매우 유의미한 사실입니다.
그림 「Women in CS」은 저작권자의 별도 허락이 필요하거나 출처가 확인되지 않아 번역판에 싣지 않습니다. 원문 사이트에서 그림 보기
현재 컴퓨터 과학 전공자 중 여성은 17%에 불과합니다. 의학, 법학, 자연과학보다도 낮은 수치입니다! 업계에 들어서면 이 현상은 더 심해집니다. 프로그래머를 대상으로 한 업계 설문 조사에서는 남성이 아닌 비율이 대체로 8~12% 정도로 나타납니다. 이는 남성 개발자에 비해 남성이 아닌 개발자의 평균 이탈률이 약 40%에 달한다는 뜻이며, 업계에 문제가 있음을 보여 주는 동시에 그 자체로 시니어 직급의 다양성에도 문제가 됩니다. 애초에 그 자리까지 올라갈 수 있다면 말입니다. 사람들이 하는 일을 (의도했든 아니든) 제대로 인정하지 않는다면 “동일 노동 동일 임금”을 주장할 수 없습니다. 2020년 Pinterest를 상대로 제기된 문제는 여성과 소수자가 실제보다 낮은 직급으로 평가받는다는 오랜 보고들 중 가장 최근의 사례일 뿐입니다. 보고되지 않은 사례가 얼마나 많을지 상상해 보십시오.
여러분도 자신의 커리어 여정에서 이런 일을 보게 될 것입니다.
처음부터 이랬던 것은 아닙니다. 차트에서 볼 수 있듯이, 1980년대에는 대학 진로 파이프라인에 여성이 지금의 두 배나 있었습니다. 최초의 1940년대 전문 프로그래머들은 여성이었습니다. 최초의 컴파일러는 그레이스 호퍼 해군 소장이 만들었습니다. Charles Babbage의 해석기관이 존재하기도 전에 Ada Lovelace는 그것을 위한 프로그램을 작성하고 있었습니다.
프로그래밍 능력은 성별, 인종, 성적 지향, 나이에 따라 제한되지 않습니다. 오히려 우리 동료 인간들을 이 수익성 높고 강력한 분야에서 체계적으로 소외시키는 것은 인적 요소, 즉 코딩 커리어에서 코드가 아닌 부분일 가능성이 훨씬 더 높습니다.
기술 분야에서 과소대표된 소수자에 속하지 않는다면, 연민과 공감을 가지고 이 문제가 소수자에게는
그 집단에 속한 사람들에게는 피할 수 없는 삶의 현실임을 알아차릴 수 있는 연민과 공감을 가지십시오. 먼저, 해를 끼치지 마십시오: 자신이 문제에 일조하고 있을 때 이를 알아차리고 멈추십시오. 그런 다음 다른 사람들에게서 그런 행동을 지적하고 자신의 특권을 빌려줌으로써 협력자가 되십시오.
여러분이 과소대표된 소수자에 속한다면, 여러분이 절실히 필요한 존재라는 것을 알아 두십시오. 그리고 지금 다니는 회사가 여러분의 가치를 인정하지 않는다면, 여러분과 기꺼이 함께 일하고 싶어 하는 포용적인 회사가 그 밖에도 많이 있습니다. 또한 동료들이 꾸려 가는 폭넓은 지원 네트워크도 있습니다. Women in Games International 같은 업계 전문 그룹부터 PyLadies 같은 언어 그룹, Front-End Foxes 같은 프레임워크 그룹, 그리고 BlacksInTechnology, Latina Geeks, Lesbians Who Tech 같은 보다 범용적인 네트워킹 및 멘토링 그룹까지 다양합니다. MotherCoders나 VetsinTech처럼 여러분과 같은 배경을 가진 사람들을 찾을 수도 있습니다. 이들은 그저 실속 없는 친목 모임이 아닙니다. 회사에 입사하거나 누군가와 협업하기 전에 간단히 평판을 확인해 보는 데 큰 도움이 될 수 있고, 채용 담당자가 여러분과 같은 커뮤니티에 손을 내미는 일을 중요하게 여기기 때문에 다른 누구보다 먼저 꼭 맞는 일자리 소식을 들을 수도 있으며, 여러분과 똑같은 처지를 겪어 본 사람들에게 그냥 도움을 청할 수도 있습니다.
기술 업계의 다양성 문제는 곧 세상의 다양성 문제입니다. 이제 우리 세상의 너무나 많은 부분이 소프트웨어로 운영되고 소프트웨어를 매개로 이루어지기 때문에, 그 소프트웨어를 설계하고 코딩하는 사람들이 사용자에게 진심으로 깊이 공감하는 것이 점점 더 중요해지고 있습니다. 그 출발점은 다양한 집단을 대변하는 목소리가 반드시 전달되도록 하는 것입니다.
1.5 다섯 가지 경력 단계
이제 회사 유형, 커리어 계층, 다양성, 그리고 직함을 너무 진지하게 받아들이지 말아야 한다는 점까지 알아보았으니… 이제 직함에 대해 이야기해 봅시다.
여기서는 이 책에서 다루는 각 단계를 소개하겠습니다. 시도해 볼 만한 것들에 대한 팁을 드리고, 여러분이 어느 단계에 있느냐에 따라 살펴보아야 할 원칙, 전략, 전술을 굵게 표시해 두겠습니다.