要約
この項目はもう一つのレッスンではなく、コースの最終的な総括である。学習計画が最初に掲げた七つの学習目標を振り返り、各単元の各レッスンがそのどれに割り当てられたかを一つの図で示し、各目標が八つの内容単元を通じてどのように扱われたかを説明し、固有の単元をもつ目標とコース全体を貫く目標とを区別し、コースが C++ を超えて残すものをまとめ、まとめテストの初回の回答を集計する目標別の自己評価の読み方を教え、コースが「C++ プログラミング II」に残すものを示す。
学習目標
- コースの七つの全体目標を述べ、各目標がどの単元とどのレッスンで扱われたかを見分ける。
- 固有の単元をもつ目標と、複数の単元を貫く目標、とりわけコンパイルとデバッグの繰り返しを伴う問題解決、および仕様とテストとを区別し、後者の目標がどのように鍛えられるかを説明する。
- コースで学んだことのうち、どの言語でも通用することとその C++ での形とを分け、コースが「C++ プログラミング II」に何を残すかを説明する。
- 目標別の自己評価、図、各まとめの挑戦課題から、どの単元とどのレッスンを復習すべきかを判断する。
コースが目指したこと
このコースは一つの全体的な目的をもって生まれた。ある言語ではなくプログラミングそのものを対象として、ゼロから正しいプログラムを書くことを教えることである。そのために、要求の厳しい道具である C++ を選んだ。C++ はマシンを隠さないからである。型の宣言を強い、コンパイルを実行から切り離し、メモリ、コピーのコスト、各数値の限界を目に見えるものにし、ほかの言語が覆い隠すことを未定義動作で罰する。学習計画 のレッスンは、この目的を七つの全体的な学習目標に展開した。図が引用する番号のまま、それらを手元に置いておくとよい。
- プログラムで問題を解く。何を入力し何を出力するかの仕様を定め、アルゴリズムを設計し、それを手で追い、書き、コンパイルし、実行し、デバッグする。その際、コンパイラのメッセージと警告を読み解く。
- 各データに適切な型を選び、その表現の限界について推論する。整数の値の範囲、オーバーフロー、浮動小数点の丸め、テキストのエンコーディングである。
- 優先順位、型変換、副作用、規格が未定義のまま残すことを知ったうえで、正しい式を組み立てる。
- 正しく、かつ停止する分岐とループで制御フローを設計し、その正しさを不変条件で根拠づける。
- 問題を明確なインタフェースをもつ関数に分解し、引数の渡し方を選び、再帰で問題を解く。
- 複合データ(列、表、レコード、テキスト、ファイル)を、基本的なアルゴリズムと標準ライブラリで表現し処理し、そのコストを見積もる。
- より大きなプログラムを複数のファイルに整理し、事前条件と事後条件で仕様を定め、体系的にテストし、その正しさを論証する。
さらに、コースの各レッスンはそれぞれ固有の具体的な目標を掲げた。各レッスンは、それぞれの目標がどの全体目標に役立つかを述べていない。その対応は外から行う読み取りであり、このサイトのほかのコースと同じ方法による。具体的な目標はそれぞれ一つの主たる全体目標に割り当てられ、ほかの目標にも関わる場合は、副次的な目標にも割り当てられる。具体的な目標は主たる目標では一つとして、副次的な目標ではそれぞれ半分として数えられる。そしてレッスンは、最も多くの重みを集める全体目標に主たる目標として結びつけられ、何らかの重みを受けるほかの目標に副次的な目標として結びつけられる。二つの目標が同点なら、単元の目標が優先し、どちらも単元の目標でなければ、番号の小さいほうが優先する。こうして、変数とメモリ のレッスンは、その目標が目標 1 と目標 2 に等しく分かれるが、単元の目標である目標 2 に結びつけられる。導入のレッスンも同じ規則に従う。一方、まとめのレッスンは独自の基準に従う。まとめの主たる目標はその単元の目標である。まとめの概念の連鎖、まとめテスト、そして挑戦課題の大半が、その単元で教えたことを集約しているからである。テキストとファイルの単元は固有の目標をもたないので、四つのレッスンのうち三つが属する目標 6 に数える。そうだとすれば、コース全体は一本の背骨の形をとる。頭は全体的な目的であり、柱は単元の順序で、各単元がそれぞれの区間をもつ。各レッスンはその区間の結び目であり、主たる目標に結ばれている。そして七つの目標は柱のまわりに浮かび、それを養うレッスンによって支えられている。
コンテンツを読み込んでいます…