昨日の投稿で「プログラミングスキルで困ったらアルゴリズムを鍛えろ」というお話をしました。
講師の立場でレビューしていきます。
本日の教材
うんこドリルです。
小学生向けは奇しくも明日発売なので、明日買ってみて記事を追記する可能性が高いです。
なお、もっとプログラミングという拡張版?も来年1月に発売されるようなので、そちらも見ていきたいです。
後日追記しますので、気になる方は記事のストックをお忘れなく!
なぜ子供向けのプログラミングドリルなのか?
先日も「プログラミングスキルのうち、汎用性が高いアルゴリズムを鍛える」という点に着目します。
従来の研修やパッケージではアルゴリズムの学習は軽視されがちです。
講師のマンパワーで何とかアルゴリズムの指導をしているのが現状ではないでしょうか。
アルゴリズムは重要なポイントでありながら、教えて理解しても効果が薄い事もまた事実です。
最初のうちはどうやって考えて解決したとか、ソース解説時になぜその処理が必要なのかを口頭などで解説しますが、将来的には自分で考えて試行錯誤し成功体験を積まないとアルゴリズム力は磨かれません。
ここで、学校教育でプログラミングを実施する目的を見ていきます。
ここで取り上げるのが「小学校プログラミング教育の概要1・2」の資料です。
私から変な注釈は入れませんので、各々でご覧いただきたいです。
ポイントは「プログラミング技能の習得を目的としているものではない」という点です。
IT研修において「プログラミング技能の習得は主目的の一つ」ですが、同じぐらいアルゴリズムの習得も目的です。
つまり、学校教育とは異なりプログラミングとアルゴリズムの両方をしっかりと習得していただく事がポイントになります。
今回は特にアルゴリズム面を取り上げて、子供にアルゴリズムを学ばせるという点を見ていきましょう。
大人(新人研修)は、以下の子供の例からベストな方法を考えていきます。
子供のアルゴリズム力を効率よく伸ばしやすいのは論理的(シミュレーション)なゲーム
ゲームと一口に言っても、デジタルゲームだけではありません。
普通に遊んで楽しめるゲームも、制限やルールを追加する事で難しさの中にもやりがいを求める事ができます。
いわゆるタイムアタックや制限プレイです。
昨今はFPSゲームも多いですが、FPSもエイミングだけでは勝てないので、装備の特性やフィールドの特徴、アイテムなどの相性を考えて対戦相手より優位な状況を作る駆け引きも要求されます。
が、残念ながら最終的には対峙した際のフィジカル勝負になるため、アルゴリズムを鍛えるという観点ではFPSはあまり良いジャンルとは言えません。
RPGも高難度でなければレベルを上げて物理で殴るが成立するので(個人的には、これがRPGの良さだと思います)アルゴリズムを鍛えるという観点ではやはり適切ではないです。
1. テーブルトークロールプレイングゲーム(TRPG)
プレイヤーは与えられた内容を使って自由な発想で目標を達成する事が趣旨ながら、一人でも遊べますし複数人のプレイヤーと共に協力(コミュニケーション)して同じ目標あるいは対立する組織としてゲームに興じるため、この過程でアルゴリズムはかなり磨かれます。
そして何より、楽しみながら出来るので習得や集中もしやすいです。
人を集める(予定を調整する)のと参入障壁の高さが最大の課題ですが、ここさえ乗り越えられれば楽しみながらアルゴリズムを磨いていく環境を安定的に作る事ができるのと、コミュニティを広げていけばいわゆるゲームサロンとして運営していく事ができます。
なお、慣れてくると口(くち)プロレスが発生しがちですが、基本的にはブレーンストーミングのようにプレイヤーの主張をなるべく尊重しながら、対抗する動きをしていくとドラマになっていきますので、人間性というかプレイヤーへのリスペクトの気持ちも育てていくことができます。
2. ランダム性の低いテーブルゲーム、ゲーム外でも戦略を考えたくなるカードゲーム
TRPGより効果は劣りますが、導入しやすいのがトレーディングカードゲーム(TCG)や将棋・囲碁・チェスを始めとしたランダム性の低いテーブルゲームなどが現実的でしょうか。
特にTCGはゲーム中ではない場合もアレコレ考えたくなる中毒性が、アルゴリズムに直結します。
が、必要なカードを集めるためにとにかく費用が掛かりますので、ゲーマー不在のご家庭だと候補に上がりにくいでしょうか。
ランダム性の低いテーブルゲームは、アルゴリズムが組み立てやすいのもポイントです。
なお、ランダム性の高いテーブルゲームの代表が麻雀です。
麻雀はアルゴリズムを鍛えるという観点では、私が思うにTCGの完全下位互換になりますが、場面を切り取って牌効率を考えるならなくはないです。
操作できない牌山と、積もる際はイカサマでもしない限りどうしてもランダム性を排除できないのは課題ですし、シンプルに計算が大変なのでTCGの完全下位互換としました。
このように、ゲームも見方を変えればきちんとした学習環境を提供するツールとなります。
ゲーム=遊びという先入観に囚われるのではなく、ゲーム=アルゴリズムの訓練と考えてぜひ導入してみてください。
ただし、ご認識の通り中毒性が高いのがキズなので、うまく制御してあげる必要はあります。
(将棋のプロ棋士・藤井聡太氏の例も念頭においてみましょう)
大人でも同じ効果が期待できる(はず)
子供向けのプログラミングドリルなので、子供の話をしてきましたが、大人でも同様にアルゴリズム増強効果が期待できると考えて良いと思います。
ただし、新しいことに挑戦する時に大人は子供ほど集中力を維持できるかと言うと好みの問題もありますし、年を取ると新しい事を始める際に面倒くさいという感情が邪魔になります。
新しいことを始めるなら若い時である事は疑いようはないのですが、あくまで参入障壁が高いという話なので、学習効果としてみる場合は子供も大人も程度の差はあれど効果はあるはずです。
俺ソースのため検証例は少ない(1ケタ)ですが、私目線でも本人の感想からも効果があったんじゃないかなと感じられる事はあったのでムダではないはずです。
人材開発部向け:アルゴリズム研修はScratchを使おう
NDAの適用期間が過ぎてるので多分喋っても問題ない…はず。
言い訳をすると、以下私が突発で提案・実施したものです。
教材でソートアルゴリズムを解説するよりは、ライブコーディングでScratchを使って受講生が回答する形でロジックを追加していくモブプログラミング形式が一番効果が高かったです。
モブプログラミングを採用したのは、既にアルゴリズムが分かる受講生の考え方を他の受講生に浸透させるためです。
間違えても講師がどう考えて処理したか、というデモを見せるためではありません。
本来はモブプログラミングは、アルゴリズムが苦手な方にやってもらった方が効果が高いので、各グループに経験者(出来る方)がいるならグループワークにするとより効果が高まります。
作ったアルゴリズムを全体発表して、グループを超えてコード(?)レビューをすると更に学びがあります。
元々想定されているカリキュラムでは、それぞれが自力でソートアルゴリズムの解を考えて、考え方の力をつけてもらう事を期待しているのですが、ここで苦手意識を持ってしまうとプログラミングどころではありません。
どういう考え方をしていたのかを思い出せる機会をこのタイミングで作っておくと、プログラミング研修の課題でアルゴリズムにハマった場合のフォローがしやすくなります。
アルゴリズム研修の効果に課題を感じられている方はぜひ導入してみてください。
(カリキュラム合意後にも関わらず、突発な変更を受け入れていただいたクライアント一同には感謝しかないです)
子供向けのプログラミングドリルは新人研修で使えるか?
使えます。
子供向けなのはあくまでコンテンツの表現や回答形式が優しいというだけで、アルゴリズムを鍛える事を目的にするなら分かりにくい要素は可能な限り排除しておくべきです。
教材でよく用いられるアルゴリズム研修はソートアルゴリズムですが、「順序・反復・条件」の次がソートアルゴリズムから始めるのは人によっては急激にレベルが上がったように感じられるのも無理はないかも知れません。
そして、現実としてアルゴリズムの研修は半日から1日ぐらいを設定されている事が多いため、基本3構文の使い方を解説したら早速ソートを考えてみましょう、のような流れで研修が始まっている事が多いように思います。
実際はソートの実装にプログラミング言語も入れると、言語仕様(ifやforの書き方)と紐付けなければならないので、慣れないうちはアルゴリズムだけに集中できたほうが良いです。
プログラムを組むなら、まだScratchなど言語仕様を意識しないツールやサービスを活用してロジックの正しさを検証することだけに特化した指導ができたほうが受講生に雑念が混じりにくいです。
また、頭だけで考えたり考えている事を書き出すのもなかなか難しいので、どうやって考えれば良いのかを目に見える形で例を示している子供向けプログラミング教材はこの点も優秀です。
慣れてくれば頭だけで考えて整理ができるようになっていきます。
基本3構文の解説の後で演習問題を実施してもらい、ソートアルゴリズムの解説の際も基本3構文の解説をしながら「なぜこの処理が必要なのか」を口頭でも解説しながら進めるのが良いでしょう。
「なぜこの処理が必要なのか」を自分で考える体験をしてもらうという意味では、子供向けプログラミングドリルは侮れません。
今まで見てきた・使ってきた研修教材よりもプログラミングドリルを採用したくなりました。
プログラミングがうまく出来ない、アルゴリズムを考えるのが難しいと感じている方は、子供向けだからとバカにせず是非使ってみてください。
はじめてのプログラミング 小学1-6年生(2022/12/08より発売のため、公開時点では予約注文)
プログラミングドリルレビュー:ざっくり内容解説
せっかくなので、プログラミングドリルにも触れていきます。
以下、5・6歳版です。
内容のほとんどは私が就職戦争やってた頃で言うところのSPI能力試験問題集です。
幼児向けという事もあり、回答は正しいシールを貼り付けてたり、選択肢を紐づけたりする簡単な回答のものばかりです。
子供向けなので全てにイラストがあり、視覚的に分かるのは当然として内容も順序や条件・反復は押さえていますが、驚いたのはデバッグ。
デバッグの問題はどこが間違っていて、どうすれば正しく解決できるのかを考える問題があります。
デバッグの工程を経て、今度は自分で考えてイラスト(システム)を完成させるアルゴリズム問題があります。
私が思うに、一番むずかしいのはひらがなで書かれた問題文の意味を理解する事だと思うので、こくご(ぶんしょう)を理解する事だと思います。
これは現場でも起こりがちな「コミュニケーションエラー」にも通ずるものを感じました。
表紙のQRコードを読み込んでみた
これは本のタイトルに貼り付けてあったシールのQRコードを読んだものです。
購入者特典ではなく、公表されていたサイトのものなので紹介しました。
これはプログラミングドリルではなく、うんこドリル漢字のお話ですが、おそらくうんこドリル全体で他社のものと比べると効果が高いですよ、と訴求したいのだろうという事は伝わりました。
なお、これがよっぽど嬉しかったのかは分かりませんが、ニュース記事の抜粋の差し込みが表紙裏から目を引く場所で解説されていました。
やはりうんこドリルは一部からクレームがあった経緯もあったので、地位向上や丁寧な解説を意識されているように感じました。
私見
講師ではなく、一人の親としては子供が楽しく勉強してくれるならその方がいいかな、という印象です。
ニュース記事の内容が正しいかどうかは気にせず、うんこドリルシリーズ以外の方が子供に合っているなら、そちらを選択する事もあります。
とはいえ、各ご家庭での教育方針はあると思いますので、子供の将来を考えてどうするのが良いのかは他者に押し付けてはいけないと思っていますので、今更ですが本稿についても同様に「そういう意見があるんだな」程度に捉えていただきたいです。
謝辞
しばらく新卒者や初学者をターゲットに記事を書いてきたので、アドカレ(Qiita)を意識したテーマに戻していきます。
(実はQiitaの公開時に設定をミスったのがあり、フライングでQiita向け記事を一つ出しています。詳細はQiitaでご覧ください)
この場をお借りして今年を振り返ると、ここ数年は毎年4~6月の記憶がとても印象深く残っている事が多いです。
開発は慣れてしまって感覚がマヒしているからか、去年に何をやっていたかあまり思い出せないのが正直なところです。
(去年は講師経験・研修スキルを強化しようと思っていたので、より開発関連の印象がありません…)