본문 바로가기
[Review]/Book

[도서 리뷰] 나의 첫 알고리즘+자료구조 with 파이썬

by 해피빈이 2023. 11. 20.

> 진행에 앞서

요즘은 개발자를 채용하는 데 있어서 좀 더 다양한 방법을 활용하다보니 필요성이 약해진듯 보이지만, 여전히 그 방법중에서는 가장 많이 회자되는 한 가지 방법이 있다. 바로 알고리즘 테스트(a.k.a 코딩테스트)이다.

코딩테스트로서의 의미로도 중요하지만, 알고리즘은 개발자라면 현장에서도 중요하게 사용되는 편이다.

단순 복사와 붙여넣기만 진행한다면 큰 의미가 없겠지만, 많은 시간 개발 일을 하다보면 다양한 도전에 맞닥뜨리게 되고, 그 도전을 잘 처리하기위한 방법으로 알고리즘을 사용하는 순간이 필요하기 때문이다.

또한, 알고리즘보다 더 빈번하게 사용될 수 있는 요소가 있는데 '자료구조'가 그것이다.

고급 언어를 사용하는 입장이라면 자료구조를 직접 구현할 일은 거의 없을 것이다. 하지만, 자료구조를 사용하는 일은 매우 많다.

그 자료구조를 의미없이 사용한다면 효과적이지 않을 뿐 아니라, 좀 더 최적의 자료구조를 사용하려고 생각하지도 않을 것이다.

그렇기 때문에 자료구조는 필히 알아야 할 지식이다.

 

컴퓨터 관련 전공자도 예외는 아니지만 비전공자는 이러한 부분에 취약할 가능성이 높다.

시간이 부족하다면 일단 실무 위주로 공부해서 취업하는 경우가 많기 때문이다.

가끔 깊이가 부족함을 느끼는 순간이 있는데, 그러한 것은 이런 기본적인 부분을 잘 쌓아놓지 않아서라고 생각한다.

그래서 알고리즘과 자료구조를 잘 학습해 놓고, 그것을 주기적으로 리마인드하는 습관이 필요하다고 생각한다.

그런 학습을 도와줄 수 있는 책이 될 것 같아 리뷰를 시작하였다.

 

> 책에 대한 간단한 정보

앞 표지

파이썬 도화지를 들고, 순서도(알고리즘)에 서 있으며, 자료구조를 살펴보는 모습에서 제목을 잘 표현했다고 생각하였다.

물론 이 책이 첫 알고리즘을 학습하는 데에 초점을 맞추었다는 점에서는 내용이 적절하냐는 의문이 어느정도 들기는 했지만, 최소한 그것을 추구하고 있다는 생각이 들어서 그런 관점에서 흥미롭게 보게 되었다.

 

> 인상깊은 부분들

알고리즘의 정의

알고리즘이 어떤 것인지 먼저 알려주며 시작한다.

으례 당연한 것인양 생각하기 쉬운 것이 바로 정의에 대한 부분인데, 그러한 부분을 잘 짚어준다.

물론 한 문장으로 정의될 수 없는 것이기에 예시와 종류를 나열하며 여러 문장과 문단으로 걸쳐 설명하고 있다.

그 중 간결하게 요약한 도널드 커누스의 정의가 와 닿았다.

이것을 세 단어로 요약하면 명확함, 효율성, 유한함이라 하며, 추가로 정확성을 얹는다.

입력을 기반으로 출력을 생성하는 명확하고, 효율적이며 유한한 프로세스
- 도널드 커누스(Donald Knuth) -

시간 복잡도 그래프

알고리즘을 작성할 때 빼 놓을 수 없는 개념이 바로 시간복잡도에 대한 개념이다.

흔히 BigO라고 부르는 개념인데, 이것을 단순히 나열해서 A=B이다로 정의하기 보다는, 상수시간부터 시작하여 지수시간까지 각각의 시간에 해당하는 알고리즘은 어떤 것이 있는지 예시를 들어가며 설명하고 있다.

그것을 한 눈에 보기 편하도록 그래프도 제공하고 있다.

또한 알고리즘을 평가할 때에는 Worst-case(BigO) 뿐 아니라 Best-case, Average-case도 고려해야 한다고 말하고 있다.

실제로 이것이 실무에서는 중요하기 때문이다. 아주 가끔 존재할 수 있는 Worst-case를 피하려고 오히려 Best-case에서 효율적으로 작동할 수 있는 코드를 작성하지 않는다면 그것도 가장 좋은 코드라고 볼 수는 없기 때문이다.

 

용어설명

인상적인 부분 중 하나였는데, 각 장을 마칠 때마다 그 장에서 사용한 용어를 다시 잘 요약해두었다.

물론 요약만 보고는 잘 이해가지는 않겠지만, 그러면 앞의 내용을 곱씹어보면서 이해하라는 의미로 보면 된다.

 

