패스트터틀

커리어 스킬 - 완벽한 개발자 인생 로드맵(존 손메즈)를 읽고나서.. 본문

Humanities/book - developer

커리어 스킬 - 완벽한 개발자 인생 로드맵(존 손메즈)를 읽고나서..

SudekY 2020. 1. 16. 14:15

커리어 스킬 - 완벽한 개발자 인생 로드맵(존 손메즈)

존 소 메즈라는 개발자가 소프트웨어 개발자가 되기 위해서 기술적인 부분이 아닌 기술외적인 부분에 있어서 기초부터 알려주는 실용서이다. 예를 들면 개발자가 되기 위한 준비부터 취직, 연봉협상, 자기 계발이 있다.

 

개발자라면 누구든 상관없이 읽어볼 만한 책이다. 주니어든 상급이든 관리이든 어떤 직책의 얼마나 많은 개발을 해왔건 전체적인 시야를 넓혀주는 책이다.  

 

 700페이지로 굉장히 길지만 너무 뻔한 얘기가 많은 부분은 건너뛰면은 크게 읽는데 오래 걸리지 않는다.

나도 개발자로서 성공은 아니어도 좋은 커리어를 만들고 싶은데 그런 생각에 나무가 아닌 숲을 볼 수 있게 도와 준책이다.

한밭도서관에 빌렸고 일주일 정도를 독서한 것 같다.

 

실용서이기 때문에 실용적인 것들을 정리해봤다. 참고로 저자는 외국인이므로 우리나라에 맞지 않는 이야기를 하는 내용도 몇 개 있다. 또 하나 참고로 나는 초보 개발자라서 모르는 것도 정리했다.

 

---------------------------------------------------------------------------------------------------------------------

 

"어떤 유형의 소프트웨어 개발자가 되고 싶은지 구체적인 목표를 세워라."

 

"코드 구조화란 주석을 줄줄이 알지 않고도 이해하기 쉽도록 코드를 작성하는 것을 가리킨다. 원래는 코드만으로 의사 전달이 가능해야 한다."

 

"데이터 구조, 알고리즘을 제대로 이해하면 어려운 프로그래밍 문제를 쉽고 명쾌하게 풀 수 있다. 사실 나는 이 분야가 소프트웨어 개발에서 가장 재미있는 영역이라고 생각한다."

 

"잘 작동하는 애플리케이션의 소스코드를 살펴보고 그 안에서 어떤 일이 벌어지는지 최대한 많이 알아내는 방식이 가장 좋다고 본다."

 

"오늘날 프로그래밍에서는 그 언어를 완벽하게 통달하느냐보다 라이브러리와 프레임워크 사용법을 아느냐가 더 중요하다."

 

"대학교수는 현실 세계에서 이루어지는 소프트웨어 개발과 아주 동떨어진 생활을 하는 경우가 많다."

 

"요즘 같은 세상에 포트폴리오 없이 소프트웨어 개발자가 되겠다고 하는 건 말도 안 된다."

 

"나는 IT분야 이력서를 전문으로 하는 이력서 작성 전문가를 고용하는 게 가장 좋다고 100퍼센트 확신한다."

 

"실력 있는 이력서 작성 전문가의 도움을 받아서 만든 이력서를 낸 소프트웨어 개발자는 더 많은 일자리, 더 높은 연봉을 받는다. 직접 확인한 사실이다."

 

"이력서의 초점을 자신이 무엇을 원하느냐가 아니라 자신이 어떤 가치를 제공하느냐에 맞춰라."

 

"자신의 작은 약점도 받아들이지 못해서 자꾸 뒤로 숨고 방어적으로 구는 사람만큼 자신감이 부족해 보이는 사람도 없다."

 

"가장 중요한 메시지 '저는 능동적인 사람입니다. 해야 할 일이 무엇인지 스스로 파악하고 실행합니다."

 

"연봉정보는 지원자와 회사 양측 모두에게 아주 중요한 정보다. 어떤 협상에서든 숫자를 먼저 말하는 사람이 진다.

아니면 적어도 크게 불리한 위치에서 시작한다. 어떤 상황에서도 자신의 현재 연봉을 노출하지 말라."

 

"연봉조정은 입사 전이 입사 후보다 훨씬 쉽다."

 

