見出し画像

プログラミングから学んで欲しい事

こんにちは「つけらっとゲームス」プログラム担当のとちです。

ゲームを作る他に専門学校のシステム系学科で外部講師もやってます。
今回は、わたしが学生と接して感じた「プログラミング学習」で学び取って欲しいモノとは何か?という記事です。

ちなみに、わたしは教員免許とか持ってませんし、誰かにモノを教えるための教育は受けていません。いわゆる「センセー」としては超絶初心者です。

「地域おこし」の一環としてゲーム関連の展示会を行って子どもと接したり、専門学校で毎週4時間システム設計を教えている程度です。

ただ、今後、こういった記事を書いていく上で前提が必要かなと思いまして今回まとめてみました。それらを踏まえて読んでいただければ幸いです。



学校で学ぶプログラミング

わたしが子どもの頃はスマホも無ければ家庭用PCもかなり高級なモノでした。現代では誰もがスマホを持ってますし、一家に一台はPCもあったりする世の中です。

PCが無いご家庭でも、自動車や家電にもコンピュータが内蔵されていますし、スーパーやコンビニなど商業施設においてもコンピュータに接続された(または内蔵された)端末を操作する機会が増えました。

これらを触るのが苦手な大人もいます。しかし、これからを生きる子どもたちは、ほぼ確実にこれらを触り続ける未来が待っています。機械音痴だから、苦手だからとか言ってられません。

仕事をするにしても、いまではどこの会社に行ってもPCがあり、プログラマなどの専門職だけでなく、営業さんも事務員さんもPCを使ってますよね。
つまり、どんな職種であってもExcelくらいは触れた方がいいわけです。

この点は知識や技術の分野です。
これらが身近な社会だから、小さい頃から触っておく。大事です。
練習すれば操作できるようになっていきます。大事です。

さて、そこから考えを少し進めてみましょう。
触っているコンピュータが内蔵されているもの(もしくは接続されているもの)の中では何が動いているか、と問われると「プログラム」です。

じゃぁ、プログラミングの勉強をしましょう。
でも、将来は全員プログラマーになるという話でも、授業を受けているとゲームが作れるようになるというわけでもありません。

※用意されている素材を用いたり、学習用のエディタだったら作れるとは思いますが「俺が考えた最強のゲーム」を作るのは難しいです。

ものすごく大雑把な意訳になりますが、
「小学校プログラミング教育の手引」を読むと、プログラムの勉強によって思考力や判断力を養おうという話らしいです。文科省のHPにある資料を読むとそんなことが書かれています(かなりの文書量!)

高校での「情報」

数行前に将来は全員プログラマーになるという話ではないと言いました。
高校でも「情報」についての授業はありますが、職業を意識するなら商業高校や工業高校では、より専門的な「情報」を学べる学科があったりします。

ただ、商業高校や工業高校の「情報処理科」「情報技術科」「情報科」といった情報関連の学科に入り、授業を受けていると即戦力のプログラマになれるのか、ゲームが作れるのかというと、これまた難しいところです。


プログラミング的思考?

結局、小学校プログラミング教育では何を育成するのか、前述の「小学校プログラミング教育の手引」を少し読むと「情報活用能力」を構成する資質・能力という言葉が出てきます。

その中でわたしが学生たちに教えている部分は恐らく「思考力、判断力、表現力等」にあたる部分です。

これはコンピュータに意図した処理を行わせるために必要な論理的思考、つまり、プログラミング的思考を育成したいってことですね。

これって小学校の話だよね?

そうです、貼り付けたリンクは文科省で、その中で引用しているのは「小学校プログラミング教育の手引」です。でも、このプログラミング的思考って大事だと思うんですよ。

【「プログラミング的思考」とは】
有識者会議「議論の取りまとめ」において「プログラミング的思考」は、 「自分が意図する一連の活動を実現するために、どのような動きの組合せが 必要であり、一つ一つの動きに対応した記号を、どのように組み合わせたら いいのか、記号の組合せをどのように改善していけば、より意図した活動に 近づくのか、といったことを論理的に考えていく力」と説明されています。

