*小・中学生向け*プログラミングってなに?自宅学習・教材・オンライン学習、なにがいい?を優しく解説

プログラミング

ついに、プログラミング教育の必修化

現役SE ( システムエンジニア ) のナオくんです

2020年、ついに小学校でプログラミング教育が開始されました。次いで、2021年から中学校、2022年から高校でもプログラミング教育が実施されます。

義務教育や社会に出てプログラミングに触れる機会がなかった世代にとってはとっつきにくい雰囲気があり、「わからないから、子供に教えてあげられない」「学校教育以外で学ばせる必要はないだろうか?」「そもそも本当に必要なの?」といろいろ不安になる保護者の方も多いと思います。

どう対応していいかわからない、そもそもプログラミング自体がなんなのかあまり理解できていない、という方にも優しく丁寧に解説していきます。

必修化の内容

ここで大元となる文部科学省の内容について確認してみましょう。

 

小学校:文字入力など基本的な操作を習得、新たにプログラミング的思考を育成
中学校:技術・家庭科(技術分野)においてプログラミングに関する内容を充実
高等学校:情報科において共通必履修科目「情報Ⅰ」を新設。全ての生徒がプログラミングのほか、
     ネットワーク(情報セキュリティを含む)やデータベースの基礎等について学習

 

義務教育で学ぶ必要性をまとめたものを「学習指導要領」と呼びますが、今回、約10年ぶりに改訂され、プログラミングを必修化とする旨が織り込まれました。

義務教育にしなければいけないほどITは今後、必須の知識・技術となったということです。言い換えると義務教育にした背景、日本が直面している問題がここにあります。それはIT人材の不足です。

こちらをご覧ください。

 

 

これは経済産業省が「IT人材の供給動向の予測」として提示している資料です。

この資料からもわかるように、今後、ITニーズは年々高まるものの、IT人材は不足の一途を辿ることが予測されています。

実際、私の勤める会社でも慢性的なIT人材不足ですし、派遣会社などの外部からの調達も難航を極めている状態です。それに加え、需要に対して供給が不足している状況もあり、IT人材の単価が高騰しています。(数年前と比べ、IT人材の単価が1.5倍くらいに膨れ上がっています)

経済産業省の予測と私が実際、直面している現実からみても今後さらにあらゆる企業でIT人材の囲い込みが加速することは容易に想像がつきます。

今後の社会で必ず必要とされる・重宝されるスキルは間違いなくITスキルです。言い換えると、ITを避けては通れない時代がすぐ目の前にやってきているということです。

自分はITとは遠い職業だし、まぁいいか・・・は通じない世の中になり始めています。

例えば、農業。農業は畑を耕し、時間をかけて農作物を育てて、ベストな時期に収穫して出荷する。我々がイメージする農業の中心は”人”のイメージが強く、ITとはかけ離れた印象がありますが、今やITを活用した農業、いわゆる”スマート農業”が活性化しています。

土壌の状態分析・ベストな収穫時期を判断するIoTトラクターや農業従事者の作業記録をスマホを使って記録し、身体的な負担の分析と改善を提案してくれるなど、職そのものの在り方が変化してきています。

このように一見、ITとは程遠い職業においてもどんどんIT化が進んでいます。

是非、この機会をきっかけにITを身近なものに感じてもらい、楽しみながら学んでいただければと思います。

ITの進化を知るとおもしろい

それにしても「IT化が加速する」という言葉って、ずーっと聞いてる気がしませんか?

じゃあ、一体今現在でITによって何が変わったの?と聞かれたら、スッとは出てこないですよね。パっと出てきたとしても自動運転くらいでしょうか? 実はそのほかにもたくさんのものがITによって世の中の常識を変えています。

そのITの進化を感じることができる1つの例はNetflixです。

ご存じの通り、Netflixは映画やアニメが見放題となるサービスを展開する会社ですが、他社が制作した映像を放映するだけでなくNetflix独自で制作している映像がたくさんあります。

ドラマや映画を制作する上では、ストーリーやキャスティングが重要ですよね。ストーリーの方向性をどのようにするか、誰をキャスティングすればユーザーに観てもらえるかなど、制作スタッフが時間をかけて調査や打合せをしながら決めていきます。

これが今までの常識です。

この常識を覆したのが、Netflixです。NetflixではAIがストーリーやキャスティングを決めています。

