『How to Design Programs ( HtDP )』は、マティアス・フェライゼン、ロバート・ブルース・フィンドラー、マシュー・フラット、シュリラム・クリシュナムルティによる、コンピュータプログラムの体系的な設計に関する教科書です。MIT Pressは2001年に初版を、2018年に第2版を出版しました。購入可能なペーパーバック版に加えて、オンラインでも無料で入手できます。 [ 1 ]
本書は、現在普及しているプログラミング言語の構文ではなく、コードの体系的な設計に焦点を当てた最初の書籍です。[ 2 ]本書の重要な概念は「設計レシピ」であり、問題記述から段階的にプログラムを作成する6つのステップからなるプロセスです。本書は当初、教育プロジェクトTeachScheme!(後にProgramByDesignに改名)で使用されていましたが、UBCの人気オンラインコースを含む大学や高等教育機関でプログラム設計の原則を教えるために採用されています。[ 3 ] [ 4 ]
この斬新なアプローチをサポートするために、HtDPには1つだけでなく、5つの初心者向けプログラミング言語[ 5 ]と、初心者にも使いやすいIDE [ 6 ]が付属しています。
HtDPによれば、設計プロセスは、問題記述を綿密に分析することから始まり、目的とするプログラムが消費および生成するデータの種類を厳密に記述することを目指す。これらのデータ記述の構造が、プログラムの構成を決定する。
次に、本書は段階的に複雑さを増していくデータ形式を紹介します。まず原子形式のデータから始め、次に任意の大きさのデータを含む複合形式へと進みます。各データ定義について、本書はプログラムの構成方法を原理的に説明しており、新しいデータ形式に遭遇したプログラマーが体系的にプログラムを構築できるようになっています。
『コンピュータ・プログラムの構造と解釈』(SICP)と同様に、 HtDPはプログラミング言語Schemeの派生版に基づいています。HtDPには、 DrRacketという独自のプログラミング統合開発環境(IDE)が含まれており、一連のプログラミング言語を提供しています。最初の言語は、関数、アトミックデータ、および単純な構造体のみをサポートしています。各言語は、前の言語に表現力を追加していきます。最も規模の大きい教育用言語を除き、HtDPで使用されるすべての言語は関数型プログラミング言語です。
2004年の論文「コンピュータサイエンスカリキュラムの構造と解釈」[ 7 ]では、同じ著者らが『 How to Design Programs ( HtDP )』と『Structure and Interpretation of Computer Programs ( SICP )』の教育的焦点を比較対照している。14ページの論文の中で、著者らはHtDPの教育的焦点とSICPの教育的焦点を区別し、HtDPがSICPに関して一部の学生や教師が抱えていた問題に対処する教科書としてどのように設計されたかを示している。
本稿では、 SICPの出版を取り巻く教育状況について概説する。まずSICPの歴史と批判について述べ、次にコンピュータカリキュラムの目標を説明する。続いてHtDPの教育原理、特に設計原理の暗黙的教授法と明示的教授法の違いについて述べる。さらにSchemeの役割と理想的なプログラミング環境の重要性について説明し、最後にSICPとHtDPのコンテンツ評価と学生・教員の反応を比較検討して結論とする。
本論文の焦点の一つは、 SICPとHtDPの間で必要とされるドメイン知識の違いを強調することである。論文中の図表では、SICPとHtDPの主要な演習を比較しており、関連する本文では、SICPの演習はHtDPの演習よりも高度なドメイン知識を必要とすることが説明されている。
この論文では、 HtDPの著者らがSICPの問題点に対処するために行った主な取り組みとして、以下の4点を挙げている。
本論文では、関連するデータ定義が自己参照的であり、通常は単純な設計プロセスを必要とする構造的再帰と、問題解決プロセスの途中で新しい問題データが生成され、問題解決方法が再利用され、多くの場合、アドホックな数学的洞察を必要とする生成的再帰を区別し、この区別によって彼らのアプローチがオブジェクト指向(OO)の世界にも拡張可能になることを強調している。
本論文は、教室でHtDPを使用した後の様々な教員や学生からの反応の説明で締めくくられている。