사칙연산과 지수로만 이해하는 자료 구조와 알고리즘
수학 용어와 전문 용어가 아니어도 이해한다
이 분야의 책은 대부분 컴퓨터 공학 전공자를 대상으로 쓰였거나 고등학교 수학을 잘 안다고 가정하고 있다. 쉽게 설명했다는 책도 전문 용어로 가득하다. 비전공자나 수학적 기초가 약한 독자는 전문 용어에 두려움을 느끼며 이 주제를 이해할 만큼 자신이 똑똑하지 않다고 느끼며 이 주제를 회피한다. 그러나 자료 구조와 알고리즘은 대부분 상식선에서 이해할 수 있다. 상식이 통하는 설명으로 자료 구조와 알고리즘을 이해해보자.
프로그래밍의 핵심 스킬을 이해한다
자료 구조와 알고리즘은 프로그래밍의 핵심 스킬이다. 더 빠른 코드, 더 효율적인 코드를 작성하려면 반드시 알아야 하는 사고 방식이 자료 구조와 알고리즘에 담겨 있다. 추상적인 개념만 설명하는 대신 실생활에서 마주할 수 있는 상황을 제시하며 자료 구조와 알고리즘을 적용하는 방법을 보여준다. 자료 구조와 알고리즘은 개념만 이해하면 어떤 언어로도 구현할 수 있다는 것도 보여준다. 이 책에서는 자바스크립트, 루비, 파이썬으로 된 예제를 제시한다.
자료 구조와 알고리즘을 선택하는 방법을 배운다
전공 교재는 자료 구조와 알고리즘을 암기하고 시험만 볼 뿐이다. 입사 면접에서는 어떤 문제를 두고 배열, 연결 리스트, 해시 중에 무엇을 선택해야 하는지, 왜 그게 최적의 방법인지 묻는다. 자료 구조를 선택하는 방법, 선택한 자료 구조가 코드의 성능에 어떤 영향을 미치는지 설명하므로 암기된 단편적인 지식이 아닌 연결된 지식을 가르치고, 입사 면접을 준비할 때도 참고할 수 있게 했다.
[대상 독자]
- 이제 막 기초 프로그래밍을 배웠지만 컴퓨터 과학 기초를 배움으로써 더 나은 코드를 작성하고 프로그래밍 지식과 기술을 키우고 싶은 개발자
- 정규적인 컴퓨터 과학 수업을 받은 적이 없는 독학 개발자(또는 공부했지만 다 까먹은 개발자)면서 자료 구조와 알고리즘의 힘을 활용해 더 확장 가능하고 간결한 코드를 작성하고 싶은 개발자
- 자료 구조와 알고리즘을 쉽고 명확하게 설명한 교재를 원하는 컴퓨터 과학도. 어떤 “고전적인” 교재를 사용하든 이 책을 훌륭한 보조 교재로 사용할 수 있다.
- 경력상 활용한 적이 거의 없지만 다가올 기술 면접시험을 위해 자료 구조와 알고리즘 개념을 복습해야 하는 개발자
[지은이의 말]
자료 구조와 알고리즘은 단순히 추상적인 개념이 아니다. 자료 구조와 알고리즘에 숙달하면 더 빠르게 실행되는 보다 효율적인 코드를 작성할 수 있고, 이는 오늘날의 웹과 모바일 앱에서 특히 중요하다. 만일 마지막으로 알고리즘을 마주한 게 대학 수업이나 면접이라면 알고리즘의 진정한 힘을 활용하지 못하고 있는 것이다.
문제는 이러한 주제를 다루는 자료가 대부분 이해하기 어렵게 쓰였다는 점이다. 글은 수학 용어로 가득 차 있고 수학자가 아닌 이상 도대체 무슨 말인지 알기 어렵다. 심지어 “쉬운” 알고리즘을 표방하는 책마저도 독자가 수학 석박사 학위를 취득했다고 가정한다. 결국, 무수한 독자들이 자신은 이러한 개념을 이해할 만큼 충분히 “똑똑하지” 않다고 생각하며 회피한다.
하지만 자료 구조와 알고리즘은 전부 본질적으로 상식선에서 이해할 수 있다. 수학 표기는 그저 특수한 언어이며, 어떤 수학이든 상식적인 용어로 설명할 수 있다. 이 책은 덧셈, 뺄셈, 곱셈, 나눗셈, 지수 외에는 어떤 수학도 사용하지 않는다. 그 밖에 개념은 쉽고 분명한 말로 풀어서 설명하고, 많은 그림을 사용해 즐겁게 이해할 수 있도록 돕는다.
자료 구조와 알고리즘을 이해했다면 효율적이고 빠르고 간결한 코드를 작성할 준비가 된 것이다. 여러 코드 대안의 장단점을 가늠할 수 있으며, 지식을 바탕으로 주어진 상황에서 어떤 코드가 가장 알맞은지 결정할 수 있다.
학교에서 관련 주제를 공부 중이라서 혹은 기술 면접을 준비할 목적으로 이 책을 읽는 독자도 있을 것이다. 물론 이 책이 컴퓨터 과학 기초를 이해하기 쉽게 설명하고 있고 목표를 달성하는 데 크게 도움도 되겠지만, 자료 구조와 알고리즘 개념이 일상적인 프로그래밍에 얼마나 큰 영향력을 발휘하는지 그 진가를 알아봤으면 좋겠다. 오늘 바로 활용할 수 있는 아이디어를 엄선해서 개념을 실제적이고 실용적으로 만들기 위해 특별히 노력을 기울였다.
_제이 웬그로우
[옮긴이의 말]
자료 구조와 알고리즘은 어떤 컴퓨터 공학 교육과정에서든 가장 기본적으로 다루는 과목입니다. 하지만 기초를 쌓는 과정임에도 불구하고 처음 접하는 학생은 누구나 당혹스러움을 감추지 못하죠. 생소한 용어, 난해한 개념, 아무리 응용과학이라지만 수학도 아니고 과학도 아닌 것처럼 보이는 아리송한 내용이 끝없이 반복되거든요. 무엇을 위해 무엇을 배우고 있는가를 모르는 채 다 배웠다고 생각하며 한 학기가 끝납니다.
이렇게 되면 실제 개발과 이론 간 큰 공백이 생깁니다. 어렵게 배운 내용을 실용적으로 써보지도 못할뿐더러 다른 사람이 작성한 코드를 이해하고 분석하는 데도 한계가 있습니다. 훌륭한 프로그래머가 되려면 문법과 API만 꿰뚫어서는 부족하죠. 어떤 운영 체제에서 어떤 프로그래밍 언어를 사용하든 좋은 프로그램은 항상 적절한 자료 구조와 효율적인 알고리즘을 바탕으로 합니다. 필요할 때마다 관련 책이나 웹 페이지만 뒤적여서는 능력을 향상하기 어렵습니다.
이 책의 저자가 밝혔듯이 자료 구조와 알고리즘은 결코 어렵지 않습니다. 얼마든지 재밌고 이해하기 쉽게 설명될 수 있습니다. 복잡한 수학 개념이 아니라 이미 알고 있는 지식과 자세한 예제면 충분합니다. 이 책은 비전공자도 쉽게 따라갈 수 있는 설명과 구성으로 핵심 개념을 소개합니다. 또한, 자료 구조와 알고리즘 지식을 실제 개발에 적용해서 더욱 효과적이고 간결한 코드를 작성할 수 있도록 도와줍니다. 초심자라면 심화 과정을 듣기 전에 기초를 다지기 좋고, 숙련된 개발자라도 가볍게 되새기기 좋은 책입니다.
_심지현
'책이야기' 카테고리의 다른 글
[리뷰]개념있는 JAVA (0) | 2021.03.19 |
---|---|
[리뷰] Do it! 오라클로 배우는 데이터베이스 입문 (0) | 2021.03.19 |
[리뷰] 처음 시작하는 R 데이터 분석 (0) | 2021.03.19 |
마이크로소프트 봇 프레임워크 프로그래밍-챗봇 구축을 향한 다층적 접근 (0) | 2021.03.19 |
처음 시작하는 개발자를 위한 나의 첫 안드로이드 (0) | 2021.03.19 |