私は高校で最初のプログラミング言語としてC ++を教えられましたが、それは「C +」に似ていましたが、今ではそれについて言及しています。cout
コンソールとファイルにテキストを書き込むために使用しましたが、かなりの数のC関数も使用していました(getch()
私のお気に入りでした)。
基本を教える最も効果的な(そしておそらく楽しい)方法は、目標指向のカリキュラムを使用することだと思います。ベースのゲーム(またはロボット工学の同等物)。次に、「Xをどうやってやるの?」と尋ねると、Xを既に見た例で分類できます。たとえば、「最初にZで行ったようにユーザーから入力を取得する必要があります。 3Dグラフィックス『が、あなたはまだそれがどのように説明することができ...」Xはおそらく、彼らは、例えばを行うために、追加の知識を必要とすることを何かになりますので、(明らかにそれは、これは実際には容易ではない』でしょうハイレベルで働きます方法)。
それらを示す例は、コピーペーストされたブラックボックスマジックとして始まり、プログラミングパズルの断片がゆっくりと解明されるにつれて謎が解き明かされます。たとえば、生徒はif
s の基本を非常にすばやく学習しますが、ブール式はif
sの条件(古典的なif (blah) return true; else return false;
コードにつながる)内での使用に限定されないことに気付かないでしょう。
コンテナとして配列またはベクターを選択するかどうかの微妙さは、最初は学生とは無関係に思えます。ベクトル/配列は、多くの変数を1つの変数として持つ方法であり、インデックスを介してアクセスできます。できる場所に固執してください。ポインタも後まで理解されません。それは物事を説明するべきではないということではありません。一度にすべてを説明することはできず、説明した内容が完全に吸収されるわけではありません。人間は直線的にではなく、有機的に学習します。オペレーターのオーバーロードが何であるかを適切に理解するまで、私cout
は数年間使用していました!
ああ、繰り返しを恐れないでください。「これは私たちがやったHello Worldプログラムのようなものです。コンソールにテキストを書き込んだことを覚えていますか?」(いいえ...)「念のためもう一度やり直しましょう。」...そして質問をします!生徒に楽しい例とたくさんのやり取りをしてもらいましょう。
C ++は複雑な言語であり、あなたが何をしようとも、その複雑さのかなりの部分(および一般的なプログラミング技術の部分)は生徒に失われます。あなたがそれらを見せることはすべて彼らにとって新しいものです。そのほとんどは、深い理解レベルでは沈みません(少なくとも、すぐには理解できません)。メモリの仕組み、PCのコンポーネントの相互作用、スタックとヒープの内容、ポインター、クラス、ループ、if-elseチェーンなどは、大部分が正しく理解できません。これで結構です!それらを使用することを理解する必要はありません-驚くほどのクールなプログラムは、5つのネストされた冗長if
sと43などの名前の付いた43個の変数を持つ、非常にugい1000行関数で記述できますx_2r
。重要なことは、生徒が絶えず学習し改善していることです。ブラックボックスは、長い目で見て透明(または少なくとも半透明のグレー)になれば問題ありません。コースの終わりまでに、彼らはデザインパターンが何であるかを知らないかもしれませんが、彼らは最初の数週間で書いたプログラムを振り返り、コードをしつこく見ることができるはずです。彼らは、最初に書いたプログラムが実際にどのように機能するかをかなりの詳細レベルで理解する必要があります(それを書いたとき、彼らは何も知りませんでした)。しかし、彼らはすべてを知りません - まだ。