個別指導塾、学習塾のヒーローズ。植田(名古屋市天白区)、赤池(日進市)の口コミで評判!成績が上がる勉強方法が身につく!振替、自習も便利!
// 条件1に該当しない場合の処理

Python

【プログラミング教育】確率を使えば円の面積が求まる?

受験が終わったらプログラミングで遊んでみよう!

塾長です。

もう春ですね。
3月3日と言えば桃の節句ですが、ことしは中学の卒業式でもあります。そのあとすぐに愛知県公立高校入試が始まります。国公立大学は先週から始まっていますね。
もう、そういう季節です。

受験が終わったら何をする?

一方で、すでに受験を終えている生徒も多いです。教室では私立高校から届いた課題に取り組む生徒たちや、中学生の総復習にあらためて取り組む生徒たちがいます。

要するに放っておけば新学期まで暇です。そんなキミたちに、

ぜひ今こそ、自分なりの「本当の勉強」というものにチャレンジしてみたらいかが?

などと声をかけています。
たとえば、理系の子には「ブルーバックス」というシリーズの本をお勧めするとか、逆に哲学の変な本を読んでみたらどうかとか、そういう雑談もしています。
コロナ禍で卒業旅行が難しい、そんなご時世だからこそ、落ち着いて本を読んでみるのも一興です。

もちろんマンガやアニメでも良いと思います。

新しい本との出会いは、新しい自分との出会いになることがあります。

また最近ではパソコンで遊んでみることもお勧めです。

塾長が生まれて初めて目にした科学計算プログラム

そんな話を生徒たちにしていたせいか、自分が高校生になったばかりの頃を急に思い出しました。

塾長は高校生になってから直ぐに地学部に入りました。天文少年だったので迷わずストレートに行きました。
高校の屋上には1つ部屋があって、その上が天文台になっていました。地学部は屋上もその部屋も天文台も、すべて自由に使うことができました。そして屋上の部屋には1台のパソコンが置いてありました。
ある日、3年生の先輩がそのパソコンで自作のプログラムを披露してくれました。

衝撃でした。何のプログラムだったか、今でもハッキリと覚えています。

モンテカルロ法による円周率の計算プログラム

今から30年以上も前です。たしかSHARPのX1というパソコンで、BASICというプログラム言語でした。
もちろんプログラムの1行1行を覚えているわけではありません。覚えているのは先輩がしてくれた説明です。

どんな計算をしているプログラムか

その仕組みというか、考え方が面白くて、今でも覚えているのです。

「あー、コンピューターって、こんなことまでできるんだ。」

そんなことを初めて実感した瞬間でした。

どんな話だったか、ちょっと説明しますね。

確率で面積を求める!?

突然ですが、もしもこんな図形があったら、どうやって面積を求めますか?

いびつな形の面積の図

長方形の中に雲みたいな形があって、色が塗られています。その部分の面積です。

もちろん、こんな変な形の面積を出す公式なんて知りません。

こういう時に次のような発想で求められると言うのです。

確率で面積を求められる!

もう少し説明を続けます。

もしも次のことが分かれば面積が求められます。

長方形の中で雲の形が占める割合

たとえば仮に、雲の面積が長方形の面積の3分の2だとすれば、

$$ 10 \times 6 \times \frac{2}{3} = 40 cm^{2}$$

という具合に求まるわけです。つまり、

実際には何分の何なのか?

という「割合」を求められれば良いわけです。

この割合、どうやって求めましょうか?

そこで確率の登場です。

上から針を落とす実験

長方形の中で雲の形が占める「割合」を求めるために、この絵に対してランダムに点を描いていくことを考えます。

点を描く場所に偏りがあってはいけません。人間の意思が働くと偏りが出るかもしれないので、人間の意思が入らないように、でたらめにやる必要があります。例えば、この絵を地面に敷いて上から針を落とし、針の先端が止まった場所に点を描く方法などがあります。そういう方法ができたとしましょう。

試しに10本ほど針を落として、その先端に赤い印をつけてみた例が次の図です。

いびつな形にランダムに点を打った図

10本の針を落としたら7本が雲の図の中に入りました。つまり針が雲の中に落ちる確率が $\frac{7}{10}$ ということです。これは言い換えると、雲の面積が占める割合が長方形の $\frac{7}{10}$ だったと見なすことができます。だったら、

$$ 10 \times 6 \times \frac{7}{10} = 42 cm^{2}$$

ということで求めたことになりそうです。

良ろしいでしょうか?

けっこう良い線まで求められたとは思いますが、まだ不安ですよね。

たったの10本で決断してよいの?

そういう不安感があるからです。たまたま7本だったのかもしれません。もう1回実験したら $\frac{6}{10}$ になったり、 $\frac{8}{10}$ になったりするかもしれません。

10回では自信が持てないのなら回数を増やせばよいです。そこで1万回くらい実験しましょう。そしてその結果が、 $\frac{6711}{10000}$ になったとします。だったら、

$$ 10 \times 6 \times \frac{6711}{10000} = 40.266 cm^{2}$$

ということで良いでしょうか?

かなり良い線まで求められたとは思います。
しかし、まだ不安が0ではないですよね。1万回よりは10万回、いや100万回。いやいや1億回なら・・・などと増やしていけば、いつかは求まるだろうと思うワケです。

このようにランダムな行為で発生する確率を利用して、何かを計算していく方法を「モンテカルロ法」と呼びます。

この発想法、すごくないですか?

塾長は高1の春に感動した思い出があります。

ところで、円の面積も、これと同じ方法で求めることができます。そして円の面積が分かれば円周率も分かるというワケです。

確率で円の面積を求める!

それでは円の面積を求めていきましょう。

いま半径1の円を描きます。中心を座標の原点にすると下の図のようになります。

xy座標の中の円の図

ここでマイナスの座標を使うと計算が面倒です。そこでx座標もy座標も「正の数」だけ使うことにします。それが図で黄緑色の部分です。

つまり下図のように円の右上4分の1の扇形だけを実験に使います。

xy座標の中の扇形

この図で色のついた扇形は、1辺が1の正方形の中にピタリと納まっています。この正方形の中に針を落とす実験をしてランダムに点を打っていきましょう。すると

$$半径1の円の\frac{1}{4}の面積=1 \times 1 \times \frac{扇の中の点の数}{点の総数} =\frac{扇の中の点の数}{点の総数} $$

となりますね。
一方で円の面積の公式を使った式では、

$$半径1の円の\frac{1}{4}の面積=1 \times 1 \times \pi \times \frac{1}{4} = \frac{\pi}{4} $$

両者は同じはずですから、

$$ \frac{扇の中の点の数}{点の総数}=\frac{\pi}{4} $$

よって

$$ \pi = 4 \times \frac{扇の中の点の数}{点の総数}$$

となって円周率 $\pi$ が求まるわけです。

プログラミングで求める!

それでは上の考えをプログラミングします。

ちなみに正しい円周率は、

$$\pi=3.1415926535 \dots$$

だそうです。
今回はこれを模範解答として、プログラミングで得られた円周率の精度を評価してみましょう。

扇の中か外かの判定は?

プログラミングをする上で、あと1つ問題が残っています。それは

打たれた点が「扇の中か外かを判定する計算」をどう実現するか?

という問題です。
先に答えを言ってしまうと、これは中3の「三平方の定理」で解決します。

扇形の中か外か

例えば上のように点が打たれたとします。もしもその座標が $(a, b)$ だったとすれば、原点からその点までの距離は三平方の定理から $\sqrt{a^{2}+b^{2}}$ となります。これが円の半径1よりも小さければ扇形の内部というワケです。

ただし1は2乗してもしなくても1なので、 $\sqrt{a^{2}+b^{2}}$  の代わりに $a^{2}+b^{2}$ を使っても、1以上か未満かの判定には影響しません。少しでも計算を楽にしてあげた方がコンピューターから高速に結果を得られます。そこでプログラムではルートを取る前の $a^{2}+b^{2}$ と1を比べて判定します。

