「計算科学を本当に教えることの残酷さについて」


33

ダイクストラは、コンピューティングサイエンスを実際に教えることの残酷さについてのエッセイで、入門的なプログラミングコースについて次の提案を行っています。

一方では、述語計算のように見えるものを教えますが、哲学者とは非常に異なって行います。初心者プログラマーに未解釈の式の操作を訓練するために、論理代数のすべての代数的特性に学生を慣れさせるブール代数としてそれをもっと教えます。直感へのリンクをさらに切断するために、ブールドメインの値{true、false}の名前を{black、white}に変更します。

一方、スキップと複数の割り当てを基本ステートメントとして、ローカル変数のブロック構造、ステートメント構成の演算子としてのセミコロン、素敵な代替構成、素敵な、シンプルでクリーンな命令型プログラミング言語を教えます必要に応じて、プロシージャコールを繰り返します。これに、ブール値、整数、文字、文字列などの最小限のデータ型を追加します。本質的なことは、導入するものが何であれ、対応するセマンティクスはそれに付随する証明ルールによって定義されるということです。

最初から、そしてコース全体を通して、プログラマーのタスクはプログラムを書き留めることだけではなく、彼の主なタスクは、彼が提案するプログラムが同様に正式な機能仕様を満たしていることを正式に証明することであることを強調します。証明とプログラムを手に取りながら設計している間、学生は述語計算で操作の敏a性を完璧にする十分な機会を得ます。最後に、この入門プログラミングコースは主に正式な数学のコースであるというメッセージを伝えるために、問題のプログラミング言語がキャンパスで実装されていないため、学生はプログラムをテストする誘惑から保護されています。

彼はこれは深刻な提案であることを強調し、彼の考えが「全く非現実的」で「非常に難しすぎる」など、考えられるさまざまな異議を概説しています。

しかし、そのkitは仮定のためにも飛ぶことはありません。間違っていることが証明されています。[私の経験では、これは一度だけでは不十分だと言っているので、前の文を少なくとももう2回繰り返す必要があります。]

ダイクストラはどのコースを参照していますか?また、それについて説明している他の文献はありますか?

エッセイは1988年にダイクストラがテキサス大学オースティンの大学にいたときに登場しました。これはおそらく手がかりです-彼らはダイクストラのアーカイブをホストしていますが、それは巨大であり、私はこのコースについて他の人から特に興味があります。

ここでは、ダイクストラのアイデアが良いか現実的かを議論したくありません。これをcstheory.seまたはcs.seに投稿することを検討しましたが、a)教育者のコミュニティには簡単に答えられる人がいる可能性が高いため、b)ダイクストラ自身が彼のコースは「主に正式な数学。」同意しない場合は、移行のフラグを設定してください。


2
ダイクストラは数学の教え方の特定のスタイル(すべてを構築するもの、公理からブルバキスタイル)を批判しており、これは風刺として意図されていると確信しています。しかし、私はそれを裏付ける証拠がありません(したがって、答えではなくコメントです)。

「問題のプログラミング言語はキャンパスに実装されていないため、学生はプログラムをテストする誘惑から保護されています」彼は彼自身が教えた/概念化したクラスを参照しているように見えますか?「コンピューターなしでCSを教える」ことを
vzn

4
@LoopSpaceダイクストラは強い意見で悪名が高いとは思わない。彼は間違いなくCSの数学側にいた。
ラファエル

1
彼自身が提供したコースをチェックしましたか?そのような不特定の参照は、おそらく彼自身の経験を指し示しています。
ラファエル

4
風刺ではないようです。ダイクストラは、ここで具体的に引用されたアイデアの一般的な支持者/擁護者でした。btw 複製
-vzn

回答:


18

これは、ダイクストラと同僚によって設計および実装されたTU Eindhovenのコンピューティングサイエンス教育が、1980年頃からダイクストラの影響が衰え始め、1990年代半ばまで衰退し始めるまでのようでした。

1982年にナイメーヘン大学でCSの勉強を始めました。同級生がTUアイントホーフェンでも同じことをしました。毎年春になると、私たちの古い中学校では、元の生徒が自分の選んだ学問分野を現在の生徒に紹介する日があります。それらは大きく異なっていました。ナイメーヘンでは、実際のプログラミング言語で実際の経験を獲得し、実際のコンピューター(正確にはVM / CMS仮想マシン)で割り当てプログラムを実際に実行しました。アイントホーフェンではそうではありません。私の元クラスメートは、彼らが最初の年にコンピューターに触れることは許されないと私に言った。アイントホーフェンのプログラミングとは、数学的に述べられた問題定義から証明可能な正しいアルゴリズムを数学的に構築することを学ぶことを意味していました。紙の上に。

ダイクストラが去った後、この態度は幾分緩和されましたが、1990年代初頭でさえ、1年から9年の番号が付けられた数年にわたるProgrammerer(Programming)と呼ばれるコースは、同じ活動から成り立っていました。学生。私はこれらのコースを受講したことはありませんが、コンピューターの使用が関与しているとは思いません。

ご参考までに、今日のアイントホーフェンのコンピューターサイエンス教育は非常に異なっています。


すばらしい答えです。私はこの質問に対する希望をほとんど失いましたが、あなたはそれを持っているようです。あなたが言及しているTU Eindhoven 80s CSコースについてもっと知りたいと思うアイデアはありますか?
マシュータワーズ

わからない。私の答えが最高かどうかもわからない-私は当時そこにいなかった。
reinierpost

1
私は、ダイクストラの手書きからゼロックスされた1982年8月付けのProgrammeren 1 en 2シラバスのコピーを所有しています。TU Eindhovenライブラリには、オンラインスキャンがあります。1984年、ダイクストラとフェイジェンはこれを本に発展させ、1988年に英語で発行された「プログラミングの方法」
reinierpost

オンラインバージョン@reinierpostへのリンクはありますか?
adrianN


2

「Edsger W. Dijkstraによるプログラミングの方法、WHJ Feijen、Joke Sterringa」をご覧ください。引用で喚起された資料が含まれています。楽しい読書。


ダイクストラが提案したようなコースの内容を論じているこの文献はありますか?もしそうなら、あなたが提供するソースに要約/紹介を提供してください。そうでない場合、これは質問に答えていると確信していますか?
離散トカゲ

@Discretelizard:それはコースです。
イヴ・ダウスト
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.