그들은 알고리즘을 알았을까 ? - 길 찾던 헨젤과 그레텔, 마법 주문 외우던 해리 포터
Martin Erwig 지음, 송원형 옮김 / 영진.com(영진닷컴) / 2018년 8월
평점 :
장바구니담기


이 책을 읽게 된 것, 읽고 싶었고 관심 가지게 된 이유는 이 책의 출판사가 영진 닷컴이기 때문이다. 내가 대학교 다닐 때 내가 샀던 책들 대부분은 영진 출판사였으며, C/C++,JAVA,VB 모두 영진출판사로 공부했던 기억이 있다. 자금은 컴퓨터에서 모바일로 이동하면서, 컴퓨터 영역이 상당히 축소된 감이 없지 않지만 , 이 책이 가지는 효용성을 무시할 수는 없다.


이 책은 알고리즘에 대해 소개하고 있다. 알고리즘은 컴퓨터공학이다. 그래서 프로그래밍에 관심 가지는 이들은 알고리즘에 대해 개념과 구현방법을 공부하게 되고, 목적에 따라 자신이 원하는 프로그래밍 언어를 선택하게 된다.여기서 이 책에는 보편화된 프로그래밍 개념들을 소개하고 있는데,  특이할 점은 이 책에서 소개하는 개념들을 헨젤과 그레텔, 셜록홈즈, 인디아나 존스, 오버더 레인보우, 사랑의 블랙홀, 백 투 더 퓨처, 해리포터 이야기와 결부짓는다는 점이다. 그런데 이것이 이 책의 장점이면서 단점이기도 하다. 그냥 이야기 없이 컴퓨터 용어와 개념으로만 알고리즘을 설명하면 좀더 쉽게 다가올 수 있는 것들이 이야기와 섞이면서, 그 이야기를 모르는 독자들은 혼란스러워진다. 그림이 그려지지 않고, 내가 생각해왔던 컴퓨터 용어와 개념들을 피상적으로 끼워 맞춰 나가는데 급급해진다. 먼저 이야기부터 알고 있다는 가정하에 이 책을 읽어보는 시도를 하는게 적절하다.주객전도식으로 책을 접한다면 내가 느끼는 당황스러움을 마주할 수 있게 되는 것이다.


책을 읽으면 먼저 알고리즘이 왜 우리 앞에 나타나는지 배울 수 있다. 알고리즘은 컴퓨터로 구현되는 우리들의 현실이다. 우리의 실생활에서 나타나는 문제들을 사람의 머리가 아닌 컴퓨터를 활용해 문제들을 풀어 나가게 된다.사람의 머리가 아닌 컴퓨터를 활용하느 이유는 인간이 가지는 처리속도가 컴퓨터가 가지는 처리속도보다 느리기 때문이다. 현실을 컴퓨터 프로그래밍화 하려면 컴퓨터가 이해할 수 있도록 현실을 변환시킬 수 있어야 한다. 복잡한 구조로 되어 있는 현실을 쪼개고 또 쪼개서 단순화 하는 과정이 필요한 이유는 여기에 있다. 책에는 나오지 않는데, 수많은 이벤트가 컴퓨터 프로그래밍 과정에서 이뤄지는 이유는 여기에 있으며, 키보드를 두드리고, 마우스를 클릭하고, 단어 하나 적는 것까지 모든 것이 프로그래밍화 되는 것이다. 많은 프로그래머들이 수많은 이벤트를 하나의 클래스로 만들고, 그것을 직접 프로그래밍으로 구현하지 않고, 가져다 쓰는 이유는 시간을 줄여나가고 오류를 줄여 나가기 위해서다.


정렬하고 순환하는 것, 컴퓨터에는 수많은 데이터가 존재하고, 데이터는 데이터 구조에 따라 정렬된다.데이터가 정렬되지 않으면, 컴퓨터 처리 속도가 우리가 생각하는 것보다 더 많은 과정을 거치게 되고, 처리 과정도 그많큼 오래 걸리기 때문이다. 트리 이진 구조, 병합정렬, 이진구조 등등이 컴퓨터 프로그래밍에 있어서 요긴하게 쓰여지는 이유는 여기에 있다. 즉 컴퓨터 공학자들이 직접 구현하고 만든 알고리즘은 문제를 해결하기 위한 하나의 방편이며, 그것이 현실에 의미를 부여하고, 컴퓨터 프로그래밍화 하는 하나의 절차를 따라가는 이유는 여기에 있다. 책에는 유형과 유형화가 나오는데 ,이 두가지는 문제를 해결하기 위해 컴퓨터 프로그램에서 주어진 절차와 규칙을 따라가는 과정에 해당된다. 즉 유형과 유형화 과정을 거치지 않는 프로그래밍은 폐기되고, 쓸 수 없게 되는 것이다.


프로그래밍이란 쉬우면서도 어렵다. 중학교 때부터 배웠던 순서도가 그대로 컴퓨터 프로그래밍화 되는 것이다. 순환문과 제어문이 등장하고, 반복문이 나오는 이유는 여기에 있다. 문제는 그것을 어떻게 구현하는 것이 중요하다. 각 프로그래밍 언어는 어떤 특정한 목적에 맞게 최적화 되어 있다. C/C++이 시스템 프로그래밍에 적합하고,HTML,XML,JAVA가 웹에 최적화 된 이유는 여기에 있다. 물론 수많은 프로그래밍 언너들은 그에 맞게 쓰여지고 잇으며, 사람들은 자신의 목적에 따라 자신에게 필요한 프로그래밍 언어를 선택하고 문제를 해결해 나가고 있다.


댓글(0) 먼댓글(0) 좋아요(4)
좋아요
북마크하기찜하기 thankstoThanksTo