さぁ、今度こそプログラミングです。

まずは私が高校生の時に経験したBASICというプログラミング言語で再現してみます。

BASICのプログラミング

半径1の図をそのまま描くと小さすぎて何も見えなくなるので、400倍に拡大して描画するようにプログラミングしています。

10 CLS
20 DEFINT L
30 L=400:COUNT=0:R=0.0:X=0.0:Y=0.0
40 CIRCLE(0,0),L,1
50 LINE(L,0)-(L,L)
60 LINE(0,L)-(L,L)
70 INPUT N
80 FOR I=1 TO N
90 X=RND(1)
100 Y=RND(1)
110 PSET((L*x),(L*Y)),2
120 R=X*X+Y*Y
130 IF R <= 1.0 THEN COUNT=COUNT+1
140 NEXT I
150 PRINT (4*COUNT/N)

このプログラムを使って、針を落とす実験の回数を10000回まで実行したのが下の図です。この1万回の実験で、だいたい6秒くらいかかりました。
扇形は青い線で、針の落ちた場所が赤い点です。

モンテカルロ法で円周率を求める

円周率が3.132と出ています。
残念ながら1万回の実験をもってしても小数第1位くらいまでしか求まらなかったようです。

そこで10万回に増やしてみました。今度は60秒くらいかかりました。

BASIC_モンテカルロ法で円周率_10万回

10万個も点を打つと、かなり塗りつぶされている感じになります。
そして円周率が3.1404と出ています。
ようやく10万回でお馴染みの「3.14」つまり小数第2位まで求められました。

こりゃ、とてもじゃないけど、人間の手で実験なんてしていられませんね。

Pythonのプログラミング

今度は同じことを「Python(パイソン)」というプログラミング言語で実行しました。下がそのプログラムです。
BASICよりも高速に動作するので、10万回を超えるような計算はPythonの方で実験することにします。
グラフィックは面倒なので省略します。その代わり計算にかかった時間を表示するようにしました。

import random as r
import time as t

def cal_pai(n):

count_in  = 0
start = t.time()
for i in range(n):

x = r.random()
y = r.random()
if (x*x + y*y) <= 1:

count_in += 1

pai_n = 4*count_in/n
print(“n={}, pai={}, time={}[sec]”.format(n, pai_n, (t.time()-start)))

cal_pai(100)
cal_pai(1000)
cal_pai(10000)
cal_pai(100000)
cal_pai(1000000)
cal_pai(10000000)
cal_pai(100000000)
cal_pai(1000000000)

実行結果が下の図です。私のパソコンでは1億回の計算に21秒くらい、10億回の計算に4分12秒くらいかかりました。

Python_モンテカルロ法で円周率_10億回

なるほど、やっぱり10万回で「3.14」まで求まるようですね。
そして1億回で小数第3位の3.141まで求まっています。
しかし10億回に増やしても小数第4位まで出すことができませんでした。本当は3.1415…と表示されて欲しいのですが、3.1416…となっています。

そこで100億回にチャレンジしてみたいところですが、そうすると1時間くらいかかりそうなので止めておきます。

Scratch(スクラッチ)のプログラミング

最後にスクラッチのプログラミングです。
スクラッチは計算が遅いので、このように何千万回も計算をするような処理には向きません。ただしプログラムは読みやすいです。

Scratch_モンテカルロ法で円周率_100万回

実行してみると100万回で小数第2位の3.14まで求まりました。かかった時間は3秒弱でした。意外と速いですね!

同じ100万回で見ると、Pythonは約0.22秒、BASICは約600秒ですから、スクラッチの計算速度はBASICの200倍、Pythonの$\frac{1}{13}$くらいの速さということになりました。もっとも今回のBASICはエミュレーター上で動作し、なおかつグラフ表示もしているため遅いのは仕方がありません。

スクラッチは簡単にプログラミングできる環境でありながら、立派にアルゴリズムをプログラミングして実験できる環境だと言えます。

小学生が初めてプログラミングする環境として「スクラッチが最強」であることが、あらためて実感できました。

弱点を補うのもプログラミング

スクラッチにも弱点はあります。今回のプログラムに関しては次の2つです。

  1. 小数の乱数を生み出す命令が無い
  2. 「以上」「以下」を表す演算子が無い(「より大きい」「より小さい」しかない)

この2つの弱点を補うために、それぞれ次のような工夫しています。

  1. 「0~1000の範囲」で整数の乱数を生成し、それを1000で割って小数にした
  2. 「1以下のとき」の条件が作れないので、代わりに「「1より大きい」でないとき」とした

みなさんならどのように工夫しますか?

有るもので工夫するのもプログラミング的思考の大切なポイントです。

とても奥が深い分野

モンテカルロ法は奥がとても深くて、大学の卒業論文などでもよく取り上げられる問題です。

奥が深いとは、例えば、実際に実験することを想像すればわかります。

実際に実験するときには、先に実験の目的を決めますよね。今回なら

「円周率を小数第何位まで求めたいか?」

ということを決めます。
仮に、これが世界で初めての実験だったとしましょう。
すると逆に、

「その桁まで求めるには、何回くらい実験する必要があるのか?」

ということが分かっていなければ、実験を終わらせることができません。

世界で初めて実験するのですから、まだ誰も円周率の小数第4位の数を知りません。つまり正解が分かっていません。

答え合わせができない!

というのが、この実験の難しいところなのです。

そこで代わりに

「何回目の実験で正解にたどり着けるのか?」

を何らかの方法で求めておく必要があります。
それが分かっていなければ、いつまでもゴールできません。永遠に実験をし続ける羽目になってしまいますから。

この「実験を終えてよい回数」を求める方法は、実はとても難しい理論になります。大学の数学レベルの話になってしまいます。

上の実験では、Pythonで10億回やっても小数第4位を正しく出せんでした。しかし実際の実験では、そもそも「正しく出なかった」という判断ができません。今回は先に円周率の正解を表示するという「ズル」をしていたので「まだ求まっていない」という判断ができた、というワケです。

さて、円周率の小数第4位の数。

100億回なら出るのでしょうか?
もしかしたら1000億回なのでしょうか?

こういうたいへんな作業をやる前に、先に「何回やったら終わっていいよ。」という回数を知っておきたいですね。

大学受験の範囲を超えてしまいますが、興味のある人は調べてみてください。

暇な時間を上手に使える人に成ろう

高校受験や大学受験を終えた皆さんが、暇つぶしをするネタとして、今回はモンテカルロ法で円周率を求めるプログラミングを提供してみました。

塾長の過去の思い出から、たまたま思い出したので書いてみました。

コンピューターを使った遊び方は色々ですが、ゲームをするだけではもったいないです。

ぜひコンピューターが持つ本当の力を引き出してみてください。

もちろん、これは時間の使い方の1つの例です。

みなさんは暇な時間に何をしますか?

そういう時間を上手に使える人に成りたいものですね。

 


ヒーローズ植田一本松校の進学実績

卒塾生(進路が確定するまで在籍していた生徒)が入学した学校の一覧です。
ちなみに合格実績だけであれば更に多岐・多数にわたりますが、当塾の理念に反するので生徒が入学しなかった学校名は公開しておりません。

国公立大学

名古屋大学、千葉大学、滋賀大学、愛知県立大学、鹿児島大学

私立大学

中央大学、南山大学、名城大学、中京大学、中部大学、愛知淑徳大学、椙山女学園大学、愛知大学、愛知学院大学、愛知東邦大学、同朋大学、帝京大学、藤田保健衛生大学、日本福祉大学

公立高校

