[꼼꼼 리뷰] 개발자를 꿈꾸는 '비전공생'을 위한 추천 도서 Best 3


 
리의 대학 생활을 조금 돌이켜본다면, 어떤 학과를 전공한다는 것이 생각보다 우리를 "전문가"로 만들어주지는 못한다는 것을 알 수 있다. 소수의 공부 벌레들은 더 공부를 해야겠다며 알아서 대학원으로 직행하고, 나머지 대다수는 B0 ~ B+ 정도의 평균 학점을 받으며 벼락치기로 연명하다가 졸업을 하게 되기 마련이다. 나도 처음에는 이런 생각을 가지고 국문과와 철학과를 복수 전공하면서, 컴퓨터 공학 전공자들을 "4년 동안 학문다운 학문도 못해보고 컴퓨터나 좀 만져본" 이들로 생각했다. 

하지만 생각보다, 4년이란 시간 동안 쌓이게 되는 경험치는 쉽게 따라잡기 힘들다. 내가 알고 있거나 만나본 컴퓨터 공학과 전공자들은 명문대건 지방대건, 성적이 좋든 나쁘든, 전반적으로 컴퓨터 공학에 대한 전반적인 실력이 있었다. 그리고 생각보다 개발자라는 직업이 요구하는 기량이 단순 코딩 몇 줄 하는 능력이 아니라, 그들이 4년 간 갈고닦은 전반적이고 복합적인 내공을 필요로 한다는 것을 알게 되었다.

(시끄럽고 빨리 추천 도서를 보고 싶다면 scroll down)

비전공자로서 개발자 커리어를 꿈꾸며 공부하고 노력하는 중이라면, 컴퓨터 공학 전공자들이 내뿜는 위압감에 대해서는 이처럼 누구나 공감할 것이다. 왜 나는 컴퓨터 공학과가 아닌 도움도 안 되는 학과를 선택해서 이 고생을 하고 있는지 한탄하거나, 육두품도 안되는 태생적 유리 장벽을 느끼며 애초에 나는 그들과 경쟁할 부류가 아니라고 자위해본 적이 없다면 거짓말일 것이다.

전공자를 따라잡을 수 있는 가장 간단 명쾌한 방법은 물론, 그들이 공부한 필수 과목들과 중요한 교양 과목들을 MOOC나 전공 서적 등을 이용해 쭉 공부해나가는 것이다.
C 프로그래밍, 컴퓨터 구조의 이해, 운영체제, 자료구조, 알고리즘, 공학수학, 시스템프로그래밍, ...
다만 이런 방식은 매우 고통스럽거나 지루하고 동기부여가 쉽게 되지 않는다. 마음이 급히 앞서가면 몸이 지쳐서 따라갈 수가 없다. 그렇다면 대체 어떻게 해야 할까?

다행스럽게도 세상은 넓고, 상상 속에나 존재할 것 같은 완벽한 것들이 어딘가 숨겨져 있기 마련이다. 예를 들자면

  • 비전공자가 읽어도 이해가 쏙쏙 될 만큼 쉽게 쓰여졌지만,
  • 다루는 내용의 깊이나 전달되는 정보의 가치는 전공서 부럽지 않으며,
  • 한글로 쓰여졌거나 번역이 아주 매끄럽게 잘 되어 있으며,
  • 재미있게 읽고 나면 좋은 컴퓨터 공학 강의를 들은 것처럼 남는 게 많은

놀랍게도 그런 책이 존재한다.

물론 전적으로 주관적인 견해임을 고려하기 바란다. 더 이상 긴 말 않고 바로 추천하겠다.




1. CODE



킹갓 생활코딩에서도 강력 추천하며 스터디까지 진행했던(링크) 책이다.
마이크로소프트 클라이언트 앱 개발 MVP 출신 찰스 펫졸드가 썼다.

우선 전반적인 내용을 소개하기 위해 총 25 개의 챕터 중에 주요한 몇 챕터를 뽑아왔다.

  • Chapter 1 친한 친구와의 대화
  • Chapter 6 전신과 릴레이
  • Chapter 10 논리와 스위치
  • Chapter 12 이진 덧셈기
  • Chapter 14 피드백과 플립플롭
  • Chapter 16 메모리를 만들어 봅시다
  • Chapter 22 운영체제