小学校プログラミング教育の手引き より引用

これって、これまでのわたしの記事を数行の文章で表していますよね。
もう少し引用します。

コンピュー タに自分が考える動作をさせるためには、①コンピュータにどのような動き をさせたいのかという自らの意図を明確にした上で、まず、②コンピュータ にどのような動きをどのような順序でさせればよいのかを考えます。この際、 意図した一連の動きが、一つ一つの動きをつなげたものであることを理解す る必要があります。そして、③一つ一つの動きに対応する命令(記号)が必 要であることを理解し、コンピュータが理解できる命令(記号)に置き換え た上で、④これらの命令(記号)をどのように組み合わせれば自分が考える 動作を実現できるかを考えます。さらに、⑤その命令(記号)の組合せを どのように改善すれば自分が考える動作により近づいていくのかということも試行錯誤しながら考えていきます。

小学校プログラミング教育の手引き より引用

すごい難しい文章ですが、これを読み解き、これまでわたしが書いてきた記事を当てはめてみましょう。

アルゴリズム(処理手順)を思い浮かべ、フローチャートを書いてプログラムコードを書く…に当てはまりますよね?
(慣れてきたらフローチャートは省略してもいいです)

アルゴリズムからプログラムコードを生み出すためにはプログラミング的思考を育てていく必要性があるんですね。

小学生が習うことを専門学校でも教えているのは、それだけ大事だからなんですよ。というか、プログラミング的思考ができないと厳しい…


どうしたら習得できるの?

ただ、プログラミング的思考を習得する方法って、パッと思いつかないんですよ。わたしも教えることができるなら教えたい。これは文科省側でもわかっているようで手引きの中にはこんな記述があります。

(「プログラミング的思考」を育成する)
ここで、思考力、判断力、表現力等は、短時間の授業で身に付けさせたり 急激に伸ばしたりできるものではないことに留意する必要があります。「プ ログラミング的思考」は、プログラミングの取組のみで育まれたり、働いた りするものではありません。思考力、判断力、表現力等を育む中に、「プロ グラミング的思考」の育成につながるプログラミングの体験を計画的に取り 入れ、位置付けていくことが必要となります。

小学校プログラミング教育の手引き より引用

でも、いまの子どもたちの身の回りにはプログラミング的思考を習得の助けになる「良いもの」がたくさんあります。そのひとつが「マインクラフト」です。


マイクラでプログラミング的思考

マイクラにはプログラミングが学べる「教育版マインクラフト(Minecraft Education)」というのがあるらしいですし(ちょっとググるとたくさん出てきますよ!)
その他でパッと思いつくのがレッドストーン回路だと思います。

しかし通常のマイクラを遊んでいても、レッドストーン回路を作らなくても学べることがあると思ってます。

プログラミング的思考とはなんだったか、その最初の部分を思い出してください。

  • コンピュータにどのような動きをさせたいのか明確にします。

  • どのような動きをどのような順序でさせればよいのかを考えます。

目的、目標があって、それを達成する為にどんな「動き」をすればいいのか、「動き」が複数あるならどんな順番でやればいいのか、これ、マイクラは常に問われているんですよね。

例えば、食料の安定化を目標とします。
色々な方法がありますけど最も手軽なのは麦畑を作ることでしょう。

手順を考えます。
畑を作るなら可能であれば広い平地が欲しいですし、用水路も必要となります。スコップが欲しいですね。近くに水辺が無ければバケツも欲しいです。先にスコップやバケツを手に入れましょう。

スコップは材料が木や石でも作れますがバケツは鉄が必要です。
鉄鉱石を探し、精錬しなければなりません。

アルゴリズムができました。フローチャート化しましょう。

マイクラを遊んでいる中で、自発的に目的や目標を作り、それを解決するための手順を考える、これは論理的思考です。「豆腐ハウス」を作るのだって手順を論理的に解決していくことで建設していますからね!

経営SLGやRPGなども「目的・目標」があって、それを「解決する手順」を考えていますよね。意外と身近で、且つ楽しくこういった考え方を使っているんです。