"막다른 지점에 다다랐다는 걸 깨달았다면 즉시 이직을 준비해라. 똑같은 직급으로 한자리에서 10년 심지어 15년까지도 계속 머무는 소프트웨어 개발자를 많이 보았다. 성장하지 않으면 죽어가고 있는 것이다. 성장해야 한다."

 

"퇴사를 망설이는 개발자는 흔히 자신이 나가면 팀도 끝나버릴 것 같다거나 팀을 떠나면 팀을 져버린 거나 다름없다는 핑계를 댄다. 하지만 여기에는 약간 자만도 섞여 있다는 걸 깨달아야 한다. 누구나 팀에서 중요하고 필요한 존재라고 생각하지만 사실 누구든 대체 가능하다."

 

"퇴사하겠다고 협박하지 마라. 미리 알리지 마라(2주 전이 적당하다)"

 

"회사 측에서는 재직 중에 어떤 문제를 겪었는지, 개선할 점은 없었는지, 가장 불평한 것은 무엇이었는지 회사를 떠나는 이유는 무엇인지 이것저것 물어볼 것이다. 듣기 좋은 말을 하라. 자신의 진짜 생각을 말하지 말라. 충동이 들어도 참아라.

회사를 개선하는 데 도움을 주어 고맙다며 메달과 10000달러 상금이라고 줄 것 같은가?"

 

"C : 세계에서 가장 많이 쓰이는 프로그래밍 언어, 너무 강력하다.

C++ : C의 상위 집합으로 객체 지향성, 클래스, 가상 함수들과 같은 유용한 기능을 위해서 C를 확장한 데서 비롯

C#, 자바 : 객체지향

Python : 가독성을 고려한 인터프리터 언어

Ruby : 쉽고 재미있으며 객체지향적인 스크립트 언어

javascript : 인터프리터 언어로 웹에서 편하고, 보편성 때문에 뜬 언어이다.

Objective - C : ios, 맥용 언어

Swift : Objective - C를 동적이고 유연하게 하는 인기 있는 기능이 있는 언어"

 

"하지만 네이티브 코드까지 컴파일하는 프레임워크를 사용하지 않는 한 네이티브 코드가 대체로 빠르다.

반면, 여러 플랫폼에서 쓸 앱을 만들고 싶다면 네이티브 개발이 최고의 방법이라고 보기는 어렵다."

 

"백엔드 개발자는 프런트엔드 개발자에 비해 알고리즘을 적용하고 문제를 해결하는데 더 많은 시간을 쓴다."

 

"기술 스택 전반에 대해 일반적인 지식을 갖추되 일부 영역에 대해 전문성을 갖는 게 현명하다."

 

"심약한 사람은 비디오 게임 개발을 하면 안 된다. 본업으로 삼기에 너무 어렵고 부담이 크기 때문이다. 보상도 기대에 미치지 못할 것이다."

 

"만약에 큰돈을 벌고 싶다면 금융권으로 가라"

 

"유명한 게임 개발 스튜디오에 입사하려면 제대로 교육을 받는 게 독학보다 유리하다."

 

"프로세싱 자원을 어마어마하게 소모하는 게임을 출시하는 대형 게임 스튜디오가 게임 개발에 쓰는 주요 언어는 여전히 c++이다."

 

"게임 개발자는 수학도 매우 중요하다."

 

"모든 개발팀에 DBA가 있는 건 아니다. 사실 DBA 업무를 개발자에게 맡기는 조직이 많으므로 데이터베이스를 설치하고 유지 보수하는 기본적인 방법을 알아두는 게 좋다."

 

"데브옵스란 코드를 개발해서 생산하기까지의 각 단계를 관리하는 종합적인 공정을 가리킨다."

 

"소프트웨어 개발팀에서 일하면서 자신의 코드를 완성해 넘긴 후 일이 어떤 절차로 진행되는지 몰라서야 되겠는가?"

 

"애자일은 애자일 자체를 방법론으로 보기는 어렵다. 애자일은 소프트웨어 개발은 점증적으로 이루어져야 한다는 아이디어에 불을 붙였다. 그리고 애자일은 개발이 이루어지는 동안 요구사항 또한 바뀔 수 있고 오히려 바뀌어야 마땅하다는 아이디어도 수행했다."

 