ユーザーは映画をどのように探しているのか? いつ、どこで、何時間見ているのか? どのシーンを早送りしているのか?など、人がとても扱える量でない大量のデータから分析し、決定しています。 

ほんとにそれで視聴者が増えるの?と思われる人もいるかもしれませんが、映像制作をAIで分析・決定することに舵を切った結果、企業の価値を評価する指標の時価総額でウォルト・ディズニーを上回りました。

このように我々が普段触れているサービスにも、ふんだんにITの技術が活用されています。

他にも、閲覧履歴からあなたにあったおすすめを提案してくれるレコメンドサービスや経験値の高いお医者さんが複数人でも発見できなかった病を特定するなど、ITの力で成り立っているものはたくさんあります。

名実ともに「ITなくしては今の世の中は成り立たない」時代になったということが言えます。

日本はものすごく危機感をもっている

経済産業省が発行している「IT人材需給に関する調査」の一部ではこう述べられています。

ITの活用は、様々な産業の生産性向上や人口減少時代の社会課題の解決の鍵を握っている。
その担い手であるIT人材育成には一定の時間と投資が必要であることを踏まえると、
我が国の IT 人材の確保に向けて有効な取組や施策を迅速に進めていく必要がある。

ご存じの通り、日本では年々、人口が減少しています。人口が減少するということは働き手の減少を意味しており、今ままでように人に依存した仕事のやり方では経済が立ち行かなくなり、いづれ日本が衰退する可能性もあります。

そこで、人口が減少しても成長を続けるための施策として、各企業ではDX(デジタルトランスフォーメーション)にかなり力を入れています。DXについては今回、詳細には触れませんが、簡単にいうとデジタル(IT)の力でビジネスを継続・発展させていこうというものです。

このような背景から各企業はIT人材の確保に必死です。

今後もIT人材の必要性が高まることを踏まえると、今から10年後・15年後に社会人になる若い人材をターゲットに育てていくことを国としても狙っているのだと感じています。

ただ、ミスリードがないように言っておきたいのは、決してIT人材(いわゆるAIやシステムエンジニアの技術者)ばかりを育てようというわけではありません。どのような人材を育てようとしているのかなど、次から詳しくみていきましょう。

具体的にどのような人材を育てようとしている?

文部科学省の要綱では以下のように記載されています。

小学校:文字入力など基本的な操作を習得、新たにプログラミング的思考を育成
中学校:技術・家庭科(技術分野)においてプログラミングに関する内容を充実
高等学校:情報科において共通必履修科目「情報Ⅰ」を新設。全ての生徒がプログラミングのほか、
ネットワーク(情報セキュリティを含む)やデータベースの基礎等について学習

小学校ではプログラミング的思考を育成、中学校ではプログラミングに関する内容を充実といういづれもプログラミングという言葉を全面的に押し出しています。

あまり聞き慣れない、このプログラミング的思考という言葉。一体どういう意味なんでしょうか?

文部科学省ではこう定義されています。

自分が意図する一連の活動を実現するために、どのような動きの組合せが必要であり、一つ一つの動きに対応した記号を、どのように組み合わせたらいいのか、記号の組合せをどのように改善していけば、より意図した活動に近づくのか、といったことを論理的に考えていく力

抽象的な言い方だからなのか、具体性がないからなのか、理解が追い付かないのが正直なところです。

論理的思考 ( ロジカルシンキング ) と似てそうだけど、何が違うの?と疑問を持たれる方もたくさんいると思います。

そのあたりを具体例を交えて解説していきたいと思います。

プログラミング的思考と論理的思考の違い

プロぐミング的思考と論理的思考には多くの共通点があり、中心的な意味は同じです。

いづれも「物事を体系的に整理し、矛盾や飛躍のない筋道を立てる思考法」であることを主としています。

プログラミング的思考はそれに加え、より効率的な思考を加味したものであるという点が違いとしてあります。

文字だけではイメージがしづらいと思いますので、具体的な事例を交えて説明をしていきます。

最短経路は何通り?

さて、問題です。A地点からB地点までの最短経路は何通りあるでしょう?

前提条件としては以下2点。
 1.隣接するマス目を辿ること。
 2.斜め方向の移動は禁止とする。

 

論理的思考

“最短経路”が最大の焦点であるため、最短経路を辿るためには、

・1つの経路探索では同じマス目は通らないほうがよい。
・B地点から遠ざかるような進み方 ( 左方向や下方向 ) はしないほうがよい。

なぜなら、いづれもゴールから遠ざかることになるから。ですね。