菊里高校、名東高校、昭和高校、松陰高校、天白高校、名古屋西高校、熱田高校、緑高校、日進西高校、豊明高校、東郷高校、山田高校、鳴海高校、三好高校、惟信高校、日進高校、守山高校、愛知総合工科高校、愛知商業高校、名古屋商業高校、若宮商業高校、名古屋市工芸高校、桜台高校、名南工業高校

私立高校

中京大中京高校、愛工大名電高校、星城高校、東邦高校、桜花学園高校、東海学園高校、名経高蔵高校、栄徳高校、名古屋女子高校、中部第一高校、名古屋大谷高校、至学館高校、聖カピタニオ高校、享栄高校、菊華高校、黎明高校、愛知みずほ高校、豊田大谷高校、杜若高校、大同高校、愛産大工業高校、愛知工業高校、名古屋工業高校、黎明高校、岡崎城西高校、大垣日大高校

(番外編)学年1位または成績優秀者を輩出した高校

天白高校、日進西高校、愛工大名電高校、名古屋大谷高校

※ 成績優秀者・・・成績が学年トップクラスで、なおかつ卒業生代表などに選ばれた生徒

 


生徒・保護者様のお友達登録はこちら

LINE登録するとプレゼントがもらえます!
【会員限定】お子様の成績と可能性を伸ばす18個のノウハウ

友だち追加


塾関係者様のお友達登録はこちら

LINE登録するとプレゼントがもらえます!
「zoomで簡単。オンライン授業移行の教科書」
または個別対談も可

友だち追加

 


名古屋市天白区の植田で塾を探すなら個別指導のヒーローズ!!

★ 直接のお問い合わせ ★
――――――――――――――――――――――
個別指導ヒーローズ 植田一本松校
〒468-0009
名古屋市天白区元植田1-202 金光ビル2F
TEL:052-893-9759
教室の様子(360度カメラ) http://urx.blue/HCgL

プログラミングが不要になる? 噂のウソとホント

プログラミングが無くなる?

コンピューターと宇宙が大好きな塾長です。

今回は「もう少しすると教育業界でも騒がれそうな話題」について、一足先にお届けしてみようと思います。
個人的には、騒がれずにやり過ごして欲しいと期待したいのですが・・・

プログラミングが不要になる!?というウワサ

昨年(2020年)の秋くらいから、どうも日本のIT業界では

「もうすぐ、プログラミングをしない時代になる」

などと騒がれているようです。

「ノーコード」

というキーワードが、どうも日本でバズり出したようです。

どういうことでしょう?

ちょっと端的に説明します。

これまで「プログラミング」と言えば、こんなイメージでした・・・

プログラミングのイメージ

今後、それがこんなイメージに変わっていきます・・・

bubbleの画面イメージ

実は、どちらもアプリを開発している画面です。
でも、ぱっとした見た目から違いますよね。それで、

「おお、なんと画期的!!」

と騒がれているのです。

ひょっとして、デジャブ?

実は、みなさんも似たような変化を経験しています。

パソコンやタブレット。
今はとても使いやすいですよね。

昔と今ではコンピューターの操作が

  • 昔: コマンド
  • 今: クリック(タップ)

というふうに変わりました。
昔は難しかったコンピューターの操作が今では簡単です。

クリックで済む!

という変化です。

例えば、Windows10でお絵かきソフト「ペイント」を起動させる方法は、このように変わりました・・・

昔:コンピューターの操作が、黒い画面にコマンドを打つ操作

コマンドでペイント起動

から、

今:マウスでクリックする操作

GUIでペイント起動

に変わりました。

マウス操作の方が楽ですよね。
コマンドを覚えなくても良いし、とりあえずマウスだけカチカチしてたら操作できます。

こうした変化のおかげで、コンピューターを使う人が爆発的に増えました。1990年代のことです。

これと同じような変革が、いま、プログラミングの世界でも起こっています。

かつて、難しい「命令(関数)」や文法を駆使してプログラミングしていた作業。
これが画面上のマウス操作に置き換わっていく、という変化です。

そう、時代は繰り返すのです!

そう考えると、これは90年代のデジャブなんですよね。

もっと言えば、その90年代には、マウスでプログラミングできる機能エクセルやアクセスにすでに組み込まれていました。

例えば、エクセルの「マクロの記録」という機能を使ったことがありますか?

ビデオ録画の要領で人間の操作手順をエクセルに覚えさせる機能です。エクセルが裏でプログラミングを自動でしてくれるのです(少しプログラミングの編集作業が必要です)。
また、エクセルやアクセスには、入力画面(フォーム)をマウス操作で組み立てる機能があります。
これらの機能を使えば、ちょっとしたアプリの開発が、マウス操作メインでできるのです。

このような機能が25年くらい前からエクセルやアクセスにずっと備わっていました。知らない人は大きな損をしていたと思います。
エクセルのマクロは今ではほとんど使われず、新しい技術に置き換えられてしまいましたが。

塾長が大学生だった頃、紙のデータをひたすらエクセルに入力するアルバイトがありました。1束で20万円の稼ぎになったので貧乏学生だった塾長にはありがたい仕事だったのです(※)。ただ1つ、入力の作業が大変なのが難点でした。
まず紙の枚数が多くて1枚あたりの入力項目が多いのです。1束で2500枚くらいでした。次に指定されたエクセルの表が横に長いのです。入力項目が多ければ表が横に長くなるのは当然です。それで画面を横にスクロールさせる操作と、紙の値を読み取って入力する操作の両方を行う必要がありました。
そんなこんなで、1枚あたりの作業に時間がかかりました。

そこでエクセルの「マクロの記録」や「フォーム」を使って入力専用の画面をつくりました。入力画面に数字を入力するだけで、自動的にエクセルの表にそれらを割り振ってくれるようにしたのです。それでかなり作業の効率が上がりました。1997年とか1998年とか、そのくらいの時代です。

まさにデジャブなんですよ。

(※)当時は紙のデータをコンピューターが読み取るOCR技術がまだ実用的ではありませんでした。そこで人間がコンピューターにデータを入力する作業が必要でした。コンピューターが安くなってIT化が加速するのと並行して、紙の資料をコンピューターに入力する仕事も増えたのでした。

つまり何が変わったの?

さて、

「プログラミングが不要になる?」

というウワサの話しに戻します。こうしたウワサによって塾長は

「じゃぁ、プログラミング教育なんて意味ないじゃん!」

という風評被害、もとい「早とちり」が出てくるだろうと心配しております。

鋭いみなさんなら、もうお判りでしょう。

  • 前: 命令を文法に従って組み立てる
  • 後: 部品をマウス操作で組み立てる

どちらも方法が違うだけで、やっていること(作業の目的)は同じです。

つまり、

  • 目的は変わらない!
  • 方法が変わっただけ!

ということです。
プログラミングを「組み立てる」という作業はあいかわらず残っています。

作業の「スタイル」が変わったに過ぎません。

ちなみに、上の事例で挙げた画像は、.bubble というプログラミング環境の画面です。
.bubble ではプログラムのことを「ワークフロー」と呼ぶそうです。
プログラムの流れを「コンピューターの作業手順」に見立てて組み立てるスタイルです。

変わったのはプログラムを組み立てる「スタイル」です。
相変わらずプログラミングしていることには変わりがありません。

プログラミング教育はどうなる?

このように見てくると、プログラミング教育の「あるべき姿」が理解しやすくなります。

特定のプログラミング言語の命令や文法を覚えさせても、あまり意味がないことが分かるでしょう。
プログラミングの「文法」や「スタイル」は将来のどこかで変わってしまうからです。

しかしコンピューターに「作業の手順を伝える」という作業そのものは、相変わらず残ります。
「コンピューターができる小さな仕事」を組み合わせて「より大きな仕事」を組み立てていく作業は、今後も必要です。
つまり、手段は変わっても「考え方」は残るというワケです。