"스크럼은 소프트웨어 개발팀의 특정 역할, 소프트웨어를 개발하는 작업 흐름, 개발의 반복 주기마다 여는 스프린트(sprint)라고도 부르는 회의를 까다로운 규범에 따라 정의한 정형화된 방법론이다. 하지만 현실에서는 헌신이 부족해서 제대로 구현되기 힘들다."

 

"칸반은 스크럼과 유사한 면이 있긴 하지만 훨씬 더 느슨하게 정의된 방법론이다. 칸반은 피드백 루프를 통해 끊임없이 더 나아지는데 집중한다."

 

"상황에 맞게 진화하고 적응할 수 있는 반복과 측정이 가능한 프로세스를 갖추는 게 특정 방법론을 따르는 것보다 중요하다는 것을 깨달았다."

 

"소프트웨어 테스트가 집중하는 핵심적인 목표는 소프트웨어를 사용하는 고객에게 크고 부정적인 영향을 미칠만한 위험요소를 감소시키는 것이다."

 

"개발자라면 자신이 만든 코드의 품질에 그 누구보다 신경을 써야 한다. 자신의 버그는 자신이 직접 찾아서 고치겠다는 책임감을 지녀야 한다."

 

"코드를 가능한 한 작은 '단위'로 실행해보는 테스트를 작성하는 것을 단위 테스트라고 한다."

 

"단위 테스트뿐 아니라 모든 테스트의 마지막에는 통과 여부를 결정하는 확인 장치가 있어야 한다. 단언 문이 바로 이러한 확인 장치다."

 

"단위 테스트를 수행하는 큰 이유는 코드 설계가 개선되고, 자동화된 회귀 테스트를 만드는 것이다.

회귀 테스트란 과거에 작동했던 방식 그대로 작동하고 있는지 확인하는 테스트다. 신기능이 기존 기능을 망가뜨릴 위험이 있기 때문이다."

 

"TDD(Test Driven for Development):테스트 주도 개발은 코드를 먼저 작성하고 그 코드에 대한 단위 테스트를 나중에 작성하던 방식을 완전히 뒤집어서(어차피 현실에서는 그런 일이 잘 일어나지 않는다) 단위 테스트를 먼저 작성하고 그 테스트를 통과할 코드를 나중에 작성하는 것을 말한다."

 

"나는 코드를 가장 간결하게 쓰는 사람, 코드의 부피를 줄일 방법을 아는 사람이 최고의 프로그래머라는 농담을 자주 한다."

 

"좋은 소스 제어시스템을 사용하면 여러 개발자가 같은 파일로 동시에 작업하고 나중에 한꺼번에 병합할 수 있다."

 

"CVS : 중앙집중형 소스 제어 시스템, 서브버전, Git, 머큐리얼"

 

"CI(Continuous integration)은 소프트웨어 빌드 시에 느리고 고통스럽고 에러 나는 과정을 자동화해주며, 병합 지옥에 빠지지 않게 한다. 그리고 빠른 피드백을 제공한다."

 

"안타깝게도 디버깅을 잘하는 개발자는 많지 않다. 경력이 많아도 예외는 아니다. 새로운 기술을 잽싸게 완성하고 굉장히 빠르게 코드를 쭉쭉 뽑아내는 개발자는 많다. 하지만 그 후에 남겨진 어지러운 버그 청소는 누구의 몫이란 말인가?"

 

"디버깅은 디버거와 아무 관련이 없다. 코드 베이스에서 문제의 근원을 찾아서 그 문제를 일으킬만한 요인을 가려내고, 여러 가설을 시험해보는 과정을 통해 뿌리가 되는 진정한 원인을 찾고 그 원인을 제거한 후, 다시는 그 문제가 일어나지 않도록 하는 것이 디버깅이다."

 

"에러를 재현하고, 앉아서 생각하고, 가설을 테스트할 단위 테스트를 작성하라. 가정을 확인하라, 분할 정복하라, 고칠 때는 이유를 이해해라"

 

"새 코드를 쓰는 시간보다 코드를 유지 보수하는 시간이 더 시간이 훨씬 길다."

 

"훌륭한 개발자유지 보수하기 아주 좋은 코드를 만든다."

 

