링크 고마움. 정말 흥미로운 글이었음. Dijkstra가 em-dash를 자주 쓴다는 것도 재밌게 봤음
현대의 코딩 LLM이 일종의 자연어 컴파일러처럼 작동한다는 점을 감안하더라도, 기존 프로그래밍 언어가 자연어를 너무 적게 쓴다고 생각함
예를 들어 && 대신 and, if (A) B 대신 if A then B가 더 읽기 쉬움
수학은 간결함에 치중했지만, 프로그래밍은 가독성을 중시한 덕분에 더 나은 균형을 가졌다고 봄
Dijkstra가 “가독성만 추구하는 건 나쁜 거래”라고 말한 것이라면 그건 옳은 지적임
이 에세이를 정말 사랑함. 짧지만 사회 전반에 대한 통찰이 담겨 있음
그리고 너무나 명확하게 옳음
“프로그래밍의 용이함”을 “실수를 눈치채지 못하게 만드는 용이함”으로 착각하는 사람들에 대한 문장이 정말 강하게 와닿음 동적 타이핑을 좋아하는 사람들에게 특히 해당됨
Dijkstra가 1980년대에 이미 “교육이 지적 훈련에서 멀어지면서 언어 구사력이 떨어지고 있다”고 썼다는 점이 놀라움
네덜란드에서는 학생 통과율로 커리큘럼을 평가해서, 통과율이 낮으면 난이도를 낮추는 식이라 함
이게 수십 년 반복되면 어떤 결과가 나올지 뻔함
남아프리카공화국이 그 대표적인 예임. 교육 시스템이 국가 전체적으로 붕괴 중임
내가 자주 공유하는 글 중 하나는 EWD831임
배열 인덱스가 왜 0부터 시작해야 하는지, 구간을 왜 하한 포함·상한 제외로 정의해야 하는지를 설명함
하지만 그 글이 항상 0-based vs 1-based 논쟁에서 등장하는 게 아쉬움
사실 1-based가 더 나은 경우도 있음. 예를 들어 역방향 반복에서는 1-based가 더 자연스러움
오프셋은 0-based, 인덱스는 1-based로 구분하는 게 합리적이라는 주장도 가능함
관련 글: Again on 0-based vs 1-based indexing
Dijkstra의 주장을 이해하지만, 왜 Fortran이 1부터 시작했는지를 언급하지 않은 건 의외였음
IBM 704의 감산형 인덱스 레지스터 구조 때문이었고, 이게 열 우선 배열을 효율적으로 만들었음
Cray, CUDA, 현대의 column-oriented DB도 비슷한 원리를 사용함
결국 Fortran은 메모리 오프셋 관점에서는 Dijkstra의 규칙을 따르고 있었음
책의 장(chapter)을 0부터 시작하는 건 여전히 헷갈림
메모리 주소가 0부터 시작하는 건 전압 조합 때문이지, 순서 개념 때문은 아님
세상에는 “0번째 세기”나 “0번째 마일” 같은 건 없으니까, 책의 장도 마찬가지라고 생각함
하지만 “0번째 장”은 시작점을 의미한다고 볼 수 있음
예를 들어 길 안내에서 “세 블록 가세요”라고 하면 출발점은 0번째 블록임
컴퓨터 과학에서는 첫 번째 요소의 주소가 base + 0이므로, 오프셋 계산 때문에 0부터 시작함
“0장”은 본문 전에 필요한 기초 개념을 담는 용도로 자연스럽게 쓰임
예를 들어 1968년의 Tensor Analysis on Manifolds는 집합론을 다루는 0장을 두었음
“0번째 법칙(zeroth law of thermodynamics)”처럼, 기존 순서보다 앞선 개념을 표현할 때도 사용됨
어떤 나라에서는 건물 층수를 0층(G층) 부터 세기도 함
결국 0에서 시작하는 게 “자연스럽지 않다”는 건 문화적 편향일 뿐임
수학적 사고에 관심 있다면 EWD717과 EWD765를 추천함
두 글 모두 흥미로운 문제 해결 과정을 담고 있음
EWD498: How do we tell truths that might hurt?을 보면
“자연어 프로그래밍은 실패할 수밖에 없다”는 구절이 인상적임
또 다른 추천은 EWD1305로,
학생들의 질문에 대한 답변을 모은 글임
Dijkstra는 인터넷의 인기로 인해 과학적 성향이 약한 학생들이 컴퓨터 과학으로 몰려들었다고 비판함
그리고 “잘 프로그래밍하는 법”이 거의 가르쳐지지 않는 현실을 지적함
Hacker News 의견
2025년 맥락에서 가장 중요한 글은 “natural language programming의 어리석음” 에 대한 Dijkstra의 에세이임
On the foolishness of "natural language programming"
예를 들어
&&대신and,if (A) B대신if A then B가 더 읽기 쉬움수학은 간결함에 치중했지만, 프로그래밍은 가독성을 중시한 덕분에 더 나은 균형을 가졌다고 봄
Dijkstra가 “가독성만 추구하는 건 나쁜 거래”라고 말한 것이라면 그건 옳은 지적임
그리고 너무나 명확하게 옳음
동적 타이핑을 좋아하는 사람들에게 특히 해당됨
Dijkstra가 1980년대에 이미 “교육이 지적 훈련에서 멀어지면서 언어 구사력이 떨어지고 있다”고 썼다는 점이 놀라움
네덜란드에서는 학생 통과율로 커리큘럼을 평가해서, 통과율이 낮으면 난이도를 낮추는 식이라 함
이게 수십 년 반복되면 어떤 결과가 나올지 뻔함
내가 자주 공유하는 글 중 하나는 EWD831임
배열 인덱스가 왜 0부터 시작해야 하는지, 구간을 왜 하한 포함·상한 제외로 정의해야 하는지를 설명함
사실 1-based가 더 나은 경우도 있음. 예를 들어 역방향 반복에서는 1-based가 더 자연스러움
오프셋은 0-based, 인덱스는 1-based로 구분하는 게 합리적이라는 주장도 가능함
관련 글: Again on 0-based vs 1-based indexing
IBM 704의 감산형 인덱스 레지스터 구조 때문이었고, 이게 열 우선 배열을 효율적으로 만들었음
Cray, CUDA, 현대의 column-oriented DB도 비슷한 원리를 사용함
결국 Fortran은 메모리 오프셋 관점에서는 Dijkstra의 규칙을 따르고 있었음
책의 장(chapter)을 0부터 시작하는 건 여전히 헷갈림
메모리 주소가 0부터 시작하는 건 전압 조합 때문이지, 순서 개념 때문은 아님
세상에는 “0번째 세기”나 “0번째 마일” 같은 건 없으니까, 책의 장도 마찬가지라고 생각함
예를 들어 길 안내에서 “세 블록 가세요”라고 하면 출발점은 0번째 블록임
base + 0이므로, 오프셋 계산 때문에 0부터 시작함예를 들어 1968년의 Tensor Analysis on Manifolds는 집합론을 다루는 0장을 두었음
“0번째 법칙(zeroth law of thermodynamics)”처럼, 기존 순서보다 앞선 개념을 표현할 때도 사용됨
결국 0에서 시작하는 게 “자연스럽지 않다”는 건 문화적 편향일 뿐임
Dijkstra가 최초의 인터럽트 설계를 회상하는 글을 정말 즐겨 읽음
EWD1303: The first interrupt
수학적 사고에 관심 있다면 EWD717과 EWD765를 추천함
두 글 모두 흥미로운 문제 해결 과정을 담고 있음
EWD498: How do we tell truths that might hurt?을 보면
“자연어 프로그래밍은 실패할 수밖에 없다”는 구절이 인상적임
또 다른 추천은 EWD1305로,
학생들의 질문에 대한 답변을 모은 글임
Dijkstra는 인터넷의 인기로 인해 과학적 성향이 약한 학생들이 컴퓨터 과학으로 몰려들었다고 비판함
그리고 “잘 프로그래밍하는 법”이 거의 가르쳐지지 않는 현실을 지적함
내가 가장 좋아하는 글 중 하나는 EWD898: Threats to computer science임
그리고 EWD899의 서두에서 AI 논문을 신랄하게 비판하는 부분도 인상적임
“그 학회에 참석하지 않아서 다행이었다”는 문장이 특히 강렬했음
예전에 명함 뒷면에 Dijkstra의 명언을 넣었음
“Computer Science is no more about computers than astronomy is about telescopes”
언젠가 그의 모든 글을 eReader용으로 모아 여행 중에 읽어볼 생각임
결국 우리가 다루는 건 코드(망원경)이고, 그 품질이 우리의 성과임
UT에서 수업을 들었는데, Dijkstra는 학생들에게 연필 대신 펜으로 시험을 보게 했음
지울 수 없을 때 오히려 실수를 줄이는 훈련이 된다고 생각했음