こうしたプログラミングの「考え方」を、ちゃんと教えることがプログラミング教育のあるべき姿ということになります。
専門学校や高等教育なら直近の技術を教えても良いでしょうが、小中学校の生徒を捕まえて教えても仕方がないというワケです。
教えるなら、時代が変わっても残る部分、つまり「考え方」でしょう。

ところで「プログラミング教育」と言ってしまうと、専門学校のような授業を想像してしまう人がいて誤解されがちです。

実のところ「プログラミング教育の必須化」という言葉も、本当は、

「プログラミング的思考の教育の必須化」

という言い方なんですよね。文部科学省の正式な言い方はこっちの方です。
要するに、

手段や環境に依存しないように、プログラミングの「考え方」を指導してね。

という教育が義務教育で必須化されたものです。

その考え方の中で、もっとも大切なところが「最適解を見つける試行錯誤」です。
大人の世界では「問題解決」とか「カイゼン」などと呼ばれています。

模範解答が用意されていないような問題にチャレンジする訓練です。

こうした取り組みの中に出てくる「考え方」はプログラミングの考え方そのものです。

これが文部科学省が声を大にして「必須化だ」と主張したいことなんです。

ここをしっかり理解できている人は、騒がずに済むというワケです。

ただ「プログラミング的思考」という言葉が、回りくどいし、逆に分かりにくいと不評でした。
残念ながら、なかなかこの本当の言い方が広まらなかったのです。

今日では、たいてい省略して

「プログラミング教育」

と呼ぶようになっています。

ということで、いくら日本のIT業界で「ノーコード」がバズっても、プログラミング教育にはほとんど影響がないでしょう。

逆に大きな影響を受けてしまったとしたら、それだけ教育業界が腐っているということになります。

プログラミング教育に新しい知識はほとんど不要

とうことで、義務教育で必須化されたプログラミング教育。
ここで、そのあるべき姿をまとめておきます。

  • できるだけプログラミング言語の文法や用語を覚えなくても済むようにする
  • できるだけ目的を達成できる「最適解」を「試行錯誤」で見つけさせる
  • そのために失敗を次に活かすチャレンジ精神を育む
  • コンピューターの色々な使い方を実践させる

また、よくある勘違いについても、まとめておきます。

  • 特定のプログラミング言語や機械の特性を覚えさせる
  • 教師の用意した答えを模倣させる、作り方を全て解説してしまう
  • 失敗しないことを評価の最高点にしてしまう
  • 指導事例は事例でしかないのに手順書のように運用してしまう

人によっては大きな大きな価値観の変更が迫られます。

小中学生におけるプログラミング教育の理想を一言でまとめるとすれば、きっと次のようなものになるでしょう。

できるだけ、今まで学校の教科書で学んできた言葉だけを使ってプログラミングする

プログラミングの「考え方」を子供たちに要領よく伝えるには、こうするのが一番だと思います。
中には、

「1つのプログラミング言語をマスターすれば、根柢の”考え方”も身に着くはずだ。」

と主張される人もいます。
それも一理あります。

しかし、それは遠回り過ぎます。子供たちにも学校の先生にもストレスが大きすぎるでしょう。

限られた時間と成績評価制度の中で運用されることを考えますと、プログラミング言語の詳細を覚えさせるのは現実的ではありません。
プログラミング教育の必須化によって、新しく覚える知識が増大してしまえば、漢字書き取りや計算ドリルに取り組む時間が無くなってしまい、学校現場や子供たちの学びが破綻してしまいます。

また新しい知識の暗記が負担やストレスになってしまえば、肝心の「答えのない問題にチャレンジする」という取り組みがおろそかになりかねません。

プログラミング教育の為だけに、わざわざ新しい用語をたくさん用意してしまうのは、本末転倒と言えます。
何より、せっかく覚えても、おそらくその知識の多くは10年後に無駄になります。

良い意味での影響を期待

さて「いくら日本のIT業界で「ノーコード」がバズってもプログラミング教育にはほとんど影響がない」と書きました。

ただし、良い意味での影響は、むしろ期待しています。

人工知能の発達に伴って、すでに人々の意識は変わってきています。

  • 漢字のトメ・ハネ・ハライのちょっとした違いで×にされる
  • かけ算の順序を逆にしたら×にされる

とか、そのような炎上ネタがよくありますよね。
昔とちがって、今は「覚えなくてもよいこと」が広がりつつあります。

これと似たような意識の変化がプログラミング教育にも起こってくると思います。
つまり、

  • 小学生や中学生にプログラミング言語の文法を覚えさせる
  • 小学生や中学生に機械や電子基板の仕様を覚えさせる

という「勘違いした指導」が無くなっていくだろうと思います。

プログラミング教育の世界でも、関数名を覚えさせるテストとか、細かい文法テストとか、そういうのが今後は炎上ネタにはなってくるでしょうね。

時代によってすぐに変わってしまうような知識は、仕事や趣味で必要になってから覚えればよいのです。
もっと言えば、わざわざ覚えなくても、必要な時に必要な人が調べながら使っていれば、必要な分だけ勝手に覚えます。

義務教育でテストするようなことじゃありません。

日本と海外で異なる「プログラミング」の意味

そもそも日本で「プログラミングが必要なくなる!」というウワサが広まってしまった原因は何でしょうか?

海外ではぜんぜんバズっていないようです。

日本では実際にそう言っている人たちがいます。
彼らの名誉のために言っておきますが、もちろん決してウソを言っているワケではありません。ホントのことを言ってます。

実は、そういう人が言っている「プログラミング」と、世界で一般的に言われている「プログラミング」とでは、そもそも言葉の意味が違うのです。

プログラミングの意味が「日本と海外では違う」ということは、業界ではよく話題になります。
ざっくり説明すれば、次のような感じで意味が変わります。

  • 日本: プログラミング = コーディング(設計どおりにプログラムを書くこと、若手の力仕事)
  • 海外: プログラミング = コンピューターで世の中の仕組みを変えていくこと

ですから正確に言えば

「コーディング作業が不要になる!」

と言いたかったわけです。

確かに、プログラミングのほとんどは、過去の誰かが作ったノウハウの再利用です。
例えば、

「商品の個数を入力してクリックすると注文数が1つ増える」

みたいに、どこかで見たことがあるような処理があります。
よくある処理ですから、だれかがプログラミングして部品にしておけば、後の人はそれを再利用するだけで済みます。
このように、ありがちな処理をすべて「プログラミング済みの部品」にして用意していくと、最終的には、そういう部品の組み合わせだけで開発できてしまうようになります。

つまりテンプレート的な機能の寄せ集めだけで作れるようなアプリやシステムだったら、確かにコーディング作業は無くなりますね。マウス操作がその代わりになりますから。
上の写真のように、マウスで部品を持ってきて貼り付けていくだけで開発ができそうです。

なるほど、ホントだ!

そういうワケです。

しかし反対に、テンプレートの部品そのものを開発する人にとっては、相変わらずコーディングが必要です。テンプレートはどんどん新しく進化していくでしょうから、コーディングの仕事もなくならないでしょう。もちろん全く新しいサービスやアプリを開発する場合もそうです。

そう考えれば、ウソだ!

ということになるワケです。

ちなみに日本で「プログラマー」と言えば、どちらかというと「安月給」とか「辛い仕事」というイメージです。
最近は変わってきているかもしれませんが、塾長が技術者だった時はそうでした。
コーディングしか作業しないとすれば、そりゃ給料は上がらないでしょう。

一方、海外ではどちらかというと「中流階級以上の仕事」とか「高給取り」、「スマートな仕事」というイメージです。
世の中の仕組みを変えるのですから、色々な役割をこなします。その分だけ、そりゃ給料が上がるでしょう。
海外の方が夢があって華やかなイメージになります。

