Table of Contents

기술적인 내용에서부터 인간관계, 회사생활에 이르기까지 비단 신입 개발자 뿐만아니라 선임 개발자들도 읽으면 좋을 만한 책이다.

책을 읽고나서 포스트잇을 붙여놓은 페이지가 여럿 된다. 기존에도 이런 부류의 책들은 몇 권 읽어본 적 있는데, 그 책들과 다른 점을 꼽자면, 다른 책들의 내용을 언급하며 독자들에게 추천해주는 것이다.

개인적으로 이 부분이 좋았다. Reference 가 많은 논문이 좋듯이 책도 마찬가지다. 이렇게 되면, 이 책 한 권만 읽고 그치는 것이 아니라 책에서 소개한 다른 책들을 찾아 읽어보게 된다. 이런 식으로 꼬리에 꼬리를 물고 릴레이(?) 독서가 시작되는 것이다.

읽기 전에는 '또 뻔한 얘기를 하겠지' 하는 선입견을 가지고 있었는데, 읽다보니 전혀 지루함을 느낄 수 없었다. 아마도 이건 저자의 능력인 것 같다.
오히려 처음에 가졌던 초심을 다시 한번 상기시키게 하는 계기가 된 것 같다.

마음에 드는 구절

환경을 최적화하라

텍스트 편집기 요령

언급한 대로 손가락이 기억할 수 있도록 반복 연습할 필요가 있다. 매주 하나씩 새로운 기능을 연습하라.

  1. 키보드만으로 파일들을 오가는 연습을 하라. 개발 환경이 애플리케이션 코드와 단위 테스트 같은 파일 간의 관계를 알려줄 정도로 영리하다면 더 좋다. 그러고나서 페이지, 코드 블록이나 함수에 따라 파일 안에서 빠르게 움직이는 방법을 배우라. 그 다음에는 한 줄에서 처음과 끝, 단어별로 이동하는 방법을 배워야 한다.
  2. 현재 줄과 코드 블록을 선택할 줄 알아야 한다. 다중 클립보드가 있는 편집기라면 한 번에 하나 이상 잘라내기/붙여넣기 하는 방법을 알면 좋다(이맥스에서는 kill ring 으로 알려져 있다).
  3. 보통 자동 완성 기능으로 타자를 한 번이라도 줄일 수 있다. 언어 특화적인 기능도 있다. 가령 표준 라이브러리 함수를 편집기가 미리 알고 있으면 타자를 할 때 일치하는 목록을 보여줄 수 있을 것이다. 파일 안에서 텍스트에 따라 단어를 완성해주는 편집기도 있다. 단축키를 알면 시간을 대단히 많이 아낄 수 있다.
  4. 편집기 대부분은 코드를 자동으로 들여쓴다. 이 기능을 켜고 자기 스타일에 맞게 조정하면 탭 키와 작별할 수 있다.

컴파일러/인터프리터 요령

  1. 첫 번째 기능은 경고 켜기다. 경고 기능은 대다수 컴파일러와 인터프리터가 제공하며, 경고가 항상 버그가 되지는 않지만 일단 확인해서 경고를 없애도록 코드를 고쳐야 한다(레거시 코드에서는 항상 경고를 켤 수 있는 것은 아니지만 할 수 있다면 해 보기 바란다. 경로를 무시하는 경우에는 뭔가 중요한 것을 놓칠 수 있다).
  2. 빌드/컴파일 단계가 있는 프로젝트에서는 빌드를 실행하는 단축키부터 익히라.
  3. 컴파일 경고나 에러가 생기면 파일과 줄 번호가 같이 나오게 마련이다. 현재 에러가 가리키는 소스 코드로 바로 가는 키보드 단축키를 익히라.
  4. 언어에 REPL 이 있으면 REPL 을 시작하는 단축키를 익히라.
  5. 개발 환경에 리팩터링 기능이 있다면 매서드, 클래스 이름 고치기와 코드 블록을 메서드로 추출하는 단축키를 익히라.

