検索キーワード「label:経験」に一致する投稿を関連性の高い順に表示しています。 日付順 すべての投稿を表示
検索キーワード「label:経験」に一致する投稿を関連性の高い順に表示しています。 日付順 すべての投稿を表示

2021/11/05

最も効果のあった授業 (ゲームのプログラミング)

 私は5年間,秋田工業高等専門学校 (秋田高専) で教員として働き,情報関係 (プログラミング) の講義を持った経験あります.その中で多くの失敗をしました.中には大成功の授業もありました.ここでは,その大成功の授業についてお話します.

背景

秋田高専では,1年生 (高校1年の年齢) と2年生で C 言語を教えます.その文法などの基本的なことは 1年生の授業 (100分/回 × 30回) で終わります.この時点で,簡単なプログラムの作成は可能です.次の2年生の1年間で教える内容が重要です.伝統的な情報のカリキュラムでは「アルゴリズムとデータ構造」となり,私も最初はこれを教えました (講義ノート).しかし,これは大失敗でした.学生が興味を示すことなく,退屈な講義の連続でした.

次に授業を受け持つときには「アルゴリズムとデータ構造」に変わる何かを教える必要があると痛切に感じました.もっと学生が興味を持ち,プログラミングに慣れる授業に変えないとダメだと.

学習効果のあった授業

ここでは,私の最も学習効果のあった授業「情報処理応用 (C言語応用プログラミング)」について説明します.受講した学生は,高専の二年生 (高校の二年生の年齢) です.

序章

次の C 言語の授業を受け持ったとき,その文法の理解に少し時間をかけした.二年生の途中までの  (100分/回 × 45回) を使いました.残り15回の授業で,C言語の本格的なプログラム作成が可能なスキルを身に付けることを目的にしました.

最初は,インターネット通信の基礎 (1回,2回, 3回, 4回,) ということで簡単なチャットプログラムを教えました,しかし,これはうけなかったですね.二台の離れた PC 間で文字が表示されますが,学生にとっては,これは当たり前のことだったのでしょうね.「電子メールがあるので意味があるの?」と言われたときには,トホホという感じです.

そこで,次はコンピューターグラフィックスということで,OpenGL でお絵かきを教えました (1回, 2回, 3回).これは学生がちらほら反応しました.特に動画 (パラパラ漫画) の受けが良かったです.これで,学生の興味の方向が少しわかった気になりました.

次に考えたことは,OpenGL を使ったゲームです.1週間後の次の授業までに,OpenGL をつかった「インベーダーゲームもどき」と作り,学生に公開しました.授業中にゲームができるので,これはかなり受けました.もちろん,プログラムのソースコードの動作も教えました.

OpenGL で作成した「インベーダーもどき」

ゲームを作ろう

方針は決まったので,次は課題を与えるだけです.学生に次のように宣言しました,

  • これからは講義もテストもしない.1000行以上のプログラムを書けば単位を与える.
  • プログラムの内容は問わない.ゲームでも何でも良い.
これを受け,ほとんどの学生は残り約6回の授業中にゲームのプログラムの作成を行いました.それこそ,びっくりするくらい真剣にプログラミングを行っていました.私はというと, PC のある実習室をウロウロし,たまに学生からの質問に答えるだけです.ただ,この質問の内容がなかなか難しくて,即答はほとんど不可能でした.「次回までに調べて回答する」というのが精一杯でした.ゲームなので,グラフィックスに関わる質問が多かったですね.私が全く知識のない DirectX を使っている学生もおり,質問を受けた際には「俺にはわからないから自分で調べるように」と答えたものです.

平日も夜遅くまで,多くの学生が学校の実習室でプログラムを書いていました.その熱心さにかなり驚きました.当時の高専に入学してくる学生の多くは幼い頃からゲームに親しみ,それに関わる仕事に付きたいと考えている者も多くいました.そのようなことからゲームという教材はとても良かったと思います.

結果

