今学期、娘(高3)が授業でコンピュータサイエンス入門クラスを取ってJava を学んでる。「お父さんになんでも聞いて」っと言ってあるし、たまに聞いてくる。クラスでは経験者も多いらしく、また先生は授業であんまり詳しく説明はしてくれないらしい。先週のクイズでは設問の半分ちょっとしか正解できなかったそうな。CSは好き?って聞いたら、まぁあぁな感じで、今んとこ好きでも嫌いでもないそうな。
おそらく世間一般では、親がその道の専門なら、がっつり子供を指導して成績が上がるのを助けるかもしれない。それか親がプロなのに子供がその成績では恥ずかしいといって、尻を叩いて良い成績がとれるようにするかもしれない。もしかしたら、宿題やプロジェクトを家手伝って、まるでプロが書いたような仕上がりになるよう手伝いをするかもしれない。実際そうしてる家もあるだろう。
プログラミング入門は楽しさの発見がすべて
僕はプログラミングのクイズでよい点を取ることはそんなに価値があるとは思っていないです。だいたいプログラミング言語のひとつやふたつなんて、全集中して手を動かしながら本を2冊ぐらい丸っとやれば出来るようになる。プログラミングほど独学が出来る環境が揃っている分野は無いと思う。きちんとした道具の使い方を紹介して、Replitとかじゃなくてちゃんとしたエディタとデバッガなどを使えばちゃんと動くプログラムは作れるようになる。
とくに「入門」の段階では、プログラミングのクイズでいい点を取る、なんてことよりずっと大切なのことがあると思う。
- プログラミングを楽しいと感じる経験があるかどうか。
- 時間が経つのを忘れて夢中になったりするかどうか?
- 自分の能力や性格とどのぐらいマッチしていると感じるか?
- 将来の職業として一生学んでいくことにワクワクするかどうか?
このように、「自分はどう感じているか」を測ることのほうが、大切だと思っています。なので、クイズの点数が毎回何点だったかよりも、今日やった課題で面白いと感じたのはどの部分なのか、どのあたりが理解しにくいと感じたのか、といった視点で会話するようにしてます。クイズで不正解だった設問を見直す、なんてことは全くやりません。そんなことぐらい彼女は完全にひとりでやれるので。
仮に彼女が「楽しい」と感じる経験がなかったとしたら、それはそれまで。またいつかCSをやったときにそう感じる時が来るかもしれない。彼女にとって適正ではなかったのかもしれない(実際Forensic science や biochem や dance なども興味があると言っているし)。重要なのは「子供が自分で決めること」であって、最悪なのは「親が押し付けたり、操作すること」。
親に出来ること、特にCSが専門の僕が出来る一番良いことは何か、っと考えてみると、やはり「楽しさ」の発見のお手伝い。では具体的にどうやるか・・・というといまひとつ分からない。多分普段の「パパの働き方」を見ていて、それが全てかもしれない。楽しく仕事をしてるからもうそれ以上することはないのかも。後は本人たちがそれをどう解釈して自分の人生に反映していくか。全く違う道を選ぶとしても、自分で選んだのならそれが正解。そういう風に思うようにしています。
おまけ
授業の進め方でひとつ、残念なのがコーティングや実行にRepl環境を使うことです。Webページ上で「コーディング→コンパイル→実行→結果検証→ コーディング」を繰り返すモデル。わかりやすく言うならtrial & error モデル。もちろんこれは悪いわけではない。昨今の多くのコーディングはこのスタイルで開発が進められます。
でもPythonならごく自然だし仕方ないかもしれないけど、JavaならちゃんとしたIDE使って、ちゃんとステップ実行やブレイクポイントやWatchウィンドウなどで、データと処理の様子を見ながらプログラムを組み立てていく、というあの楽しさがほとんど味わえないのは残念。(僕が知らないだけでオンラインRepl環境でもそういうところまで出来るツールはあるのかも)まぁ高校で教えるとなると個々PCに環境揃えるのは初期オーバヘッドが高いし、問題が発生したら先生はそれにかかりっきりになっちゃう。宿題の配布なんかもオンラインでやれるから、教える方がオンラインReplを選択するのは納得せざるを得ない。
にしてもだ。僕がプログラミングにハマったのがVAX/VMSという今の基準からすると化石OS(っと言っても実はその設計思想は現在のWindows2000から派生したWindows11などにも受け継がれてる立派なOS)の上で、黒・オレンジ2色のターミナルコンソールのスクリーン上で、機械命令語がひとつづつ実行され、その度にメモリ上のデータが予定通りに変わっていくのを見て、うぉーすげーコンピュータってほんとちゃんとコードの通りに動くんだ!って感動しました。
感動してほしい
授業のどこかの段階で「コンピュータってすごーい」とか「あー自分が書いたコードが実際こんなふうに機械を動かしてるんだ。じゃあもっと面白い事させてみよう!」っといったような「感動」を体験してほしいんだよな。クイズの点数なんて、そういう意味では仮に満点取ったって、テストの点じゃあコンピュータの面白さは少しも味わえないんだよな。
ということで、娘に「きみのPCにVS Code っていうエディタ&デバッガ環境入れちゃったりして良いかな?」って聞いたら、いいよーって事なので、プログラミングの楽しさを体験してもらうべくそうするつもり。結局自分も余計なお節介をしてしまう親でした、というオチでございます。