컴퓨터 프로그래밍은 모든 것이다! 효과적인 시스템을 구축함에 따라 생산성이 높아지고, 자신의 시스템을 구축한다는 것은 그 자체로도 즐거운 일이고, 게임과 같은 소프트웨어를 만들면 남도 즐겁게 할 수 있고, 정보기술의 발전에 따른 사회변화를 좀 더 수월하게 통찰할 수 있게 되며, 영어 읽기 실력 향상에 도움이 되고, 때에 따라 짭짤한 돈벌이가 되기도 한다. 게다가 - 이 점은 가장 중요한 것인데 - 컴퓨터 프로그래밍은 지적 활동 전반에 걸쳐 근본적으로 필요한 몇 가지 요소들에 대한 집중적인 훈련이 된다.
흔히 말하듯 수학이 논리적 사고에 도움이 된다고 하는데, 기호 조작 중심인 수학에 비해서 컴퓨터 프로그래밍은 훨씬 광범위한 영역에서 연습 기회를 제공한다. 그 중 몇 가지를 설명하자면 다음과 같다.
* 창조적 도전정신을 고취한다능숙한 프로그래머의 머리속은 새로운 시스템에 관한 아이디어들로 가득 차 있다. 하나의 프로그램을 만드는 동안(그것이 구구단 출력기에 불과하더라도) 새로운 기능에 대한 많은 아이디어들이 떠오르기 마련이고, 언제나 떠오른 아이디어가 구현할 수 있는 시간여유에 비해 많아서 먼저 해야 할 것을 간추리느라 애를 먹어야 한다.
* 절차를 분석하여 명확히 한다전통적으로 내려오는 프로그래밍의 주된 작업은 절차를 서술하는 일이다. 일어날 수 있는 일과 해야 할 일의 가능성을 잘 판단하여 그에 적절한 행위들을 정확하게 서술하는 것은 의사전달을 쉽게 하고, 일상이나 기업업무의 성과를 높이는 데에 도움을 준다.
* 개별 사례들을 추상화하여 개념을 만들어낸다절차들에서 공통적인 속성을 뽑아서 함수를 만들고, 함수와 자료의 연관체에서 객체를 설계하고, 객체들 사이에서 공통점을 뽑아서 추상화시키는 능력은 성공적인 개발자로 성장하는 데에 필수적이다. 개념을 만드는 일은 모든 학문 활동의 핵심 요소인데, (질을 따지지 않는다면)프로그래머는 작업 중에 어느 학자보다도 많은 개념들을 도출해낸다.
* 다량의 지식을 능숙하게 다루게 한다현대의 컴퓨터 프로그래밍은 주로 방대한 API위에서 이루어진다. 현실적으로 모든 기능들을 다 익히기 힘든 분량이고, 새로운 기능이 계속해서 추가되는 데다가, 신기술은 교육하는 기관이 없는 경우가 대부분이다. 스스로 배워야 할 것을 판단하고, 학습방법을 연구하고, 끈기있게 시간을 투자해서 배워나가야 한다.
* 오류가 적은 사고방법과 표현방법에 관해 의식하게 된다프로그램이 단지 잘 실행된다고 해서 좋은 프로그램을 만든 것이 아니다. 프로그램에 소개된 수많은 개념들(함수, 변수, 객체, 패키지 등)이나 절차들(함수의 내용)이 명확하고, 이해하기 쉬우며, 성능을 향상시키기 좋은 방식으로 구성되어 있는가 하는 것은 프로그램의 가치를 평가하는데 아주 중요하다. 프로그램의 오류는 프로그래머의 주의력이 산만해서 생기는 것이라기 보다는 실수하기 쉬운 방법으로 코딩했기 때문이라는 것이 현명한 프로그래머의 기본 가정이고, 오류로부터 더 안전한 방법론을 탐구하는 습관을 갖도록 한다.
이 요소들은 물론 컴퓨터 프로그래밍을 통해서만 훈련될 수 있는 것들은 아니고, 여러 다른 업무나 학습을 통해서 능숙해질 수 있는 것들이다. 하지만 컴퓨터 프로그래밍은 스스로 목표를 세우고, 논리적 기호를 조작하고, 그에 따른 문제를 해결하는 일이 고도로 집약된 작업이므로, 지식을 다루는 일을 하는 모든 사람들에게 더없이 좋은 훈련 도구이다. 우리 모두 프로그래밍을 배우자!
2003년 9월 18일