예산 위원회 회원들에게 – E. W. 데이크스트라

이 글은 에츠허르 W. 데이크스트라가 1999년에 16년간 가르치던 텍사스 대학 오스틴 캠퍼스에서 은퇴하고 2년 후 대학에서 프로그래밍 입문 과정에 자바를 가르치기로 했다는 소식을 듣고 대학에 보낸 편지입니다. 데이크스트라는 이 편지를 보낸 다음 해에 암으로 사망합니다.


학부 프로그래밍 입문 교과의 함수형 언어 하스켈을 명령형 언어인 자바로 바꾸려고 한다는 소문 때문에, 그리고 예산 위원회가 잘못된 수준에서 이 결정이 내려지지 않도록 책임져야 한다고 생각해서 이 글을 씁니다.
I write to you because of a rumour of efforts to replace in the introductory programming course of our undergraduate curriculum the functional language Haskell by the imperative language Java, and because I think that in this case the Budget Council has to take responsibility lest the decision be taken at the wrong level.

여러분도 알다시피 이는 사소한 일이 아닙니다. 외지에서 온 동료들은, 엄격한 보수주의에서는 평범이 똑같이 강요될 것이라고 가정하고서는, 내가 텍사스 오스틴 같은 곳에서 어떻게 버틸 수 있는지 궁금합니다. 이에 대해 나는 “걱정 마세요. 컴퓨터 과학 학과는 매우 계몽된 곳입니다. 예를 들어, 프로그래밍 입문에 우리는 신입생들에게 하스켈을 가르칩니다”라는 식으로 답하곤 했습니다. 이 대답에 그들은 처음에는 거의 믿지 못하겠다는 반응을 하다가 결국엔 부러워합니다. 대게 그들의 학부 교과가 파스칼에서 C++나 자바 같은 것으로 전환하는 수준을 넘어서지 못하기 때문입니다.
You see, it is no minor matter. Colleagues from outside the state (still!) often wonder how I can survive in a place like Austin, Texas, automatically assuming that Texas’s solid conservatism guarantees equally solid mediocrity. My usual answer is something like “Don’t worry. The CS Department is quite an enlightened place, for instance for introductory programming we introduce our freshmen to Haskell”; they react first almost with disbelief, and then with envy — usually it turns out that their undergraduate curriculum has not recovered from the transition from Pascal to something like C++ or Java.

아주 실용적인 이유를 들자면, 대부분 학생들이 어느 정도 명령형 프로그래밍에 친숙하기 때문에 1학년 교과에는 함수형 프로그래밍이 낫습니다. 학생들이 색다른 함수형 프로그래밍을 접하게 되면, 생각보다 프로그래밍에 더 많은 것이 있다는 메시지를 즉시 깨닫게 됩니다. 그리고 그들은 곧바로 고등학교 시절의 프로그래밍 수단으로는 매우 어렵거나 불가능한 해결책을 함수형 프로그래밍이 우아하게 수용한다는 사실을 목격하게 될 것입니다.
A very practical reason for preferring functional programming in a freshman course is that most students already have a certain familiarity with imperative programming. Facing them with the novelty of functional programming immediately lithe message that there is more to programming than they thought. And quickly they will observe that functional programming elegantly admits solutions that are very hard (or impossible) to formulate with the programming vehicle of their high school days.

이렇게 선호하는 근본 이유는 함수형 프로그램이 명령형보다 수학적인 대상으로 훨씬 쉽게 인식되기 때문에 프로그램에 대한 엄격한 논증이 무엇인지 가르칠 수 있기 때문입니다. ‘지연 평가’로 인한 함수형 프로그래밍의 추가적인 장점은 운영 논증을 하지 않아도 되는 환경을 제공한다는 점입니다.
A fundamental reason for the preference is that functional programs are much more readily appreciated as mathematical objects than imperative ones, so that you can teach what rigorous reasoning about programs amounts to. The additional advantage of functional programming with “lazy evaluation” is that it provides an environment that discourages operational reasoning.

마지막으로, 하스켈과 자바를 구체적으로 비교했을 때, 하스켈이 완벽하지는 않지만, 엉망인 (그리고 상업적 확산을 위해 광범위한 광고 캠페인과 공격적인 영업 능력이 필요한) 자바보다 몇 등급이나 높은 품질입니다. 대체로 산업계가 형편 없다고 판명된 설계를 “사실상의” 표준으로 받아들이는 것은 나쁜다고 말하기에 충분합니다. 나는 대학이 더 건강한 대안들을 계속 유지해야 한다고 생각합니다.
Finally, in the specific comparison of Haskell versus Java, Haskell, though not perfect, is of a quality that is several orders of magnitude higher than Java, which is a mess (and needed an extensive advertizing campaign and aggressive salesmanship for its commercial acceptance). It is bad enough that, on the whole, industry accepts designs of well-identified lousiness as “de facto” standards. Personally I think that the University should keep the healthier alternatives alive.

바이올린이 바이올린 연주자를 만드는 것처럼, 우리 모두는 잘 다루려고 노력하는 그 도구에 의해 만들어집니다. 그리고 이런 점에서 우리의 사고 습관을 만드는 프로그래밍 언어들은 그릇된 영향을 미칩니다. 상황이 이러해서 첫 번째 프로그래밍 언어를 선택하는 일은 매우 중요합니다. 시작부터 배운 많은 것을 스스로 버리도록 강요받게 하기 보다는 컴퓨터 과학 교과 과정의 기초가 될 수 있는 문화를 만드는 수단으로 입문 프로그래밍 과정을 사용하고 싶습니다. 이런 선택이 우리 학부생에 대한 중대한 책임을 내포하고 있기 때문에 어떤 일에 대한 아무 책임자에게 맡길 수 없고 예산 위원회가 해야만 하는 것입니다. 이것은 공무원이나 직업 정치인에게 맡겨질 수 있는 것이 아닙니다. 지금 책임있는 정치가가 필요합니다.
It is not only the violin that shapes the violinist, we are all shaped by the tools we train ourselves to use, and in this respect programming languages have a devious influence: they shape our thinking habits. This circumstance makes the choice of first programming language so important. One would like to use the introductory programming course as a means of creating a culture that can serve as a basis for computing science curriculum, rather than be forced to start that with a lot of unlearning (if that is possible at all: what has become our past, forever remains so). The choice implies a grave responsibility towards our undergraduate students, and that is why it can not be left to a random chairman of something but has to be done by the Budget Council. This is not something that can be left to the civil servants or the politicians; here statesmen are needed