(내맘대로 선정한) 프로그래머를 위한 필독서 16선

Posted by 엘키의 주절 주절 on July 5, 2018

내가 읽어온 서적 중에서 프로그래머를 위한 필독서라 느껴졌던 책들을 추천한다.

16개 서적으로 다른 필독서 추천 글 (한상곤님 글, iostream) 보다 의도적으로 조금 더 적게 추천했다.

추천하고 싶은 서적이 늘어나고 줄어들 수 있겠지만, 그 시점에 생각을 반영한 것이니, 새로 글을 작성할 예정이다.

임백준씨 관련 책이 많은 것은 다분히 의도적이니 참고바라며, 자신에게 도움이 될 서적을 고르는데에 보탬이 되길 바란다.

  1. 실용주의 프로그래머
    • 프로그래머의 마음 가짐에 대해서 알려주는 책들 중 가장 적절한 분량에, 핵심 메시지를 잘 요약 전달 해주는 책이다.
    • 자신이 프로그래머인 행세만 하고 살고 싶은 지, 프로그래머가 되고 싶은 지를 이 책의 가르침을 얼마나 따를 수 있는 지로 평가해도 될 만큼 좋은 책.
  2. 대체 뭐가 문제야?
    • 이 책은 프로그래밍 서적이 아니지만, 나는 프로그래머의 필독서로 전혀 부족함이 없는 책이라고 생각한다.
    • 프로그래머는 난제를 자주 맞이하는 숙명을 안고 사는데, 이 숙명에서 유용할 수 있는 책이라고 확신한다.
    • 특히 문제 해결을 위해선, 해결 능력 혹은 해결 권한을 가진 사람의 문제로 만들어야 한다는 얘기는, 직업 프로그래머 생활 하는 내내 큰 도움이 되었다.
  3. 누워서 읽는 알고리즘
    • 먼저 나온 것은 행복한 프로그래밍이지만, 나는 임백준씨 서적 중에 제일 먼저 읽게 된 서적이다.
    • 어려운 알고리즘을 누워서 읽을 수 있다고? 약을 파는 듯한 제목이었지만, 그 약은 마약도 아니고 나에게 충격이며 감동이었다.
    • 알고리즘 이야기를 다양한 주제와 엮어 쉽게 표현한 임백준씨의 재능은 임작가라는 별명 처럼 뛰어나며, 개발자계의 로맨티스트가 아닐까 싶은 감동을 주었다.
    • 당신이 프로그래밍으로 인해 조금 지친다면, 이 책을 읽어보는건 어떨까?
  4. 행복한 프로그래밍
    • 위에서 너무 극찬을 많이해서 딱히 쓸말은 없다.
    • 다만 프로그래밍으로 인해 행복하다는, 행복하기 위해 프로그래밍 한다는 그런 말도 안될거 같은 이야기에 속아보고 싶다면 이 책을 읽어봐라. 아마도 임백준씨의 다른 책들도 모두 읽게 되겠지만, 시작은 이 책이나, 누워서 읽는 알고리즘이 적당할 것이다.
  5. Refactoring
    • 이 책을 제대로 읽고, 리스크가 적게 리팩토링해라.
      • 특히 서비스 중인 코드를 고칠땐 더더욱.
    • 괜히 설계 다 뒤엎고 새로짜면서 리팩토링한다고 착각하지 말자.
      • 리팩토링은 동일한 동작을 유지하면서라는 전재가 있다. 잊지 말자.
  6. Legacy 코드 활용 전략
    • Legacy 코드에서 배워라.
    • Legacy 코드를 안정적으로, 개선하는 Test Driven Refactroing에 대한 방법과 방향성에 대해서도 알 수 있는 좋은 서적이다.
    • 몇몇 방법은 Legacy 코드를 감추면서라도, 기존 동작을 유지하라는 이야기도 있는데, 찜찜하면서도 합리적인 해결책중 하나였다.
      • 어찌보면 문제를 격리하고, 이외의 영역을 Clean하게 관리하고 보호할 수 있다면 그것도 나쁘지 않겠다 싶은 결론이다.
  7. Test Driven Development
    • 지금은 한풀 꺾인 TDD에 대한 바이블.
    • 지금은 TDD보다는 유닛 테스트 자체가 살아남은 편이고, 코드 리뷰에 대한 관점이 더 많이 고민되고 있는게 사실이지만, TDD 자체가 무의미하진 않다.
      • 번거로울 뿐.
      • 그 번거로움을 낮추는 이야기가 없고, 쉽지 않은 문제라 (프로젝트의 상황과 레거시 코드의 뿌리에 따라 다르기 때문) 그렇겠지만, TDD로 개발할 수만 있다면 퀄리티는 예상보다 크게 높아진다.
      • TDD를 한다고해서, 코드 리뷰나, 별도의 QA가 없어도 되는것은 아니다. □ 방심 금물.
  8. Art of Unix Programming
    • 전격 윈도우 디스서.
    • 유닉스는 프로그래머를 위해 우월하고, 윈도우는 그렇지 않다는 이야기가 꽤나 길게 다뤄진다.
    • 사실 유닉스의 쉘 기반 문화는 훌륭한 것이 맞지만, 사용자 기반 문화의 윈도우와 맥이 가진 장점도 분명히 꽤 있음.
    • 윈도우의 GUI 기반 문화로 인해 쉘 기반 연동마저 어렵게 만들어버린 것은 아쉽지만, 윈도우의 태생과 발전하게 된 계기가 어찌보면 그런 부분을 포기하고 GUI로만 무언가를 할 수 있게 했기 때문이 아닐까 싶은 생각도 든다.
    • 윈도우에 대한 반감이 있다면 반드시, 호감이 있다해도 한번쯤은 읽을만한 서적.
  9. 폴리글랏 프로그래밍
    • 자바의 발전 속도가 더디다 못해, 멈췄다고 느낄 때 쯤 나온 서적.
    • C#의 빠른 발전 속도와 발전 방향에 대한 찬양의 내용이 많아 국내에선 이견이 많았던 서적.
    • 지금은 자바도 빠른 발전 속도를 내고 있지만, 오라클의 유료화로 인해 자바의 운명은 어찌 될지 잘 모르겠다.
    • 결론은 적재 적소에 합리적인 언어 사용을 통해 효율과 완성도를 올리자는 이야기.
  10. Modern Effective C++
    • 이제는 C++ 0x 이후와 이전으로 나뉜다.
    • 11, 14, 17등 마일스톤을 정해가며 지속적으로 발전하고 있는 C++에 대한 깊은 이해를 원한다면 이 책이 최적이다.
    • C++이 죽지 않았다고 주장하는 사람들의 근거가 될 수 있는 서적.
  11. The C++ Programing Language
    • TCPL이라 불리우는 C++의 창시자 비야네 스트롭스투룹의 저서.
    • C++의 다양한 문법과 제약이 어떠한 근거로 만들어졌는지 알 수 있는 서적으로써, 언어에 대한 이해도를 한층 높일 수 있다.
    • 이제와서는 Modern Effective C++과 같이 읽어야 더 큰 의미가 있을 서적.
      • 현재 Modern C++의 발전 방향과 당시의 비야네 스트롭스투룹의 생각과 비교하면서 읽어보자.
  12. 자바의 신
    • 자바 입문서로 적격.
    • 쉽고, 친절하다. 최근 개정서도 나온 만큼 더 완성도가 올라갔다.
    • 나 역시 자바 학습하면서 이 책을 봤는데, 충분히 추천 할만큼 쉽고 적절한 순서로 구성 되어있다.
  13. 코딩호러의 이펙티브 프로그래밍
    • 스택 오버 플로우의 창시자가 말해주는 소프트웨어 개발/관리 이야기.
    • 스택 오버 플로우의 창업자가 조엘만 알았는데, 제프 앳 우드가 엔지니어링 적인 부분을 대부분 책임지고 개발했다는 것을 나중에 알았다.
    • 해외에서도 지원자에 대한 검증 이슈나, 프로그래밍도 못하는데 프로그래머로 지원하는 지원자가 있어서 괴롭다는 이야기를 할줄 몰랐다. 꽤나 큰 충격.
    • 원격 개발을 하면서도 퀄리티를 낼 수 있고, 내고 있다는 사실에도 꽤나 큰 충격이었다.
    • 이외에도 훌륭한 선배 프로그래머의 생각과 조언을 들을 수 있는 훌륭한 서적이 아닌가 싶다.
  14. 윈도우 개발 282 스토리
    • 윈도우가 왜 이런 모양새가 되었는가를 설명해주는 서적.
    • 심시티를 위한 예외처리를 통한 하위호환 이야기는 게임의 파급효과와 영향력에 대해 다시금 고민하게 됐다.
    • 위에서 언급한 The Art of Unix Programming에서의 비난 대상이지만, 나는 윈도우가 훌륭한 OS고 이런 다양한 하드웨어위에서 안정적으로 동작할 수 있게 끌어올린 선택과, 엔지니어링 기술력은 시대의 큰 획을 그었고, 그 과정에 대한 자세한 이야기를 들어보는 것은 꽤나 가치가 있는 일이 라고 생각한다.
  15. 대살개문
    • 전격 팩폭서.
    • 한국의 개발환경이 조금 더 좋아지길 기도하며, 읽어보자.
    • SI를 해보지 않았지만, 그럼에도 철야, 야근을 자주 했던 과거와, 엔지니어이면서도 탱킹 (몸으로 때우면서 일하는)을 해야 했던 지난날, 엔지니어링 퀄리티와 사업적 경쟁력과 동떨어진 현실, 엔지니어링은 알아서 잘해야 하는 것이라는 느낌을 받았던 나날들을 떠올리며 공감할 수 있었다.
    • 중간 중간 대한민국에 대한 이야기가 아닌 챕터도 꽤 많았지만, 임백준씨의 확고한 철학과 생각을 공유할 수 있어 좋았다.
  16. 7가지 동시성 이론
    • 병렬 처리에 대한 다양한 접근과 구현 방법, 변화 방향등을 살펴보며 대용량 처리의 근간인 병렬 처리 (동시 처리)에 대한 이해도를 높일 수 있다.
    • 스케일 인 아웃이 중요하다지만, 여전히 인스턴스 내에서의 처리량도 크게 중요한 문제다. (쓰루풋 대비 스케일 아웃 해야 할 인스턴스가 덜 필요하기 때문)
      • 그런 측면에서 꼭 읽어볼만한 책이 아닌가 싶다.
    • 함수형 프로그래밍이 왜 화두인지, 스칼라가 왜 주목받았었는지, 액터 모델이 왜 각광 받았는지 등을 짧은 시간에 이해할 수 있는 좋은 책이었다.