메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

Hello Coding 그림으로 개념을 이해하는 알고리즘

한빛미디어

번역서

판매중

  • 저자 : 아디트야 바르가바
  • 번역 : 김도형
  • 출간 : 2017-04-01
  • 페이지 : 328 쪽
  • ISBN : 9788968483547
  • 물류코드 :2354
  • 초급 초중급 중급 중고급 고급
4.6점 (20명)
좋아요 : 76

프로그래밍 세계로 초대하는 

알고리즘 입문서

 

알고리즘은 전공자에게도 어렵게 느껴지죠?

이 책은 중학교 수준의 수학 지식만 있으면 이해할 수 있도록 쉽게 설명되어 있습니다.

알고리즘이 지루하고 어렵다는 편견을 깨기 위해 알기 쉽게 설명된 그림과 파이썬을 기반으로 한 친숙한 예제를 사용했습니다.

전공자는 물론 비전공자까지도 알고리즘의 흥미로운 논리 세계로 안내할 것입니다. 

 

 

『Hello Coding』 시리즈 소개

 

Hello Coding?

프로그래밍이 처음인가요?

배운 적은 있지만, 재미를 느끼지 못했다고요?

그래서 『Hello Coding』 시리즈를 준비했습니다!

이 시리즈의 목표는 ‘쉽고’, ‘재미있게’, ‘끝까지’ 책을 읽는 데 있습니다.

이 책 한 권으로 프로그래밍의 고수가 될 수는 없겠지만, 프로그래밍의 재미는 확실하게 느낄 수 있을 겁니다.

이제, 시작해 볼까요?

 

누가 이 책을 읽어야 하나요?

-. 프로그래밍을 전혀 경험해보지 못한 비전공자 (중/고등학생, 대학생, 일반인)

-. 알고리즘의 기본기를 익히고자 하는 사람

-. 프로그래밍에 관심이 있는 이공계 학생

 

혼자 공부하다 궁금증이 생겼다면?

책을 열심히 봤는데도 이해가 되지 않는다고요?

프로그래밍도 처음인데, 주변에 물어볼 사람도 없다면 <Hello Coding> 네이버 카페를 찾아주세요.

입문자도 쉽게 배울 수 있도록 Q&A 게시판을 운영합니다. 언제든지 질문하세요!

 

<Hello Coding> 네이버 카페

http://cafe.naver.com/codinghello

 

 

추천사

“이 책은 불가능한 일을 가능하게 했습니다. 수학이 즐겁고, 쉬워졌습니다.”

- 샌더 로셀, COAS 소프트웨어 시스템즈

 

“재미있는 소설을 읽듯이 알고리즘을 배우고 싶다면, 지금 이 책을 선택하세요.”

- 상카 라마나단, IBM 애널리틱스

 

Hello Coding상세페이지(733px).jpg

 

아디트야 바르가바 저자

아디트야 바르가바

(Aditya Y. Bhargava)

아디트야 바르가바는 온라인에서 핸드메이드 상품을 판매하는 엣시(Etsy)의 소프트웨어 엔지니어이다. 시카고 대학에서 전산학 석사를 취득하였으며, adit.io에서 인기있는 기술 블로그를 운영하고 있다.

김도형 역자

김도형

KAIST에서 자동 제어와 신호 처리를 전공, 박사 학위를 받았다. 박사 학위 과정 중에 처음 파이썬을 접했다. 이후 틈나는 대로 파이썬을 활용했으며 LG전자와 대우증권에서 파생상품 프라이싱 시스템, 금융 정보 모니터링 시스템, 알고리즘 매매 시스템 등을 파이썬으로 구현했다. 현재는 파이썬 기반의 금융 분석, 최적 집행용 소프트웨어와 서비스를 만들고 있으며, 금융 분석 분야에서 파이썬이 더 널리 퍼질 수 있게 도울 수 있는 징검다리가 되고자 강의를 하고 사이트를 꾸리고 있다.

Chapter 1 알고리즘의 소개 

___01 들어가는 글 

______성능에 대해 알아야 하는 것들 

______문제를 풀기 위해 알아야 하는 것들 

___02 이진 탐색 

______더 좋은 탐색 방법 

______실행 시간 

___03 빅오 표기법 

______알고리즘 실행 시간이 증가하는 속도가 다르다면? 

______여러 가지 빅오 실행 시간 살펴보기 

______최악의 실행 시간을 나타내는 빅오 표기법 

______많이 사용하는 빅오 실행 시간의 예 

______외판원 문제 

<연습문제> 

 

 

Chapter 2 선택 정렬

___01 메모리가 동작하는 방법 

___02 배열과 연결 리스트 

______연결 리스트 

______배열 

______용어 

______리스트의 가운데에 삽입하기 

______삭제하기 

___03 선택 정렬 

______예제 코드

<연습문제> 

 

 

chapter 3 재귀

___01 시작하기에 앞서 

___02 재귀 

___03 기본 단계와 재귀 단계 

___04 스택 

______호출 스택 

______재귀 함수에서 호출 스택 사용 

<연습문제> 

 

 

chapter 4 퀵 정렬

___01 분할 정복 

___02 퀵 정렬 

___03 빅오 표기법 복습 

______병합 정렬과 퀵 정렬 비교 

______평균적인 경우와 최악의 경우 비교 

<연습문제> 

 

 

chapter 5 해시 테이블

___01 해시 함수의 소개 

___02 해시 함수 

___03 해시 테이블을 사용하는 예 

______해시 테이블로 조회하기 

______중복된 항목을 방지하기 

______해시 테이블을 캐시로 사용하기 

______해시 테이블의 장점 

___04 충돌 

___05 성능 

______사용률 

______좋은 해시 함수란 

<연습문제> 

 

 

chapter 6 너비 우선 탐색

___01 시작하기에 앞서 

___02 그래프의 소개 

______그래프란 무엇인가? 

___03 너비 우선 탐색 

______최단 경로 찾기 

______큐 

___04 그래프의 구현 

___05 알고리즘의 구현 

______실행 시간 

<연습문제> 

 

 

chapter 7 다익스트라 알고리즘

___01 너비 우선 탐색 vs 다익스트라 알고리즘 

___02 다익스트라 알고리즘 

___03 용어 설명 

___04 다익스트라 알고리즘을 사용한 물물 교환 

___05 간선의 가중치가 음수인 경우 

___06 구현 

<연습문제> 

 

 

chapter 8 탐욕 알고리즘

___01 수업 시간표 짜기 문제 

___02 배낭 채우기 문제 

___03 집합 커버링 문제 

______근사 알고리즘 

___04 NP-완전 문제 

______단계별로 풀어보는 외판원 문제 

______어떤 문제가 NP-완전 문제인지 알 수 있는 방법은? 

<연습문제> 

 

 

chapter 9 동적 프로그래밍

___01 배낭 채우기 문제 

______단순한 방법 

______동적 프로그래밍 

___02 배낭 채우기 문제에서 자주 하는 질문 

______만약 물건이 추가되면 어떻게 되나요? 

______만약 행의 순서가 바뀌면 어떻게 되나요? 

______격자를 행 방향이 아니라 열 방향으로 채워도 되나요? 

______만약 더 작은 물건을 추가하면 어떻게 되나요? 

______물건의 일부만 훔칠 수도 있나요? 

______여행 일정 최적화 문제 

______서로 의존적인 물건을 다루는 방법 

______하위 배낭이 두 개 이상인 경우도 있을 수 있나요? 

______배낭을 완전히 채우지 못하는 경우도 있나요? 

___03 최장 공통 부분 문자열 

______격자 만들기 

______격자 채우기 

______해답 

______최장 공통 부분열 

______최장 공통 부분열 문제의 해답 

<연습문제> 

 

 

chapter 10 KNN 알고리즘

___01 오렌지와 자몽 분류하기 

___02 추천 시스템 만들기 

______특징 추출 

______회귀 분석 

______좋은 특징 고르기 

___03 머신러닝의 소개 

______OCR 

______스팸 필터 만들기 

______주식 시장 예측하기 

<연습문제> 

 

 

chapter 11 더 공부해야 할 것

___01 트리 

___02 역 인덱스 

___03 퓨리에 변환 

___04 병렬 알고리즘 

___05 맵리듀스 

______분산 알고리즘이 유용한 이유는? 

______맵 함수 

______리듀스 함수 

___06 블룸 필터와 하이퍼로그로그 

______블룸 필터 

______하이퍼로그로그 

___07 SHA 알고리즘 

______파일 비교 

______패스워드 확인 

___08 지역 민감 해싱 

___09 디피-헬만 키 교환 

___10 선형 프로그래밍 

___11 에필로그 

이름만 들어도 어려운 알고리즘을

설명과 그림을 함께 보여주니, 초보자도 쉽게 이해하기 쉬운 것 같습니다.

 

 

학교다니면서 들었던 수업중 가장 힘들었던 수업을 손에 꼽으라면 단연 알고리즘 수업이라고 말하고싶다. 왜 어렵고 힘들었을까 생각해보니 교수님은 완벽하게 알고 있고, 그걸 설명하시기에 강의 중 생략되는 부분도 많았던 것 같다.