이 책은 챕터 1 "친한 친구와의 대화"에서 마주 보는 건물에 사는 친구와 손전등을 껏다 켰다 하면서 어떻게 암호, 혹은 "정보"를 주고 받을 수 있을지 고민하면서 이야기 보따리를 풀어나간다. 이야기는 점차 흘러 전신, 릴레이를 통해 전기로 정보를 주고 받고, 스위치가 등장하며 and, or, nor 등의 논리 게이트를 이용해 복잡한 정보를 표현할 수 있게 된다. 그 후에는 보다시피 가산기, 플립플롭, 메모리까지 다루게 되는데 on/off의 2진 스위치 레벨에서부터 한땀한땀 구현해나가는 과정을 보여주기 때문에 이해하기가 쉽다.

밑바닥부터 물리적인 작은 개념을 하나씩 이해하다가, 차곡차곡 모듈화 되어 나중에는 메모리를 만들고 운영체제까지 이해하게 되는, 큰 프로젝트를 코딩해나가는 쾌감과 비슷한 것을 선사해주는 그런 책이다.  

<Chapter 10 논리와 스위치>에서


<Chapter 16 메모리를 만들어 봅시다>에서


품질 좋은 번역을 한 옮긴이의 말을 빌려 마무리한다.

"이 분야의 클래식이라고 불려도 손색이 없다고 생각합니다. (...) 이 책의 가장 큰 장점은 저자의 독특한 통찰력이라고 할 수 있습니다. 컴퓨터를 이해할 때 필요한 다양한 분야를 하나의 주제로 엮어내는 것은 쉽지 않은 일인데, 책 제목과 같이 '컴퓨터 하드웨어와 소프트웨어에 숨어 있는 언어'인 코드(code)로 하드웨어와 소프트웨어를 하나로 탄탄하게 묶어서 설명하고 있기 때문이죠."




2. 컴퓨터 과학이 여는 세계



서울대에서 책 제목과 같은 이름의 인기 있는 교양 강의를 맡고 있는 이광근 교수님이 쓴 책이다. 굉장히 재미있게 쓰여 있고, 컴퓨터 과학의 기초인 컴퓨터 구조부터 요즘 핫한 머신러닝과 양자 컴퓨팅까지 다양한 토픽을 다루고 있다.
저자 직강의 강의도 존재하니 참고하면 좋을 것이다. 유튜브 강의 링크

분량은 가볍지만 내용은 가볍지 않고 꽤 깊이가 있다. 개념들 중에 몇 페이지 안되는데 여러 번 다시 읽고 겨우 이해한 것들이 꽤 있다.

목차는 굉장히 독특하게 구성되어 있는데, 위의 링크에서 자세히 확인할 수 있다. 큰 목차만 살펴본다면 다음과 같다.

  • 1. 마음의 도구
  • 2. 400년의 축적
  • 3. 그 도구의 실현
  • 4. 소프트웨어, 지혜로 짓는 세계
  • 5. 그 도구의 응용
  • 6. 마치면서

놀랍게도 책의 초반부에 컴퓨터의 (논리적) 시초라고 할 수 있는 튜링 머신이 등장하는데, 그 동작 원리까지 자세히 설명한다. 다른 책에서는 볼 수 없었던 것이었다.
3 챕터에서  스위치와 논리 게이트, 나아가 플립플롭과 메모리까지 컴퓨터 구조를 그림과 함께 쉽게 설명한다. 4 챕터에서 알고리즘과 복잡도, 심지어는 P/NP 문제, 양자 알고리즘, 람다 계산법 등 어렵지만 흥미로운 개념들이 소개된다. (솔직히 람다 계산은 아직도 잘 모르겠다)

튜링 머신 설명 부분에서

플립플롭 설명 부분에서


"오랫동안 품어왔던 컴퓨터과학 근본에 대한 질문에 이 책은 명쾌하게 답해 주고 있다. (...) 이 책은 컴퓨터과학에 대한 교양서로도 훌륭하지만, 전공자도 컴퓨터과학에 새로 눈뜨게 할 깊은 이야기를 이해하기 쉽게 들려준다."
- 박성우, POSTECH 컴퓨터공학과 교수




3. 이것이 취업을 위한 코딩 테스트다