디버거 요령

  1. 디버그 상태로 프로그램을 시작하는 키보드 단축키를 익히라.
  2. 프로그램 충돌 지점의 스택 트레이스를 꺼내보라. 그러면 어떤 함수의 내부 상태를 보여주고 “어떻게 해서 이렇게 되었지?” 란 핵심 질문에 답을 해준다.
  3. 소스 코드에 중단점(breakpoint)을 설정하고 디버거를 돌린다. 프로그램이 충돌을 일으키기 전에 문제를 찾아내려 할 때 중단점은 필수다.
  4. 자신의 플랫폼이 코어 파일을 지원한다면 해당 기능을 어떻게 켜는지 알아야 한다. 코어 파일을 만들어 내도록 강제 종료를 해본 다음, 디버거로 코어파일을 읽어보기 바란다.

프로그래밍 언어를 유창하게 쓰라

Hello World 를 넘어서

첫째, 콘솔에 “Hello World” 를 출력하는 프로그램은 만들지말자. 다음과 같은 프로그램을 만들어보자. 각 줄마다 정수가 있는 파일을 읽어 들여 최소, 최대, 평균 및 데이터 세트의 중간값을 출력하는 형식이어야 한다.
왜인가? 이 연습은 I/O 와 컬렉션 반복, 수식 등 여러 컴퓨팅 작업에서 공통적인 몇 가지 기본 원칙을 포함하고 있다.
핵심목표는 코드를 작성하게 하는 것뿐 아니라 해당 언어의 관용구로 프로그램을 작성하는데 있다.
두 번째 목표는 코드 작성을 테스트 주도 형식으로 진행하는 것이다. 가령 컬렉션의 중간값을 반환하는 함수가 필요할 것이다. 실제 함수를 작성하기 전에 샘플 테스트를 작성하라.

플랫폼을 알라

하나의 프로그램을 각기 다른 콘솔 인터페이스, 데스크탑 GUI, 웹이라는 플랫폼에서 구현해보자!

스트레스를 관리하라

육체적인 스트레스 해결하기, 휴가를 가라.

공부를 절대 멈추지 말라

지금 자신이 가진 기술의 마인드맵을 만들라. 프로그래밍 언어, 플랫폼, 도구 등이 있을 것이다. 맵의 일부 가지는 엉성해 보일 것이다. 자신에게 부족한 부분들을 확인하고, 향상시키기 위해 동기를 부여하고 그 부분을 향상시키기 위해 앞으로 6 개월간 전념하라.
자기 계발 자금으로 매달 일정 금액을 정해놓는다. 이것을 필요한 책, 소프트웨어 등 여러 참고 자료 구입에 쓸 수 있다. 그러면 새로운 무엇을 살 때가 되었을 때 한 번에 큰돈이 빠져나갈 걱정을 할 필요가 없다.
직장에서 사용하는 언어와는 다른 프로그래밍 언어를 연구하라. 회사에서 C++(정적 타입, 객체 지향)를 쓴다면 스킴(동적타입, 함수형)을, 루비라면 해스켈을 공부해보라.
책 한두 권을 사서 시간을 투자하고 뇌 근육을 훈련시켜라.

자신의 자리를 찾으라

학구적 관점 : 대학원
다음과 같은 이유일 때만 대학원을 알아봐야 한다. 이 업계에서 휴식을 취하고자 할때, 교편을 잡고 싶을 때, 또는 연구를 하고 싶을 때, 학교 선택은 이러한 목표에 따른다.
단지 몇 년간의 휴식과 유용한 직업 명성을 얻으려면 MBA 는 괜찮은 선택이라고 할 수 있다. MBA 에서 업계 경험은 매우 도움이 된다. 학교를 까다롭게 선택하라.
가르치길 원한다면 공인된 박사 학위를 딸 수 있는 곳이라면 어디든 상관없다. 업계 경험이 연구할 과제를 잘 이해하는 데 매우 유용할 것이다.
영향력이 큰 연구가 목표라면 카네기 멜론, USC, 버클리, MIT 가 시작하기에 좋은 곳이다.