[책읽기] 소프트웨어 엔지니어 가이드북
소프트웨어 엔지니어 가이드북 | 게르겔리 오로스 / 이민석 역 | 한빛미디어 |
저자에 대해서는 책의 띠지를 보면 알수 있다. 75만의 구독 뉴스레터 운영자이다. 테크 뉴스레터 ‘프래그매틱 엔지니어(The Pragmatic Engineer)’를 발행하고 있다. 우버에서 엔지니어링 매니저이자 엔지니어로 재직했으며, 마이크로소프트, JP모건, 스카이프, 스카이스캐너에서 엔지니어로 재직했다.
우리나라에서 소프트웨어와 관련된 사람의 이야기를 듣기는 쉽지 않다. 그리고 소프트웨어 엔지니어의 성장 과정을 이야기 하는 사람도 극히 적다. 이유는? 대부분 45~60대가 되면 소프트웨어와 관련된 일을 하지 않는다. 사장님이 되어 있기도 하다. 치킨집 사장님 말이다. 미국의 IT 기업을 보면 시니어 개발자들이 보인다. 관리직으로 갈 것인지? 아니면 개발자로 계속 남을지에 대해서 고민을 한다고 한다. 너무도 일찍 떠난 선배들에게 물어 볼 수가 없다.
그러면 어디서 배워야 할까? 저는 이 책을 권하고 싶다. 개발자는 어떻게 성장 해야 하는가? 그리고 회사는 어떻게 움직이는가? 개발자로서의 자질은 어떻게 키워 나가야 하나? 라는 질문에 차근차근 이야기를 해준다.
이직에 대한 부분도 적어 놓았으니 기대가 높아 지지 않나? 우리나라 사장님은 이 책을 권하지 않을 것이다. 사장님은 회사에 충성을 다하라고 하는 책을 선호 할 것이다. 꿈을 가지고 회사에 열정을 가지고 일해야 한다는 책은 사장님이 직접 살 수도 있다.
책은 총 6부로 나뉘어 진다. 1부 개발자 커리어의 기본 사항, 2부 유능한 소프트웨어 개발자, 3부 다재다능한 시니어 엔지니어, 4부 실용주의 테크리드, 5부 롤모델로서의 스태프 및 수석 엔지니어, 6부 결론이다.
마음에 드는 부분은 결론이다.
최고의 소프트웨어 엔지니어와 그렇지 않은 엔지니어를 구분하는 기준은 무엇일까? 훌륭한 엔지니어는 배움을 멈추지 않는다. 이들은 새로운 언어와 기술을 습득할 뿐만 아니라 새롭고 흥미로운 접근 방식의 시도를 두려워하지 않는다.
배움을 즐거움이 있는것이 소프트웨어 엔지니어라고 한다. 대학 시절은 어셈을 배우고, 졸업을 해서 C 언어를 배우고, JAVA가 바전을 하고, 지금은 파이썬 등 새로운 언어가 쏟아져 나오고 있다. 소프트웨어는 배움을 즐거움이 깔려 있어야 한다. 그러려면 호기심이라는 것이 필요 할 것이다.
호기심은 프로그램에 대해서만이 아니다. 자신의 팀과 팀원들에게도 필요하고, 상급 매니저에게도 필요하다.
1부에서 개발자의 성장을 이야기 한다. 자신의 성장, 승진, 보상에 대한 이야기를 한다. 한해 한해 연차가 쌓이고 실력이 향상되어 간다. 이제 기로에 놓인다. 이직을 할 것인가? 아니면 승진을 할 것인가? 미국에서는 승진에 따른 인센티브가 상당하다고 들었다. 우리나라는 이직을 하지 않고 연봉의 상승이 쉽지 않다. 중소기업은 보상에 대한 부분이 부족하다.
1부의 6장이 눈에 들어 왔다.
6. 이직 ( Switching Jobs )
....
직장을 옮기는 현명한 방법은 무엇일까? 다른 기회를 잡을 최적의 시점을 파악하는 방법은 무엇일까? 이 장에서는 그 이야기를 해보겠다.
적극적인 구직 활동
소극적인 구질 활동
지금 직장에 만족할 때
큰 제목만을 나열해 보았다. 적극적인 구직 활동은 첫 직장을 구할때, 직장을 잃었을 때, 개인적인 사정, 직장 생활에 만족 스럽지 않은 상황, 시장 평균보다 훨씬 낮은 임금을 받고 있다는 사실을 깨닫고 가 되겠다.
소극적인 구직 활동으로
현재 직장이 괜찮은 경우에도, 흥미로운 기회가 찾아올지 모른다는 열린 마음을 유지하자. 적극적으로 채용 공고를 검색하지는 않아도 리크루터가 보낸 구인 메시지에 관심을 가지고, 마음에 들면 지켜봐도 좋다. 호기심을 자극하는 자리가 있다면 기업 채용 담당자와 이야기를 나누고 프로세서에 참여한다.
지금 직장에 만족할 때는 시장에서 자신의 가치 확인, 역량 파악, 새로운 직장을 통한 레벨업에 대한 부분에 대해서 관심을 가지고 결정을 해 본다.
우리나라의 기업들은 보수적인 회사가 많아 이직이 잦으면 싫어하는 부분이 있다. 미국은 능력이 된다면 그런것이 상관이 없다. 언제든지 옮기고, 회사는 언제든지 정리를 한다.
미국의 경력자에 대한 면접은 초기심사, 기술 면접, 현장 면접으로 진행을 한다고 한다. 초기 심사에서 이력서를 받고 통화를 하고, 기술 면접에서는 전화 기술 면접, 코딩 과제 부여, 현장 면접에서는 코딩 면접, 시스템 설계 면접, 채용 매니저 인터뷰, 바 에이저 인터뷰로 진행을 한다고 한다. 애플의 채용 면접은 ( 애플은 단순하게 일합니다 - 박지수 ) 하루 종일 진행을 하며, 면접을 진행한 모든 사람에게 합격을 해야 입사가 가능하다고 합니다.
1부에서는 소프트웨어에 대한 부분 보다 회사생활에 대한 부분 커리어를 쌓아 가는 부분에 대해 이야기를 한다면, 2부는 유능한 소프트웨어 개발자의 제목처럼 소프트웨어 개발자는 이렇게 되어야 합니다. 라고 적극적으로 이야기를 합니다. 우리나라 개발자들로 따진다면 과장에서 차장, 부장까지라고 해야 할거 같습니다.
일을 어떻게 해야 하는가? 라는 부분에 중점을 둡니다. 협업에 대해서, 그리고 코드 리뷰, 일을 하는 방식등에 대해서 말합니다.
코딩 기술을 연마하는 것은 스포츠 훈련과 비슷합니다. 많은 자료에서 코딩을 잘하는 방법과 당신을 빠르고, 강하고, 뛰어나게 만드는 기술을 소개한다. 하지만 실력 향상에 가장 큰 영향을 미치는 건 연습의 양이다.
코딩도 마찬가지다. 책과 온라인 자료는 지식을 넓히는 데 도움을 주지만 결국은 코드를 많이 작성하며 그 지식을 적용해야 한다.
처음 코딩을 배운 사람이 코딩을 '장'할 수 있게 되려면 많은 시간과 노력이 필요하므로 매일 코딩하는 습관을 들이는 편이 좋다. 따라서 매일 의미 있는 작업과 문제를 해결하는 데 코딩을 활용하자.
대부분의 기술 기업은 경력 초기에 있는 개발자가 매일 코딩하기를 기대한다. 어떤 이유로든 매일 코딩을 하고 있지 않다면 방법을 찾아보자. 직장에서 추가 프로젝트를 맡거나, 코딩을 많이 하는 팀으로 옮기거나, 프로그래밍 기술을 연마할 수 있는 사이드 프로젝트를 진행하는 등의 방법이 있다.
유능한 소프트웨어 엔지니어로 계속 성장하려면 매일 코딩을 해야 한다. 이를 대체할 방법은 없다.
"유능한 소프트웨어 엔지니어로 계속 성장하려면 매일 코딩을 해야 한다. 이를 대체할 방법은 없다."
경력이 쌓인다고 실력이 늘어 나지는 않는다. 자신에게 필요한 것을 찾아 가는것이 필요해 보인다. 책에서는 문제 해결을 위해서 멘토를 찾아 보라고도 한다. 시대에 맞추어서 AI를 활용하는 방법도 이야기를 한다. ( AI에 개발중인 소스를 올리는 것은 조심해야 하는 부분이다. )
2부는 소프트웨어 엔지니어가 열심히 실력을 쌓아 가는 모습을 보여준다. 3부 부터는 ~ 4부, 5부는 부서 경영과 함께 프로젝트 매니져 PM 에대한 부분이 접목이 된다. 3부는 고참으로써 프로젝트에 대한 진행 방향에 대한 부분이 나타난다. 2부가 실력을 쌓아간다면 3부는 실력을 통해서 문제를 해결해 가는 부분이다. 4부, 5부는 PM의 역할이라는 생각이 든다. 프로젝트에 대한 관리, 직원들에 대한 협업, 이직을 생각하는 친구들에 대한 생각 등등 관리자로써의 생각에 빠져든다.
이 책의 소프트웨어를 시작 하는 사람들에게 도움이 된다고 생각을 한다. 어떻게 소프트웨어 엔지니어가 되어 가는가? 어떤 생각을 가지고 자신의 실력을 쌓아가야 하는가? 그리고 실력이 쌓여서 시니어 엔지니어로써 팀을 어떻게 꾸려 나가야 하는가? 프로젝트 관리는 어떻게 해야 하는가? 이 모든 부분에 대해서 멘토처럼 이야기를 해 준다. 왜 75만 구독자가 있는지 알겠다.
우리나라 현실에서 소프트웨어 엔지니어의 멘토를 구한다는것은 쉽지 않다. 팀장은 정치를 할 수 밖에 없고, 개발 일정은 빠르게 진행 된다. 나이에 따라 나도 모르게 팀장이 되어 버리기도 한다. 일정 관리에 어려움을 보이는 리더를 보기도 한다. 배우지 못했기 때문 일 수 있다.
이 책을 한줄로 요약하라고 한다면? 딱 책 제목이다. 소프트웨어 엔지니어 가이드북이다. 자신의 위치에서 앞으로 한단계 뒤로 한단계를 볼 수 있을 것이다.