그래서 시험기간에 친구들과 같이 공부할 때는 알고리즘을 하나씩 맡고 다른사람에게 설명할 수 있을정도로 쉽게 정리하는 연습을 많이 했었다. 그 연습을 할 때는 철수/영희 또는 앨리스와 밥처럼 가상의 인물을 만들어서 스토리텔링했다.(앨리스와 밥은 정보보호 도서에서 등장하는 단골 주인공 : https://ko.wikipedia.org/wiki/%EC%95%A8%EB%A6%AC%EC%8A%A4%EC%99%80_%EB%B0%A5 )

 

 

Hello Coding 그림으로 개념을 이해하는 알고리즘을 처음 배달받았을 때 친숙함이 느껴졌다. 여러 알고리즘들을 그림으로 나타내고, 상황극을 통해 전달하고 있다. 서술형/요약형은 독자의 취향에 많이 영향을 받는다. 필요한 부분만 빠르게 훑어보고 싶은 사람에게는 장황하고 불필요한 내용이 많다고 느껴질 수도 있다. 그렇기에 이 책은 알고리즘을 어느정도 알고있는 사람보다는 이제 알고리즘을 시작하는 독자에게 적합할 것 같다.

 

 

‘알고리즘'이라는 분야의 특성상 처음부터 끝까지 하나의 이야기로 이어지기 어렵다. Hello Coding 그림으로 개념을 이해하는 알고리즘도 책의 목차에 나온것처럼 시간표기법 / 리스트 / 재귀 / 정렬 / 해시 / 탐색 / 그리고 동적 프로그래밍, 탐욕알고리즘을 담고있다. 

 

이게 끝이 아니다. 이 책만이 가지는 차별점이 있다. 머신러닝에서 사용되는 KNN알고리즘, 통계쪽(네트워크쪽)을 공부하면 사용하게 되는 퓨리에 변환 알고리즘뿐만아니라 요즘 뜨고있는 분야에서 사용되는 알고리즘들도 담고 있다. 

 

내가 가지고 있던 책들 중 사전처럼 바로 찾아 쓰는 알고리즘과 같이 읽을때 더 좋은 것 같다. 알고리즘에 대해 요약된 정보는 ‘사전처럼 바로 찾아 쓰는 알고리즘'으로 찾아보고 Hello Coding 그림으로 개념을 이해하는 알고리즘으로는 머릿속에 되뇌이고, 다른사람들에게도 설명해줄 수 있을정도로 꼼꼼하게 공부했다. 

추천대상독자 : 알고리즘을 처음 공부하는 전공자/비전공자 모두

 

#알고리즘 #Algorithm #Hello Coding 그림으로 개념을 이해하는 알고리즘
#한빛미디어

책을 덮고 나니, 전공으로 알고리즘을 배우던 시절에 이 책이 있었다면 얼마나 좋았을까 하는 생각부터 들었다. 그만큼 알고리즘이란 개념을 쉽게 알려 주는 입문서다. 컴퓨터공학을 전공하게 된 대학생이라면 알고리즘 강좌를 꼭 들어야 할 텐데, 학기 전 방학이면 넉넉히 읽겠고, 수강신청한 다음에 읽기 시작했다 해도 중간고사 전에 실습까지 하며 완독할 만하다.

 

Hello Coding 그림으로 개념을 이해하는 알고리즘.jpg

 

 

입문서의 입문서라고 해도 좋겠다. 다만 이 책이 다루는 범위가 작다기보다는 전공서적으로 쓰이는 책들의 수준이 학부생을 잡던 수준이다. 교수님들도 대개 스스로 잘 아는 사람들이지 멘붕에 빠진 학생들을 잘 가르치는 사람들이 아닌 때가 많기에 이 책은 소중하다.

 

전공교재의 연습문제와는 확연히 다르게 이 책의 연습문제는 해설이 친절하다. 가족여행을 하며 짬짬이 읽으면서도 코딩을 해야 하는 문제 외에는 책 내용을 되새기면서 풀 수 있는 수준이다. 아예 연습문제 해답에도 책갈피를 두고 빠짐 없이 재미있게 풀었다.

 

Hello Coding 그림으로 개념을 이해하는 알고리즘.PNG

 

Python으로 코딩해야 하는 연습문제가 있지만 파이썬을 모른다고 해도 큰 지장은 없다. 대개의 로직은 pseudocode 정도로서 복잡하지 않게 보이려고 저자가 고심한 흔적이 보인다. 앞서도 입문서의 입문서라고 얘기했듯이 보통 전공서적에 나온 예제 소스는 개인적으로 참 이해하기가 힘들었는데, 이 책의 예제 소스는 보기가 편하다. 길게 쓰지도 않았는데 각 알고리즘을 구현해 낸다. 정렬 같은 거야 그렇다 치지만 다익스트라 알고리즘 같은 것도 소스가 길지 않은 게 신기했다. Python의 특징인지 저자의 내공인지는 잘 모르겠다.

 

이 책은 코딩에 대한 감이 떨어진 IT 종사자들에게도 좋다고 본다. 빅데이터나 인공지능 같이 유행하는 IT 주제에 대해 고객이 물었을 때, 개념 설명은 친절하게 해주다가 더 자세히 알려면 이런 저런 알고리즘에 대한 기반지식을 알아야 한다고 으쓱해 하며 얘기할 수 있달까?

 

입문자에게도 마찬가지다. 알고리즘 강좌를 들을 때, 대체 어디에 쓰이는 건지에 대해서는 잘 이해하지 못했는데, 이건 게임에 쓰이고 저건 빅데이터 기술이고 상품 추천에는 저런 게 쓰인다는 배경설명을 보고 나면 머리 골치 아플 알고리즘을 배우는 데에 보람이 생길 것이다.

 

이 책의 마지막 장은 IT 업계에서 길게는 수십 년 이상 사용한 알고리즘부터 빅데이터 플랫폼에 주로 쓰이는 Hadoop에 쓰이는 알고리즘, 대형 웹 사이트에서 성능 향상을 위해 쓰는 알고리즘 등을 거쳐 산업현장의 최적화에 쓰는 알고리즘까지 흥미로운 도전과제를 던지며 끝난다. 심심할 일은 없는 세계에 온 걸 환영한다는 의미로도 보였다.

 

신에게 되뇌인지도 벌써 오랜시간이 흘렀습니다. 하지만 실행이 결심을 그동안 앞서지 못했습니다.MS사의 스튜디오도 설치해서 조금 배우다가 만지도 과거의 이야기가 되었네요. 코딩을 배우는 건 그래서 저의 밀린 숙제와도 같았습니다. 

 

중요한 질문을 스스로에게 해보았습니다. 나는 왜 코딩을 배우려고 하는가? 앞으로 프로그래밍이 새로운 언어가 되어서 미리 대비를 하려고? 아니면 프로그래밍을 본격적으로 해보려고? 그것도 아니면 코딩을 통해서 언젠가는 창업에 도전해보려고? 커리어 상의 도움이 되고 싶어서? 기술용어를 이해하고 싶어서? 결론적으로는 이 모든게 정답입니다. 과거와는 달리 앞으로의 세대들은 외국어와 함께 코딩과 알고리즘 체계만 이해하면 언어의 장벽을 넘는 새로운 커뮤니티를 구축할 수 있다고 믿기 때문이고, 제가 사랑하는 취미와 관련된 애플리케이션을 개발할 준비를 하고 있고, 그것들이 완료되면 돈을 떠나서 새로운 서비스를 제공하고 싶고, 에반젤리스트(Evangelist)가 되어 기술과 마케팅을 연결하려는 커리어 비전을 갖고 있기도 하거든요. 그런데 문제가 있네요. 

 

엇을 하던지 혼자 하는것은 쉽지 않은 법입니다. 특히 실용적인 기술이 필요한 경우는 더더욱 그렇습니다. 코딩을 배워보려고 학원과 각종 온라인 아카데미를 알아보고 무료 강의를 하는 Mook사이트도 보았는데, 세상에 공짜는 없습니다. 시간과 노력이 필요한 법이죠. 제일 편리하고 효과적인 방법은 결국 코딩에 대한, 저처럼 코딩과 알고리즘 초보를 위한 서적을 찾는 방법입니다. 책과 함께하면 언제 어디서나 이동중에서도 지식을 확대하고 의문을 풀어가면서 '자기화'할 수 있기때문입니다. 그리고 고민하던차에 나타난 구원같은 책이 있으니 바로 <Hello Coding 그림으로 이해하는 알고리즘> 이 그것입니다.

 

처 음에는 제목이 왜 이리긴지 조금 당황했는데 책을 펼쳐보니 이해가 되더군요. 결국 초보자에게 코딩을 이해시키기 위해서는 수하적 공식과 알고리즘 체계가 아니라, 결국은 '이미지'를 통해 돕는게 가장 효과적이니까요. 저처럼 그림을 좋아하는 사람에게는 정말 딱이지요. 본 서적인 인도출신으로 추정되는 엔지니어가 쓴 책인데. 단순한 개념만 설명하는 것에 그쳐 코딩의 '코'짜도 모르는 그냥 문맹이 아니고, 중학교 수학정도를 이해할 수 있는 사람들을 위해 쓴 입문서 중의 입문서라고 할 수 있습니다. 공학계열을 기반으로 하지 않은 사람들을 위해서는 굉장히 반가운 서적이지요. 

<Hello Coding 그림으로 이해하는 알고리즘> 은 단순히 코딩의 기초와 알고리즘을 소개하는 것에 끝나지 않아 더욱 반갑습니다. 책을 열자마자 '이 책 이후에 보면 좋은 책'들을 통해 기초를 벗어난 독자를 위해 한걸음 나아갈 수 있는 방향성을 제시하더군요. 그것이 저로서는 무척이나 고마웠습니다. 왠지 길을 잃지 않고 더욱더 정진할 수 있다는 느낌을 주니까요. 하지만 이것은 이후의 얘기니까 이제 <Hello Coding 그림으로 이해하는 알고리즘>의 먼저 보고 판단해도 늦지 않을 것 같습니다.

 

<Hello Coding 그림으로 이해하는 알고리즘>은 구성이 굉장히 체계적입니다. 일단 그림을 통한 설명이 있고 이를 쉽게 잊지 않기 위해 연습문제를 제공합니다. 그리고 관련된 Note를 통해 보충설명과 소스코드를 제공합니다. 완전체란 책이라면 과장일까요?

 

<Hello Coding 그림으로 이해하는 알고리즘>을 보면 정말 코딩초보자들이 본 책을 구매하도록 신경썼다는 생각이 듭니다. 책을 읽으면서 드는 생각은 아 코딩을 제대로 공부해봐야겠다,그리고 이 책을 소장해야 겠다는 생각이 들게끔 합니다. 정말 여러가지 무기를 가지고 있는 책입니다. 특별한 점은 아래와 같습니다. 

첫번째로 명확하고 이해하기 쉬운 그림입니다. 단순한 사진이나 도표가 들어간게 아니라, 손그림처럼 쉽게 이해할 수 있도록 다양한 그림을 제공합니다. 최대한 기술적인 용어를 빼고 손쉬운 말들을 썼기 때문에 작가가 본 서적을 집필하는데 각고의 노력을 했다고 느껴질 정도니까요. 2진법과 기초 배열에 대한 것도 초등학교 수준이면 이해할 수 있도록 만들었습니다. 

 

두번째로는 수많은 Tip입니다. 이미 작가가 코딩을 공부하면서 수많은 시행착오와 혼란이 있었던것을 알고 있기에 많은 Tip들은 본 서적을 따라하면서 어려운 부분을 해결해주고 다른 지식을 얹어주는 일석 이조의 효과를 갖게 만듭니다.또한 앞장에서 배운 내용들을 단순 요약이 아니라 핵심 키워드와 응용되는 방식, 그리고 상세한 부가 설명을 통해 이해하는데 도움을 넘어 해결책을 제시합니다. 

 

세번째로는 연습문제, 게다가 풀이까지 있는 세심함입니다. 단순한 실용코딩의 기초 소개를 넘어, 실제 독자들이 학습할 수 있는 연습문제를 통해, 소개에 그치지 않고 이를 활용할 수 있는 소스를 제공한다는 점. 그리고 상당수 실용서나 참고서는 문제만 있고 풀이는 놓지 않아, 결국 작가와 출판사 독자와의 소통이 어려운 경우가 많은데, <Hello Coding 그림으로 이해하는 알고리즘>은 이런 점을 충분히 알고 독자들을 위한 풀이까지 반영하니 배우는 입장에서 참 편리합니다.

 

네번째는 풍부한 용어설명과 색인입니다. 정말 알기쉬운 용어설명이 있고, 수많은 찾아보기는 코딩을 하면서 실수나 어려운 점들을 보충해줍니다. 사소하지만 가장 기본적인 것입니다. 

 

마지막으로 교재에 사용된 모든 소스코드를 내려받을 수 있는 특별함입니다. 코딩에 있어 가장 중요한 부분이기도 하겠지요. 소스코드를 다운로드 받아 언제든 수정보완을 할 수 있는 것은 분명이 시간을 절약하고 코딩의 바다에 빠지게 하는 유용한 도구가 되기 때무닙니다. <Hello Coding 그림으로 이해하는 알고리즘>은 소스코딩 제공 하나만으로 기존 코딩서적과 차별화합니다. 

 

거 <3D 프린터 101>과 마찬가지로 <Hello Coding 그림으로 이해하는 알고리즘>에서도 저는 별다른 단점을 찾지 못했습니다. 사실 모든 서적이 완벽할 수는 없습니다. 오탈자나 내용의 오류나 보완점이 있을수 있지요. 그런데  <Hello Coding 그림으로 이해하는 알고리즘>의 경우 국내의 출간 출판사에서 문제를 보고서 하단의 사진과 같이 직접 답변을 달아 이해를 시켜줍니다. 완벽한 서적은 없어도 완벽을 향한 노력이 돋보이기 때문에 그리고 위에서 보듯이 본 서적이후의 길과 방향을 제시하기 때문에 그 노력과 태도만으로 출판사와 작가의 정성이 느껴집니다. 강력히 추천하고 싶습니다.

 

 

천할수 밖에 없는 많은 이유가  <Hello Coding 그림으로 이해하는 알고리즘>은 가지고 있습니다. 본 서적의 타겟층은 명확히 코딩의 '코'도 모르는 독자층일 겁니다. 하지만 코딩을 어느정도 하시는 분들고 충분히 추천할 만한 요소가 가득 있습니다. 많은 실용서를 보았지만 아직까지  <Hello Coding 그림으로 이해하는 알고리즘>만큼 독자의 가려운 부분을 긁어주는 실용서를 본 적은 없네요. 어려운 부분을 쉽게 설명하고, 독자와 출판사/작가와의 소통을 하고, 그리고 서적의 오류나 수정부분을 지속적으로 보완하는 서적은 국내에도 별로 없을 테니까요.  

 

<Hello Coding 그림으로 이해하는 알고리즘>은 차별화 부분이 명확해서 코딩을 배우려는 모든 분들은 반드시 꼭 읽어봐야할 필독서입니다. 자세한 부분은 아래 사이트를 참고하셔도 됩니다. 바로 서점에서 읽어보셔도 되구요. 저 개인적으로는 본 서적덕분에 코딩에 대한 친근함과 접근성이 확 늘어났음을 부인할 수 없습니다. 참으로 고마운 서적 <Hello Coding 그림으로 이해하는 알고리즘>을 보고 코딩 및 알고리즘과 친해지시길 바랍니다.   

프로그래밍 입문자가 알아야 하는 알고리즘들을 그림을 통해 쉽게 설명한 입문서


사실 C언어만 가지고 20년을 지켜온 입장에서 알고리즘관련 서적을   보았다.

하지만,아직도 이해 못하고 대략적인 개념만 이해하고, 구현은 실패한 부분이 많다.

그래서 조금은  기대를 안고,  책을 읽기 시작했다.

하지만,내가 원했던 결과는 얻을  없었다. (알고리즘 구현을 위한 서적으로는 조금 미흡…)

 

<책 구성>

알고리즘 입문서로서는 충분한 서적이라고 생각한다.

일반적으로 서적이라면, 글이 많아서 읽기가 지루할 수도 있지만,  책은 그림 위주로 구성되어 있어서,

지루하지 않고, 한걸음 한걸음이 쉽고, 흥미진진해 진다.

 

그림을 통해서  단계 단계를 소개하면서 따라가보면서 이해를 쉽게   있다.

 

구현된 코드도 간결하며,  부분에 대한 설명도  되어 있다.

 

옮긴이가 운영하는 카페를 통해서, 궁금한 부분  추가적인 정보를 제공하고 있다.

http://cafe.naver.com/codinghello

 

 

<아쉬운 >

 책에서 사용한 언어는 파이썬(Python)이며, C언어에서는 직접 모든 기능을 구현해야 하지만,

파이썬에서 제공하는 함수들도 존재하고 있다. 그래서  부분은 직접적인 구현을 피하고,

최종적인 알고리즘 동작을 이해하는 데는  쉽게 접근할  있는  하다.

 

예를 들어, “해시 테이블구현에  관심이 있었던 나로서는 실망이었다.

해시테이블이라는 이론은 충분히 이해하고 있었지만, 구현에 대해서   알고 싶었다.

파이썬에서는 dict()라는 딕셔너리 해시 테이블이 존재한다.

이를 이용하면 그냥 해시 테이블을 이용할  있어서 별도의 구현이 불필요했다.

(많은 아쉬움이….)

 

프로그램을 구성하는 요소 중 크게 2가지를 꼽으라면, 코드와 데이터이며 각각 알고리듬과 자료구조로 연결된다. 이 둘을 알지 못 하고 프로그램을 개발할 수 없고, 개발한 프로그램은 효율성과 제 목적을 벗어난 프로그램이 되기 쉽상이다. 이번에는 '프로그램을 알지 못하는 사람'들 - 프알못 -을 대상으로 쉽게 쓰여진 책(Hello Coding 알고리듬)을 소개하고자 한다.

IMG_20170520_212215.jpgIMG_20170520_212549.jpg

 

이 책은 '그림으로 개념을 이해하는' 이란 부제가 붙어 있다. 알고리듬을 그림으로 설명하고, 문법이 비교적 쉬운 python 코드를 이용하여 구현체(코드)를 보여주기 때문에 전공을 계획하는 신입생과 비전공자들도 쉽게 알고리듬 학습을 시작할 수 있다. 특히, 문제를 해결하기 위해 문제 자체를 단순화하고 핵심 알고리듬을 적용하고, 이 알고리듬이 문제를 처리하는 과정을 단계별로 각각 보임으로써 알고리듬이 동작하는 방식을 이해시킨다.

 

IMG_20170520_211157.jpgIMG_20170520_211238.jpg IMG_20170520_211119.jpg

 

 

특정 알고리듬을 처리하기 위해서는 적절한 자료구조가 필수적이다. 이 책에서는 '배열', '연결리스트'와 같은 기본 자료구조와 이를 이용한 '선택정렬', '스택'과 '재귀', '해쉬 테이블'과 '그래프', '큐'와 '분할정복' 등을 함께 설명하여 알고리듬뿐 아니라 자료 구조까지 함께 고민하도록 훈련시킨다.

이후 구현을 한 줄 단위로 살명하여, 알고리듬이 실제 코드화되는 전 과정을 상세히 설명한다.

 

 

IMG_20170520_211328.jpgIMG_20170520_211334.jpg

 

IMG_20170520_211344.jpgIMG_20170520_211352.jpg

 


기본적인 정렬부터 NP문제와 머신러닝 알고리듬까지 입문서이지만, 아주 간단한 알고리듬 뿐 아니라 최근 경향을 반영하는 내용까지 담았다.


최근 속해 있는 회사에서 신입사원 교육을 진행하고 있는데, 자료 구조와 알고리듬의 선택이 문제의 해결과 효율성에 큰 기준이 되는 것을 새삼 느꼈다. 개발자로써 시작하는 신입사원들에게 읽을 만한 책으로 이 책의 일독을 권하겠다.

요즘은 초등학생도, 문과생도 "코딩"은 다 알고있을 것 같습니다...
어디에서부터 시작되었는지는 모르겠지만 요즘 코딩열풍이 대단하죠!

전 사실 그 코딩 열풍에 굉장히 네거티브하고 언짢았어요
왜냐면 전 그 코딩이 너무 지루하고 어려웠던 공대생이였으까요...
(저는 그 코딩이 어려워 현재 전공을 버리고 기획일을 합니다 ㅋ)

저는 너무나도 어려웠던 그 코딩을 초등학생도 배울 수 있고 너무 쉬운 것처럼 이야기하는 것들이 대해 조금 화가 났었어요,
제가 배운 코딩은 그렇게 쉬운 것이 아닌데 내가 느낀 그 절망감을 초등학생들도 느끼는건 아닐까 오지랖도 있구요^^

하지만, 이 책을 만나고 생각이 조금 달라졌어요
1. 단순히 프로그램을 위한 코딩이 아닌, 생각의 유연함, 사고력을 길러줄 수 있다는 생각
2. 그리고 배우는 방식을 조금만 바꿔도 재미있고 쉽게 이해할 수 있다는 점!!
 

 

단! 이 책의 다른 점이라면, 알고리즘과 실생활의 조합이 정말 좋았다는 것입니다.
"비디오 게임을 만들고 싶다면? 그래프 알고리즘을 이용하여 인공지능 시스템을 만들 수 있다"

이진 탐색 앞에서도 전화번호부에서 번호를 찾는 것을 가정하여 설명해주죠.
그리고 페이스북 로그인 등등
실제 우리 생활에서 알고리즘이 얼마나 필요한지, 그 알고리즘이 어떠한 대단한(?) 일들을 하고 있는지 알게될거예요.

 

 

단순탐색의 경우 __번 / 이진 탐색의 경우 __번
이렇게 독자들이 직접 문제를 풀어볼게 하여 직접 느낄 수있게 해본 점들도 좋았어요.

그리고 다음장에서는 이렇게 바로 비교를 해주니.
아 단순탐색이 얼마나 미련한 방법인지 순식간에 감이 딱! 옵니다.
우리가 왜 알고리즘을 배워야하는지에 대한 이유가 잡히죠.

 

 

개념을 통해 알고리즘을 잘 설명한 점.
이진탐색은 정말 비전공자들도 이해하기 쉬운 개념이잖아요!
그래서 조금 더 어려운 알고리즘을 하나 더 리뷰해보려해요.
이 실제 제가 대학생때, 대체 이게 뭐냐 했던 개념이 잘 잡히지 않던 부분 중 하나였습니다....

 

이렇게 친근한 예제와 그림으로 개념부터 차근차근 배웠다면
지금의 저는 혹시나.. 프로그래머가 되어있지 않을까하는 생각을 잠시나마 해봤어요

제가 배웠던 알고리즘은 너무나도 뻔한 예제와 개념 이해도 없이 바로 프로그램을 짜는데 급급했었거든요.
그러다보니. 다른 프로그램을 짤때도 그래프가 혹은 이진 탐색이 어디에서 어떻게 사용될지 전혀 감을 잡지 못하죠

하지만 이렇게 개념부터 잘잡고 간다면,
프로그램을 하시는 분들은 분명 훌륭한 밑바탕이 될 것 같습니다.

비 전공자들 중에서도 알고리즘, 혹은 코딩이 궁금하신 분들도 어렵지 않게 한번쯤 읽어볼만해요
 
 
 
 

 

 

 

유튜브에서 Hungarian Dance Algorithm 이라고 검색하면 재밌는 동영상이 나온다. 나란히 선 사람들이 헝가리 전통 음악에 맞춰 춤을 추는데, 정렬 알고리즘에 따라 자리를 서로 옮겨간다. 사람들이 이런 시도를 하는 것도 흥미롭지만 얼마나 어려우면 춤으로 가르치려는 생각을 했을까 하는 생각도 든다. 저자 역시 알고리즘을 이해하는데 어려움을 겪었고, 그림을 통해 알고리즘을 설명하는 포스팅을 시작했고, 그것이 이 책이 나오는 계기가 되었다고 한다. 여러 사람이 그러한 것처럼, 나도 이 책을 정말 재미있게 읽었다. 후반부의 어려운 부분은 역시 어렵긴 했지만, 역자의 말처럼 나도 이 책만큼 알고리즘을 재미있게 설명하는 책은 읽어보지 못한 것 같다.

나는 C언어로 자료구조, 알고리즘을 배웠는데 수업 자체와는 별개로 코드의 가독성이 좋지 않아 로직을 이해하는 데에 시간이 더 들었다. 반면에 파이썬으로 구현한 코드를 보면 언어적인 복잡성이 적고 코드가 명료해서 알고리즘 자체에 집중하기에 더 유리하다. 예전에 나온 책 시리즈의 이름처럼 소설처럼 코드가 읽힌다고 느꼈다. 게다가 이해하기 쉽게 그림까지 곁들이니 책을 굉장히 빨리 볼 수 있었다. 책에서 사용하는 자료구조에 대한 설명도 추가적으로 들어가 있으니 알고리즘을 배우고 싶은 누구나 이 책으로 시작할 수 있을 것 같다.

책 곳곳에 좋은 질문/답변이 들어가 있다. 이런 문제들을 그냥 지나치지말고 곰곰히 생각해보면 본인이 얼마나 이해했는지 알 수 있고 또 더 잘 이해할 수 있으니 꼭 풀어보도록 하자. 챕터 마지막에 있는 문제들도 같은 이유로 꼭 풀어봐야 한다. 문제가 그렇게 어렵지 않고 앞에서 배운 내용을 확인하는 정도이니 너무 부담스러워하지 않아도 된다.

동적 프로그래밍같은 어려운 내용은 솔직히 그림으로 봐도 어렵긴 했다. 또 최장 공통 부분 문자열의 경우, 예제코드(자바, 파이썬은 완전한 프로그램이 아님)와 설명의 격자 채움이 달라서 사람들이 헷갈릴 것 같았다. 그래도 동적 프로그래밍을 응용할 수 있는 예제들을 제공하고, 연습문제를 풀어보면서 감을 익힐 수 있었다.

좋은 문제들

저자의 웹사이트를 가보면, 하스켈 및 함수형 프로그래밍의 요소에 대해 설명하는 포스팅을 볼 수 있다. 역시 책에서도 하스켈로 함수형 프로그래밍에 대해서 설명하고 있다. 자바8, C++, Python이 함수형 프로그래밍을 도입하고 스칼라같은 언어가 알려지는 것을 보니 함수형 패러다임이 부상하는 것을 알 수 있다. 나도 스칼라를 사용하면서 느낀 점인데 함수형 언어를 사용하면 코드의 가독성이 더 좋아진다. 그리고 코드가 기존에 비해 짧아져 생산성이 높아지니 한번 살펴봤으면 좋겠다. 해당 페이지의 코드를 자바로 짜면 다음과 같다.

		import java.util.List;
import java.util.Optional;
public class SumFunc { 
// Functional programming 
public Optional<Integer> sum(List<Integer> numbers) { 
return numbers.stream().reduce((a,b) -> a+b);
}
}

reduce() 함수가 두 원소를 더하는 함수를 이용해 최종적으로 리스트의 모든 원소를 더한 하나의 정수값을 리턴하게 된다.

함수형 프로그래밍 소개

깃허브에 들어갔을 때 예제를 여러 언어별로 다 제공하는 줄 알고 대단하다고 생각했는데, 그게 아니라 독자가 참여하여 예제를 커밋할 수 있도록 해둔 것이었다. 얕게나마 오픈소스에 기여하는 경험을 해볼 수 있고, 다른 독자에게 도움이 될 수 있으니 좋은 것 같다. 현재 동적 프로그래밍의 파이썬 예제가 아직 불완전하니 우리들 중 하나가 커밋할 수 있지 않을까?

책에서 조금 아쉬운 점은, KNN에 한 챕터를 할애해 설명을 하면서 예제 코드가 하나도 없었던 점이다. 클러스터링 예제 정도는 실을 수 있을 것 같았다. 그래도 연습문제에서 정규화문제나 샘플수를 설정하는 보편적인 방법을 설명하고 있어서 어플리케이션을 만들 때 참고할 수 있을 것 같다.

정리하면, 알고리즘에 거부감을 가진 사람들이나, 처음 접하는 사람에게 굉장히 좋을 입문서라는 것이다. 오늘 바로 시작하시길!

 #알고리즘 #Algorithm #알고리즘 책 추천 #알고리즘 이해

난 개발자로서 ‘알고리즘'에 대한 마음의 빚을 가지고 있다. 비전공자 출신으로 프로그래밍 공부를 시작할 때 수 많은 전문가들로부터 알고리즘이 정말 중요하다는 이야기를 귀에 못이 박히도록 들었고, 그래서 그만큼 많은 노력을 들여 공부했지만 쉽사리 손에 잡히지는 않았다.

또 알고리즘 공부는 개발자로서의 역량을 증진시키기 위함 뿐만 아니라, 많은 회사들이 개발자의 역량을 테스트할때 알고리즘에 대한 지식과 코딩 능력을 보기때문에 실용적인 목적으로도 꼭 필요하다.

하지만 항상 ‘알고리즘 공부좀 해야지…’ 라고 생각하면서도 ‘그런 어려운건 시간 많이 날 때 시작해야지..’라는 생각 때문에 다음 생이나 되어도 시작할 수 있을지 의문이 들 정도로 기약이 없었다. (공감가는 개발자들이 많을 것이라 확신한다.) 그래서 정해진 날짜 전까지 리뷰를 써야하는 제약이 오히려 좋은 기회가 되었다.


이 책에서 다루는 범위는 꽤나 방대하다. 가장 먼저 Big-O Notation부터 시작함으로써 이 책이 알고리즘을 정석대로 다룬다는 느낌을 준다. 그리고 Array, Linked List를 소개한 후 Selection Sort와 Quick Sort로 Sorting의 기본을 다룬다. 그리고 Recursion에 한챕터를 할애하면서 자연스럽게 Stack이 등장한다. Breadth First Search를 주제로 Graph와 Queue가 함께 등장한다. BFS와 Graph가 나왔으니 Dijkstra Algorithm은 빠질 수 없다. Greedy Algorithm과 NP-Complete 까지 나온다. 그리고 Dynamic Programming은 상당히 많은 양의 챕터로 구성되어있다. 심지어 머신러닝에까지 손을 대서 KNN 을 소개한다. 이것도 모자라서 ‘더 공부해야할 것들' 이란 이름으로 Tree, Furier Transform, Map Reduce, Hyperloglog, SHA, RSA 등까지 다룬다.

이정도면 목차만 봤을땐 자료구조와 알고리즘의 주요 주제가 이 책 한권으로 전부 정리되는듯한 느낌까지 받는다. 이 책 한권이면 그동안의 빚을 다 갚을 수 있는걸까?


전반부의 Big-O Notation, Sorting, Hash 부분까지는 아직 이전에 공부한 내용들이 선명하게 남아있어서 가볍고 빠르게 넘어갔다. 넘어가면서 느낀건 쉬운 내용도 그림과 함께 설명하느라 지나치게 많은 지면을 할애하는건 아닌가 하는 의구심이었다.

후반부의 BFS, Dijkstra 그리고 대망의 Dynamic Programming 을 거치면서 앞의 의구심이 눈녹듯 사라졌다. 이 주제들은 항상 어려워하던 내용이었는데 앞에서 너무 구구절절하다는 느낌이 여기선 굉장히 친절하게 다가왔다. 단순화된 예제로 알고리즘의 진행을 그림으로 보여주니 이미지가 머릿속에 통째로 들어가버린다. 특히 Dynamic Programming은 이 책에서 가장 공들여 작성한 부분이라는 생각이 든다. DP를 어려워하는 모든 사람들에게 이 책을 입문서로 추천해주고싶다.

이 책의 또 다른 셀링 포인트는 더 심화된 내용, 더 꼼꼼한 공부를 원하는 사람들을 위한 세심한 배려가 녹아들어가 있다는 점이다. 왕초보를 위한 입문서격인 이 책에서 모든걸 소개할 수는 없어도 최소한 직접 찾아가며 학습할 수 있도록 각 챕터별로 심화학습이 가능한 키워드를 빠뜨리지 않고 소개해준다.

이마저도 못내 아쉬웠는지 아예 ‘더 공부해야할 것들'이란 챕터를 만들어서 작정하고 키워드만 소개해주기까지 한다. (이 챕터에는 알고리즘에 대한 설명은 거의 없다.) 내용이 빈약하다고 생각할 수도 있지만 가벼운 입문서에 모든 내용을 담을 수는 없다는 점을 고려하면 오히려 저자의 따뜻한 배려라고 느껴진다.


개인적으로 완독 후 가장 큰 수확은 Dynamic Programming에 대한 자신감이다. 알고리즘의 기본적 토대는 이 책으로 이해했으니 이제 빨리 CLRS 책을 펴보고싶다. 알고리즘에 대한 막연한 두려움에 시달리는 개발자들은 주저말고 짧은 시간을 투자하여 이 책을 읽어보기를 추천한다.

이 책은 각 장마다 흥미로운(체감이 가능한, 억지로 만든 사례가 아닌) 문제로 시작한다. 이 문제를 해결하려고 시도하는 과정과 단계에서 자연스럽게 반복하는 것은 어떤 것인지를 짚고, 이를 토대로 파이썬 코드를 보여주며 해설한다.(코드는 정리/요약 용도라서 양이 많지 않음!)

 

책을 읽고 난 다음 감상을 줄여보면, 'HeadFirst 시리즈같은 접근법을 취하고 있으나 훨씬 더 명료하고 깔끔하다.'

이 책의 장점을 꼽아보면 이렇다.

 HeadFirst 시리즈 같다고 한 까닭은 점진적으로, 문제와 시도에서 지식을 유도하고 체감할 수 있도록 하고 있고 이를 위해 삽화도 알맞게 배치되어있다.

 HeadFirst 시리즈에서 유머는 덜었지만 지루함이 없으며, 편집도 깔끔하고 번역도 구어체를 잘 살려 옮겼기에 읽는 사람에게 부담이 없다. 이 부분은 HeadFirst에 거의 반드시 나오는 서양식 유머의 어색함을 덜었다는 점에서 점수를 높게 주고 싶은 부분이다. 덧붙여 지루함을 덜기 위해 무리하게 꾸민 사례나 문제를 가져오지 않으면서도, 설명이 쉽고 속도감이 있어 즐겁게 읽을 수 있었다.

 삽화가 정말로 이해를 많이 도와주기 때문에, 비전공자가 읽어도 무리가 없다는 말이 납득이 된다. 아는 것을 쉽게 설명하기는 정말로 어려운 일인데, 그림이 깔끔한 걸 보면 이해를 잘 전달하기 위해 지은이(와 옮긴이도) 고민이 컸겠구나 싶다.

 설명이 충분하고 코드는 적다. 이것은 이 책을 알고리즘 쿡북처럼 쓸 수 없다는 점에서는 단점이 될 수도 있지만, 알고리즘을 이해하는 목적을 위해서-더구나 비전공자까지 포함한다면-적절한 안배였다고 생각한다.

 각 장마다 돌발퀴즈, 팁, 노트, 연습문제가 풍부하다. 복습하기 위해 궁리해보면 기억에 오래 남을 것이다. 그리고 다음 장으로 이어지는 부분도 있어서 천천히 풀고 다음장으로 가도 즐거울 것이다.

 연습문제 답이 있다는 점도 장점으로 꼽고 싶다. 연습문제를 풀지만 답이 없으면 맞게 풀었나 궁금할 때가 많은데 책 끝에 답이 있으니까 보지 말고 풀고, 맞춰보면 좋다. 

 정말로 웬만한 건 다 다루는데(KNN!), 그럼에도 불구하고 차근차근 필요한 부분은 짚고 넘어가기 때문에 이 책을 읽은 다음에 다른 알고리즘 책을 보면 한층 수월해질 것 같다.

 필요한 부분 위주로 설명하고, 좀 더 심화한 지식 혹은 보충할 지식은 구하는 방법을 설명(ex 칸아카데미 링크 등)해두었다. 혼자서 모든 걸 다 설명하려다 보니 지루해지는 부분을 영리하게 해결했다고 생각한다.

 그래서 이 책은 정말로 저자가 의도한 대로, '어려운 기술적인 주제를 쉽게 설명한 책, 즉 읽기 쉬운 알고리즘 책'에 부합한다는 걸 인정할 수 밖에 없다.

 

특히 마음에 들었던 부분은 동적 프로그래밍(chapter 9)인데, 여행 일정 짜는 걸 좋아했기 때문에 관련 문제가 나와서 흥미진진하게 읽었다.

 

 

그래서 이 책은 일부에게 유용하지 않을 수 있다. 앞에 길게 여러번 썼듯이 이미 알고리즘에 익숙하고 이해를 마친 사람에게는 그림책이나 다름 없을 것이다. 

책 표지에 '비전공자까지도 알고리즘의 흥미로운 논리 세계로 안내할 것입니다.'라고 했는데 진짜 그 말이 맞다. 누구든 3장까지 천천히 읽은 사람은 그 다음이 어렵지 않을 것이다.

많은 친구들이 나에게 의외라고 하는 점 중 하나가 바로 내가 머리 쓰는 걸 정말 싫어한다는 것이다. 더 지니어스, 문제적 남자 같이 생각을 엄청 해서 문제를 해결해야 하는 지적 유희를 소재로 한 예능 프로는 정말 한 차례도 본 적이 없고, 그 흔한 방탈출 게임도 시도해본 적이 없다. 복잡한 문제를 제한 시간 내에 해결해야 하는 압박감과 그 골치아픔이 싫은 것이다.

이런 내가 프로그래밍 공부를 하면서 가장 힘들었던 점은, 이진법을 이해하는 것도 아니고 컴퓨터 작동 원리를 이해하는 것도 아니고, 바로 알고리즘 공부를 하는 것이었다. 알고리즘 얘기만 숨이 턱턱 막히는 알고리즘 울렁증이라고 얘기해야 하려나.

공부를 시도해보지 않았던 것은 아니다. 아주 가끔씩 알고리즘 공부를 해볼까? 마음이 들어 책을 펼쳐들면, 아주 작은 글씨로 빽빽히 적인 글과 코드 사이에서 정신을 잃고 이내 책을 덮어버린 것이 한두번이 아니다. 그 덕에 수학 1단원 집합과 명제 부분만 까맣게 닳았던 것처럼 내 알고리즘 책도 시간복잡도 설명 부분만 줄이 그어있고 아주 깨끗하다.

20170510_234916.jpg

‘Hello Coding 그림으로 개념을 이해하는 알고리즘’ 이 책은 내가 처음으로 끝까지 읽어낸 첫번째 알고리즘 책이다. 제목부터가 왠지 쉽게 가르쳐줄 것 같은 느낌이 팍 오더니, 역시 책을 쓱 훑어보니까 큼지막한 글씨에 그림이 엄청 많아서 편한 마음으로 도전!할 수 있었다.

지금까지 봤던 알고리즘 책은 보통 처음에 알고리즘의 시간복잡도 표기법에 대해서 설명하고, 그 이후 각 알고리즘에 대해서 설명한다. 기본적으로 여러가지 정렬 알고리즘을 다루고, 그 다음에 brute force, 너비우선탐색/깊이우선탐색, DP 등등 유명한 알고리즘에 대해서 원리와 함께 코드를 보여주며 설명한다.

20170510_233838

이 책도 기본적으로 이런 흐름을 벗어나지는 않는다. 처음 알고리즘을 공부할 때 기본적으로 이해하면 도움이 되는 이진 탐색, 빅O 표기법, 자료구조 등을 다루면서 내용을 시작한다. 책을 보면서 굉장히 마음에 들었던 것이 바로 이 첫 부분이었다.

사실 알고리즘 공부를 조금 하긴 했지만, 시간복잡도에 대해서 그냥 아, 이런 게 있나보다 하고 넘어가 버리고 A라는 알고리즘의 시간복잡도는 O(n)이야, B 알고리즘은 O(n^2)이야, X 알고리즘은 O(logN)이야 하는 설명을 특히, O(logN), O(nlogN)에 대해서 이해 못하고 넘어갔었는데, 어떤 알고리즘, 이진 탐색을 적용할 수 있는 알고리즘이 O(logN)을 따르는 이유를 드디어 이해할 수 있었다! 별 거 아닐 수도 있지만 개인적으로는 엄청난 깨달음이었다.

이후 책에서 다루는 정렬, 해시테이블, 너비우선탐색, DP 등등도 기본적으로 굉장히 차근차근히 친절하게 설명해준다. 각 알고리즘을 간단한 예제를 통해 독자와 함께 문제를 해결할 수 있는 알고리즘을 생각해내는 과정을 공유한다는 느낌이 들었다. 무엇이든 처음 배우는 사람에게 설명을 할 때는 이게 왜 이렇게 되는지 이유와 원리를 찬찬히 설명해주는 게 굉장히 중요한데, 알고리즘을 처음 배우는 사람들이라면 이 책을 통해서 충분히 감을 잡을 수 있을 것이라고 확신한다.

물론, 심화된 알고리즘 학습을 원하는 독자는 이 책을 선택하는 것이 좋지 않다. 말했듯 기본적으로 Target 독자가 알고리즘을 처음 공부해보려고 하는, 프로그래밍에 대한 지식이 많지 않은 사람이기 때문에 각 챕터의 내용이 알고리즘의 원리, 어떤 식으로 구현하는지, 어떤 경우에 해당 알고리즘을 사용하는 것이 좋을지에 대한 가이드 정도에 그친다. 다양한 알고리즘의 개념이 잡혀있고, 좀 더 심화된 학습을 원하는 독자는 다른 책을 찾아보시기를 권한다.

 

undefined

동화책처럼 아기자기한 표지

 

 

알고리즘과 자료구조에 대한 공부는 대학교 이후로는 크게 신경을 쓰지 않고 지내오다가 면접을 봐야하는 시점이 되었을 때 벼락치기로 공부를 하고는 했었습니다. 취업이나 이직을 위해 각 회사의 필기/실기 시험과 기술면접 시에 항상 문제가 되었던 항목이 이 알고리즘이었는데 평소에는 왜 그렇게 하기가 싫고 오래 지속하기가 힘든지.. 혼자 하기가 힘들어서 그룹 스터디를 진행하기도 했었는데 구성원 모두 2~3주차가 되는 시점에서 시들해지더니 결국에는 흐지부지하게 끝나버리기도 했었습니다. 원인이 무엇인지 골똘히 생각을 해보니까 알고리즘 공부는 단기간에 확 티나는 것도 아니었고, 실무에서는 이미 잘 구현된 라이브러리를 사용하기 때문에 이해했다고 해서 딱히 써먹을 곳도 없었기 때문이지 않았을까 생각했습니다. 가장 큰 문제는 처음부터 너무 어려운 알고리즘 책을 선택했었다는 것.. 문제를 볼때마다 좌절감을 맛보았기 때문에 포기가 빨랐었다고 생각합니다.

 

Hello_Coding_그림으로_개념을_이해하는_알고리즘_2.JPG

 긴 연휴 기간동안 열심히 정독

 

반면에 Hello Coding 그림으로 개념을 이해하는 알고리즘을 읽으면서 느낀 점은 설명하기 어려운 부분들을 정말 쉽게 잘 표현했다는 것이었습니다. 그림의 힘이 대단하구나를 다시 한번 느낄 수 있었는데, 대학교 시절에 텍스트만으로 가득한 자료구조 책으로 공부할 때는 그렇게 어렵게만 느껴지던 알고리즘/자료구조 내용이 이 책을 읽을 때는 머릿속에 쏙쏙 들어왔습니다. 물론 이미 배웠던 내용들이라 사전 지식이 있었던 것이 도움이 되긴 했겠지만 처음 공부를 했더라도 이 책이었다면 이해가 정말 쉬웠을 것이라는 생각이 들었습니다.

 Hello_Coding_그림으로_개념을_이해하는_알고리즘_3.JPG어려운 알고리즘을 그림으로 쉽게 설명

 

 글의 전개를 보면 가장 먼저 이 알고리즘으로 대체 무엇을 할 수 있는지를 알려줍니다. 책을 읽으며 마음에 드는 부분 중 하나였는데, 사실 알고리즘을 학습한다고 해도 초급자의 경우에는 대체 이걸로 뭘한다는 거지? 라는 생각이 들 수 있기 때문에 먼저 무엇을 할 수 있는지를 알게 되면 다음 설명에 더 집중을 할 수 있게 됩니다.


Hello_Coding_그림으로_개념을_이해하는_알고리즘_4.JPG

개념 설명 후 파이썬 코드를 통해 실제 구현

 

다음으로는 기초적이고 쉬운 개념부터 그림을 통해 설명을 해가면서 이해를 시켜주고, 그 이해를 토대로 파이썬 코드를 보여주며 실제 구현을 보여줍니다. 그리고 나서 이 알고리즘이 성능은 어느정도인지 빅오 표기법을 통해 증명을 시켜줍니다. 빅오 표기법에 모른다면 이 책을 꼭 보시길 추천합니다. 저 또한 가볍게만 알고 있었는데 이 책을 통해 확실히 개념을 잡을 수 있었습니다. (이 또한 그림으로 쉽게 설명되어있어요) 그리고 각 챕터의 끝부분의 연습문제를 풀어보면서 개념을 더 확고히 다질 수 있었습니다. 연습문제의 난이도는 상당히 쉬운 편이라서 부담없이 풀어 볼 수가 있을 것입니다.

 

Hello_Coding_그림으로_개념을_이해하는_알고리즘_5.JPG

 

Hello_Coding_그림으로_개념을_이해하는_알고리즘_7.JPG

쉬운 난이도의 연습문제

 

이 책의 내용 중 그래프의 내용을 보면 먼저 이 알고리즘을 통해서 체커 게임에서 가장 적은 수로 승리할 수 있는 방법을 계산한다던지, 맞춤법 검사기 또는 가장 가까운 의사 선생님 찾기와 같은 것을 할 수 있다고 얘기합니다. 저는 이 내용을 보고 그래프에 대해 잘 몰랐기 때문에 급 관심이 생기게 되었습니다. 그래서 그 뒤에 나오는 내용들에 훨씬 더 집중을 하게 되었습니다. 그 뒤로는 최단 경로에 대한 간단한 예제를 그림을 통해 설명을 시작하고, 이러한 최단 경로를 찾기 위해서 너비 우선 탐색이라는 알고리즘에 대해 설명을 합니다. 너비 우선 탐색이 어떤 건지는 알겠는데 이렇게 이웃을 추가해가며 탐색하면 중복되는 이웃은 어떻게 하지? 라는 의문이 들 때 쯤 바로 이에 대한 언급과 해결책을 보여줍니다. 이웃을 탐색하는 로직과 이웃의 이웃을 추가하는 로직, 이미 탐색한 이웃인지를 검사하는 로직 등 반복문을 수행하는 경우가 많은데 성능이 별로 좋지 않은거 아닌가? 라는 의문이 들 때쯤 성능에 대해 빅오 표기법으로 설명을 해줍니다. 네이버 길찾기를 이용해보면 최단 경로도 중요하지만 그보다는 시간이 가장 적게 걸리는 경로가 더 중요한거 아닌가? 라는 생각이 들 때쯤 다익스트라 알고리즘을 통해 최단 시간 경로 를 구하는 방법에 대해 알려줍니다. 마치 너가 이런 고민 하고 있을 줄 알았어 라는 듯이 모든 의문점들을 순차적으로 해소시켜줘서 나중에는 감탄만 남았었습니다.


undefined

기초 수학만 알고 있으면 이해하는데 무리 없는 구성

 

학교 다닐 때 이 책을 봤더라면, 면접 준비할 때 이 책을 봤더라면 더 좋았을 것 같다는 생각이 많이 들었고, 취업 준비하는 후배들에게 꼭 추천을 해주어야 겠다고 생각을 했습니다. 책을 읽고 나서 아직도 기본이 많이 부족하다는 것을 느꼈고, 여태 작성해왔던 블로그 글이너무 텍스트 위주였기 때문에 작성했던 저 조차도 시간이 지난 뒤에 다시 볼때 이해가 잘 되지 않던 부분들이 있었는데 그림을 최대한 많이 첨부해봐야 겠다는 생각이 들었습니다. 책을 읽으면서 대부분의 내용을 머릿속으로는 이해를 했지만 아직은 다른 사람에게 설명을 할 정도의 완벽한 이해는 하지 못했기 때문에 자주 꺼내읽어 볼 리스트에 추가해놓고 필요할 때마다 꺼내서 읽어봐야할 것 같습니다.

 

그림으로개념을이해하는알고리즘01.JPG

안녕하세요? 여러분은 알고리즘이란 말을 들어보셨나요? 아마 이공계 계열을 나오신 분들은 많이 들어보셨겠지만, 인문계 계열은 음~~ 하고 계시겠죠? 초등학교때인가 중학교때인가 순서도란 것을 배우신적 있으시죠? 아니면 여성 잡지때에 나오던 맞으면 yes, 틀리면 no 화살표를 따라가서 자신의 성격을 알아 맞추던 그런 것들요...

 

그림으로개념을이해하는알고리즘02.JPG

제가 이 책을 읽기 전에 알고 있던 알고리즘이란 위와 같은 것들이에요. 하~ 아닌가요?

이번에 제가 읽은 책은 그림으로 개념을 이해하는 알고리즘입니다.

데이터 분석 책을 요즘 많이 읽다가 보니 알고리즘, 알고리즘 해서, 제가 태어나서 알고리즘 책을 읽어본 적도 없고, 알고리즘을 사용해 본적이 없어서 잘 모르지만, 꽤 중요하다는 생각은 들었어요. 

더불어 아는 지인들로 부터 알고리즘 책을 읽다가 포기했다는 말도 가끔 듣기도 했고요. 대부분 알고리즘을 다 어려워 하시는 것 같았어요.

 

그림으로개념을이해하는알고리즘03.JPG

이런저런 이유로 저도 조금의 관심은 있었어요. 수포자처럼 다들 포기한다고 해서, 왠지 모를 호기심도 있었구요.

그런데 이 책은 중고등학생들도 읽을 수 있을 정도로 쉽게 쓰여졌다고 자랑하고 있네요. 요즘 중고등학생들의 수준이 너무 높아서, 제 기준으로는 많이 어려울수도 있지만, 도~~~~~전~~~ 해 보기로 했습니다.

 

그림으로개념을이해하는알고리즘04.JPG

이 책의 로드맵이라고 나오는데, 사실은 목차와 같아요.

아~ 이런 것들을 알고리즘이라고 하는구나...

이진 탐색, 선택 정렬, 귁 정렬 그냥 책 덮고 싶어지시죠? 그러지 마세요 ^^

 

아 반가운 그래프 이론도 나오네요. 

사회관계망 이론(그래프 이론)은 이미 R로 조금 다루어본 경험이 있거든요.

 

그림으로개념을이해하는알고리즘05.JPG

이 책 서문에 나오지만, 다 읽어본 지금에서 이 말뜻이 이해갑니다.

데이터 분석 라이브러리들이 요즘 워낙 쉽게, 잘 만들어서 나오기 때문에, 내가 직접 모든 것을 코딩해서 구현할 필요는 없지만, 이 라이브러리들이 어떤 핵심 아이디어를 통해 만들어졌는지 이해하는 것이 더 중요하다는 말 공감합니다.

 

이 책도 이런 의도에서 쓰여졌다고 생각합니다. 알고리즘을 짜고 만드는 것이 아니라, 그 핵심 원리를 그림으로 쉽고 간결하게 이해하는 것. 각종 컴퓨터 언어에서 기본적으로 제공하면서 가장 중요한 자료 구조를 이해하는 것. 

 

R, 파이썬, 자바스크립트의 기본 자료 구조가 어떻게 탄생했고, 어떻게 작동하고(책에서 언급하지는 않지만, 책을 읽다가 보면  서로 연결 고리가 있다고 느껴지네요) 있는지, 어떤 문제점과 장점을 갖는지 상상력이 막 발동합니다.

 

그림으로개념을이해하는알고리즘06.JPG

이런 부푼 마음을 가지고, 책장을 넘기면 이렇게 많은 그림과 내용들이 나옵니다.

보통의 알고리즘 책들이 얼마나 쉽고 관련 그림들이 많이 나오는지는 모르겠지만, 이 책은 제가 이해할 수 만큼 쉬운 내용으로 그림들이 적재적소에 잘 들어가 있다는 느낌입니다.

 

번역도 잘 되어 있어서, 번역투 같은 느낌보다는 지은이가 글쓴것 같은 문장이 짧고 설명이 쉽습니다.

물론 아직 제 수준에서는 책 속에 등장하는 모든 단어 정의를 다 이해하지는 못했지만요...

 

그림으로개념을이해하는알고리즘07.JPG

각 이론 설명도 이렇게 그림으로 보니까 더 이해하기가 쉽죠. 그림으로 개념을 이해하는 책인 것 맞습니다.

 

그림으로개념을이해하는알고리즘08.JPG

이 책의 장점이 이론의 결말까지 도달함에 있어, 그림으로 하나하나 끝까지 설명한다는 것입니다. 중간에 비워져 있는 내용이 없어, 책만 쭉~ 잘 읽어나가면 왠지 수학 공식이 증명된 듯한 느낌이 듭니다. 그리고 파이썬으로 실제 코딩할 수 있도록 예시 소스 코스를 보여줍니다. 소스 코드도 간결한 것 같지 않나요? ^^

 

그림으로개념을이해하는알고리즘09.JPG

여러가지 탐색 이론은 처음 공부해서 생소했지만, 그래프 이론은 좀 쉽게 다가오네요. 최단 경로, 경로등 내용이 깊은 곳까지는 가지 않지만, 개념을 잡는데 확실이 도움이 됩니다.

 

그림으로개념을이해하는알고리즘10.JPG

그리고, 마지막의 KNN 알고리즘은 요즘 제가 공부하고 있는데, 이렇게 두 페이지로 설명하네요. 그러니까, 수식과 여러 배경 없이 아 이런 것이 KNN이구나, 아 이런씩으로 접근하구나를 이해시키려는 것 같습니다.

 

데이터 분석을 하기 위한 기초 지식으로는 충분하지만, 어떻게 보면 제가 조금 아는 부분이라서 쉽게 느껴졌을수도 있습니다. 실제로 여러 머신러닝 도구들을 이용할 때는 더 많은 지식이 필요합니다.

 

그림으로개념을이해하는알고리즘11.JPG

하하 저자의 말대로 알고리즘이 지루하고 어렵다는 느낌이 안 드네요. 물론 전공 서적의 깊은 내용들을 공부하지 않아서 이런말을 하는 것이겠죠.

그래도 처음 알고리즘을 접하거나, 기존 알고리즘 책들이 너무 안 맞는 분들은 서점에서 살짝 읽어보세요.

비전공자들도 아~ 하면서 프로그래밍의 원리를 좀 더 이해하실 수 있을꺼에요.

그러나, 이 책을 읽었다고 해서, 없던 파이썬 프로그래밍 기술이 생기거나 하는 것은 아닌 것 같아요.

그리고, 지금 제 실력으로는 이것을 어디다 사용할지도 정확히 모르는 점 인정하지만, 대략 이런 탐색 기법은 이렇게 사용하지 않을까 하는 느낌 정도는 확실히 받았어요. 

나중에 코딩 실력이 좀 더 나아지거나, 고급으로 넘어갈 때 알고리즘을 생각해서 코딩해야 하는 시기가 다가오면, 많은 도움이 되리라고 생각합니다. 이 정도만 해도 대단한 발전이 아닐까 생각해봅니다.

비전공자도 재미있게 알고리즘에 접근할 수 있다에 한 표 던집니다. ^

 

 

알고리즘에 대한 관심이 많아지면서 서점에는 관련 서적들이 쏟아져 나왔다. 나도 전공이 컴퓨터 공학인지라 관심있게 보는 분야 중 하나이다. 그런데 볼 때마다 느낀점은 좀더 쉽게 설명해줄 수는 없을까라는 아쉬움이었다. 물론 책을 쓴 저자는 쉽게 쓰려고 노력을 했겠지만 내가 이해할 수 가 없어서 좀더 쉬운책을 찾아보게 되었다. 한빛미디어 "나는 리뷰어다" 로 선정되어서 이 책을 받게 되었는데 책 표지부터 상당히 맘에 들었다. 알고리즘 관련 책인데 고리타분한 딱딱한 디자인이 아니어서 쉽지 않은 내용을 쉽게 설명을 했을것 같은 느낌이 들었다. 

 

책 내용을 살펴보면 우선 그림이 많다. 설명도 설명이지만 그림을 활용해서 쉽게 이해할 수 있도록 내용을 구성해 놨다. 그림 느낌이 약간Head first 시리즈에서 봤던 그림체라는 생각이 잠깐 들었다. 책 내용에 색깔도 있어서 책을 읽는데 지루하지가 않았다. 프로그래밍 책 하면 코드와 글자로 구성이 되어있으면서 온통 검정색 글씨로 도배가 되어있는데 이 책은 그렇지 않았다. 책을 읽는데 부담도 없고 그림책 읽는 듯한 느낌이 들었다. 

 

 

그리고 컴퓨터 서적에 각 챕터마다 빠지지 않는 요약과 연습문제가 있다. 각 챕터에서 설명했던 내용들을 간단하고 쉽게 정리를 해두었다. 그리고 내용을 반복할수 있도록 연습문제도 포함되어있다. 연습문제라고 해서 그렇게 어렵지는 않고 공부했던 내용을 잘 생각해보면 충분히 풀수 있는 수준이다. 문제의 정답은 책 마지막 부분에 있다. 

마지막 챕터에서는 이 책에서 자세히 설명하지 않은 다른 알고리즘들에 대해서 간단히 소개를 해주고 있다. 그래서 추가적으로 공부해야 할 것이 무엇인지, 아니면 내가 관심있어 하는 알고리즘이 어떤 알고리즘인지에 대한 방향성을 부여해줄 수 있다. 

https://github.com/egonSchiele/grokking_algorithms

책에서 설명된 github 에 가면 알고리즘의 소스코드를 확인해 볼 수 있다. 스스로 직접 코딩을 해보는 것이 가장 좋은 방법이지만 참고할 자료가 있다는것도 충분히 도움이 된다. 책으로 읽었던 내용을 코드를 봄으로써 좀더 이해가 빨라질 수 있기 때문이다. 처음에는 python으로 코드가 되어있다고 했었는데 직접 들어가 보면 python, ruby, java, javascript 등 다양한 언어로 코드가 작성되어있다. 내가 직접 코드를 작성해보고 비교해보는것도 좋은 학습 방법이 될수 있을것 같다.

알고리즘에 대한 설명을 마치 동화책처럼 내용을 만들어서 쉽게 이해하고 접근할수 있도록 해주는 책이다. 처음 알고리즘을 공부하는 사람이 기초를 잡기 위해서 한번쯤 읽어본다면 많은 도움이 될것 같다. 

 

http://blusky10.tistory.com/271

 

한번 이 글을 읽는 사람이라면 물어보고 싶은 내용이 한가지 있다. 과연 여러분은 자료구조와 알고리즘을 어떻게 배웠을까? 

 아마 컴퓨터 관련 전공을 가진 사람이라면 위의 책 중 하나는 읽지 않았을까 싶다. 특히 Cormen 책은 거의 알고리즘 계의 바이블 수준일 정도로 많이 읽을거라고 생각한다.(물론 아닐수도 있고, 내가 모르는 알고리즘 책이 또 있을 수 있다.) 참고로 나는 맨 밑의 책(Horowitz 책)으로 공부했었는데, 과도 컴퓨터과도 아니고, 그렇게 심도있게 배웠다는 생각이 없다. 물론 C에 대해서 잘 알기 전에 이 책으로 자료구조부터 배워서 그런지, 이 책을 처음 접할때는 뭔가 읽기도 난해했고, 재미없었던 기억이 난다. 그래도 알고리즘의 기초부터 구현까지 단계별로 설명한 좋은 책이었다고 생각한다.

 문득 드는 생각이지만... 난 정말 자료구조이나 알고리즘에는 정말 약하다고 생각한다. 정말 뭔가 체계적으로 배운것도 없고, 알고리즘을 구현해보라고 시키면 정말 자신이 없다. 회사에서 하는 업무도 업무일뿐더러 이런 알고리즘과 관계가 없기 때문에 다뤄볼 기회도 없고, 시간을 내서 공부할 여력도 안된다. 그래서 항상 답답함을 느끼는 터에 이 책을 받게 되었다.

이 책을 한마디로 표현하면 위에 소개되어 있는 "Introduction to Algorithm의 축소 그림책" 이라고 하고 싶다. 그렇게 하고 싶을 정도 이 안에는 그림과 설명이 정말 많다. 기존의 책들이 설명과 유도 방식으로 되어 있어, 읽는데 매우 지루했던데 비해, 이 책은 그림과 단계별 설명이 잘되어 있다. 또한 기존 책들이 C와 Pseudo code로 되어 있어 뭔가 어려움을 느꼈더라면, 이 책은 실제 학습 코드가 Python으로 구현되어 있어 훨씬더 따라해보고, 이해하기 쉬울 책이라고 생각한다. 어쩌면 요즘 대세 프로그래밍 언어라 할 수 있는 Python을 선택한건 최근의 학습 트렌드가 반영된 형태라고 보면 좋을거 같다. 

 참 이 책의 제목이 "Hello Coding : 그림으로 개념을 이해하는 알고리즘"이라고 되어 있지만, 원제는 "Grokking Algorithm: An illustrated guide for programmers and other curious people" 라는 책이다. 

그리고 실제로 책안에 들어있는 일러스트들은 저자가 직접 다 그리고 올린 그림이라고 한다. 실제로 그림이 이렇게 되어 있다.

 위의 그림은 이진 탐색을 설명하기 위한 그림이었는데, 여기에 쓰인 일러스트들을 보면 직관적으로 설명되어 있다. 우리나라 편에서는 그림속의 내용들이 한글로 다 바뀌었다. 사소하면서도 저자의 의도를 최대한 살리면서, 책을 알기 쉽게 풀어나간 부분이 아닐까 생각한다. 이밖에도 Dijkstra Algorithm이나 Knapsack 에 대한 설명도 어떻게 보면 설명이 길어질 수 있는데 그림으로 잘 도식화시켰다.

개인적으로 생각하는 이 책의 장점은 알고리즘의 원리를 설명하는 틀에 갇혀있지 않고, 다양한 분야로 설명하고자 노력했다는 것이다. 예를 들어 Dynamic programming이나 Greedy Algorithm, k-NN 같은 알고리즘도 어떻게 범주를 굳이 나누자면 조금 고급 개념일텐데, 이 책에서도 이것도 다루고 있었다.  나도 대학원에서나 최근에 들은 수업중에 Optimization과 관련된 내용을 조금 다뤘었기에 해당 부분을 관심읽게 살펴봤다. 그래서 이책을 읽고나면, 어디서 그런 이야기를 들었을때 적어도 그에 대한 이야기를 할 수 있을 듯하다.

그런데 다만... 한계가 여기까지다. 그냥 그에 대한 이야기만 할수 있을 정도이지, 뭔가 응용하고 실습을 할 수 있는 예제나 직접 해볼 수 있는 내용들은 부족했다. 물론 이런 개념들이 실제 일상에서는 어떻게 쓰인다는 것을 설명하고는 있지만, 아마 처음 읽고 해당 파트를 읽게 된다면 "So what? 그래서 어떻게 해볼 수 있는거지?" 에 대한 의문을 가질 법하다. 그래서 마지막에 제시되어 있는 "k-NN"이나 더 살펴봐야 할 내용으로 다룬 내용은 조금 부실하게 표현된게 아닐까하는 개인적인 생각이 든다. 물론 개인적인 호기심으로 이 책을 정도하는 것은 좋을 수 있으나, 뭔가 해당 부분에 대한 이해를 원한다면 다른 참고서적을 살펴보는게 좋을거 같다. 

 책의 소개 페이지에서 언급하고 있는 독자의 수준에 적합한 책이고, 정말로 프로그래밍이나 알고리즘을 다뤄보지 못한 사람이라면 이 책은 정말 더할 나위없이 좋은 참고서라고 생각한다. 나한테는 일러스트나 단계별 설명, 거기에 Python 을 통한 실습까지.. 서두에서 잠깐 언급했던 "Introduction to Algorithm의 축소 그림책" 이라는 느낌에 딱 맞는 책이라고 느꼈다. 뒷 챕터에서 다루는 내용의 부실함이 약간의 아쉬움으로 남긴 하지만, 처음 읽는 사람의 호기심을 자극하고, 더 공부해보고자 하는 의지가 있다면 이 책은 그 역할을 할 수 있는 발돋음판이 되지 않을까 싶다.

 

PS1. 저자의 홈페이지는 링크와 같다. 가보면 개발과 관련해서 흥미로운 포스트들이 소개되어 있다. 아마 개인적인 생각으로는 이사람의 설명 전개 방식은 이런 그림이 동반되어 있기 때문에 조금더 독자의 흥미를 유발시키고, 관심을 이끄는 원동력이 되는 거 같다. 참고로 책 사이사이에서 언급하고 있는 Introduction to Algorithm과의 비교 내용도 저자가 설명하고 있다. 한번 참고해보길 :)

