大学レベルで入門プログラミングを教えました。それはパンとバターのコースであり、すべての学部がそれを行いました。私たちは共通のテキストに従って一般的な試験を受けましたが、それぞれ独自の教室方式が機能していました。それから長い時間が経ちましたが、ときどきプログラミングの子供を家庭教師にすることができ、全体像はほぼ同じです。
私がやる方法は、できる限り具体的に、一番下から始めることです。生徒が知っているのは構造です。彼らはすでに多くの概念を持っています。私はそれらの上にさらに概念を構築しており、それらが形成するかもしれない、非生産的な概念を取り除きます。同時に、を行うことで学習させます。
Intel 8008チップ、EPROM、およびいくつかの回路を備えた小さなコンピューターを構築しました。I / Oチップがいくつかのスピーカーに接続されたときに少しデュエットするようにプログラムしました。小さなプログラムがどのように機能するかを説明し、カウンターをカウントダウンするための内部ループを使用します。それは遅延として機能します。次に、出力ビットを切り替えて、再度実行します。それはしばらくそれをしてから、別の遅延に切り替えて、別のピッチを与えるなどです。メモリチップには小さなタイマーがあり、タイマー入力の1つの下にコンデンサのリード線を挟むと、プログラムの実行速度が遅くなります。クラスは、スピーカーのクリック音、クリック音、クリック音を聞くことができました...私は、コンピューターが一度に1ステップずつ非常に単純なことをしていることをクラスに理解してもらいたいと思いました。。その後、コンデンサのリードを外し、「音楽」が飛び出しました。(拍手)
次に、1000個のメモリ位置を持ち、それぞれが4桁の符号付き10進数を保持する、非常に単純な10進数コンピュータ用のシミュレータを構築しました。「アキュムレータに追加」、「負の場合ジャンプ」などの非常に単純なオペコードがありました。2つの数字を追加したり、数字のリストを追加したりするような、この「マシン言語」で小さなプログラムを作成してもらいます。その後、シングルステップで動作するか、Enterキーを押して「高速」で実行されるのを見ることができます。
これのポイントは、コンピューターは非常に少数の異なる基本操作しか実行できず、一度に1つずつしか実行できないという概念を導入することでした。これは、コンピューターが複雑であり、すべてを同時に実行し、心を安易に読んでいるという印象に対抗するためです。
そこから、「本物の」言語(BASIC :)でのプログラミングに進み、非常にシンプルだが興味深いプログラムから始め、条件、ループ、配列、ファイル、マージなどを進めていきました。オブジェクトは、プログラミングを面白くする唯一のものであるため、自分で選んだプロジェクトを引き受けることができるように十分なスキルセットを配置することでした。私はプロジェクトのアイデアをいくつか捨てて、それから彼らはそこからそれを取るでしょう。私は、書かれたアイデアを求め、それから進捗報告を求めて、彼らが最後まで延期してパニックに陥らないようにします。彼らは自分たちの力で学んでいたので、プロジェクトは最高の部分だったと思います。
コンピューターが何をするかを非常に具体的に理解することで最初に基礎を置くことで、後で概念や後のコースでのポインターのような本当のスピードバンプを概念を教えるのがずっと簡単になりました。「抽象化」の概念をこの素晴らしいものとして賞賛する傾向がありますが、それは空中ではなく、具体的な基盤の上に構築される必要があります。