このように前提条件の理解・探索条件を思考し「物事に矛盾や飛躍のないルールや方法を定義すること」を論理的思考と言います。

今回は説明のためシンプルな問題を選んでいるため、上記の2つ条件は当たり前すぎて逆にしっくりこないかもしれませんが、最短経路を辿るための条件としては論理的な条件であると言えます。

さて、この問題の答えですが「A地点からB地点までの最短経路は6通り」となります。

思考方法はすごく原始的で、線でなぞってみました。1分もあれば解けますね。

ただ、3 × 3マスの単純な問題だから解けましたが、マス目が増えた場合はどうでしょう?

では、5 × 5マスだったらどうでしょうか?

答えは70通りです。

70通りとなると3 × 3マスのときのように線を引きながら解を導くのは難しそうですね。。(頑張ればなんとかできるかな?)

では、10 × 10マスだったらどうでしょうか?

答えは、48,620通りです。

絶対、線なんて引けないですね。。

これからわかるようにしらみつぶしに解を導くやり方ではいづれ限界がきます。

ここまでで分かることは「論理的思考により定義されたものと効率を求めることは別物である」ということです。

かみ砕いて説明すると、今回の問題では”最短経路”を導くために「1つの経路探索では同じマス目は通らないほうがよい」「B地点から遠ざかるような進み方 ( 左方向や下方向 ) はしないほうがよい」という2つの論理的な定義をしましたが、解を導くための手段については言及していません。つまり、論理的に定義されたものに対してどのように実現すれば効率がよいのか?は問うてないということです。

論理的思考に加え「もっと効率的に解を導く方法はないものだろうか?」という思考を加えたものがプログラミング的思考と言います。

プログラミング的思考

プログラミング的思考とは「論理的思考に加え、物事を実現するためにもっとも効率的な手段を考えること」です。

引き続き、先ほどの問題を利用して具体例で説明していきます。

この方法は「各マス目までの最短経路を書き込んでいく」方式です。

・まず1列目、1行目の各マス目は1通りしかないので「1」と書き込みます。
・次にAから右1上1のマス目にいくための最短経路数をそのマス目に書き込みます。(「2」を書き込み )

・同じようにAから右2上1、右3上1・・とそれぞれマス目にいくための最短経路数を書き込みます。

ここで、ある法則があることに気づきましたでしょうか?

「最短経路を求めたいマス目と隣接する左と下の数字を足し込めば最短経路数になる」( △ + △ = 〇になる )という法則です。

この法則に従って続けていくと、以下のようになります。

図からもわかるようにA地点からB地点までの最短経路数は70通りとなります。

この書き込み方式であればものの数分で解くことができました。

明らかに線でなぞるより早くて正確ですね。

このように同じ解を導くために効率的な方法を考えることがプログラミング的思考になります。

プログラミングとは?

プログラミングとは「コンピューターに実行してほしい処理をコンピューターが理解できる言葉で記載すること」です。

コンピューターに苦手意識がある人は「うっ・・」となるかもしれませんが、日本語や英語と同じだと思ってもらっても大丈夫です。英語しか読めない・話せない人に仕事をお願いしようと思った場合、英語で伝えるしか手段がないのと同じような感覚です。

さっきの最短経路を導く問題で考えてみましょう。

コンピューターに「AからBへいく最短経路を教えて」と書いても何も教えてはくれません。
どのような手順でどのように計算するのか?を具体的に記載してあげる必要があります。

プログラミング的思考で利用した書き込み方式「最短経路を求めたいマス目と隣接する左と下の数字を足し込めば最短経路数になる」をプログラミングするとこのような感じになります。

def counting(a, b):
    A = [[-1 for j in range(b + 1)] for i in range(a+1)]
    
    for i in range(a+1):
        A[i][0] = 0

    for j in range(b+1):
        A[0][j] = 0
    
    A[1][1] = 1
    
    for i in range(1, a+1):
        for j in range(1, b+1):
            if A[i][j] == -1:
                A[i][j] = A[i-1][j] + A[i][j-1]
                print("{}行目{}列にいく経路は{}通り".format(i, j, A[i][j]))
    return A[a][b]

counting(5,5)

何がなんだかわからなくて大丈夫です。

少し説明しておくと、counting(5,5)のカッコ書き部分はマス目の数を表していて、ここの数字を変えることでマス目に応じた最短経路を導くことができます。