授業を受けた全員の生徒が 1000 行以上のプログラムを作成することができました.中には,普通に売っているシューティングゲームかと思うくらいの出来のソフトウェアーもありました.その他に出来が良かったのは,ブロック崩しとか,テトリスです.もちろん,私が示したインベーダーゲームを改良したものが多かったです.中には,インベーダーの代わりに,教員の顔を撃ち落とすゲームにした者ももおり,おもしろいアイディアと感心しました.

私が最も嬉しかったのは,授業中や課外でも本当に一生懸命に皆がプログラムの作成に熱中したことです.それにより,かなりプログラミングのスキルを身につけたと思います.

まとめ

学習は動機 (モチベーション) や興味がとても大事です.動機や興味さえあれば,学生は自ら学び,教えるよりも格段に効果的にスキルを身につけるでしょう.自ら学習するように仕向け,ちょっと手伝いすることが大事です.痛切にこのことを理解しました.

教員にとっては,テクニックを教えるよりも,動機や興味を持たすことが最も大事ですね.そのためにも,教員自身がその学問に興味を持たないと話にならないです.教える側が興味がないと,教わる側が興味を持つはずがありませんから.


2021/12/23

高校生にオイラーの公式

高校生にオイラーの公式を教えると,かなり興味を持つと思います.私が初めてオイラーの公式を見たのは大学一年生の時です.これを高校生の時に知ることができたら,別の世界が広がったかもしれません.

オイラーの公式は,


\begin{align} e^{i\theta}=\cos\theta+i\sin\theta \end{align}

です.これを丸覚えしても仕方ないので,ある程度の証明らしきものを示す必要があります.例えば,テイラー展開(マクローリン展開)の式:

\begin{align} e^x &= 1+x+\frac{x^2}{2!}+\frac{x^3}{3!}+\frac{x^4}{4!}+\frac{x^5}{5!}+\frac{x^6}{6!}+\cdots\\ \cos x &= 1-\frac{x^2}{2!}+\frac{x^4}{4!}-\frac{x^6}{6!}+\frac{x^8}{8!}-\frac{x^{10}}{10!}+\cdots\\ \sin x &= x-\frac{x^3}{3!}+\frac{x^5}{5!}-\frac{x^7}{7!}+\frac{x^9}{9!}-\frac{x^{11}}{11!}+\cdots\\ \end{align}

を示します.そして,これらを微分をしたり\(x\)に適当な数値を代入すると,なんとなく左辺と右辺が等しいことが分かります.すると,元のオイラーの式が成り立つことが分かります.このテイラー展開の式も美しいので,それだけでも感動すると思います.私は大学に入って,この式を見たときには驚きましたね.高校生の時に見ると,もっと感動があったと思います.

オイラーの公式が成り立つと,三角関数に関するいくつかの便利な式を導くことができます.例えば,次のようにすると三角関数の加法定理が簡単に導くことができます.

\begin{align} \cos(\alpha+\beta)+i\sin(\alpha+\beta) &= e^{i(\alpha+\beta)}\nonumber\\ &=e^{i\alpha}e^{i\beta}\nonumber\\ &=(\cos\alpha+i\sin\alpha)(\cos\beta+i\sin\beta)\nonumber\\ &=(\cos\alpha\cos\beta-\sin\alpha\sin\beta)+\nonumber\\ &\qquad i(\cos\alpha\sin\beta+\sin\alpha\cos\beta) \end{align}

これらの最初と最後の式の実部/虚部同士が等しいことから,

\begin{align} \cos(\alpha+\beta) &= \cos\alpha\cos\beta-\sin\alpha\sin\beta \\ \sin(\alpha+\beta) &= \cos\alpha\sin\beta+\sin\alpha\cos\beta \end{align}

を導くことができます.三角関数の加法定理ですね.

このように,オイラーの公式を使うと三角関数の加法定理を簡単に導くことができます.それ以外に,様々な公式を導くことができます.たぶん,受験にも大変役に立つと思います.

レオンハルト・オイラー