さて、日本と海外で「プログラミング」の意味が違うのは、どうしてでしょうか?

つまり、どうして日本では

プログラミング = コーディング

なのでしょうか?

それは日本が「超縦割り社会」だということに原因があります。「ピラミッド型の組織」だからと言っても良いでしょう。
誤解を恐れずに表現すると、

  • 設計する人(エライ、給料が高い)
  • コーディングする人(下っ端、給料が安い)

という身分制度が日本にあります。
大企業になればなるほど、この身分の壁が厚くなります。

「大量生産」の時代には、こうしたピラミッド型の組織が最も効率的とされていました。
そして多くの日本企業は今でもその体制が良いと信じられています。

「プログラミング」の意味を変えていくべき!

日本のピラミッド型組織の問題は、役割が「縦割り」になり過ぎていた、ということです。
「設計する人」と「コーディングする人」(プログラミングする人)が別という組織は、とても非効率なのです。
それに技術者の能力もたいして上がりません。

もちろん昔は良かったのですが、今でもそんなことをしていたら、企業も日本も発展しません。
どんどん海外に追い抜かれていきます。

なぜなら、昔とは違って、今どきのプログラミング言語や開発の環境は、とても高機能だからです。
開発がものすごく効率的にできるようになっています。

例えば、今どきのコーディングは、プログラムを見れば「設計の考え方が分かる」ようになっています。わざわざ細かい設計書を別に書く必要がありません。
つまり、設計すると同時にプログラミングが完成していく、という状況です。
こうなると「設計する人」と「コーディングする人」は同じ人で良くなります。

他にもいろいろあります

例えば、昔はサーバー側(大型のコンピューター側)と、ブラウザ側(スマートフォンやパソコンなど)とでは、設計やコーディングをする人が違っていました。
それぞれに使われている技術が違っていたからです。サーバー側はPHPやPythonで、ブラウザ側はJavaScriptで、という具合です。
ところが今はサーバー側もブラウザ側も同じ技術でプログラミングできてしまいます。例えばNode.JSという環境では、JavaScriptでサーバーもプログラミングできてしまいます。
実際、スクラッチ3.0はこの技術を使って開発されました。塾長もマイクラミングの開発で使いました。
こうなると「サーバー側」と「ブラウザ側」も同じ人で良くなります。

このように、どんどん1人でできることが多くなってきています。

ですから余計に1人が多くの役割を同時にこなした方が良いのです。
その方が開発が速いし、画期的なアイデアが採用されやすいのです。

海外に比べると日本の組織は、意思決定も開発のスピードも圧倒的に遅いです。
もうそろそろピラミッド型の組織では飯を食っていけなくなるでしょう。

よって「プログラミング」には、問題の設定や設計からコーディングまで、すべての意味を含めるべきでしょう。
つまり1人が色々な役割を同時にこなすことを、誰にも邪魔されないようにすべきです。

これから日本も「プログラマーが世界を変える」ような姿になっていくべきだと思います。

ピラミッド型の組織の中で「プログラミング」を「下っ端がコーディングだけすること」などと決めつけているようでは、日本は成長しません。

ちなみに「1人でできることが増えてくる」ことは、プログラミングに限った話ではありません。
例えば放送の世界でもそうでしょう。

YouTuber は1人で企画、取材、撮影や録音、編集、放送や広告宣伝の全てをこなしています。
コンピューター技術の発達で、放送のあり方が急速に変わっています。
YouTubeに乗り遅れた有名人たちがclubhouseに殺到している、なんて揶揄されているほどです。

私たちを取り巻くコンピューター技術が、それだけ目まぐるしく変わっているということです。

このような変化に伴って、すでに組織の潮流は、ピラミッド型の組織からネットワーク型の組織に変わっています。
1つの大きな組織が大きなモノを生み出す形態から、1人ひとりが独立して何かを生み出しつつ、連携して大きなモノを生み出す、そういう形態に変わってきたのです。

他にも色々な変化が発生しています。

  • 秘密主義からオープン主義へ
  • 所有からシェアへ
  • 一握りの天才から集合知へ
  • 大型顧客からロングテールへ
    ・・・

しかも急速な変化です。

ピラミッド型の組織では、こうした変化に対応できないのです。

ですから、これまで優秀なプログラマーや企業は、みんな海外へ出て行ってしまいました。
日本に残るのが、変化を察知できない人や組織だけ、となってしまっては悲しすぎます。

これから日本も「プログラミング」の意味を海外のように変えていく必要があります。
そのためには組織もネットワーク型に変えていくべきでしょう。
日本の内部から「世の中の仕組みを変える」ような国に変えていく必要があります。

このようにプログラミングの意味を変えることと、組織を変えることは、切っても切り離せません。
日本も早く変わっていくべきでしょう。

もちろん、新しいプログラミングの教育、つまり色々な役割を同時にこなしたり、一連の作業の流れを一通りこなしたりするような人材を育成していくことが前提になります。

だからプログラミング教育の必須化が待ったなしになったのです。

コロナ禍でテレワークが増え、並行してGIGAスクールが加速しています。
これらが起爆剤の1つになる可能性も有ります。

「プログラミング教育」を「モノづくり教育」にしてはならない!

せっかく必須化されたプログラミング教育。
これを

「モノづくり教育」

だと勘違いしてしまったら、悲しい失敗に終わってしまうでしょう。
過去に何度も繰り返してきた失敗です。

趣味でやるのはかまいませんが「義務教育としてやるのは間違い」といことです。

上で述べたように、モノづくりの現場で使われている技術は日進月歩です。
技術は10年もたたないうちに変わります。

ですから、いま日本で使われているトレンドの技術を子供たちに覚えさせても、あまり意味がありません。
次のことは全て間違った教育です。

  • 小学生に今からプログラミング言語の文法を覚えさせる
  • パソコンのコマンドを覚えさえさせる
  • 中学生にエクセルの関数名を暗記させ、書き取りテストをする
  • モーターやLEDの特性や制御の手法を細かく覚えさせる

まったく英才教育にはなりません。

何度も書きますが、趣味でやるのはかまいませんが「義務教育としてやるのは間違い」という意味です。

プログラミング教育でやるべきことは、モノづくりの技術などではありませんよ。
新しくトレンドの技術を覚えさせる必要なんて、全くないですからね。

最適解を見つける訓練ですよ。

技術が変わっても残る「考え方」の部分。
要するに「世の中の仕組みを変える方法」を教えていくことです。

それがプログラミング教育のあるべき姿です。

間違っても技術者の早期育成などと矮小化してはいけません。
そんな目先の小さなものに注目していると、大きな目的を見失ってしまいます。

もしも学校の予算が無くてLEDやロボットが買えないなら、買わなくてもよいです。困りません。
最低限、コンピューターだけあればよいです。
あるものを組み合わせてできる範囲で最適解を考えさせれば良いだけです。

有るもので間に合わせて指導した方が、むしろトレンドの技術に依存しないプログラミング教育ができると思いますよ。
そう考えると、本当はもっと早くプログラミング教育ができたはずでした。

これからの時代、プログラマーの仕事は「世の中の仕組みを変えること」です。
人間の欲求の姿はあまり変わらなくても、社会の仕組みは、どんどん変わるでしょう。

日本人がやらなければ海外の人がやってしまいます。
海外の人がやってしまったら、日本人は、それをお金を出して買うしかありません。
日本人も新しい仕組みを作って海外に売らなければ、日本からお金が出ていくだけですよ。

YouTuberの中には「プログラミングスクールに通っても稼げない」などと主張する人がいますね。

その「プログラミング」の意味、そろそろ卒業した方が良いですよ。

 


ヒーローズ植田一本松校の進学実績

卒塾生(進路が確定するまで在籍していた生徒)が入学した学校の一覧です。
ちなみに合格実績だけであれば更に多岐・多数にわたりますが、当塾の理念に反するので生徒が入学しなかった学校名は公開しておりません。

