"정말로 컴퓨팅 과학을 가르치는 잔인함에 대해"


33

Dijkstra는 그의 논문 에서 실제로 컴퓨팅 과학을 가르치는 잔인함에 대해 다음과 같은 입문 프로그래밍 과정을 제안합니다.

한편으로, 우리는 술어 미적분학처럼 보이는 것을 가르치지 만 철학자와는 매우 다르게 행동합니다. 해석되지 않은 공식의 조작에서 초보자 프로그래머를 훈련시키기 위해 논리 대수의 모든 대수적 특성에 대해 학생들에게 친숙하게 부울 대수로 가르칩니다. 직감에 대한 링크를 더 잘 나누기 위해 부울 도메인의 {true, false} 값을 {black, white}로 이름을 바꿉니다.

반면에, 우리는 단순하고 깨끗하며 명령형 프로그래밍 언어를 건너 뛰고 기본 문장으로 여러 번 할당하고 지역 변수에 대한 블록 구조, 문장 구성을위한 연산자로 세미콜론, 훌륭한 대안 구문, 멋진 반복 및 원할 경우 절차 호출. 여기에 부울, 정수, 문자 및 문자열과 같은 최소 데이터 유형을 추가합니다. 중요한 것은 우리가 소개하는 모든 것에 해당하는 의미론이 그와 함께 제공되는 증명 규칙에 의해 정의된다는 것입니다.

처음부터 물론 모든 과정에서 우리는 프로그래머의 업무가 단순히 프로그램을 작성하는 것이 아니라 그가 제안한 프로그램이 동일한 형식의 기능 사양을 충족한다는 공식적인 증거를 제공하는 것이 주된 과제임을 강조합니다. 증거와 프로그램을 직접 디자인하는 동안, 학생은 술어 미적분으로 조작 민첩성을 완성 할 수있는 충분한 기회를 얻습니다. 마지막으로,이 입문 프로그래밍 과정이 주로 공식 수학 과정이라는 메시지를 집으로 가져 오기 위해, 우리는 문제의 프로그래밍 언어가 캠퍼스에서 구현되지 않았으므로 학생들은 프로그램을 시험하려는 유혹으로부터 보호됩니다 .

그는 이것이 진지한 제안임을 강조하고 그의 아이디어가“완전히 비현실적”이며“너무 어려워요”를 포함하여 다양한 가능한 반대 의견을 제시합니다.

그러나 그 연은 가정이 잘못되었다는 이유로 날지 않을 것입니다. 80 년대 초 이래로, 그러한 초급 프로그래밍 과정은 매년 수백 명의 대학 신입생에게 성공적으로 주어졌습니다. [내 경험상, 이것이 한 번 충분하지 않다고 말했기 때문에, 이전 문장은 적어도 두 번 더 반복되어야합니다.]

Dijkstra는 어느 과정을 언급하고 있으며, 그것을 다루는 다른 문헌이 있습니까?

이 글은 1988 년에 Dijkstra가 Austin의 Texas University에있을 때 실마리 였을 것입니다. Dijkstra 아카이브를 주최하지만 규모가 크며이 과정에 대한 다른 사람들의 의견에 특히 관심이 있습니다.

Dijkstra의 아이디어가 여기에서 좋은지 또는 현실적인지 논의하고 싶지 않습니다. 나는 이것을 cstheory.se 또는 cs.se에 게시하는 것을 고려했지만 a) 교육자 커뮤니티가 쉽게 대답 할 수있는 사람을 가질 가능성이 더 높을 수 있기 때문에 여기에 정착했다. 공식 수학. " 동의하지 않으면 이주를 위해 플래그를 지정하십시오.


2
나는 Dijkstra가 수학이 가르치는 방식의 특정 스타일 (공식에서 부르 바키 스타일의 모든 것을 만드는 것)을 비판하고 있으며 이것이 풍자라고 생각 합니다. 그러나 나는 그것을 뒷받침 할 증거가 없습니다 (답변보다는 의견이 있기 때문에).