PS2. 공학을 전공한 사람답지 않게 그림을 정말 잘 그린다. 더구나 남자다. 부럽다....

한빛미디어에서 굉장히 재미있는 알고리즘 책이 번역되었다. 


Hello Coding 그림으로 개념을 이해하는 알고리즘

아디트야 바르가바 지음, 김도형 옮김

 

책의 인트로에는 "누가 이 책을 읽어야 하나요?" 라는 질문에 "프로그래밍을 전혀 경험해보지 못한 비전공자 (중/고등학생, 대학생, 일반인)" 라는 답을 던지고 있는데 정말 충실한 답변이라고 할 수 있을 정도로 쉽고 친절하게 알고리즘에 대한 개념을 설명한다.

 

이 책의 가장 큰 매력은 번역서이지만 크게 거부감이 들지 않는다는 점이다. 번역에 많은 공을 들인 것이 큰 부분을 차지하겠지만, 어려운 개념이 없다는 점도 주목해야 한다. 그만큼 프로그래밍을 모르는 사람을 위한 서적이기도 하다는 의미이다.

 

 

 

이 책의 목차를 개인 주관대로 재정의 해보면 다음과 같다.

1. 책에서 다루게 될 용어에 대한 설명 (빅오, 로그 등)

2. 정렬, 재귀, 해시 테이블

