Why numbering should start at zero by E. W. Dijkstra - 기계인간 John Grib

이 글은 데이크스트라가 1981년에서 1984년 사이에 작성한 문서 Why numbering should start at zero를 번역한 것입니다. 의역이 많으므로 원문과 대조해가며 읽기를 권합니다.

번역

자연수의 부분 수열인 2, 3, ..., 12를 표현할 때, 세 개의 점(...) 없이 표현하는 방법으로 우리에게는 다음의 네 가지가 있습니다.
  • a) 2 ≤ i < 13
  • b) 1 < i ≤ 12
  • c) 2 ≤ i ≤ 12
  • d) 1 < i < 13
이들 중 한 규칙을 다른 것보다 선호할 수 있을까요? 네 선호할 수 있습니다. 규칙 a) 와 규칙 b) 의 '경계의 차이'가 부분 수열의 길이와 같다는 장점을 갖고 있다는 사실이 유효하다는 것을 알 수 있습니다. 이로 인해, 두 개의 수열이 서로 인접한 경우 한 수열의 상한 경계가 다른 수열의 하한 경계와 같다는 점도 마찬가지입니다. 이런 장점들이 있지만, 이것들만으로는 a) 와 b) 중 어느 것을 선택해야 할지를 결정할 수는 없습니다. 그러니 논의를 새롭게 시작해 봅시다.
가장 작은 자연수가 있다는 사실을 떠올려 봅시다. 규칙 b) 와 d) 처럼 하한을 제외하게 되면, 가장 작은 자연수로 시작하는 부분 수열의 하한을 비자연수의 영역으로 넘어가도록 강제합니다.1
이것은 아름답지 않으므로, 하한에 대해서는 를 사용하는 규칙 a) 와 c) 를 선호합니다.
이제 가장 작은 자연수로 시작하는 부분 수열을 생각해 봅시다. 상한을 포함하게 되면, 부분 수열을 공집합으로 축소하게 되었을 때 상한이 비자연수가 되어버립니다.2
이것도 아름답지 않으므로 상한에는 < 를 사용하는 규칙 a) 와 d) 를 선호합니다. 이로써 규칙 a) 의 선호를 결론지을 수 있습니다.
비고 Xerox PARC에서 개발한 프로그래밍 언어 Mesa는 정수 간격을 표현할 때 위에서 언급한 네 가지 규칙을 모두 사용할 수 있는 특별한 표기법이 있습니다. Mesa를 다루며 얻은 다양한 사람들의 광범위한 경험에 의해 다른 세 가지 규칙의 사용이 계속해서 서투른 코드와 오류의 원인이 되었다는 것이 검증되었습니다. 이런 경험으로 인해 Mesa 프로그래머는 해당 세 가지 기능을 사용하지 않는 방향을 강력하게 권고받고 있는 상황입니다. 이런 실험적인 증거를 언급하는 이유는, 실제로 경험해 확인하지 않은 것이라면 불편함을 느끼는 사람들이 있기 때문입니다. (비고 끝)
길이가 N인 수열을 다룰 때, 각 원소를 구별하기 위해 어떤 첨자를 할당할 것인지는 그 다음의 고민이라 할 수 있습니다. 규칙 a) 에서 첨자를 1부터 시작하면 첨자 범위는 1 ≤ i < N+1 이 됩니다. 그러나 0 부터 시작하면 0 ≤ i < N 이라는 더 보기 좋은 범위를 얻을 수 있습니다. 그러므로 첨자는 0부터 시작하도록 합시다. 이렇게 하면 원소의 첨자는 수열에서 그 원소 앞에 있는 원소의 개수와 같습니다.
비고 많은 프로그래밍 언어가 이런 세부적인 사항에 대해 충분히 고려하지 않고 설계되었습니다. FORTRAN에서는 첨자가 항상 1부터 시작합니다. ALGOL 60과 PASCAL에서는 규칙 c) 를 채택했습니다. 최근에 개발된 SASL은 FORTRAN 규칙으로 되돌아갔습니다. 그런데 SASL에서 수열은 양의 정수에 대한 함수입니다. 무척 안타깝군요! (비고 끝)
이 글을 쓰게 된 계기는 최근에 있었던 어떤 사건 때문입니다. 대학의 수학 교수 중 한 분이(컴퓨터 과학자가 아님) 몇몇 젊은 컴퓨터 과학자들을 "규칙적인 짓거리"를 한다며 비난한 일이 있었습니다. 그 이유는 그들이 습관적으로 0부터 숫자를 세었기 때문이었습니다. 그 교수는 가장 합리적인 규칙을 의식적으로 사용하는 모습을 괴상한 행동으로 받아들인 것이었습니다. (물론 "End of …" 규칙도 괴상한 행동으로 받아들이는 사람들이 있습니다. 그러나 이것은 유용한 규칙입니다. 내가 아는 어느 학생이 시험을 보는데, 시험지의 첫 페이지 맨 아랫부분이 시험 문제의 끝이라고 암묵적으로 가정했기 때문에 거의 시험에 떨어질 뻔했습니다.) 나는 Antony Jay 가 말한, "다른 종교와 마찬가지로 조직 문화에서도 이단자는 그가 틀렸을 가능성이 아니라 옳았을 가능성이 있기 때문에 쫓겨나게 된다."는 말이 옳다고 생각합니다.

주석

    1. 역주: 1로 시작하는 부분 수열을 0 < i ≤ 12 과 같이 표현하게 될 텐데, 이렇게 되면 자연수가 아닌 0 을 사용하게 된다.
    1. 역주: 1로 시작하는 부분 수열 1 ≤ i ≤ 2 이 있다고 하자. 이 부분 수열에서 2를 제거하면 길이가 1인 부분 수열 1 ≤ i ≤ 1 이 되고, 여기에서 1을 또 제거해서 공집합을 만들면 1 ≤ i ≤ 0 이 되어 모양이 보기 좋지 않게 된다. 그러나 상한에 대해 <를 사용하게 되면 공집합이 1 ≤ i < 1 이 되어 보기 나쁘지 않다.