명언 - 알버트 아인슈타인

각 챕터마다 명사의 명언이 담겨있다.

수학이 어렵다고 너무 걱정할 필요가 없다고 한다. 본인도 어렵다면서.(하지만 그의 수학이 일반인의 수학과는 다르다는 것은 함정)

그 외에도 한 번씩 생각해볼만한 명언들이 각 챕터에 있는데, 흥미있게 볼 수 있었다.

어떤 내용들이 있는지는 책에서 확인하면 좋을 듯 하다.

 

마지막에 있는 당부

아무래도 이 책은 기술면접을 앞두고 있는 취업준비생 혹은 이직준비하는 사람들에게 많이 읽힐것으로 보고 이런 내용을 담은 것으로 보인다. 사실 이 책에서 말하고 있듯이 매일 최소 몇 시간 이상을 리트코드(leetcode)를 풀며 보낼 수는 없는 것이 현실이겠지만, 최소 한 문제 정도만 목표를 잡고 풀어보는 것은 뇌를 말랑하게 하는 데 도움을 주기 때문에 그정도는 권할 수 있다고 생각한다.

그 외에도 https://selftaught.blog 사이트 운영자라며 이 사이트를 방문해서 소통하고 싶다고 한다. 그래도 애프터서비스는 확실한 책이라는 생각이 들었다.

 

뒷표지

이 책 원 저자의 이력이 독특하다. 정치학 전공자라니.

그래도 그가 그런 이력이기에 좀 더 쉽게 썼을 것이라는 기대는 당연히 할 수 있었다.

 

 

> 괜찮은 부분

1. 최대한 쉬운 문체로 쓰여졌다.

알고리즘은 본래 쉽게 접근하나 팔수록 어려운 것이다. 하지만, 이 책은 쉽게 접근하는 그 부분에 집중하였다. 물론 이 책을 다 본다고 해서 알고리즘을 마스터할 수 있는 수준에 이르기는 어렵지만, 최소한 어느정도 흥미유발과 더 깊은 공부를 해야겠다는 의지를 다질 수 있도록 도와주는 책이라고 생각한다. 그것의 가장 큰 이유는 바로 쉬운 문체에 있다고 생각한다.

 

2. 책이 얇다.

책이 생각보다 얇다. 알고리즘 책을 여럿 보았지만, 이처럼 얇은 책은 매우 드물다. 그래서 책의 내용이 부실하냐면 또 그런것은 아니다. 다만 너무 깊은 부분까지 접근하지 않았을 뿐이다. 이 책은 온전히 각 알고리즘과 자료구조의 에센셜한 부분을 말하는 것으로 만족하고 있다. 그렇다고 이론만 말한것은 아니지만, 선택과 집중을 잘 했다고 생각한다. 만약 누군가를 가르치고 싶다면, 이런 책을 교재로 하고, 보강하고 싶은 내용은 별도로 준비하여 가르치는 것도 괜찮은 조합이 될 것이라고 생각이 들었다.

 

> 아쉬운 부분

1. 실습에 친절한 책은 아니다.

파이썬을 사용하여 설명을 곁들였지만, 파이썬의 실행 자체에 집중한 책은 아니다. 그래서 파이썬을 어떻게 설치하면 되는 것인지, 파이썬에서 해당 코드를 어떻게 작성하고 어떻게 실행하면 원하는 결과를 얻을 수 있는 것인지 이 책으로는 알기 어렵다. 이정도는 알아서 공부할 수 있어야 한다고 말하고 있는 것으로 들린다. 이정도는 별 일은 아니지만, 파이썬을 접하지 않은 사람이라면 아무래도 눈으로만 코드를 읽을 가능성이 높으므로 이 부분은 아쉽기도 하였다.

 

2. 서술형의 설명이 많다.

코드와 일부 도표를 제외하고는 대부분 서술하듯이 설명이 되어있다. 당연히 설명이기에 서술로 하는 것은 맞지만, 그 서술의 길이가 길다고 생각한다. 문단으로 끊어주는 부분이 적절하게 들어갔다고 하기에는 그 텀이 길게 느껴져서 집중력이 높아야 이 책을 제대로 이해하며 읽을 수 있다고 생각한다.

 

> 추천 독자

개발자 혹은 데이터 엔지니어 등의 취업을 준비하는 학생

이직을 준비하는 개발자

수학적 지식을 학습하고 싶은 학생 및 일반인

알고리즘 및 자료구조를 가르쳐야 하는 교수자 및 그의 학생

 

> 개인적인 평점

- 가격: 10 / 10

- 내용: 8 / 10

- 디자인: 7 / 10

- 구성: 7 / 10

 

> 정보

저자: 코리 알트호프

옮긴이: 한선용

감수자: 박상현

출판사: 한빛미디어

가격: 21,000원

전체 페이지: 292페이지

 

** 한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

반응형

댓글