国公立大学

名古屋大学、千葉大学、滋賀大学、愛知県立大学、鹿児島大学

私立大学

中央大学、南山大学、名城大学、中京大学、中部大学、愛知淑徳大学、椙山女学園大学、愛知大学、愛知学院大学、愛知東邦大学、同朋大学、帝京大学、藤田保健衛生大学、日本福祉大学

公立高校

菊里高校、名東高校、昭和高校、松陰高校、天白高校、名古屋西高校、熱田高校、緑高校、日進西高校、豊明高校、東郷高校、山田高校、鳴海高校、三好高校、惟信高校、日進高校、守山高校、愛知総合工科高校、愛知商業高校、名古屋商業高校、若宮商業高校、名古屋市工芸高校、桜台高校、名南工業高校

私立高校

中京大中京高校、愛工大名電高校、星城高校、東邦高校、桜花学園高校、東海学園高校、名経高蔵高校、栄徳高校、名古屋女子高校、中部第一高校、名古屋大谷高校、至学館高校、聖カピタニオ高校、享栄高校、菊華高校、黎明高校、愛知みずほ高校、豊田大谷高校、杜若高校、大同高校、愛産大工業高校、愛知工業高校、名古屋工業高校、黎明高校、岡崎城西高校、大垣日大高校

(番外編)学年1位または成績優秀者を輩出した高校

天白高校、日進西高校、愛工大名電高校、名古屋大谷高校

※ 成績優秀者・・・成績が学年トップクラスで、なおかつ卒業生代表などに選ばれた生徒

 


生徒・保護者様のお友達登録はこちら

LINE登録するとプレゼントがもらえます!
【会員限定】お子様の成績と可能性を伸ばす18個のノウハウ

友だち追加


塾関係者様のお友達登録はこちら

LINE登録するとプレゼントがもらえます!
「zoomで簡単。オンライン授業移行の教科書」
または個別対談も可

友だち追加

 


名古屋市天白区の植田で塾を探すなら個別指導のヒーローズ!!

★ 直接のお問い合わせ ★
――――――――――――――――――――――
個別指導ヒーローズ 植田一本松校
〒468-0009
名古屋市天白区元植田1-202 金光ビル2F
TEL:052-893-9759
教室の様子(360度カメラ) http://urx.blue/HCgL

1=2が証明されたってホント!? ウソを見破れるかな?

数式を見つめる少女の写真

塾長です。

たまに虚構新聞の記事を見て爆笑しています。
ある虚構新聞のファンから次のアドバイスをいただきました。

科学面の「『2と1は等しい』数学界で論議」という記事が面白いよ。これ教育に使えるんじゃない?

2008年の記事です。
こんな素晴らしい記事を見過ごしていたとは。

1=2の証明!! ホント?ウソ?

まず問題となっている「1=2」の証明を見てみましょう。

問題となった証明

上の記事からの抜粋と補足です。中3以上の知識で読めるでしょう。

因数分解を使いますが、数学の好きな生徒ならば、中学2年生でも何とか読むことはできるでしょう。

$$ a=b $$
両辺に $a$ をかけて
$$ a^2=ab $$
両辺から $b^2$ を引いて
$$ a^2-b^2=ab-b^2 $$
両辺を因数分解して
$$ (a+b)(a-b)=b(a-b) $$
両辺を $(a-b)$ で割って
$$ a+b=b $$
ここで $a=b$ であったから
$$ 2b=b $$
両辺を $b$ で割って
$$ 2=1 $$

むむむぅ・・・確かに結論が「2=1」となってしまいました。

どうでしょう?

大真面目な質問

この証明は正しいと思いますか?

数学では、たった1つでも反例を言えれば間違いと言えます。
逆に言えば、何も間違えを指摘できなければ「正しい」ことになってしまいます。

もしも上の証明の間違いを言えなければ、みなさん、大変ですよ。

1=2が正しいとなれば、また小学校から勉強のやり直しです。

それは嫌です。

何とかして証明の間違いを見つけたいところです。

いかがでしょう?

証明のどこが間違いなのか、みなさんは分かりますか?

どうしてこうなった?

計算のルール。たくさんあります。

その1つでも無視して計算してしまうと、このような詭弁が生まれてしまいます。

もちろん冗談としては、なかなか面白い証明です。

やってはいけないルール

それはさておき、

上の証明で無視したルールが1つあります。

それは何でしょうか?

このルールを無視してしまうと「何でもあり」の結論を好きなだけ導くことができます。

そのルールとは、

0で割ってはいけない

です。
このルールに違反してしまった計算のことを、

ゼロ除算

と呼びます。まるで犯罪名のような名前までついています。

教科書で明記されているか?

ゼロ除算

これについて、いつ学校で教わるのでしょうか?

割り算は小学3年生で習います。
しかし小学校では「指導しなくてよい」というスタンスです。
ただし一部の教科書では、国語的な意味で「答えは0」と解釈できる場合を紹介しています。

中学の教科書でも「0で割ることは考えない」としています。
これも、あまり明確に「0で割らないように注意しろよ!」と教えることはないようです。

このルールを明確に意識するのは、高校数学からです。
ゼロ除算を特別に取り上げるページは無いものの、式の証明や場合分けの過程で何度となく教わります。

どこでゼロ除算をしてしまったのか?

さて、話しを戻しましょう。

冒頭の証明のどこでゼロ除算を犯してしまったのでしょうか。

これは証明の式に、具体的な数字を当てはめれば分かりやすいでしょう。
特に次の式以降に着目です。

証明の中で、次の行に注目です。
$$ (a+b)(a-b)=b(a-b) $$
ここで $(a-b)=0$ ですから、この式は、
$$ (a+b)\times 0=b\times 0 $$
ということです。
ここで両辺を $(a-b)$ で割る、つまり $0$ で割ってしまいました。

このように、0で割ってしまうルール違反をしていました。

なぜ0で割ってはいけないの?

それでは、そもそも0で割ってはいけない理由、なぜでしょうか?

破壊的だから

数学者の厳密な説明はさておき、まずは良くないことが起こる様子を経験しましょう。
上の式で見たようなことを、具体的な数字に置き換えてみれば分かりやすいです。

$$ (a+b)\times 0=b\times 0 $$
この部分をさらに
$$ 100\times 0=5\times 0 $$
などと書いてみましょう。
これは右辺も左辺も確かに $0$ となって正しいです。
しかし両辺を $0$ で割ったらどうでしょう。
$$ 100=5 $$
とたんに話がおかしくなります。

このように

「0で割る」

を許してしまうと、33=101 のような詭弁をいくらでも作れてしまいます。
0で割ることに

「意味が定まらない」

ので、それを逆手に取って

「どのような意味にも設定できてしまう」

とできてしまうからです。
これは、かなり破壊的です。
一般に、

$$ x\times 0=y\times 0 $$
を満たすような $x, y$ は「何でもよい(不定)」

です。
よって

「0で割る」

を許してしまうと、上で見たように

何でも=何でも

という関係をいくらでも作れてしまい、おかしくなります。
数の世界が破壊されてしまいます。

よって、0で割ることを安易に許してはいけません。

そういうルールです!

意味が分からないから

そもそも「0で割る」とは、どういうことでしょうか?

例えば

$100\div 5$

は、

「100を5等分にした内の1つ」
または
「100の中に5がいくつ入るか」

などという意味になります。
試しに後者の意味だとします。

では、

$100\div 0$

の計算は、どうなるのでしょうか。

「100の中に0はいくつ入るか?」

なぞなぞなら「2つ」というトンチも許されますが、割り算の答えにはなっていません。
かと言って、答えが分かりません。

「そもそも0の何個分?」

という意味が分かりません。
0は何個集めても0だからです。

計算が終わらないから