3. 동적 프로그래밍

4. KNN 알고리즘

 

위 목차는 개인적으로 재밌게 읽었거나, 어린 친구들에게 추천하고 싶은 부분 위주로 뽑았다. 책에서는 개념을 설명하면서 간혹 실제 코드나 의사코드(pseudo code)를 포함하는데, 모두 요즘 대세인 python 으로 작성되어 있다. 계속 강조되지만 그렇기 때문에 비전문가도 어렵지 않게 내용을 이해할 수 있다. (코드 내용을 이해하지 못해도 크게 상관 없으니 걱정하지 마시라.)

 

아래는 책의 본문에서 재귀함수를 설명하는 부분을 발췌한 내용이다. 이렇게 까지 쉽게 설명된 책은 지금까지 접해보지 못한 것이 사실이다.

 

 

 

책장을 넘길수록 재미에 탄력을 받아 읽는 속도도 빨라지는데 KNN(k-nearest neighbors) 알고리즘 부분은 감탄이 절로 나올 정도로 쉽고 재밌게 예제와 함께 쓰여있다. 특히 이 알고리즘은 요즘 핫한 분야인 머신러닝에서도 classification을 위해 많이 통용되는 알고리즘이기 때문에 알아두면 분명 써먹을 곳이 생긴다.

 

 