この考え方を効率化することで、より高度なプログラミング的思考になっていくんです。


より高度なプログラミング的思考

ゲームを例にしてプログラミング的思考を説明すると、意外と誰でもやっている考え方なんだと感じると思います。ただ、この時点では自分のゲームを作ろうとしても作れません。職業としてプログラマになるのも厳しいです。よって、より高度なプログラミング的思考が必要となります。

いきなりですが、以下の文章を読んで問題を解いてみてください。

xの値は1です。yの値は2です。zの値は3です。
yの値をxに入れます。
zの値をyに入れます。
xの値をzに入れます。

問.zの値は何になっていますか?

論理的に、且つ順番に考えてみましょう。

yの値をxに入れると、xの値は2になります。
zの値をyに入れると、yの値は3になります。
xの値をzに入れると…xの値は2に変更されてます。
zの値は2になっています。zの値は2です。

より高度なプログラミング的思考を手に入れるためには、何かに置き換えたとしても理論的に考えないといけません。変数の考え方ですが結構難しい。
この部分で苦手意識が出てくる人もいます。

この問題の前提条件を読み解くと「y」と「z」の値を入れ替えているプログラムが見えて来ます。たとえ他の数値がxyzに入っていたとしてもです。必ず「y」と「z」を入れ替えるのです。

つまり、xが9、yが8、zが7で同じ前提条件の場合、
zは8になると瞬時に判断できるわけです。
(※これは関数・サブルーチンの考え方ですね)

この考え方が大事なのです。
論理的に順番に、そして効率的に考える「プログラミング的思考」を習得して欲しいのです。

プログラマになる、ならない、ゲームを作る、作らないはともかく、このプログラミング的思考は色々な場面で役立つハズです。

最初は論理的に、効率的に考えるのは難しいです。
上手くいくとは限りません。というか実際にプログラムコードを書いてみると一発で正しい動作をするのは珍しいくらいです。

正しくない動作をしたら試行錯誤して修正していく、そして動かす。まだダメだったら修正する。動いたとしても効率的ではないならもっと修正する。
間違ってもいいのです。やってみるんです。

難しいかもしれませんが、意外と身近にあるプログラミング的思考。時間をかけても、徐々にでも習得できればいいのです。


まとめると?

プログラミングから学んで欲しい事は「プログラミング的思考」です。
文章で書くと、すごーく当たり前のような気がしますが、その中身のお話でした。

プログラミング教育によって全員がプログラマになるとは思っていませんし、授業を受けたからといって「俺の考えた最強のゲーム」を作れるとは言えません。

弊サークルの展示会やワークショップに来た全員が、将来の夢として「ゲーム作るぞ!」と思わなくてもいいんです。

まずは触れてみる機会が大事。興味を持ってもらう機会が大事。
この部分は子どもに接する大人たちがやるべきことですね。
機会を設けることが大事。

触れてみて興味を持ったなら、ここからギアが一段階上がります。

「ゲームを作ってみたい」「プログラマになりたい」と思ったら、より高度なプログラミング的思考が必須となります。

じゃぁ「プログラミング的思考」ってなんだろう?
論理的で効率的な考え方です。いきなりは難しいかもしれませんが、実は身近にある考え方だったりします。

ゲームを作っている人たちは自然とプログラミング的思考を実践しているんですよ、きっと!

学校での受け身の授業だけだと、この考え方を身につけるのは難しいかもしれません。なので、興味を持つのが大事なのです。

興味があれば勝手に「プログラミング的思考」が理解できると思います。


ものすごく面倒臭い話をしてますし、すごく偉そうな言い方をしているような気がしますが…ゲームを作っている人の隅っこに居させて貰っているわたしが、学生たちと接して感じたことでした。

もう少し、プログラミングの勉強について読みたい方は、以下のマガジンにまとめていますのでご覧ください。

普段はこんなゲームを作っているサークルの人です。
ご興味がございましたらご覧ください(↓)

それでは、また別の記事でお会いできるのを楽しみにしております!

この記事が気に入ったらサポートをしてみませんか?