そこで100歩譲って、

$100\div 5$

から出発して、「割る数」の5を、どんどん小さくして0に近づけようと思います。

$100\div 5 = 20$
$100\div 0.5 = 200$
$100\div 00.5 = 2000$
・・・
$100\div 0.00000000 \dots 005 = 2000000000 \dots 00$

このように、割る数を0に近づければ近づけるほど、答えは無限に大きくなってしまいます。
これを繰り返していけば、いつか「0の何個分」か答えらえれそうです・・・

・・・しかし、割る数はどこまでも小さくできます。
出てくる答えも、どこまでも大きなります。

この作業は、いくらでも続けられます。
終わりません。
永遠に続きます。

結論が出ないから禁止

そして、いくら続けても、

「0で割る」

の結論が出ません。

宇宙が終わる頃には結論が出るのでしょうか?

それも分かりません。

さらに、良くないことがあります。
割られる数が100であろうと1であろうと、2であろうと、とにかく

「答えが無限に大きくなり続ける」

ことに変わりがありません。
だからといって、

100÷0

3÷0

無限の先で同じ答えになっているのか、あるいは違う答えになっているのか、それも分かりません。

このように「0で割る」という計算は、いくら考えても答えを特定できませんでした。
だから「0で割る」という計算の定義ができないことになります。

「0で割る」

とは

「わからない」

または

「永遠に計算が終わらない」

または

「そもそも計算の定義ができない」

ということになるわけです。

だから、

「0で割るな!」

となったわけです。

プログラミングでも禁止

プログラミングの世界、もっと言えば、コンピューターを使う世界でも、

「0で割ってはいけない!」

というルールが徹底されています。
プログラマーならだれでも

ゼロ除算

という悪魔を知っています。
これが出てきてしまうプログラムを書いてはいけません。

さて、実際にやったらどうなるのでしょうか?

試しに、Pythonというプログラミング環境で

$5 \div 0 $

を計算した結果が次の画面です。

ちなみにプログラミングでは「5÷0」のことを「5/0」と書きます。

ゼロで割れない

パイソンで0除算エラー

 

“ZeroDivisionError: division by zero” (0で割ったというエラー)

というエラーが表示されて、怒られてしまいました。

近代的なプログラミング環境では、コンピューターに「÷0」を計算させる前に、その式を検出してエラーを出すようになっています。
コンピューター全体が止まってしまったら大変ですからね。

このようにコンピューターの世界でも「0で割る」は禁止です。
ですからプログラマーの世界では「ゼロ除算」と言ったら、それはバグ(*)の1つを指します。

これが本当に計算されてしまうと、最悪の場合、コンピューターが止まってしまいます。

(*) プログラムの不具合のこと

勉強したことを笑いに活かす

今回は虚構新聞の昔の記事から数学のお話をしました。

虚構新聞はフェイクニュースのサイトです。
このようにウィットの利いた面白いニュースをでっち上げるジョークサイトです。

文字通り「虚構」の新聞ですね。
このような分野では有名で、すでに不動の地位とも言えます。

本当のことを知っている人だけが楽しめます。

勉強したことをジョークに活用する。

そんな勉強の応用もあるんですね。
虚構新聞の記者たちの仕事は楽しそうです。

何に価値があるのか、何が仕事になるのか。

やってみないと分からないものです。

キャリア教育のネタにもどうぞ。

ゼロで割ったら答えが0?

最後に少し補足です。

特定の文脈において「0で割った」ときの答えを定義することは可能です。
例えば、

300gのケーキを100gずつ分けました。何人に配れるでしょう?

という文脈があったとします。この計算は、

$300 \div 100 = 3$

ですから、答えは

3人

となります。
つまり、この文脈では「割り算の答え」は「配れる人数」を意味します。
この文脈を前提として、

300gのケーキを0gずつ分けました。何人に配れるでしょう?

を考える場合はどうでしょう。同じように計算式は、

$300 \div 0 = ?$

となりますね。
もちろん式だけ見れば計算に困りますが、文脈から答えを決めることはできます。

答えが分からない → 配れる人が決まらない → 配れない → 配れる人数は0人

このように社会的な意味から答えを導いて、それに合わせて

$300 \div 0 = 0$

と無理やり決めてしまうことができます。
こうして、この文脈の中では、

「0で割った答えは0人」

と決めることができるでしょう。

実際、小学3年生の一部の教科書では、このような考え方を紹介しているコラムがあります。
ただし、あくまでも考え方の1つにすぎません。
こうした教科書の影響かどうか分かりませんが、中には、

「0で割ったら0だよ。」

と覚えてしまっている人もいます。
もちろん、これは早とちりです。
常には成り立たないからです。

これはあくまでも、上のような文脈だけに通用する決め方です。
数式に対して常に言えるものではありません。
つまり、

「ローカルルール」
にすぎません。

このように、0で割ったときの答えを決めるのは「特定の文脈上の都合」です。

それは数学というよりは、国語や社会、あるいは工学のお話しになります。

 


生徒・保護者様のお友達登録はこちら

LINE登録するとプレゼントがもらえます!
【会員限定】お子様の成績と可能性を伸ばす18個のノウハウ

友だち追加


塾関係者様のお友達登録はこちら

LINE登録するとプレゼントがもらえます!
「zoomで簡単。オンライン授業移行の教科書」
または個別対談も可

友だち追加

 


名古屋市天白区の植田で塾を探すなら個別指導のヒーローズ!!

★ 直接のお問い合わせ ★
――――――――――――――――――――――
個別指導ヒーローズ 植田一本松校
〒468-0009
名古屋市天白区元植田1-202 金光ビル2F
TEL:052-893-9759
教室の様子(360度カメラ) http://urx.blue/HCgL

プログラミング言語って何? お勧めはどれ?

プログラミングに夢中な生徒の写真

こんにちは!塾長の松下です。

昨日の午前中は、ヒーローズ西春校に行ってきました!

この夏から西春校さんもプログラミング教室を始めます。その準備を手伝ってきました。いよいよ北名古屋市のみなさんもマインクラフトでプログラミングを学べるようになりますよ!
乞うご期待です!!

午後からは植田一本松校でいつも通りプログラミング教室をしました。生徒がミッションを早くクリアしたので、残り時間を自由にしました。やっぱり子供たちは溶岩とかTNTが大好き。「数千個のTNTを爆発させる」というプログラムを作って遊んでいました。

プログラミングに関係する国家資格

IT系の国家資格と言えば、次の3つを押さえておく必要があります。この順番にレベルアップします。

  1. ITパスポート
  2. 基本情報技術者
  3. 応用情報技術者

中でもプログラミングの技能を問われるのが「基本情報技術者」です。毎年多くの人が受験します。

基本情報技術者とは?

主にプログラムの設計、開発を行う技術者の知識や技量を証明する資格です。国家試験に合格するともらえます。英検で言えば2級くらいに相当します。

商業高校や工業高校では、高校2年生くらいから学校で受験を勧められます。普通科でも科学部やデータサイエンス部など、IT系に興味のある人ならチェレンジすることがあるでしょう。もちろん、通信系やIT系に就職したら、会社から受験を勧めらることが多いです。

【悲報】COBOLが消えました。今後はPythonで。

これに関して、少し前、今年1月24日に衝撃的なニュースがありました。

2019年秋期の試験を最後にCOBOL(コボル)が廃止されるというのでます。代わりに2020年春期からはPython(パイソン)になるそうです。情報ソースは情報処理推進機構によるコチラの発表です。

え、コボル?、パイソン?

という人も多いでしょう。COBOLやPythonはプログラミング言語の種類です。

プログラミング言語とは?

例えば、ブログは日本語で書きます。曲は音符で書きます。計算は数式で書きます。化学変化は化学反応式で書きます。このように、何かを書き表すとき、それに合った表現方法(言語)が存在します。