한편 이 책에 유일하게 아쉬운 점을 꼽는다면.. 간혹 예제에 나오는 명칭에 있다. 가령 넷플릭스(Netflix)의 추천시스템을 설명할 때 등장하는 인물들의 이름을 번역할 당시에 적당히 친근한 이름으로 커스텀 할 수 있지 않았을까? 하는 아쉬움이 남는다. 

 

사실 억지로 찾은 단점이라고 할 수 있겠다. 그만큼 단점을 찾기 쉽지 않은 책이다.

 

 

전체적으로 쉽고 재밌게 쓰여졌기 때문에 비전공자를 위한 필수 알고리즘 도서로 추천해도 아깝지 않을 책이다. 

 

깊게 공부하거나 준전문가 이상의 수준잉라면 이 책은 너무 가벼울 수도 있다. 하지만 이 부분은 어차피 고려대상이 아니다. 이 책은 그런 사람들을 위한 책이 아니니까 말이다.



출처: http://jybaek.tistory.com/626 [컴맹 : 진화의 시작]

컴퓨터 개발을 하면서 알고리즘을 학습하는 것은 매우 중요하다. 너무 오래전에 배워서 이미 잊혀진 것들이 있을 수 있지만 개발을 하다보면 다시 알고리즘을 학습해야하는 순간은 종종 찾아온다.

  1. 앱을 통해서 택시와 나를 연결해주고 싶다. 어떻게 현재 위치에서 가까운 기사들에게 알림을 보낼 수 있을까? 
  2. 웹 브라우저의 뒤로가기/앞으로가기는 어떻게 구현해야 하는 걸까?
  3. 영화 추천 서비스는 어떻게 나에게 영화를 추천해주는 걸까?

 

