はじめに
私はこれまでにアルバイトやTA (Teaching Assistant)を通して小学生、中学生、高校生、大学生にプログラミング教育をしてきました。また、予備校に通って一浪して大学に入学したという経歴もあります。これらの経験から、「教育とはどうすべきか」「学ぶのに必要なものは何か」「プログラミング学習の特別な点はなにか」などを自分なりに悟りました。
本記事ではこれらのことを踏まえながら、「プログラミングが上達しない人の傾向」や「よく陥るエラー」などを紹介しつつ、プログラミング教育者がすべきことのヒントを示したいと思います。
プログラミングが上達しない人の傾向
- 知的好奇心がない
- そもそも考えることが好きではない
- 論理的思考能力の不足、あるいは欠如
- 事象の本質や仕組みを考えたことがない
- 検索力が低い、検索の仕方を知らない、知ろうとしない
- 検索する癖がない、分からなかったことを分からないままにしていても生きていられる
- 質問の際「動かないんですけど〜」「何もしていないのに〜」と言う
- 説明文を読まない、あるいは文字が読めていても内容は理解していない
- エラー文や警告文を恐れている・読まない・目に入っていない
- 日本語じゃないと諦める(英語を読みたがらない・恐れている)
- 説明した通りに実装せず、いきなりアレンジを加える
- 分かっていないのに分かったフリをする
- プログラミングができる人やハッカーのことを雲の上の存在だと思い込んでいる
- 自分はできる方の人間だと思い込み、先人(年齢や経歴は関係ない)を敬わない
- まだ早い(学ぶに足りるほどの知識や知能のベースが出来上がっていない)
- 達成したいことに対する執念が足りない、情熱が欠如している
- そもそも興味がない
- 猫以下、あるいはサル以下である
- 我々とは異なるプロトコルの生物である
このリストのいくつかが当てはまったからといって、プログラマになれないというわけではありません。ほとんどの項目は、意識を変えるだけで覆せます。教育者がしてあげなければならないことの根本は、意識改善であると思っています。
もしもこれからプログラミングを始めようとしている、あるいはプログラミング学習を始めたばかりという人がこの記事を読んでくれているのであれば、ぜひともこのリストに並ぶ項目の何がいけないかの本質について考えてみてほしいです。
初心者は気にしているけれど実はどうでもいいこと
タイピング速度の遅さ
タイピング速度の遅さに関しては、本当に気にする必要がありません。続けていれば速くなっていきますし、速ければいいとうことではないので。プログラマは文字打ってる時間よりも考えている時間の方が長いと思いますし。
経験のなさ
経験のなさについては、気にするくらいならその時間で一つでも多くコードを書け、アルゴリズムを組め、アプリを作れ、リリースしろとしか言いようがないですね。どんな一流プログラマも未経験だった時代があるということは考えればすぐに分かるんですけどね...
質問をする行為に対する恥じらい
「質問をする行為に対する恥じらい」に関しては、プログラミングに限った話ではありませんよね。本当にくだらないです。
「質問」に関する話でもっと大切なのは、「誰に教えを乞うのか」ということです。説明の仕方が合わない人や質問者がどのくらい分かっていないのかを配慮できない人に教えを乞うてもダメです。時間の無駄です。余計分からなくなる可能性の方が高いまであります。
初心者がよく陥るエラーベスト5
- スペルミス、大文字小文字の間違え(エラーの80%以上がこれ)
- 閉じ括弧がない、セミコロンがない
- 初期化しないで変数を使う(いわゆるぬるぽ)
- 作った関数を呼び出していない、呼び出すタイミングが間違っている
- 保存していない、更新していない
よく陥るエラーの栄えある第1位はスペルミス、大文字小文字の間違えです。よくあるのは、b
とd
、p
とq
、l
と1
、m
とn
の間違いですね。リファレンスを写すときはちゃんと見て、単語を読んでくれという思いですが、やはり英語が苦手な人だと結構間違いあるんですよね。あとは大学生でもタイピングミスは割とあります。IDEの補完・修正を利用してほしいものです。
第2位の「閉じ括弧がない、セミコロンがない」というのはあるあるなミスですよね。私はこれについて教えるとき、「セミコロンがないのはトイレに行った後おしりを拭かないのと一緒だよニコッ」と説明しています。小中高生はハッとした顔をして次からこのミスはかなり減りますね。
第3位の「初期化しないで変数を使う」NULL落ちに関しては本職のプログラマでもたまにある話ですよね。NULLという難しい概念の説明としては、「財布にお金入っていないと困るでしょ。使う前に中身を入れておかないといけないね。」という風に説明しています。みんな「困る〜( ̄∇ ̄)」と返事をします。
第4位の「作った関数を呼び出していない、呼び出すタイミングが間違っている」はちょっと高度でお茶目なミスですよね。
生徒「頑張って書いたのに動かないの〜」
私「ん?...いや、作ったのに使ってないや〜ん」
というやりとりは結構ありましたね。
呼び出すタイミングが間違っているというのはようやくロジックに関わるミスですね。プログラムは上から順に処理されていくというのを理解していないと起こりやすいミスです。
第5位の「保存していない、更新していない」は教える側としては結構ずっこけますね。全然コードが間違ってないのに警告やエラー表示がされていて頭を捻ったのに更新やクリアを行ったら動くというパターン。IDEの反応が鈍くなることたまにあるので、一旦更新をかけてみるというのは覚えておくと良かったりします。
全体として、初心者のミスはロジックによるものではありません。正直教師が必要なものではありませんね。しかし、大抵のプログラミング教育の現場では、凄腕のプログラマがそのスキルリソースを発揮しなくてもいいようなミスへの対応に忙しいのです。
初心者プログラマへのお願い
- お願いだからインデントしてくれ
- Copy,Paste,Cut,Undoのショートカットくらい知っていてくれ
- Tabを使うことを覚えてくれ
- 画面を確認しながら文字を入力してくれ
- 変数名と関数名を「自分の名前+数字」にしないでくれ
- 保存をしてくれ
- 同じコードをコピーして各所の末尾に
2
をつけるのをやめてくれ - 質問をしてくれ
- 話を聞いておくれ
- メモをとっておくれ
Qiitaユーザの皆さんなら詳しいことは書かなくても分かっていただけると思います。
プログラミングを学び始めるベストな時期
言語ベースのプログラミングを習学するのに最適なタイミングは、中学3年生〜高校1年生だと思います。理由としては
- 負の数の概念を学んでいるなど基本的な数学知識が修得済みである
- 一般的な英単語が読め、未知の英単語でも推論ができる
- 自己管理能力が身につき始める
などが挙げられます。
と言っても、人によりけりで、小学生でも大学生顔負けの論理的思考能力や数学力を有している子もいますので、あくまで目安ですが。
英才教育として(あくまで言語ベースでのプログラミングに関しては)やれば良いというものではないと思います。
言語ベース以外のものとしては、Scratchとかマインクラフトとか、最近ではNINTENDO LABとかありますので、そちらからやってみるというのはありだと思います。あまりにも理解力や知能のベースが出来上がっていない状態で始める必要性はないと思います。本人も楽しくないと思いますし...。
プログラミングが向いている子の特徴
- ものづくりが好きな子
- 仕組みを考えるのが好きな子
- ゲームのセンスがある子(決してゲームをプレイするのが好きな子という意味ではない)
- 生活環境を快適にするのが好きな子
- 効率の良さにロマンを感じる子
- 限られた条件下で工夫することができる子(無いものを代用品でなんとかしたり)
プログラミング学習の特別な点はなにか
- 正解が一つではない点
- 学んだことがすぐに活かせる点
- 身に付けることにより生産性、効率が向上する点
- 語学力、数学力を同時にある程度高いレベルで必要とする点
結局のところ...
極論を述べます。
ズバリ「できるやつは自力で伸びる。できないやつは教えても無駄。」ですね。
これはバカには教えても無駄というネガティブなことを言いたいのではありません。
「本人にやる気がないなら成長はない」という意味であり、ことわざで言うならば、「好きこそ物の上手なれ」ですね。
では、教育者は何をすればいいのか? 保護者は何をすればいいのか?
エゴをなくせば皆さん分かっていることだと思います。
教育者は好きになるきっかけを与えてあげればいいのです。
保護者は好きなもの・夢中になれるものを見つけてあげればいいのです。
義務教育の悪いところは、好きになるきっかけを与えてあげられるようなカリキュラムが組まれていない、授業がなされていないことだと思います。保護者の抱える問題は、自分の理想を子供に押し付けてしまいがちということだと思います。子供たちの未来のこと、子供たちの幸せのことを本当に考えてますか?ということです。自分の理解できないものに子供がハマっている時、あなたはどんな態度をとるでしょうか。その子の才能を最大限発揮できる舞台は、あなたの範疇を超える世界にあるかもしれません。でもちゃんと見てあげて、話を聞いてあげてほしいです。そこから、学びは始まるのだと思います。(大学院生のガキが何言ってんだと思われるかもしれませんね汗 恐縮です)
第一ステップとして、子供達にとって本当に必要なものは、「夢中になれるもの」「憧れの存在(なりたい人物像)」だと思います。
これを超えた先に関しては私はまだ悟りの境地には達していませんが、第二ステップで必要なものは「ライバル」「野望」「執念」ではないかと推測しています。
”ズバリ「できるやつは自力で伸びる。できないやつは教えても無駄。」ですね” じゃあ貴方がおらんでもいいのでは?教育者としていっちゃいけないことですよ(為念 私も専門学校で教えていた経験はあります)
プログラマーには適性があり、適性の無い人はいくら勉強しても身につきません。
ケンタとかマナブとかは、自分の商材を売りつけたいので、勉強すれば誰でもプログラマーになれると言いますが、あれはセールストークです。
草野球みたいに下手の横好きで、趣味として楽しむ事はできますが、プロには慣れません。仮になれてもブラックな現実が待ってますよ。