lol "우리는 문제의 프로그래밍 언어가 캠퍼스에서 구현되지 않았으므로 학생들은 프로그램을 시험하려는 유혹으로부터 보호받습니다." 그는 자신이 가르치거나 개념화 한 수업을 말하는 것 같습니까? 생각 나게 "컴퓨터없이 교육 CS"
vzn

4
@ LoopSpace 나는 Dijkstra가 강한 의견으로 악명 높고 CS의 수학 측면에 있다고 생각하지 않습니다.
라파엘

1
자신이 제공 한 과정을 확인 했습니까? 이와 같은 구체적이지 않은 언급은 아마도 자신의 경험을 가리킬 것입니다.
라파엘

4
풍자가 아닌 것 같습니다. Dijkstra는 여기에 구체적으로 인용 된 아이디어의 지지자 / 옹호자였습니다. btw duplicate
vzn

답변:


18

Dijkstra와 동료들이 설계하고 구현 한 TU 아인트호벤의 컴퓨팅 과학 교육은 1980 년 경부터 Dijkstra의 영향력이 약해지기 전까지는 1990 년대의 절반 정도였던 것과 거의 비슷합니다.

나는 1982 년 Nijmegen University에서 CS를 공부하기 시작했습니다. 동급생은 TU 아인트호벤에서 같은 일을했습니다. 매년 봄, 우리의 중고등 학교는 전 학생들이 선택한 학생들에게 현재의 학생들에게 선택한 전공 분야를 소개하는 날을 가질 것입니다. 그리고 우리는 CS를 소개하기 위해 그곳에 있었기 때문에 우리의 경험을 비교했습니다. 그들은 크게 달랐다. Nijmegen에서는 실제 프로그래밍 언어에 대한 실제 경험을 얻었으며 실제 컴퓨터 (정확히 말하면 VM / CMS 가상 머신)에서 할당 프로그램을 실행했습니다. 아인트호벤에서는 그렇지 않습니다. 전 동급생은 첫 해에 컴퓨터를 만질 수 없다고 말했습니다. 아인트호벤의 프로그래밍은 수학적으로 언급 된 문제 정의로부터 알고리즘을 수학적으로 구성하는 법을 배우는 것을 의미했습니다. 종이에.

이 태도는 Dijkstra가 떠난 후에 다소 완화되었지만, 1990 년대 초에도 1에서 9까지의 Programmeren (프로그래밍) 이라는 과정이 수년에 걸쳐 동일한 활동으로 구성되었으며 특히 하나의 주요 장애물을 제시했습니다. 학생들. 나는 그 과정을 결코 밟지 않았지만 컴퓨터 사용에 관여 한 것은 의심 스럽다.

궁금한 점이있는 경우 : TU 아인트호벤의 오늘날 컴퓨터 과학 교육은 매우 다릅니다.


좋은 대답, 나는이 질문에 대한 희망을 거의 잃어 버렸지 만 당신이 가진 것처럼 들립니다. 내가 참조하고있는 TU Eindhoven 80s CS 과정에 대한 자세한 정보는 어디에 있습니까?
Matthew Towers

확실하지 않다. 내 대답이 최고인지 잘 모르겠습니다. 당시에는 없었습니다.
reinierpost

1
나는 1982 년 8 월에 Dijkstra의 필적에서 제록 된 Programmeren 1 en 2 강의 계획서 사본을 소유하고 있습니다. TU Eindhoven 라이브러리에는 온라인 스캔이 있습니다. 1984 년 Dijkstra와 Feijen은이 책을 1988 년 영어로 출판 된 책으로 개발했습니다 : A Method of Programming .
reinierpost

온라인 버전 @reinierpost에 대한 링크가 있습니까?
adrianN


2

"Edsger W. Dijkstra의 프로그래밍 방법, WHJ Feijen, Joke Sterringa"를보십시오. 인용문에서 인용 된 자료를 포함합니다. 즐거운 독서.


Dijkstra가 제안한 것과 같은 과정의 내용을 다루는이 문헌입니까? 그렇다면 귀하가 제공 한 출처에 대한 요약 / 소개를 제공하십시오. 그렇지 않은 경우 질문에 대한 답변이 확실합니까?
이산 도마뱀

@Discretelizard : 코스입니다.
이브 다우 스트
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.