이렇듯 꾸준히 학습을 해야하는 알고리즘은 시중에 책들이 많이 나와 있다. C/C++로 된 책부터 Java, Python까지 다양한 언어로 알고리즘에 대한 학습 서적이 이미 나와있다. 하지만 이런 책들을 구매해서 끝까지 본 책은 얼마나 있을까? 알고리즘은 중요하지만 생각보다 쉽지는 않다.

 

이 책의 첫 페이지를 보면 책의 목표가 명확히 나와 있다. '쉽고', '재미있게', '끝까지' 책을 읽게 하는 것이다. 쉽고 재미있게 그리고 끝까지 책을 읽게 한다는 점에서 매우 공감한다. 내용은 쉽게 잘 풀어나갔고 기술적인 이야기 또한 잊지 않은 책이라고 말하고 싶다. 이 책은 그림을 통해서 쉽게 설명하고 있을 뿐 아니라 놓치기 쉬운 부분들을 잘 알려주고 있다.

 

 

 

이 책의 장점 중에 1가지는 알고리즘 문제를 어떻게 활용해야 하는지 설명해주고 있다는 점이다. 사실 그렇다. 어떤 알고리즘이 있고 어떻게 구현하는지만 알게 되면 잘 활용할 수 없다. 이 책은 매 장마다 문제 상황을 설명하고 알고리즘(또는 자료구조)를 사용해서 어떤 장점을 얻어갈 수 있을지를 설명한다. 책을 몰입하여 읽을 수 있게 도와준다.

 

 

 

