. 실습의 의미

지금 이 책을 읽고 있는 사람은 프로그래밍에 처음 입문하는 초보는 아닐 것이며 최소한 어느 정도의 경험이 있는 사람들이다. 책과 강의를 통해서 프로그래밍 관련 이론들을 접해 왔으며 많은 함수들을 이미 알고 있고 기본적인 코딩방법을 터득하고 있을 것이다. 이 실습은 지금까지 습득한 지식들을 종합적으로 조립하여 이론들이 실전에 어떻게 적용되는지를 경험하는데 의의가 있다. 개별적인 코드 조각을 다루는 것이 아니라 하나의 완성된 프로그램을 만들어 봄으로써 코딩에 대한 좀 더 넓은 시야를 확보하고 간접적이나마 개발 경험을 쌓을 수 있으리라 생각한다.

이 책은 실습을 위주로 하고 있으며 그래서 완성된 소스를 처음부터 보여주지 않는다. 기능적으로 완벽하고 버그가 없는 소스라면 수만 줄은 될 텐데 그런 소스를 보고 같이 분석해보면 어떻게 기능이 구현되었는지는 알 수 있을지 몰라도 결국 돌아서면 잊어 버릴 것이다. 만들어진 결과를 눈으로 확인하고 머리로 이해했더라도, 다시 만들어보라고 하면 그럴 수가 없는 것이다. 왜냐하면 분석만 했지 직접 만들어본 것은 아니기 때문이다.

프로그래밍이란 수많은 시행착오의 반복이다. 될 것 같으면서도 안될 때는 왜 안되는지 직접 경험해보고 이유를 스스로 분석해봐야 다음부터 그런 시행착오를 하지 않게 된다. 이런 시행착오를 많이 겪어 보면 다음에 시행착오를 피할 수 있는 방법을 스스로 찾을 수 있게 된다. 실습의 진정한 의미는 남이 만들어놓은 코드를 구경하는 것이 아니라 미리 준비되어 있는 시행착오를 겪어보는 것이다.

그래서 이 책의 예제는 MDH 공법으로 작성되었으며, 처음부터 제작 과정을 낱낱이 공개하고 같이 만들어 가면서 공부하도록 하였다. A 방법으로 코딩해야 한다는 것도 중요하지만 왜 B 방법은 안되는가도 알아야 하며, C 방법이 A 방법보다 더 느린 이유도 연구해보도록 하자. 그리고 A 방법 대신 쓸 수 있는 D, E, F 방법에 대해서도 탐구해보면 좋을 것이다. 좀 어려운 부분은 별도의 작은 예제를 만들어 먼저 주변 이론과 논리를 확립한 후에 프로젝트에 적용함으로써 갑자기 어려운 내용이 나오는 것을 방지했다.

그래서 독자들이 이 책을 제대로 읽기 위해서는 반드시 실습을 겸해 봐야 한다. 소스를 직접 입력해보기도 하고 수정한 후 다시 실행해보고 디버거로 동작을 확인할 필요가 있다. 책의 소스를 눈으로 보고 이해되기를 바라지 말고 반드시 먼저 생각한 후 소스를 보자. 책을 서너 번 정독하는 것보다 한 번 확실하게 실습을 진행하는 것이 더 효율적이므로 잠시의 귀찮음을 감수하자. 더 바란다면 잘못된 점을 직접 수정하거나 추가 기능을 구현해보는 것도 물론 좋다.

이 책은 처음부터 끝까지 추가되는 코드와 변경된 코드를 보여주고 따라서 실습할 수 있도록 구성되어 있다. 물론 처음부터 끝까지 코드를 일일이 입력해 가며 실습하기는 너무 번거로운 면이 있으므로 중반 이후부터는 알아서 필요한 부분만 실습해봐도 좋다. 하지만 시간문제로 인해 실습을 직접 하지 않더라도 결과보다는 항상 과정을 더 중요시 해야 한다. 이렇게 코딩했더니 저렇게 되더라는 것이 중요한 것이 아니라 저렇게 만들기 위해 어떻게 코딩했는가가 더 중요하다.

지금 실습의 중요성에 대해 계속 잔소리를 하고 있는 중인데 이런 실습이 쉽지 않다는 것은 인정하지 않을 수 없다. CD-ROM에 예제가 있는데 이것을 마다하고 지면에 있는 소스를 직접 입력한다는 것은 사실 무척 귀찮은 일이고 누구에게나 시간은 제한적이기 때문이다. 실습해보기를 권하지만 모든 사람들이 다 실습을 직접 해보리라 생각하지는 않는다. 그렇지 않다 하더라도 어쨌든 이 책은 실습을 가정하고 논리를 전개하기로 한다.

이 예제를 만드는데 가장 우선적으로 고려된 사항은 설명 가능한 소스를 작성하는 것이다. 그러다 보니 이미 만들어져 있는 라이브러리를 활용하지 못했고 복잡한 자료구조나 현란한 코드는 피해야만 했다. 속도를 위해 더 좋은 방법이 있더라도 너무 어려워 보이면 좀 더 간단한 다른 방법을 모색했다. 이런 저런 이유로 이 예제는 어디까지나 실습용이며 항상 효율보다는 논리를 더 우선적으로 추구한다. 다소 비효율적으로 구성된 부분에 대해서는 일단 논리를 이해한 후 직접 개선해보기 바란다.