알고리즘에 대해 글을 써 보기로 했다.
나는 알고리즘이 전산학의 가장 기본, 감초라 생각한다. 인공지능, 운영체제, DBMS 등 전산학의 어디에고 적절한 알고리즘에 대한 이해가 필요하지 않는 곳이 없다. 튜링상을 받은 사람들을 보더라도 그 중 많은 사람들이 알고리즘을 배우다 보면 나오는 양반들이다.
나는 대학원에서 수학적 논리학과 알고리즘을 배우면서 내가 이 쪽에서 엑스퍼트가 될 만큼 스마트하지 않다는 것을 알았다. 그래도 알고리즘은 전산학을 하기에 필요하므로 알고 있어야 한다고 생각해 노력했다. 알고리즘 책을 마지막 본격적으로 본 것이 92년 경이라 기억한다.
왜 지금 다시 알고리즘이 생각날까?
우리 회사에서 새로운 상품을 준비하는데 알고리즘 훈련이 필요하기 때문이다. 알고리즘 훈련이 되지 않은 사람은 단순 coder 이고, 알고리즘을 이해하고 적용하면서 부터 프로그래머라 부를 수 있다. 알고리즘 훈련이 되고 이에 바탕한 전산학의 여러 분야를 알게되면 컴퓨터 엔지니어 또는 과학자라 부른다. 컴퓨터 엔지니어/과학자의 영원한 사부인 Donald Knuth의 The Art of Computer Programming 을 보자. 책이름을 "컴퓨터 프로그래밍 기술" 이라고 했다. 이 것 보고 이해해야지 프로그래머란다. 우리 회사가 좋은 프로그래머, 엔지니어가 필요하고 나부터 다시 훈련해야 직원들 도와 줄 수 있을 것 같다.
알고리즘을 Cormen 등이 쓴 Introduction to Algorithms 으로 공부했다. 꽤 두꺼운 책으로 이 쪽 분야에 베스트셀러다. 알고리즘 쉽지 않다. 오죽하면 빌 게이츠가 "너가 정말 좋은 프로그래머라면 Knuth의 The Art of Programming을 보아야 하고, 정말 다 읽었으면 재빨리 자기에게 이력서 보내라" 했을까? 이 책 총 4권이다. 아마 이 분야에서 가장 유명하면서도 가장 많이 쳐다 보기만 한 책일 것이다. 이 책들 4권 다 읽은 사람이라면 누가 채가는지도 모르게 채 갈 것이다. 구글의 세르게이 브린이 아마도 전용 비행기 보낼 지도 모른다.
이 정도면 인센티브 되지 않을까?
90년대 초와 지금 꽤 알고리즘 지형이 바뀌었다. 알고리즘이 바뀐 것이 아니라 알고리즘을 사용하는 SW 환경이 바뀌었다. 가장 큰 변화는 JAVA와 같은 객체지향 언어와 기술이 보급되면서 JAVA의 Collection 같이 편리한 자료구조 API 들이 등장한 것이다. 아주 좋은 현상이다.
JAVA Collection 같은 도구, 학부에서 자료구조를 가르치면서 느꼈던 어려움, 그리고 최근에 대학원에서 객체지향 기술을 강의하면서 생긴 소프트웨어 관점의 변화, SW의 재사용성, 현실적으로 어쩔 수 없이 계속 요구사항이 바뀌기 때문에 SW는 지속적으로 바뀔수 밖에 없다는 extreme programming 방법론 등이 다 우리가 알고리즘을 보는 방법의 변화를 요구하고 있다고 생각한다. 예전에 우리가 red-black tree를 직접 짰다면 이제는 JAVA Collection 중에 적당한 녀석을 불러 쓸 수 있게 된 것이다. 편리함을 얻었지만 프로그래밍 음미하는 기술을 잃어 간다. 얼마나 잘 Collection API가 구현되었을까 궁금하기도 하다. 20년 전에는 다른 사람이 만든 것 믿지 못하니 직접 자신이 구현해야 한다고 했겠지만, 이제는 갖다 쓰는 것이 맞다. 내가 재사용하도록 가르치는데...
이런 관점에서 알고리즘을 보고 싶다. 객체지향의 클래스, encapsulation, hierarchy, polymorphism이 정말 얼마나 알고리즘이 의존하는 데이터구조 (Abstract Data Type)에 딱 맞는 지 (정말 그렇다), 포인터 없는 JAVA로 어떻게 알고리즘이 잘 구현되는지 알아 보려 한다. 하다 보면 꾀가 많이 날 터인데. 재능이 부족하니 시간도 걸리겠고, 그렇지만 또 한편 내가 이해 할 정도면 최소한 The Art of Programming 을 그냥 보는 것 보다는 낫지 않을까?
오랜만에 머리도 써 보고, 자바도 훈련할 것 같아 설렌다.
Knuth교수님의 강의를 보고 싶으면 여기로. 재미있는 것이 여기에 많습니다. 영어와 알고리즘을 알게되면 새로운 세상이 보일 것입니다.
Hang on.