아래는 스택에 대한 그림 설명 부분. 마치 선생님이 칠판을 활용하여 직접 설명하고 있는 것처럼 느껴졌다.

 

 

 

매 장 끝부분에 가벼운 팁들이 나온다. 이런 팁들은 개발자들끼리 커뮤니케이션(말빨, 아는척)하는데 큰 도움이 된다고 생각한다. 내용 자체는 전문적이지 않지만 특히 초보자에게는 꽤 쏠쏠한 팁이 될 것이다.

 

 

 

책의 단점을 이야기하면 첫째로 그림과 글자색 때문에 몰입이 잘 되지 않는다. 배경을 빼고 보면 몽땅 파란색이다. 초보자들에게 거부감을 없게 하기 위함인가하는 생각도 들었지만 세련되지 않다고 생각한다. 저자 아디트야 바르가바가 쓴 책 느낌을 살렸으면 어땠을까 하는 생각이 든다.

 

두번째로 "추가로 공부해야할 것들" 내용이다. 장점에 가까운 내용이었지만 일부는 너무 수박 겉핥기 식으로 적어두었다. 조금 더 자세히 적어둔 내용이 있었으면 하는 아쉬움이 있다.

 

마지막으로 이 책은 이런 사람들에게 추천한다.

  • 알고리즘을 한번도 학습하지 않은 사람
  • 알고리즘 책을 사서 수집만 하고 끝까지 읽어본적이 없는 사람 
  • 알고리즘을 초보자에게 알려주고 싶은 사람

 

한빛미디어의 이벤트를 통해 리뷰를 작성합니다.

 

프로그래밍을 하면서 언제나 목마름의 대상이였던 알고리즘을 파이썬이란 언어를 사용하는 책으로 접하게 되었습니다. 

시중에 많은 알고리즘 책과 더불어 파이썬을 주제로 한 책도 몇가지 있지만 대부분 C언어로 되어있는 책들은 언어의 장벽이 어느정도 존재해

쉽게 다가가기 힘들었으며 눈에 잘 들어오지도 않았습니다.

또한, 파이썬으로 된 책도 있었지만 알고리즘에 대한 개념을 이해하기엔 다소 아쉬운 풀이를 하고 있었습니다.

 

이 책은 이벤트로 받은 책이지만 기존에 이해하기 힘들었던 알고리즘에 대해 쉽고 재밌게 풀어준 책이였습니다.

제 수준은 파이썬으로 더하고 나누고 변수정도만 만들 수 있는 실력이지만 파이썬의 장점(개인적인 생각)인 직관적인 코드로 구성되어 있어

파이썬에 대해 깊은 이해가 많이 없어도 알고리즘을 이해하기에는 부족함이 없었습니다.

 

저자가 말하길 중학교 수준의 수학능력 정도만 되어도 이 책을 완독할 수 있다는 자부심을 나타내고 있으며 의도적인 그림인지는 모르겠으나 

손으로 직접 그린 것 같은 부가설명으로 개념에 대해 좀 더 명확하고 쉽게 설명을 하고 있습니다.

 

가령 알고리즘을 전혀 몰랐던 저에게 어려운 단어였던 '이진 탐색'은 큰수 찾기라는 쉬운 예시를 들으며 이해도를 높였으며 예제를 통해

쉽게 적용해보고 실습할수 있도록 풀이되어있습니다.

 

물론 파이썬은 2버전과 3버전이 나누어져 있는데 본문에는 2버전 위주로 설명되어 있으며 3버전과 다른 문법이라면 따로 표시해두어

파이썬을 사용하는 사용자들 누구든지 쉽게 실습할 수 있도록 돕고 있습니다.

 

이 책을 완독하고 나면 지금보다 더 나은 코드를 짜고 좀 더 실력을 키울 수 있는 좋은 기회가 될 것으로 생각됩니다.

 

책에 대한 자세한 사항 및 구입처는 밑에 url을 참고해 주세요.

Hello Coding 그림으로 개념을 이해하는 알고리즘

 

 

 

 

