pco2699’s blog

学んだコード・技術について、保存しておく場所

初心者向けJava講座担当が3つの失敗をしてたどり着いた「これからのプログラミング教育法」

こんにちは、この記事はジーズアカデミーアドベントカレンダー 21日目の記事です。

ちなみに記事は弊社CEOの著作タイトルのモジリですが、そこまで大層な話をするつもりはありませんw

元財務官僚が5つの失敗をしてたどり着いた これからの投資の思考法

元財務官僚が5つの失敗をしてたどり着いた これからの投資の思考法

TL;DR

  • 今年 一年間やってきたJava講座について、得た学びについて
  • オブジェクト指向という難しい概念をプログラミング初学者にどう教えるか

今年一年やってきたJava講座について

私は今年一年のプログラマー就職キャンプという講座で、Java講座を担当してきました。

gsacademy.tokyo

きっかけ

頼まれたきっかけは、私が転職活動中で
暇だったんで、卒業したジーズアカデミーに出入りしてました。そこで

担当スタッフ「Java担当の講師が見つからなくて...」
わし 「自分Java会社でやってたんで、チューターぐらいならできますよ?(講師は無理)」
担当スタッフ 「なら講師お願いしてもいいですか!!???」
わし 「ふぁっ?」

ってなったのが始まりです。講師経験なんてなかったんで、やれんのか。。。って感じでした。

講座の対象者

対象者は、以下のような方々です。

初学者にJava&オブジェクト指向教えるのマジ鬼畜だろ... Pythonでもやらせておけよ... と心の中で思いましたが
せっかくもらった仕事を無下にするわけにもいかないので、心にしまっておきました。

講座のスケジュールについて

講座は、以下のようなスケジュールでやりました。

  • 1回目の授業(計 3回) 今年 2月 -> 以降 ターム1と呼びます
  • 2回目の授業(計 3回) 今年 10月 -> 以降 ターム2と呼びます

ターム1での失敗

こうしてバタバタと授業の準備を始めていくわけですが、ターム1は失敗ばかりでした。 オブジェクト指向Javaを教えるのに、正直、生徒のみなさん頭が??になっていたと思います。

具体的にした失敗は以下の3つです。

  1. Javaの基本構文をほぼ教えずに、オブジェクト指向の説明に入った
  2. 具体的なコードを見せずに、オブジェクト指向の概念の説明のみしてしまった
  3. オブジェクト指向でできること、すべてを授業で教えようとした

以下、それぞれの失敗について、詳しく話していきたいと思います。

Javaの基本構文をほぼ教えずに、オブジェクト指向の説明に入った

これはタイトルの時点でアカン!って感じだと思いますが、当時はこんな考えでやってました。

PHPとかJsとかやってるんだから基本的な構文はわかるっしょwwww
ってか自分で学ぶ力ついてるっしょwwwww

まあ、プログラミング初心者舐めすぎですわね。
案の定、みんなPHP/JSから切り替わった瞬間に「ファッ!?」ってなって、こんな質問がいっぱいきました。

  • このstaticってなんですか?
  • このmainってなんですか?
  • for文ってどうかけばいいんですか?

はい、すいませんでしたーーーーー!!!!!!!!!!!

具体的なコードを見せずに、オブジェクト指向の説明に入った

こちらが実際に使ったスライドです。 f:id:pco2699:20181221115819j:plain f:id:pco2699:20181221115839j:plain

わけわかめって感じですよね。はい、すいません。

当時は「ポ◯モン」に例えれば、わかりやすいんじゃね?と思ってましたが
初めて出てくる単語が多いので、単語は削って、丁寧に説明すべきだったと反省しています。

オブジェクト指向でできること、すべてを授業で教えようとした

オブジェクト指向でできることはたくさんあります。

  • クラス
  • 継承
  • インターフェース

その他、いっぱい。

ただ、オブジェクト指向でできることを教える = 新しい概念を教える = 新しい単語が出てくる、ということなのですべてを授業で教えていると、新しい概念が次々と出てくることになります。

カプセル化でpublic/privateとかゲッターセッター教えて
次に継承でabstractとextends教えて、とやっていくと
生徒さんたちは絶対についていけません。

実際、みんな??となっていました。

ターム2での改善

上記の反省点がいっぱいあったので、ターム2では、ターム1の反省点を踏まえて、大幅に内容変更することにしました。 具体的には、以下の通りです。

  • Javaの基本構文をほぼ教えずに、オブジェクト指向の説明に入った
    -> 初回授業はJavaの基本構文・for文などの授業にした。
  • 具体的なコードを見せずに、オブジェクト指向の概念の説明のみしてしまった
    -> 概念の説明をしたあと、すぐに対応するコードを見せるようにした。
  • オブジェクト指向でできること、すべてを授業で教えようとした
    ->すべてを教えようとせず教える内容を削った

具体的に説明していきます。

初回授業はJavaの基本構文・for文などの授業にした。

【ターム1】(改善前)
① オブジェクト指向① (クラス・カプセル化・継承)
② オブジェクト指向② (実装・例外処理)・JavaFX
③ 復習

【ターム2】(改善後)
① Javaの基本構文 (if文、for文、import)
② オブジェクト指向① (クラス・カプセル化)
③ オブジェクト指向② (継承)

ターム1はJavaFXなども取り扱っているのが怖い点です。 あたまおかしいな、これ。

実際に教えてみると、for文の授業を1回やっても
2回目の授業で、「for文ってどうやって書くんでしたっけ?」という質問があったりします。

1回教えても不十分なぐらいに何回も教えることが大事、ということがわかりました。

概念の説明をしたあと、すぐに対応するコードを見せるようにした。

一つの概念=新しい単語を説明した後は、それに対応するコードを見せるようにしました。

「フィールド」という新しい概念を紹介したあとは... f:id:pco2699:20181221132949j:plain

すぐに、それをコードに落としたものを紹介する! f:id:pco2699:20181221133017j:plain

こうすることによって、グッとわかりやすくなったのはもちろん
自分でも説明しやすくなりました。

新しい概念をコードなしで説明するのは、説明しづらかったのです。

すべてを教えようとせず、教える内容を削った

オブジェクト指向で教える内容を削りました。(赤字が削ったもの)

【ターム1】(改善前)

【ターム2】(改善後)

ターム1よりも内容を削減して、丁寧に説明するようにしました。

インターフェースをなくしたのはどうかな、と思いましたが
そのぶん授業自体はわかりやすくなったので、いいかな、と思っています。

2回目の授業を終えて

理解度という点では、2回目の授業のほうがわかりやすくなったと思っています。

実際、自分でも説明していて2回目のほうがグッと説明しやすかったです。

まとめ

結果的に、言いたいことは、プログラミング教育だけでなく
他の教育でも当たり前に行われていることだと思います。

  1. 新しい概念を説明するときは、丁寧に何度でも説明する。
  2. 抽象的な概念を教えるときは、抽象(概念) -> 具体(コード)を行き来して教える
  3. 新しい概念を教えるときは、すべてを教えず、場合によってはエイヤッと削る

というわけで、こんな私が四苦八苦してやっている
プログラマー就職キャンプ、来年 1月にも開催予定です!

次回も、前回に増してわかりやすい授業をやっていきたいと思っているので
ぜひ興味ある方は応募してくださいー!!