このようにプログラム化することで非常に効率的な手段を手にすることができます

プログラムを書くこと自体は慣れれば難しくありません。慣れさえすれば、人が言葉を話すのと同じようにサラサラと書くことができます。

重要なのは思考

プログラム化することで非常に効率的な手段を手にすることができますが、どのような手順でどのように計算するのか?を考えるのは人であり、それを考えることが自体に相当な訓練が必要となります。

小学校、中学校、高校でプログラミングが必修化されましたが、文部科学省が発行している資料内ではこのように記述されています。

プログラミングに取り組むことを通じて、児童がおのずとプログラミング言語を覚えたり、プログラミングの技能を習得したりするといったことは考えられるが、それ自体をねらいとしているのではない

「プログラミング技能を習得ことがねらいではない」とはっきり記述されています。

あくまでもプログラミング的に思考する能力を高めること重要である。ということです。

今後、不利になることがある?

義務教育として必修化されたプログラミング教育、どこまで真剣に取り組む必要があるの?今から対策が必要?と不安になられている親御さんも多いです。

結論から言うと、大学入試や就職においてもプログラミング的思考 ( またはプログラミング ) は避けては通れない可能性が非常に高いです。

政府が2018年の未来投資会議にて以下のことを方針として決議しています。

「大学入試において、国語、数学、英語のような基礎的な科目として、情報科目を追加、文系、理系を問わず理数の学習を促していく」とした。未来投資会議のホームページによれば、世界で人工知能(AI)を活用できる人材の争奪戦が激化する中、文理系問わずに情報教育の基礎を習得させることで「第4次産業革命」の牽引役となる国内のAI人材のレベルアップを狙う。

 これを受けて、大学入試センター試験に替わり2020年度から始まる「大学入学共通テスト」の科目に、プログラミングなどの情報科目の導入を検討する。政府関係者によると、早ければ新学習指導要領で初めて学ぶ高校生が3年生となる2024年度の共通テストから情報科目が導入される。

文系・理系問わず、です。

文系だから関係ない世界ではなくなりそうですね。もちろん企業の入社試験でもプログラミング絡みの要素が当たり前に実施される可能性も高いでしょう。

一番、覚えておきたいことは

私は20年近くITの会社で働いています。私自身の経験、そして、いろんな人を見てきた経験としてアドバイスできることが一つあります。

一度、ITやプログラミングに苦手意識を持った人はそこから抜け出すことが難しい。だからこそ、苦手意識が芽生える前に当たり前のようにITやプログラミングが存在する環境に身をおいたほうがよい。

苦手意識を一度もってしまうと、プログラミングというフレーズ自体に嫌悪感を抱いたり、勉強自体が苦痛となり、伸びる能力も思うように伸びないことになってしまいます。

さらに大学入試で必須化される、入社試験で多くの会社がプログラミング要素の試験を準備するなど生きていく上で避けては通れなくなる可能性がなるため、志望する大学や会社に就職できないといったケースも考えられます。

遅くても高校になる前に、ITやプログラミングに関われる環境に身を置き、楽しさを感じれる機会を作ってあげることを強くオススメします。

学び方はいろいろあるよ!

ここまでプログラムミング必修化の内容やプログラミング的思考の概要について説明してきました。

ナオくん
ナオくん
説明だけ聞いててもよくわからないなぁ・・・

私もそうですが、自分が実際やってみないと分からないタイプの人も多いと思うので、実際お手軽にプログラミング的思考を学べるものから本格的に学べるものまでご紹介していきます。

自宅で無料で学ぼう!

Scratch ( スクラッチ ) というサイトをご存じでしょうか?

マサチューセッツ工科大学が開発し、画面上にあるブロックを組み合わせることでプログラムを簡単につくことができるサイトです。ブロックをマウスで動かして組み合わせるだけなので、小学生でも簡単に利用することができます。もちろん無料です

実際、触ってみてもらうほうが一番理解できると思いますが、ここではScratch ( スクラッチ ) を使って軽いデモをしてみたいと思います。

おサルさんに近づいてみよう!

初めは使い方も含めて解説していきます。

Scratch ( スクラッチ )サイトへのアクセスと準備

では早速、Scratchサイトにアクセスしましょう。( チュートリアルがみれるようになっていますが、×で閉じてください )

まず、右上に犬がいますね。こんにちは。

次に左を見てもらうと「動き」という場所にいろんばブロックがありますね。ここにあるブロックの一つ一つが組み合わせることで先ほどの犬を動かすことができます

