ブログ
2019.09.06 未分類

プログラミングを教えて気づいたこと

先日、大学での最後の授業を終えました。大学の非常勤講師としてプログラミングを教える授業です。

初めは、「自分なら楽しく分かりやすく教えることができる!プログラミングを好きにさせる!!」なんてマックスコーヒーのように甘ったるい考えを持っていました。……が、現実はそんなに甘くないですね。エスプレッソでした。教えることの難しさを痛感しました。

3年間という短い期間でしたが、自分なりに試行錯誤しつつ、最終的にはそれなりの授業ができるようになったような気がします。この経験を元に、今回は「教える」という視点から見た「プログラミング言語」について書いてみたいと思います。

はじめに

教えていた言語はJavaですが、Javaに限らず一般的な話として書いていきます。また、ほとんどの学生がプログラミング未経験のため、かなり初歩的な内容となっています。

個人的な印象として、初学者が特に躓きやすいのは以下の3点です。


  • 変数
  • 「=」と「==」
  • インデント


順番に見ていきましょう。

「変数は入れ物」じゃダメ?

まずは「変数」です。プログラミングになくてはならないものナンバー1ですね。変数のイメージを掴んでもらうために、「変数とはデータを入れておくための入れ物である!」と教えることが多いかと思います。もちろんイメージ的にはこれで良いと思います。しかしこれだけでは不十分です。混乱してしまう人が続出します。こんなところで脱落者を出すわけにはいきません!まだ初めの村を出たばかりです!


なぜ混乱してしまうのか。それは「変数名」と「そうでないもの」の区別が付けられていないからです。画面には int, print, public, ……など色々な英語が表示されているはずです。まずこれらとの違いを教えなければなりません。また、変数名の付け方にも注意が必要です。「prime」「width」「height」など下手に変数名に意味を付けてしまうと「これは(プログラミング的に)意味のある単語なのか?それとも変数名なのか?」と更に混乱してしまいます。「命名規則」や「予約語」を教えればいいじゃん!という話ではありません。分からない人にさらに分からないことを教えたらそれこそ Game Over です。初めのうちは分かりやすく、x, y, a, b 等の変数名を使うのが良さそうです。hogehogeってやつもこのような意図で生まれたのかもしれませんね。逆に混乱しそうですが。

PHP」の変数名は素晴らしい!

そんな中、キラリと光る言語がありました。そう、「PHP」です!色々突っ込みどころのある言語かもしれませんが、PHPは上記の問題を鮮やかに解決しています。PHPの変数名には必ず「$」が付くのです。これでどれが変数であるのか一目瞭然ですね!PHPくん、優しい!

「=(イコール)」と「==(イコール×2)」の違い

「=」もプログラミングになくてはならないものナンバー1ですね。「変数」と同率1位です。「=」で「代入」、「==」で「等しい」を表します。これは混乱しますね。誰でも一度は書いたことがあるのではないでしょうか。if( a = 1 )と。

ほとんどすべて(?)のプログラミング言語で「=」は「代入」を表すと思います。もうこれは常識みたいなものですね。今更変えようがありません。しかしこれは「初学者に教える」という視点で見ると本当に分かりづらいです。なぜこの記号にしてしまったのだろうか。「a <- 1」みたいな方が分かりやすくないですか?しかし頻出するものに半角記号2つというのもねぇ……。となると「a < 1」でしょうか。いや、これだと不等式になってしまう……。じゃあ「a << 1」はどうですか!シフト演算?そんなもん要らん!……結局「=」ですね。ごめんなさい。

ちなみに例えばPHPでは、「===(イコール×3)」というものもあります。これはデータ型まで同じかどうか判定するという意味です。

インデントの難しさ

インデントもプログラミングになくてはならないものナンバー1ですね。(はい、同率1位です。)インデントとはプログラミングを見やすくするために入れるものです。これが教える側としてはとても厄介!なぜならあってもなくても動くからです。そもそも初学者にとってソースコードなんてアラビア語みたいなもの!何が見やすいコードかなんて分かるはずもありません。ということで } 抜けエラーの嵐が吹き荒れました。

Python」のインデント

そこで「Python」です!Pythonはインデントが構文規則として決められています。つまり「あってもなくても良い」ではなく「ないとダメ、絶対!」なわけです。「Python」は学ぶだけで自然とインデントが身につくというお得な言語!更にコンパイル不要だったりヘビのアイコンが可愛かったりするので、割りと初学者に優しい言語かも?(※個人の感想です。)

しかも最近では人工知能やデータサイエンス業界で需要も爆上がりしているので、覚えていて損はないかも?

特にフリーランスエンジニアとかになろうとしている人は、Javaとか別にいらないです。PHPかPythonあたりができる方が案件あると思います。(※個人の感想です。)
大手SIerとかはJavaが多いイメージです。

androidアプリも昔はJavaを使って開発する必要がありましたが、最近はkotlinやJavaScriptを使ったクロスプラットフォームでの開発が多いのかな、と思います。

まとめ

プログラミングを教えていて「分かりづらいな」「教えづらいな」と感じたことについて書いてみました。そのような視点で見ると様々な言語の良いところ・悪いところが別の角度から見えてきたりします。もちろん慣れてしまえば大したことはないのですが、些細なことで「よく分からない」→「嫌い」になってしまうのはとてももったいないことだなと思いました。