컴퓨터공학 학부 시절, 가장 어려웠던 과목이 무엇이었는지 돌이켜보면 컴퓨터 구조론이나 알고리즘, 데이터 자료구조론과 같은 과목이었다. 과목에서 설명하고자 하는 내용도 난이도가 깊은 데다가 교재가 워낙 읽기 어렵고 재미가 없어서 가장 중요하면서도 기초적인 과목임에도 불구하고 명확하게 이해하기 쉽지 않았던 것 같다.

 

졸업을 하고 십수 년 동안 필드에서 일하면서 이러한 기초 지식이 얼마나 중요한지 새삼 깨달으면서도, 알고리즘에서 배웠던 내용들을 직접 활용하여 소스 코드를 작성할 일은 많지 않았다. 하지만, 한창 코딩을 많이 하다 보면 어느샌가 실행 속도가 점점 느려지는 현상을 발견한 적도 있고, 아주 간단한 정렬이나 자료구조의 잘못된 선택이 전체 시스템의 성능에 영향을 미치는 경우를 자주 접하게 되었다. 그리고 근래에는 회사에서 기존 사원들이나 신입/경력 신규 입사자들의 기술 역량을 평가하기 위해 온라인 코딩 사이트를 통하여 알고리즘이 포함된 문제들을 푸는 경우가 많아졌다. 이름이 알려진 소프트웨어 회사라면 어김없이 온라인 코딩 테스트를 치르게 되어 있고, 알고리즘에 대한 기본적인 소양이 없다면 문제를 푸는 것이 그리 쉽지 않다. 비단, 경력이 어느 정도 있는 개발자라도 말이다.

 

이런 와중에 아주 반가운 책을 접하게 되었다. 한빛미디어에서 "Hello Coding" 시리즈 중 하나로 "그림으로 개념을 이해하는 알고리즘"이라는 번역서를 출간하였고, 우연히 "나는 리뷰어다!"행사에 참석하게 되어 해당 책을 읽어보게 되었다.

 

책을 처음 접하였을 때는 무척이나 쉬운 개념 설명서 정도 될 줄 알았다. 솔직히 내용도 그리 기대하지 않았었다. 하지만, 첫 챕터부터 나의 생각을 완전히 뒤집어 놓았다. 아마도, 컴퓨터 전공과 아무런 관계가 없는 독자더라도 이 책을 통해서 알고리즘의 컨셉뿐만이 아니라, 기본 동작 원리를 제대로 이해하는데 도움이 될 것이라 생각이 되었다. 이진 탐색에 대한 쉬운 설명

 

특히, 단순히 알고리즘 설명뿐 만이 아니라, 실행 속도의 상대적인 비교 및 정량적인 표기를 위해 반드시 알아야 하는 빅오 표기법에 대해서도 쉬운 예제와 함께 설명을 하고 있어, 처음 접하는 사람이라도 개념을 기억하기에 무척 적합하다는 생각이 들었다.단순탐색 및 이진 탐색의 비교

 

빅오 표기와 실행 속도의 상대적인 비교표

 

게다가, 어떤 데이터 타입을 사용하는 것이 성능에 영향을 미치는지 등의 놓치기 쉬운 내용 역시 잘 설명해 나가고 있다. 배열과 리스트를 선택하기 위해 고려해야할 사항

 

게다가 다소 어려울 수 있는 재귀나 해시 테이블에 대한 설명은 무척 인상 깊다. 적절한 예제와 이해를 돕기 위한 스토리 텔링은 굉장히 흥미롭고 재미있기까지 하다.재귀 실행 방식 설명

 

재귀 호출 스택  설명

 

해쉬 테이블 이해를 위한 쉬운 설명

 

하지만, 책의 7장을 넘어서면서부터 내용이 다소 어려워지는 건 어쩔 수 없는 듯싶다. 처음 알고리즘을 배우는 사람에게 굳이 다익스트라 알고리즘이나 동적 프로그래밍 심지어는 머신러닝에서 사용하는 k-NN 알고리즘까지 풀어내고 있다. 내 생각에는 저자의 욕심이 다소 과하지 않았나 싶기도 하다.

k-NN 알고리즘의 설명

 

차라리 상대적으로 현업에서나 코딩 테스트에서 항상 거론되는 트리 관련된 내용이 더욱 깊이 다뤄졌으면 하는 아쉬움이 앞선다. 이런 이유로, 책의 후반부에서 집중력이 다소 흐려질 수도 있겠다. 실은 마자막 장에 나오는 맵리듀스나 SHA알고리즘 등은 지나쳤다고 생각이 든다. 너무나 간단한 개념만을 담고 있어 크게 도움이 되지는 않을 듯하다. 하지만, 실무에서는 모두 활발하게 사용이 되고 있는 것들이기 때문에, 개념을 이해하는 수준에서는 좋은 콘텐츠가 될 수도 있다는 생각이다.

마지막장의 목차 리스트

 

300 페이지가 넘는 책이지만, 그림과 도식이 많아서 금방 읽혔다. 필자도 3일 정도 걸린 듯하다.

 

알고리즘에 대해서 처음 공부를 하거나, 학창 시절의 알고리즘을 다시 한번 되돌아보는 개발자 혹은 근래에 유행하는 머신러닝 알고리즘이나 데이터 분석, 암호화 알고리즘에 대해 가볍게 이해하고 싶다면, 한 번쯤 읽어 보면 좋겠다. 오래간만에 가볍게 중요한 기본 지식을 훑어보면서 시간을 알차게 보낸듯하여 기분이 좋다. :)

 


* 본 후기는 한빛미디어의 지원으로 작성이 되었습니다.

 

 

알고리즘1.JPG

 

 

'Hello Coding 그림으로 개념을 이해하는 알고리즘' 이라는 책을 읽었습니다.
 

알고리즘2.JPG

 

'쉽고, 재미있게, 끝까지'라는 슬로건에서도 알 수 있듯이, 로드맵도 친절하게 그림으로 그려 주셨어요~
 
 

 

IMG_2333.JPG

 

초보자들도 쉽게 따라할 수 있도록 애쓴 흔적이 보이네요~

 

상세한 이미지와 함께 소스 코드도 자세히 나와 있어요, 

소스 코드는 '부록/예제 소스' 탭에서 다운 받을 수 있죠.


 

 

IMG_2334.JPG

 

이게 얼마만인가요?
정보처리기사 공부하느라 자료구조론 책을 몇권씩 독파하던 기억이 납니다.
이진 탐색, 퀵 정렬, 해시 테이블, 스택, 큐 등 새삼스럽게 옛날 기억이 떠오르네요~ 
그때 공부했던 여러 권의 책에도, 이렇게 예쁜 그림이 곁들여진 설명이 있었던들 그렇게 지루하게만 느껴지지 않았을텐데

그때는 왜 그런 생각을 못했던걸까요?

IMG_2335.JPG

 

이전 까지는 워밍업(?) 단계였고, 6장 부터는 그래프등 슬슬 통계학적 기법이 나오기 시작하네요~

 

 

 

IMG_2336.JPG

 

KNN 알고리즘이 항간에 처음 소개 됐을 때는 획기적이었죠?
모 영화 추천 앱에서 이 알고리즘을 사용했다나요?
이 알고리즘은 처음 사용자에게는 적용할 데이터가 없는게 헛점이지만...

저도 머신러닝을 배우기위해, 몇 년전 스탠포드대의 앤드류 응 교수의 강의를 듣고 좌절했던 기억이 문득 떠오르네요~
대학 다닐 때 수학 공부 좀 더 열심히 할걸 그랬다는 생각이 들어요. 
하지만 예제를 곁들인 친절한 설명이 초보자도 쉽게 따라할 수 있게 되어 있어요.
'오렌지와 자몽 분류하기'를 보시면, 추천 시스템이 어떻게 만들어 지는지 한 눈에 아실 수 있습니다.
 
처음에는 추천 시스템이 상당히 신기했었는데, 알고 보면 별게 아니죠?
 
 
빅데이터나 인공 지능을 공부하시려는 분들은 꼭 짚고 넘어가야할 개념이죠~
'추천 시스템 만들기'나 '회귀 분석'은 전문가들이 보기에도 손색이 없는 내용인것 같습니다.
여러분이 쇼핑몰에서 물건을 살 때, 추천 시스템이 작동하는 데는 다 이런 알고리즘이 베이스가 될 거예요~
'맵 리듀스'는 '몽고'라는 데이터베이스 교육에서 처음 접하고 상당히 신기했습니다.
'NO SQL'아라는 것을 사용하는데 아무리 많은 데이터도 순식간에 실행해서, 일반 SQL만 사용해본 저로서는 그야말로 신세계였죠~


이외에 앞으로 더 공부해야 할 것에 대한 가이드도 제시하고 있네요.
 


IMG_2337.JPG

 

위 그림은 본문에 나오는 내용인데요,
자칫 딱딱할 수 있는 알고리즘에 대한 내용을 손그림으로 부드럽게 풀어가는 모습이 마음에 들었습니다.
 
 

 
< 총평>
1. 초보자라면 1장에서부터 5장까지만 마스터해도 어디가서 전문가 소리 들을 겁니다.

2. 2단계로는 6장에서 9장까지 도전해 보세요~
통계학에 대한 기초가 다져질 겁니다. 빅데이터 같은 데이터 과학자를 꿈꾸는 어린 꿈나무들은 꼭 짚고 넘어가야겠죠?
3. 10장부터는 '머신 러닝' 같은 인공지능 분야에 진출하실 분들을 위해 추천합니다.
 
앞으로 관심 분야에 따라 무엇을 더 보강해야할지를 제시해 줄 거예요~

 
 
이처럼 3단계 목표를 정하고 책에 있는 내용을 따라해 보시면,
'쉽게, 재미있게, 끝까지' 슬로건 처럼 어느새 정상에 서있는 여러분의 모습을 보시게 될 겁니다. 
 
 
여러분도 한번 도전해 보세요~
 
 
 
참, 제 블로그도 링크하니 참조하세요~
 
이 책은 초보자 뿐만 아니라, 전문가들도 다시 한번 복습할 수 있는 기회를 제공한다는 점에서 좋은 것 같아요.
 

결제하기
• 문화비 소득공제 가능
• 배송료 : 2,000원배송료란?

배송료 안내

  • 20,000원 이상 구매시 도서 배송 무료
  • 브론즈, 실버, 골드회원이 주문하신 경우 무료배송

무료배송 상품을 포함하여 주문하신 경우에는 구매금액에 관계없이 무료로 배송해 드립니다.

닫기

리뷰쓰기

닫기
* 도서명 :
Hello Coding 그림으로 개념을 이해하는 알고리즘
* 제목 :
* 별점평가
* 내용 :

* 리뷰 작성시 유의사항

글이나 이미지/사진 저작권 등 다른 사람의 권리를 침해하거나 명예를 훼손하는 게시물은 이용약관 및 관련법률에 의해 제재를 받을 수 있습니다.

1. 특히 뉴스/언론사 기사를 전문 또는 부분적으로 '허락없이' 갖고 와서는 안됩니다 (출처를 밝히는 경우에도 안됨).
2. 저작권자의 허락을 받지 않은 콘텐츠의 무단 사용은 저작권자의 권리를 침해하는 행위로, 이에 대한 법적 책임을 지게 될 수 있습니다.

오탈자 등록

닫기
* 도서명 :
Hello Coding 그림으로 개념을 이해하는 알고리즘
* 구분 :
* 상품 버전
종이책 PDF ePub
* 페이지 :
* 위치정보 :
* 내용 :

도서 인증

닫기
도서명*
Hello Coding 그림으로 개념을 이해하는 알고리즘
구입처*
구입일*
부가기호*
부가기호 안내

* 온라인 또는 오프라인 서점에서 구입한 도서를 인증하면 마일리지 500점을 드립니다.

* 도서인증은 일 3권, 월 10권, 년 50권으로 제한되며 절판도서, eBook 등 일부 도서는 인증이 제한됩니다.

* 구입하지 않고, 허위로 도서 인증을 한 것으로 판단되면 웹사이트 이용이 제한될 수 있습니다.

닫기

해당 상품을 장바구니에 담았습니다.이미 장바구니에 추가된 상품입니다.
장바구니로 이동하시겠습니까?

자료실