"간결하고 기발한 코드를 작성하기 위해서 노력하는 개발자가 많다. 간결한 것도 좋지만 너무 짧고 기발한 코드는 재앙으로 이어지기 십상이다. 왜냐하면 코드를 작성한 시간보다 읽는 시간이 훨씬 더 길기 때문이다."

 

"리펙토링은 기존 코드 설계를 개선하는 과정이다. 기존 코드의 기능을 그대로 두고 조금 더 가독성을 높이는 것이라고 생각한다."

 

"주석을 쓸 거라면 꼭 제대로 쓰기를 바란다. 수수께끼 같은 주석은 수수께끼 같은 코드만큼 나쁘다. 어떨 때는 그보다 더 나쁘다."

 

"일반적으로 회사가 작을수록 코딩하는 시간이 더 길어진다."

 

"훌륭한 소프트웨어 개발 마치고 바로 코딩부터 하는 사람은 많지 않다."

 

"꾸준히 학습하지 않으면서 좋은 소프트웨어 개발자가 된다는 건 어불성설이다."

 

"테스트는 소프트웨어 개발의 필수 요소이다. 훌륭한 소프트웨어 개발자라면 자신의 코드를 체크인하고 배포하기 전에 반드시 테스트한다."

 

"입사한 지 얼마 되지 않았다면 자신의 능력에 확신이 있더라도 본인보다 오래 근무한 동료들의 경험을 존중하라. 똑똑한 질문을 많이 던지는 건 이런 마음가짐을 보여줄 좋은 방법이다."

 

"직원이 상사에게 가치 있다는 평가를 받으려면 상사가 자신의 업무를 수월하게 할 수 있게 돕는데 집중하면 된다."

 

"나는 진정한 삶의 균형을 성취의 대상으로 보고 쫓아다니기보다 일과 삶의 경계를 흐려서 그 모든 게 '삶'이 되도록 하는 게 중요하다고 본다."

 

"터무니없이 긴 시간을 사무실에서 보내는 열정 넘치는 소프트웨어 개발자를 너무 많이 봤다. 이들은 그렇게 오랜 시간 일하는 게 경력발전에 도움이 될 것이라 믿는다. 초과근무가 생각만큼 경력발전에 별 도움이 되지 않는다. 초과근무가 삶의 질을 크게 떨어뜨린다는 걸 알아야 한다."

 

"유지하려는 대인 관계가 늘어날수록 자신을 위해 쓸 수 있는 시간줄어든다."

 

"자신이 차지하고 싶은 자리에 어울리는 의상을 입어라."

 

"연봉 인상을 받고 싶다면 승진을 하고 싶다면 자신에게 주어진 일보다 훨씬 더 많은 일을 해야 한다. 하지만 받을만한 자격이 있다고 해서 승진이나 연봉 인상이 제 발로 찾아오지 않는다. 직접 공격적으로 행동하자."

 

"상사가 어떤 직원에게 재정적인 문제로 연봉 인상이 불가능하다고 말한다면 그런 말은 다 마음에 없는 헛소리다. 상사나 회사가 재정적, 정치적 난관을 극복해서라도 잡고 싶은 인재라고 생각하지 않는다는 명확한 메시지로 받아들이면 된다."

 

"돈이 필요한 이유를 이야기하지 마라. 동정심 때문에 연봉을 올려주는 일은 거의 없다. 그 정도 인상을 받아 마땅한 근거를 이야기하라."

 

"여러 달에 걸쳐, 사용할 일 없는 프로그래밍 언어를 배우는 건 경력을 발전시키거나 목표를 이루는데 별 도움이 되지 않는다."

 

"6개월짜리 사이드 프로젝트 하나가 9시부터 5시까지 근무하는 회사에 몇 년간 다녀야 배울 수 있는 경험을 하게 해 준다."

 

---------------------------------------------------------------------------------------------------------------------

 

 책에 마지막 부분에는 자기 계발 관련 부분이라서 딱히 도움이 되지는 않았다.

하지만 전체적으로 보았을 때 개발자 인생의 커리큘럼을 한번 정리한듯한 느낌이 들었다

 

 그리고 부록에 보면은 우아한 형제들(이동욱), 야놀자(유용우), 뱅크 샐러드(이승민), 줌인터넷(한정수) 님 같은 현직 개발자들이 자신의 개발자 인생 이야기를 짧게 이야기해준다. 솔직히 여기가 제일 재미있었다ㅜㅜ

Comments