아직 이 책보다 좋은 코딩 테스트/알고리즘 책을 찾지 못했다. 그 기준은 다음과 같다.
  1. 그리디, DFS/BFS, 다이나믹 프로그래밍 등의 유형별 개념을 쉽게 잘 설명한다.
  2. 문제를 해결하는 과정을 구체적으로 제시하며, 사용된 코드가 아름답고 명료하게 잘 짜여져 있다.
  3. 다양한 팁, 정보, 최신 기출문제 그리고 강의를 제공한다. (유튜브 강의 링크)

책의 저자 나동빈은 유튜브 채널 동빈나를 운영하고 있으며 포항공대에서 대학원을 다니고 있다. 소프트웨어 마에스트로 출신이며, 컴퓨터 공학이 아닌 컴퓨터 교육과 출신이어서 그런지 이해하기 쉽게 차근차근 잘 설명한다. (코딩 교육 채널로 한국에서 10만 구독자면 더 말할 필요 없겠지)

책은 크게 3개의 파트로 (+부록) 나눠져 있는데, 다음과 같다.

  • PART 01 코딩 테스트, 무엇을 어떻게 준비할까?
  • PART 02 주요 알고리즘 이론과 [실전 문제]
  • PART 03 알고리즘 유형별 기출문제

파트 1에서는 코딩 테스트 개요와 배경, 복잡도의 개념을 소개하고 2016~2020년 기출문제 유형 분석과 개발자 취업 가이드를 소개한다. 파트 2에서 본격적인 내용이 시작되는데, 다음과 같이 체계적으로 유형을 챕터별로 분류해 놓았다.

그리디, 구현, DFS/BFS, 정렬, 이진 탐색, 다이나믹 프로그래밍, 최단 경로, 그래프 이론

파트 3에서는 파트 2에서 자세히 설명하고 응용 문제까지 풀어본 유형들을, 같은 순서대로 기출 문제를 풀 수 있게 배치했다.

인상적인 점은 책에서는 파이썬 코드로 설명하지만, 깃허브로 C++, Java 코드도 제공하고 있으며, 유튜브 강의에서는 세 코드를 모두 설명한다는 것이다. 파이썬과 C++은 워낙 코딩테스트에 자주 쓰이기 때문에 당연하다고 볼 수 있지만, 비전공자들이 국비교육으로 가장 흔히 접하는 자바 코드를 함께 제공한다는 점에서 더욱 이 포스팅에 오를 자격이 있다고 본다. (물론 나는 강의에서 자바코드가 나오면 바로 스킵한다


결과값이 변화하는 모든 단계를 보여주며 설명한다


간결 명료한 코드가 아름답지 않은가?


물론 알고리즘 문제 푸는 것이 아직 낯선 이들에게는 아직 보기에 빠른 책일 수 있으며, 이미 익숙한 이들에게는 복습 이상의 의미가 없을 수 있다. 특히 전자에 해당한다면 백준 단계별로 풀어보기를 유형별로 몇 문제씩 풀어보며 경험치를 쌓는 것을 추천한다. 또한 가볍고 쉬운 책을 먼저 보고 싶다면 <그림으로 정리한 알고리즘과 자료구조>라는 책도 추천한다. (책 정보 더 보기)

또 하나 더 아쉬운 점은 기출문제들이 저작권 때문인지 몰라도 삼성전자와 카카오 위주로만 되어 있다는 것이다. 개념 설명이 필요 없고 문제만 풀고 싶은 분들은 삼성SW 홈페이지와 프로그래머스에서 각각 문제를 볼 수 있으니 책을 구입할 필요는 없을 것이다.


"취업만을 위한 쪽집게식 교재일까 우려했는데 (...) 기우였음을 깨달았다. 다양한 문제에 대한 소개와 해법, 기초 이론을 입문자도 이해하기 쉽게 설명해서 이 책 한 권이면 제대로 공부할 수 있으리라는 확신이 생겼기 때문이다."
- 김상우, 쏘카 데이터본부장

댓글 쓰기

4 댓글

  1. 이해하는데 무척 도움이 되것네요~~~~~~~

    답글삭제
  2. 비전공생으로 어떤 방향으로 전공생의 공부를 할 수 있을까 고민이 많았는데, 글을 읽고, 많은 도움이 되었습니다. CODE부터 하나하나씩 진행해나가야겠네요. 정말 감사합니다 ��

    답글삭제
    답글
    1. 도움이 되었다니 기쁘네요 :)
      화이팅입니다!

      삭제