プログラミングはこう教える!PHP1ヶ月で生徒のエラー解決が早くなった理由

アウトプット

序文

こちらの記事では、私が講師として約1ヶ月間、プログラミング(主にPHP)を教えることになった時に、気付いたことを書いています。

教える側を体験してみて、すぐにエラーを解決してプログラミング学習の速度をあげていける生徒と、そうでない生徒の特徴を発見したので、具体的な例をあげて紹介し、最終的にどのように学習を定着させていったのか説明いたします。

現在エンジニアの方は、これから部下や後輩の方にプログラミングを教える機会も出てくるでしょう。また、この記事を読んでいる方の中には初学者も多いと思います。そんな方々が新しい言語を学ぶときに、この記事が何らかの役に立てば嬉しいです。

プログラミングを習う・教えるための基本

・プログラミングを教わるときは、自分からの発信が大事。

・プログラミングを教えるときは、生徒からの発信を引き出すことが大事。

「自分からの発信」とは何だろう?と思われたかもしれませんね。まずは「自分からの発信が大事」という点について、私の感じたことを説明します。

教わるときに自分からの発信が大事なワケ

自分から発信することによって、学びが定着します。発信といっても、Qiitaを書く、SNSを更新するといったことだけではなく、常日頃の学習に対して、「自分が今、何をしているのか」を言語化して、伝えられるということです。

逆に、学びが定着していない状態として代表的なのが、エラーが解消できないという状態でしょう。

コードを書いていてエラーが発生し、先に進めなくなる状態は最もツラいことのひとつです。そして、エラーを解消しようとあれこれググって試したりするも全く事態が好転しない。これは更にツラいことで、心が折れてしまう人も出てしまうほどです。

生徒も毎日、発生するエラーと格闘していました。ですが、様子を見ていると、すぐに解決できる人と、なかなか解決できず時間を掛けてしまう人にハッキリ分かれているな、と気付きました。

エラーをすぐに解決できる傾向のある人:

・エラーに対して、仮説を持っている

・エラーが発生するまでにやったことを、順を追って説明できる

エラーをなかなか解決できない傾向のある人:

・エラー文をまったく読んでいない

・コードをコピペまたはただ書き写しているだけ

エラーに直面したとき、「自分が何をやってエラーが発生したか」が分かっているかどうかで、解決までの道のりは短縮されます。何故なら、原因にアタリをつけやすいからです。

「あの関数を実装して、呼び出したらエラーが出た」

「データベースから値を取得して配列に入れて、その中の特定のvalueを取り出す処理を書いたらエラーが出た」

となれば、その「●●したらエラーが出た」を疑い、

「スペルミスをしているのでは?」

「ちゃんと引数を渡せていないのでは?」

「ちゃんとvalueを取得できていないのでは?」

といった仮説を立てることができますよね。

そして、「自分が何をやった結果エラーが発生したか」を他の人に説明できるか、というのも、エラー解決のための重要なポイントです(こちらは後で、講師側からの視点での項で記述します)

一方で、エラーをなかなか解決できない傾向にある人は、

・コードをコピペまたはただ書き写しているだけ

・エラー文をまったく読んでいない

ネット上で見つけたコードをそのままコピペしてきた場合、すんなり動くということはかなりレアです。だいたいの流れは一緒でも、細かな部分は自分の手元のコードと違うからです。

そうなると、コーディングの手間を省くための「おっ、自分のやりたいことはこれっぽいな。そのまま使おう」というコピペ手法によって、かえってエラーの原因特定に時間がかかるということが起こり得ます。何故なら、結局コピペしたコードの内容を細かく見ていくことになり、コピペした量に比例して労力がかかるからです。コードをコピペしても、「なぜこう書くとこう動くのか」を置き去りにして先に進まないようにしましょう。

あとは、エラー文を全く読んでいないというのも問題です。自分の書いたコードはすなわち、PCへの動作命令です。その命令に対してPCが、

「できません!なぜなら・・・」

と返事をしているのに、それに耳を貸していないということになります。

エラーメッセージは基本的に英語で表示されます。今は便利な時代で、Googleで「翻訳」と検索すれば、英語→日本語翻訳のボックスが出現します。エラーメッセージをそこに入力するだけで、その内容はすぐに日本語化できます。

問題解決への第一歩は、対話から。英語に拒否反応を示さず、エラーメッセージを読むことが大切です。

エラーをなかなか解決できない傾向にある人は総じて、「なぜこうなったか」「何が起きているのか」を自分の中で言語化できていない、と私は感じました。

さて、そこで講師が打つべき手とは、何でしょうか。

教えるときは、生徒からの発信を促す

ラバーダッキングという言葉を耳にしたことはありますか?

主にプログラマの間で使われる言葉だと思うが、「ラバーダッキング」という問題解決手法がある。ゴム製のアヒルのおもちゃに話しかけることで、頭の中で問題が整理されて解決を導く手法である。当然、ゴム製のアヒルのおもちゃである必要はなく、話しかける対象は何でもいい。ここで重要なのは、問題を口に出すことで頭が整理されて、新しいアイデアが生まれてくる、ということだ。当然おもちゃではなく、人と話すことでも同様の効果が期待できる。

(引用:https://baigie.me/nippo/2017/04/25/rubberducking/

私は、講師となった初日、生徒たちの様子を見て、以下を実施しました。

①毎朝一人ずつに、「今日やることは何か」を聞く

②夕方一人ずつに、朝に聞いた「今日やること」の進捗を聞く

目的は、進捗の把握と、現在エラーで手詰まりになっていないかの確認です。

重視したのは、

生徒自身の口から、時にはブラウザやテキストエディタも見せてもらいながら、説明を聞く

ということでした。これがすなわち生徒からの発信であり、

・今、どういうことをやっている最中か

・今、どんなエラーが出ているか

を説明させることで、生徒自身に、

・自分がやろうとしていることを俯瞰的に見る機会

・自分の最終目的を再確認する機会

・自分がやってきた手順を再確認する機会

を与えることができる、と考えたからです。

突如出現した、ゴム製のアヒル(私)。生徒たちも最初はなかなか説明できず、言葉少なでした。

それもそのはず、他人に説明しようとした途端に、自分が分かっている箇所と分かっていない箇所が輪郭も露わに、頭の中に浮かび上がってくるからです。

ラバーダッキングの効果はすぐに表れました。

今、どんなエラーが出ているか?を説明してもらっている最中に、

あっ今、話してて気付いたんですけど、ここの記述はオカシイですね」と自ら気付く生徒が出てきたのです。自分がやってきた手順を再確認することで、エラーの原因を見つけ出すことができた、というわけですね。

一方で、もともとエラー解決が早かった生徒には、現在の進捗を説明してもらったときに、

「じゃあこの画面に●×という機能を追加してみたらどうでしょう」

といった応用課題を投げかけることもしてみました。テキスト通りに書くだけでなく、一歩踏み込むことで、彼らの学びを深める手助けになりました。

生徒からの発信を促す、という取り組みが功を奏したと自負しています。

プログラミングを習う・教えるなら覚えておこう

・プログラミングを教わるときは、自分からの発信が大事

・プログラミングを教えるときは、生徒からの発信を引き出すことが大事

生徒の立場であるとき、そして講師の立場になったとき、上記を意識してみてください。

コメント

タイトルとURLをコピーしました