ブロックはマウスで掴んで真ん中のエリアにドラッグ&ドロップします。

基本的な動きは以上です。

今回は、下の動画のように犬のほかにおサルさんにも登場していただきますので、右下の犬マークを押しておサルさんを追加してください。( おサルさん以外でもOKです!)

ブロックを追加してみよう!

✔ 右下のエリアに犬とおサルがいると思いますが、まずは犬が選択されている状態にしてください。

✔ 左のエリアから「10歩動かす」というブロックを真ん中のエリアにドラッグ&ドロップしてください。

✔ 「10歩動かす」ブロックの中の数字を「200」に修正してください。

✔ 左のエリアから「スペースキーが押されたとき」というブロックを真ん中のエリアにドラッグ&ドロップし、「200歩動かす」の上にきっちりくっつくように配置してください。

ここまでできれば、スペースキーを押してみましょう!

↓こんな感じになれば正解です。

 

違和感!

おサルさんまで一気に移動する感じに違和感を感じますね。。。

もう少し自然な感じで近づくように工夫をしてみましょう!

工夫をしてみよう

では、もう少し自然におサルさんに近づくためにはどうすればいいでしょうか?

左のブロックを見るといろいろと工夫ができそうですね。

例えば「〇秒でどこかの場所へ行く」を利用でも「〇秒でx座標を〇、y座標を〇に変える」でもできそうです。

今回は最初に利用した「10歩動かす」と、あるブロックを使っておサルさんに近づくことにチャレンジしたいと思います。

さて、左のどのブロックと組み合わせればいけそうでしょうか?

ちなみに答えは一つではありませんので、いろんな想像をして、実際にやってみましょう!

動いて→止まって→動いて→止まって・・・

先ほどは200歩一気に動いたので違和感がありましたが、これを細切れに動かすことを考えてみました。

「動く」動作自体はさきほどの「〇歩動かす」を利用します。この10歩を繰り返すことでおサルさんに近づきたいですが、単純に「〇歩動かす」を1並べてもダメです。さきほどと同じように一気に動いてしまいます。

さて、いい感じのブロックはありましたでしょうか?

このブロックの中では「1秒待つ」というブロックが使えそうですね。

「20歩動かす」→「1秒待つ」→「20歩動かす」→「1秒待つ」・・・と組み合わせることでなんだかいけそう!?

では、実際やってみましょう。

おー、できましたね。

こんな感じで「20歩動かす」のあとに「1秒待つ」という制御をいれて繰り返すことで徐々におサルさんに近づいていくことができました。

ただ、同じ処理を10回も書くのって大変ですよね?効率もすごく悪いし・・・。

さて、良い方法はないものでしょうか?

同じ動きは繰り返し処理で対応

20歩動いて、1秒止まってを10回繰り返すためには・・・。

そうです、その思考の通りの処理ができれば一回で済みますね。

ブロックの中から探してみましょう。

探してみると「〇回繰り返す」というブロックがありました!

このブロックを以下のように組み合わせます。

「20歩動かす+1秒待つ」を「10回繰り返す」ことで先ほどよりも少ない組み合わせで同じことが実現できました。

これがプログラミング的思考

犬がおサルさんに近づくというとても単純な処理でしたが、いろんなやり方がありますよね。

その中でどのようにすればやりたいことが実現できるのか、どのように組み合わせれば効率的なのか?を考えました。

この一連の流れがまさにプログラミング的思考です

最初はこれで十分

小学生低学年のうちはこのサイトで学ぶだけで十分だと思います。

最初はお父さんやお母さんがやってみせることから始めましょう。慣れてくれば、子供にお題を与えて、自由にやらせてみる。わからなかったところを子供に説明させて、一緒に解決してみる。

これを繰り返すことで、プログラミング的思考の基礎中の基礎は十分に築くことができます。

なにより大切なことは、お子さんが興味をもって、楽しむことがとてもとても重要です。

教材で学ぶ

さきほど紹介したScratch ( スクラッチ )も十分な教材ですが、強いて欠点を挙げるのであれば、以下のようなことでしょうか。

・操作方法など親がまず覚え、ある程度フォローしてあげる必要がある。
・テーマを与え続ける必要があるが、アイディアがすぐに行き詰まる。
・教える順序や深さ、度合いがわからないため、どこまでフォローすればいいかわからない。

 

コメント

タイトルとURLをコピーしました