コンピューターも同じで、コンピューターを使う目的ごとに表現方法や文法があります。それがプログラミング言語です。たくさんの種類があり、目的に応じて使い分けられています。

ところが国家資格で使えるプログラミング言語は、たったの4つしかありません。

国家試験で使えるプログラミング言語

基本情報技術者の資格試験では、プログラミングの技能が問われます。自分の得意なプログラム言語を選択して受験することができます。ただし、その選択肢が4つしかありません。しかも来年からそれが変わります。

これまでは次の4種類でした。

COBOL、Java、C言語、アセンブラ言語(CASL II)から1つ選択

それが2020年の春から

Python、Java、C言語、アセンブラ言語(CASL II)から1つ選択

に変更されます。国家資格を取れる4つのプログラミング言語から、COBOLが姿を消し、Pythonが登場したのです。こえれは事実上、

「COBOLはもう古い。」「Pythonがメジャーになった。」

と国が認めたに等しいです。だからニュースなんですね!

上で挙げた5つのプログラミング言語について、それぞれの特徴を簡単に説明します。

  • COBOL: 大型コンピュータで経理や成績管理といった事務処理をするのが得意
  • Python: どのパソコンでも動き、科学技術計算や人工知能による情報処理が得意
  • Java: どのパソコンでも動き、操作画面やゲームを作るのが得意
  • C言語: OSの開発、機械操作のアプリ、高機能で高速なアプリの開発が得意
  • CASL: ハードウェア本来の性能を引き出すのが得意

私が大学生のころまでは、COBOLを使えれば就職に有利でした。大企業の多くが大型コンピューターを持っていて、それを使うために必要だったからです。ところが、ここ数十年でデーターベースの技術が一般化し、同時にパソコンの性能が飛躍的に良くなってしまい、大型コンピューターが不要になってしまいました。今ではCOBOLで仕事をしている人を、ほとんど見かけません。

プログラミング言語にも栄枯盛衰があるのですね。

マイクラミングを支えるプログラミング言語たち

ちなみに、私たちのプログラミング教室「マイクラミング」を支えるプログラミング言語たちは、次のようになっています。

  • JavaScript: スクラッチの機能を拡張する部分と、生徒がログインする画面の開発に使いました
  • Python: スクラッチとマインクラフトをつなげる機能の開発に使いました
  • PHP: 生徒がログインする画面のサーバー開発に使いました
  • SQL: 生徒情報などを管理する機能の開発に使いました

JavaScriptはJavaの縮小版です。ブラウザの中だけで動作します。PHPやSQLなど国家資格には関係ないプログラム言語が出てきましたね。プログラム言語はとても種類が多いのです。私はマイクラミングを開発するために、これら全てのプログラミング言語を勉強しました。勉強は一生続くのです。

ちなみにマインクラフトそのものはJavaで作られているそうですよ。

そして生徒の皆さんが使うプログラミング言語はScratch(スクラッチ)です。

Scratchの次はPythonかJavaを学ぼう

来年度から小学校で、更に年度から中学校でプログラミング教育が必須化されます。

おそらく多くの小学校では Scratch(スクラッチ)というプログラミング言語が使われるでしょう。今まで色々な学校現場で使われてきた実績がありますし、何より無償で使えるからです。

もちろん私たちのプログラミング教室「マイクラミング」もスクラッチです。小学2年生から高校生まで通っています。

しかし、残念ながら、この Scratch(スクラッチ)では国家試験を受験できません。国家試験はプロの能力試験なので、プロが使わない言語では受験できないのです。
ただし、民間の試験ならあります。Scratchで能力を試したければ民間試験でチャレンジしましょう。

スクラッチが得意なのは、あくまでも学校教育や趣味の領域です。ですから、スクラッチでプログラミングを練習したら「次のステップ」へ進みましょう。

Scratchの次のステップとしてお勧めなのは、Python(パイソン)またはJava(ジャバ)です。

どちらも無料で始めることができます。また解説書やインターネット上の情報が豊富で調べやすいです。

どちらかというと、理系の学生はPython、ゲーム制作などクリエイターになりたい人はJavaを学んでみるとよいでしょう。

ただし就職してからPythonやJavaを使うかどうかは分かりません。しかし1つのプログラミング言語に精通しておけば、他のプログラミング言語を学ぶのが簡単になります。プログラミング言語には共通する考え方が多いからです。

C言語やCASLはお勧めじゃないの?

C言語は文法が多くて細かいです。難しいというよりは、めんどくさいです。ちょっとした処理を実現するにも、何十行ものプログラミングが必要になります。
「こういう時はこう作れ」的な定石をたくさん覚える必要があります。そして後述する「オブジェクト指向」に対応するためにC++言語という拡張版も学ぶ必要があります。
歴史の長い言語なので学びが多い一方、書籍が多すぎてピンキリです。良書を探すのに苦労します。身近に知見者がいれば、聞くのが一番でしょう。
そんなこんなで、マスターするまでの道のりが長いです。
その代わり、マスターしたら超強力なプログラミング言語になります。その道のプロになると決めたら取り組んでみてください。

CASLはマイコンなどのハードウェアを使うためのプログラミング言語です。ハードウェアの知識が必要になりますから、これも初学者にはお勧めしません。また実際に何かを作ろうとするとCASLは使えません。ハードウェアのメーカーごとにプログラミング言語が違うからです。CASLは練習用の言語と割り切った方が良いでしょう。

オブジェクト指向を学べ

それから、プログラミング言語とは別に、「オブジェクト指向」という考え方を、しっかり学んでおくことをおすすめします。

オブジェクト指向は、人間が物事の構造や関係をとらえる様子を、整理したり正確に記述したりするための技術です。

現代のプログラミング言語のほとんどは、その根底にオブジェクト指向があります。大きなプログラムや複雑なプログラムを考える時ほど、オブジェクト指向が必須になってきます。ぜに学んでみてください。きっと頭の中がすっきりするでしょう。

まとめ

国家資格の「基本情報処理技術者」を受験できるプログラミング言語は4つしかありません。そして今年でCOBOLが廃止され、来年からPythonが追加されます。

来年から小学校で必須化されるプログラミング教育ではScratchが大活躍します。

しかし仕事でScratchは使えません。ステップアップにはPythonかJavaが塾長のおすすめです。

プログラミング言語と並行して「オブジェクト指向」を学ぶと良いでしょう。頭を整理するのに役立つ技術です。

 


名古屋市天白区の植田で塾を探すなら、日進市赤池で塾を探すなら、個別指導のヒーローズ!!

★ 直接のお問い合わせ ★
――――――――――――――――――――――
個別指導ヒーローズ 植田一本松校
〒468-0009
名古屋市天白区元植田1-202 金光ビル2F
TEL:052-893-9759
教室の様子(360度カメラ) http://urx.blue/HCgL

なぜ小学生のプログラミングはスクラッチが主流なのか?

小学生にはスクラッチが良い理由

こんばんは!塾長の松下です。

プログラミング教室の認知度が高まってきました。
あと1年ですからね、小学校でプログラミング教育が必須化されるまで。

ところでお母さん、お父さん、「プログラミング教育」と聞いて、どんなイメージが思い浮かびますか?

もしも次のようなイメージだったら大きな誤解です。
それは10年以上も前の話しで、今は違います。

続きを読む

プログラミング教室を見学してみた

今日はヒーローズ大府校さんにお邪魔してきました。
「マイクラッチ」でプログラミング教室を開講しています。
後学のためにとお願いして、見学させていただきました。

小学生3人が受講している時間帯でした。
低学年から高学年まで、年齢はいろいろです。やっぱりプログラミングは無学年ですね。

「先生、わからんくなったー」

「あ、動いた、ちゃんと爆発できた!」

いったい何が起こっているのでしょう?

続きを読む