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

パイソン

【中3理科】遺伝の規則性をプログラミングで学ぼう

中3理科「遺伝の規則性」とプログラミング

塾長です。

テスト期間に突入しました。

みなさん、テスト対策は万全ですか?
学校からのプリントや宿題も増える頃ですよね?

そんな中、とある中3生。

「なかなか解けない!」

と悩んでいました。
「遺伝の規則性」・・・学校から出された理科の課題だそうです。

遺伝の組み合わせの全パターンを、もれなく書き出して数える・・・見るからに大変そう。

さて、皆さんは、こんな時どうしますか?

めんどうな事はコンピューターにやらせる!

ということで、本日のタイトルが答えです。

そう、コンピューターの出番です。
サックっとプログラミングした方が早いです。

プログラミングは多少の練習が必要です。
しかし慣れてしまうと、色々な作業が楽になります。

最初の1回目の作業は、規則性を理解するため、自分が成長するために必要です。
しかし、2回も3回も同じ苦労をするのが良いとは限りません。

2回目、3回目について、

全く同じ苦労をしますか?
何か工夫をして効率を上げますか?

こういうときの瞬間、瞬間の工夫の積み重ねで、人生が大きく変わっていくように思います。

その工夫のためには、プログラミングは必須アイテムと言えましょう。

それでは、コンピューターにやってもらいましょう。

遺伝の規則性についての例題

その前に、まず今回の問題について説明します。

中3理科の遺伝です。エンドウ豆の種子が「丸い」のか「しわ」なのか、という問題。
毎年の恒例です。

「丸い」種子をつける純系のエンドウ豆があります。
「しわ」の種子をつける純系のエンドウ豆があります。
それぞれから1株ずつ対応させて交配させると、子の世代の種子はどのような形状になるでしょう?
丸い種子のエンドウ豆の株と、しわの種子のエンドウ豆の株の数を、簡単な整数比で示せ。
また「丸い」形質の遺伝子をAとし、「しわ」の形質の遺伝子を「a」として、そうなる理由を説明せよ。

このように遺伝の問題は、組み合わせの全パターンで考えて解くのでした。

エンドウ豆の遺伝 交配

中3数学で習う多項式の分配法則 (A+A)(a+a) = Aa+Aa+Aa+Aa に似ています。

そして回答の例はこんな感じです。

純系の「丸い」種子をつける親の体細胞の遺伝子を(A, A)、「しわ」のそれを( a, a )とする。

子の世代は(A, A)と( a, a )の掛け合わせが(A, a )(A, a )(A, a )(A, a )となる。ここでAは「顕性の形質」で、a は「潜性の形質」だから(A, a )は「丸い」種子となる(※)。よって、子の世代の種子は、全て「丸い」形状になる。

孫の世代は、子の(A, a )と(A, a )の掛け合わせが(A, A)(A, a )(A, a )( a, a )となるから、「丸い」:「しわ」が3:1の比率であらわれる。

(※)教科書改訂により古い用語の「優性」「劣性」は廃止され、「顕性」「潜性」に統一されました。

詳細は教科書を見てくださいませ。

やっとれん

これが「ひ孫の世代」以降になると厄介です。組み合わせが指数関数的に増えてしまい、調べるのが煩雑になります。
例えば、こんな問題です。

純系の「丸い」種子の株と「しわ」の種子の株を掛け合わせて子の世代をつくる。
その子の世代どうしを掛け合わせて、孫の世代をつくる。
その上で、次の各問いに答えなさい。

(問1)孫の世代を互いに掛け合わせたとき、次の世代の「丸い」:「しわ」の比はどうなるか?
(問2)孫の世代の中から「丸い」種子の株だけを選んで、互いに掛け合わせたとき、次の世代の「丸い」:「しわ」の比はどうなるか?

こんな問題が出たら、やってられません。
他の問題をやる時間が無くなってしまいます。飛ばしてください。
出るのが明白なら、事前に答えを丸暗記して流しましょう(出ないと思いますが)。

コンピューターにやってもらいました

しかしコンピューターなら、あっという間です。
親の世代から、上の問1と問2にある「ひ孫の世代」まで、コンピューターに聞きました。

実行結果

エンドウ豆の遺伝についてパイソンのプログラムで組み合わせを計算させた結果

問1の方は、孫の世代も、ひ孫の世代も、「丸い」種子の株と「しわ」の種子の株の比率は同じでした。
ガチで数えると64通りの組み合わせですが、同じものをまとめていくと3:1になりました。
つまり何も操作をしなければ、エンドウ豆は「丸い」:「しわ」=3:1の出現比率に落ち着くと言えます。

問2の方は「丸い」種子だけを選択する操作をした場合です。当然ですが、次の世代で「しわ」の割合が減ります。
なんと8:1になりました。

何世代目で純系になる?

ちなみに、さらに「丸い」株だけを選択して次の世代「玄孫(やしゃご)」を生むと、15:1になります。
さらに「丸い」株だけを選択して次の世代・・・と繰り返していくと、いつかは「丸い」種子の株だけになるというワケです。

こうして純系の株が作られていくワケですね。すると

何世代の後に「丸い」の純系を得られるか?

が気にってきます。確率ですから「しわ」を完全に0にすることは難しいので、ここでは仮に「純系」の基準を

「しわ」の出る確率が1万分の1以下

としましょう。
そこで、この基準を満たすまで世代交代を繰り返す実験をやってみました。
もちろん、コンピューターの中で・・・。

エンドウ豆の遺伝シミュレーション 純系

ということで、第100世代目で「ほぼ純系」の子孫ができました。

狙ったワケではありませんが、ちょうど100でした。

シミュレーションですから、交配の全パターンを計算しています。
結果が出るのに4時間くらいかかりました。
メモリは20ギガくらい使いましたが、塾長のパソコンは16ギガしか積んでいなかったのでメモリ不足になり、途中から計算が遅くなりました。

確率漸化式をつくって計算すれば、もっと早く回数を求められるとは思いますが、それでは高校数学の話になってしまいます。
今回は、あくまでも「中3理科の遺伝の実験」としてプログラミングしました。

ただ今回は(A, a )と(a, A )を別のものとして処理しました。
これらを一緒と見なすプログラムを追加すれば、組み合わせの数を何割か減らせたので、もう少し高速にシミュレーションできたかもしれません。

何はともあれ、やってみた感想は・・・

そもそも、純系の株を作るのが、ものすごく大変だ!

ということでした。

シミュレーションではなく、これが本当にエンドウ豆を交配していくことを考えてみてください。
成長を待って、種を採取し、分類し、また植えて、花が咲く前におしべを切り・・・ということを延々と続けていくわけです。

1000株育てて100株に選定などとすれば、もっと早く純系を得られるとは思いますが、それでも大変でしょう。

実験は準備が9割と言われますが、むしろ99%くらいに感じます。

これが今日の結論と言っても良いでしょう。

作業が大変なのか、理科として難しいのか?

組み合わせのパターンを全て考える。
組み合わせの組み合わせを全て考える。
組み合わせの組み合わせの、そのまた組み合わせを全て考える。

どんどん煩雑になって、数え上げるのに苦労します
解けない理由が、理科として難しいからではありません。

「作業がたいへん!」

という意味で難しい。

リアル世界の実験では、乗り越えなければいけない困難でしょう。

しかし学校の勉強やテストとなれば話は別です。

例えば、制限時間の厳しいテストや入試が、このような作業量を手早くこなせるか否かで合否が決まるものであったら、ちょっと意味不明です。
教科を分ける意味がほとんどありません。

機械が無かった時代は「機械みたいな人間」が重宝されたかもしれませんが、今はスマホでさえ高速に処理できます。

大変と思う時こそ、コンピューターの使い方お教えるべきなんです。
時には根性論も大切ですが、それだけは良くありません。
もっと積極的にコンピューターを活用すべきだと思います。

あらゆる勉強にコンピューターを活用!

遺伝の組み合わせを計算させるプログラムをつくる過程で、遺伝の性質を深く理解できるでしょう。

手作業で組み合わせを書き出すのも無駄ではありませんが、それが大変過ぎる作業では、先に心が折れてしまいます。
それに作業の制約が勉強の制約になってしまうと、むしろ視野が狭くなります。

コンピューターの計算は、失敗してもやり直しが楽です。
何度もチャレンジできるし、視野も広がるでしょう。

また多様なメディアを扱えるというメリットもあります。
子供たち自身でコンテンツを作ることもできます。

数学や理科、技術だけで活用というのでは寂しいです。
美術、音楽、体育、社会、英語・・・あらゆる科目で使いこなすことができます。

今回は理科の勉強にコンピューターを活用する例を考えました。

コンピューターを活用するセンス

これを子供たちに身に着けてもらうことが大切です。

そのためには、あらゆる学びの場でコンピューターを活用しましょう。

たとえば今回のように、「ワーク」にあたる作業訓練的な学びの部分には、コンピューターを活用できるところが多くあるはずです。

速く、正確に、たくさん・・・

このような意味で能力を伸ばすような訓練系の学習時間は、今後、見直されていくべきでしょう。
今後は、コンピューターを活用した試行錯誤の時間に置き換わっていくべきだと思います。

このような視点に立つと、日本の教育は世界から遅れています。
創造性やイノベーション力が足りないと、今でも言われています。

少ない知識をトリッキーに組み合わせて「速く、正確に、たくさん」できるような訓練ばかりして、消耗しているからです。

そういう作業こそ、コンピューターにやらせるのです。
それが当たり前の時代です。

やらなければ、日本が沈没します。

パイソンでプログラミング

今回のプログラムは次の通りです。

パイソンのバージョンは3.9以降です。
最大公約数を求める関数 math.gcd() に3つ以上の引数を渡せるのが、そのバージョン以降だからです。

データ構造としては、タプル、配列、辞書を理解しておく必要があります。

パイソンはタプルを辞書のキーとして使えることを利用しています。
また、パイソンは配列やタプルに自然数をかけると、それらを複製できることも利用しています。
(A, A)×3 → [(A, A),(A, A),(A, A)]
これらの機能は他のプログラミング言語でも使えるとは限らないので要注意です。

なお、純系を何世代目で得られるかを求めるプログラムの部分は省略してあります。
興味のある人は考えてみてください。

エンドウ豆の遺伝 Pythonプログラム

現場からは以上です!

 


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

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

友だち追加


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

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

友だち追加

 


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

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

2次関数の虚数解をパイソンのグラフで見える化してみた

塾長です。

今回は高校生からよく出る質問、というか疑問

虚数 $ i = \sqrt{-1} $ は実在しない数なのか?

について考えてみます。

2次方程式と2次関数のおさらい

解の公式

まず中学3年生が1学期で習う「2次方程式の解の公式」を思い出してみましょう。

2次方程式$ ax^2+bx+c=0 $の解の公式

$$ x = \frac{ -b \pm \sqrt{b^2-4ac} }{ 2a } $$

判別式

高校1年生になると、さらに「判別式」を習います。
1学期の後半または2学期の初めくらいです。

実数$x$について、2次方程式$ ax^2+bx+c=0 $の判別式をDとすると、

  • $D < 0$ のとき、解は0個(解なし)
  • $D = 0$ のとき、解は1個(重解)
  • $D > 0$ のとき、解は2個

続いて、2次関数$ y=ax^2+bx+c $のグラフと判別式Dとの関係について習います。

2次方程式$ ax^2+bx+c=0 $の解を、次の連立方程式の解とします。

$$ \begin{cases}
y=ax^2+bx+c \\
y=0
\end{cases} $$

$x-y$平面上で2式それぞれのグラフを描くと、その交点が解になっているのでした。
つまり、

2次方程式$ ax^2+bx+c=0 $の判別式をDとする。
$ y=ax^2+bx+c $と$x$軸との共有点は、

  • $D < 0$ のとき、0個
  • $D = 0$ のとき、1個(接する)
  • $D > 0$ のとき、2個(交わる)

この様子を直感的なグラフで表すと、次のようになります。

複素数

高校2年生では、虚数単位 $ i = \sqrt{-1} $ を導入して、$x$を実数から複素数へ拡張します。
すると方程式の解を必ず求めることができるようになります。

2次方程式$ ax^2+bx+c=0 $の判別式をDとすると、

  • $D < 0$ のとき、解は複素数で2個
  • $D = 0$ のとき、解は実数で1個(重解)
  • $D > 0$ のとき、解は実数で2個

であり、どの場合でも解は、

$$ x = \frac{ -b \pm \sqrt{b^2-4ac} }{ 2a } $$

と表すことができる。
特に$D < 0$ のときは$ i = \sqrt{-1} $ として、

$$ x = \frac{ -b \pm \sqrt{|D|} i }{ 2a } $$

である。

ざっと、ここまでが中3、高1、高2の二次方程式と二次関数のおさらいです。

複素数の世界では必ず共有点がある?

素朴な疑問

さて、ここで塾長は、ふと疑問に思いました・・・

せっかく複素数まで拡張して、判別式$D<0$の場合でも解が求まるようになったのに、対応するグラフの共有点が無いままって、寂しくない?

寂しいですよね!?

疑問です。というか、不満です。
なんとかして、このモヤモヤを解消する必要があります。

問題解決というヤツです。

仮説を立ててみる

そこで、

もしかしたら、グラフを複素数まで拡張すれば、共有点が2つに見えるのではないか?

という仮説を立ててみました。

本当にそうなるのでしょうか?

コンピューターの力を借りて、そのグラフを描くことにチャレンジすることにしました。

仮説を立てて確かめるってヤツです。

4次元のグラフは描けない!!

コンピューターは具体的な数値しか扱うことができません。
そこで今回は、つぎの関数を例に、グラフを描いてみることにします。

$$y=x^2-2x+2 $$

もちろん、これの判別式Dは負です。

$$D=(-2)^2 – 4 \times 1 \times 2 = 4-8 = -4 < 0$$

そして方程式$x^2-2x+2=0$の解は

$$x=1 \pm i$$

という虚数解です。

今回の目的

今回の目的を次のように設定します。

xを複素数としたときに、
$$ \begin{cases}
y=x^2-2x+2 \\
y=0
\end{cases} $$
の共有点が2つあることをグラフで示す!

実数と複素数で何がどう変わる?

高校1年生までは、$x$も$y$も実数ですから、これは、

実数$x$ を与えると、実数$y$ が1つに定まる関数のグラフ
つまり、
数直線上の1つの実数$x$を、また別の数直線上の1つの実数$y$へ移し変える関数のグラフ

ということになります。
つまり「2本の数直線」があれば、話ができます。
よって、

$x$ が実数ならば、
$y=x^2-2x+2 $ のグラフは、x軸とy軸で構成される「平面(2次元空間)」の上に描くことができる

ということです。
直線は「1次元」ですから、2本の直線で表現できる空間は、せいぜい「2次元空間」となります。

さて、

ここで$x$を複素数に拡張します。
そこで2つの実数$a,b$を使って$x=a+bi$としましょう。

$$ \begin{cases}
y=x^2-2x+2 \\
x=a+bi \\
i = \sqrt{-1}
\end{cases} $$

すると、式の計算結果$y$も複素数になります。
そこで2つの実数$c,d$を使って$y=c+di$としましょう。
すると、これは、

複素数$x=a+bi$ を与えると、複素数$y=c+di$ が1つに定まる関数のグラフ
つまり、
実数平面上の座標$(a,b)$を別の実数平面上の座標$(c,d)$に移し変える関数のグラフ

ということになります。
つまり「2つの平面」があれば、話ができます。
よって、

$x$ が複素数ならば、
$y=x^2-2x+2 $ のグラフは、平面a-bと平面c-dで構成される「4次元空間」の中で描くことができる

ということです。
平面は「2次元」ですから、2つの平面で表現できる空間は、せいぜい「4次元空間」となります。

拡張し過ぎた

上の考察から、コンピューターで「4次元のグラフ」を描けば、今回はミッションクリアできそうです。

・・・ん?

無理です!

私たちはどんなに精神を研ぎ澄ませても、3次元までしか空間の広がりを認識することができません。
ましてやグラフを描くことも見ることもできません。

これはコンピューターでも表示できません。

(計算だけならできます。表示が無理ということです)

グラフを3次元にまとめる!

ということで、何とかして3次元で済ませる方法を考えなければいけません。

グラフを3次元で描けるようにする

という「課題」が生まれてしまいました。

どうしたらよいでしょうか?

【豆知識】
問題解決の世界では、最終的に解決する「目的」のことを「問題」と呼びます。
そして、問題を解決する過程(途中)で乗り越えるべき「目標」のことを「課題」と呼びます。

そもそも何がしたかったのか?

道に迷ったら、目的の再確認です。

目的さえ達成すればよいのです。
もしかしたら「やらなくても良いこと」で悩んでいたりするかもしれません。

今回は、$y=x^2-2x+2 $ と $y=0 $ の共有点が2つあることをグラフで描きたかったのでした。

あ、な~るほど!

次元を減らす

目的の式をじーっと眺めていたら、思いつきました。

$ y=0 $なのですから、$y$の方は2次元も必要ありませんね。

だって0(ゼロ)の時だけ考えればよいのですから。そこで、

yの次元を2次元から1次元に減らす!

ことを考えましょう。

グラフ表示の方針

ということで、グラフに表示する方針をまとめましょう。

実数の世界のグラフは、横軸がx軸、縦軸がy軸です。

今回は$x$を複素数$a+bi$へ拡張したのですから、そのグラフは、

  • $x軸$を複素平面$a+bi$へ拡張(平面:2次元)
  • $y軸$も複素平面$c+di$へ拡張(平面:2次元)

としたかったのですが、無理でした。
これではグラフの座標が (a,b,c,d) の4次元になってしまい、描けないからです。
そこで次の方針としたのでした。

  • $x軸$を複素平面$a+bi$へ拡張(平面:2次元)
  • $y軸$は1次元に落とした値(直線:1次元)

つまり、

  • 横軸だったx軸は、横に広がる複素平面に拡張
  • 縦軸だったy軸は、実数の数直線のまま

これなら3次元の立体的なグラフで表すことができます。

あとは、縦軸のyをどのような値に決めるか、ですね!

案1:yの実数だけを縦軸にとる → 失敗!

そもそもグラフは実数しか描けません。
そのため、1つの複素数を2つの実数の組に対応させ、それを平面上に表すのでした。

であるならば、安直ではありますが、yの実部だけをグラフに採用すればよいかもしれません。

  • 横軸:複素数$ x=a+bi $(平面:2次元)
  • 縦軸:$y=c+di $の実部$c$(直線:1次元)

それでは、この案でグラフを描いてみましょう。
こうなりました。

馬の鞍みたいな形のグラフになりました。
最後の考察で、このグラフも少し使いますから、とりあえず「馬の鞍型」のグラフとでも呼んでおきましょう。

ちなみに、赤い線が、実数の$x-y$平面上のグラフ(平面 $ b=0 $ で切った切り口)です。

さて、これで目的は果たせたでしょうか・・・?

うーん、何だかよく分かりません。

$x$を複素数に拡張したおかげで、確かに平面$y=0$との共有点は存在しそうです。
しかし「共有点が2つ」である様子が、これでは分かりません。

よく考えてみたら、これはダメです。

もしも4次元のグラフが描けるとすれば、本来のグラフは、

(a,b,c,d) の4次元でグラフを描き、それを平面$c=0$でカットした切り口が、求める3次元のグラフ

が本当のグラフです(※)。
4次元のグラフは描けませんが、本来はそんな感じです。

そう考えると、無条件に$y$の虚部を捨ててしまったのがダメでした。

(※)【豆知識】
4次元の立体を平面で切ると、その切り口が3次元の立体になります。
私たちの世界は3次元です。私たちの世界で立体は3次元です。
例えば、スイカを包丁で切った時の断面を想像してみてください。
スイカは3次元の球です。それを2次元の平面でスパッと切ると、切り口が2次元の円になります。
4次元の世界は、私たちの世界よりも1つ次元が上ですから、上の考察をすべて1つずつランクアップして考えます。
つまり、4次元の中で球体を切ると、切り口が3次元の球になります。

案2:yの絶対値を縦軸にとる → 成功!

そこで、数学的に条件を壊さないことを考えます。

$y=c+di=0$

すなわち、

$c=0$かつ$d=0$の場合

を考えたグラフであれば目的を達成できるわけです。

ところで、

$|y|=0$も同様に$c=0$かつ$d=0$です。

ですから縦軸を$|y|$とすれば、これは実数ですから、うまく1次元に収まります。

  • 横軸:複素数$ x=a+bi $(平面:2次元)
  • 縦軸:$|y|$すなわち$\sqrt{c^2+d^2} $(直線:1次元)

それでは、この案でグラフを描いてみましょう。
こうなりました。

うまくいきました!

グラフの2カ所が尖っていて、2つの虚数解

$$x=1 \pm i$$

の所で平面$y=0$に突き刺さっていそうです。
共有点は「2だけ」ですから、平面$y=0$上で、それぞれ1点ずつ、チョン、チョンと、くっ付いているはずです。

グラフの解像度の問題で「点」まで鋭利に描き切れていません。
念のため、100倍に拡大してみましょう。

$x=1 + i$の付近を100倍に拡大してあります。
この倍率で$x=1 – i$も同時に描くのは不可能なので、1つだけで確認します。

どうです?

共有点の1つ$x=1 + i$の位置へ、グラフが突き刺さっている感じがしますよね。
このグラフを1000倍にしても、10000倍にしても、ずっとこんなグラフになります。

「1点に突き刺さ差っている!」

のですから、倍率をどこまで上げても、こんな感じです。
もちろん、$x=1 – i$ についても同様です。

これで本当に

「たった2点」だけの共有点を持つ!

ことが、グラフで表示できたのではないかと思います。

思ったより大変でした。

教えてエライ人!

上のような考察をFacebookにアップしていたら、色々な人からご意見をいただきました。
なかでも吉田先生には色々と教えていただきました。

ということで、今回のエライ人は、吉田信夫先生です!

吉田先生はあの「大学への数学」で原稿を書かれていた先生の内の1人です。
超すごくないっすか!

先生のブログ「yoshidanobuo’s diaryー高校数学の“思考・判断・表現力”を磨こう!」はこちらです。

グラフで虚数解を見える化するにあたり、いろいろとご指導をいただきました。
また数学的におかしな用語の使い方についてもご指摘いただき、修正することができました。

用語の誤用

今回やってしまった用語の誤用を2つ紹介します。

どこが間違っているのか、考えてみてください。

  • 誤用1:「$y=x^2-2x+2$の判別式の値は負です。」
  • 誤用2:「複素数$x=a+bi$と実数$y$において、$y=|x^2-2x+2|$のグラフ(a,b,y)は、平面$y=0$と2点で接しています。」

わかりますか?

私は吉田先生に指摘されるまで気づかなかったです。まさに

「それは違反です」

という感じで、用とあいなりました。

大学入試の2次試験で記述回答を予定している人は、気を付けてくださいね。

さて、上のものは次の点で間違っていました。

  • 誤用1:関数に対して判別式を語ったところがアウト。判別式は方程式「$0=x^2-2x+2$」に対して定義されるもの。
  • 誤用2:「接する」は「微分可能な領域」で定義されるもの。今回は尖っていて微分不可(微分する向きによって微分係数が異なる)。

さぁ、どうでしたか?

滑らかに「接する」グラフにする

さらに誤用2に関連して、グラフが2つの$x=1 \pm i$で「接する」ようなyの取り方も教えていただきました。

みなさん、分かります?

  • 横軸:複素数$ x=a+bi $(平面:2次元)
  • 縦軸:$|y|^2$すなわち$ c^2+d^2 $(直線:1次元)

それでは、この案でグラフを描いてみましょう。
こうなりました。

yの値が2乗されているので、グラフが大きくなりすぎて「2点」どころではなくなってしまいました。
そこで例によって、$x=1 + i$の付近を100倍に拡大してみましょう。

おお、本当に滑らかに接してそうですね!

例によって「1点」で接しているので、このグラフを1000倍にしても、10000倍にしても、ずっとこんなグラフになります。

次元を減らすもう1つの方法

さらにさらに、吉田先生からもう1つのグラフ表示の方法を教えていただきました。
$x=a+bi$ としたときに$y=0$を満たすような

$y=0$ を (a,b) だけで描く!

です。

つまり、(a,b)に色々な実数を当てはめて $x=a+bi$ を動かしたときに、$y$ がどのように動くかを図示します。
もう少し正確に言うと、$y=0$ を満たすような「yの実部」と「yの虚部」をそれぞれ平面(a,b)上に図示します。

$y$ の値もまた (a,b) の関係式として表現されるため、グラフの次元は(a,b)の2次元だけで済みます。
1つの複素平面だけで示すやり方です。

やってみましょう。まず、

$$ \begin{cases}
y=x^2-2x+2 \\
x=a+bi \\
y=c+di
\end{cases} $$

について、

$x=a+bi$ を $y=x^2-2x+2$ に代入して整理すれば、

$$ y=a^2-b^2-2a+2+2b(a-1)i $$

です。

$y=c+di=0$ すなわち $c=0$かつ$d=0$ の場合を考えるわけですから、

$$ \begin{cases}
a^2-b^2-2a+2=0 \\
かつ\\
2b(a-1)=0
\end{cases} $$

すなわち、

$$ \begin{cases}
b = \pm \sqrt{(a-1)^2+1} \\
かつ \\
a=1 または b=0
\end{cases} $$

です。
これらの交点が求める解になります。

あらためて、実部の$a$を$x$とし、虚部の$b$を$y$として、複素平面$x-y$にグラフを図示したのが下です。
これは吉田先生からいただいたグラフです(軸が$x-y$になっていますが、$a-b$に読み替えてください)。

$a^2-b^2-2a+2=0$のグラフが青で、$a=1$と$b=0$のグラフが赤です。

確かに複素平面の世界では、2点の共有点がありました。
そしてグラフの交点はそれぞれ、$ 1+i $ と $ 1-i $ です。

これは感動です!

考察とまとめ

もしも

$$ \begin{cases}
y=x^2-2x+2 \\
x=a+bi \\
y=c+di=0
\end{cases} $$

のグラフを4次元 $(a,b,c,d)$ の空間上に描けたとしましょう。

すると、上の吉田先生からいただいた平面グラフは、その4次元グラフを $y=0$ で切った切り口であるといえます。

やってみました。それが下のグラフです。

緑の実線が、実数の世界での2次関数のグラフです。
赤の実線と青の実線は、それぞれ上の平面グラフに対応しています。

このグラフをもとに、これまでの話を全て振り返ってみます。

まず青い曲面が、最初に描いた「馬の鞍型」のグラフです。
これは4次元グラフを平面 $ d=0 $ で切ったときにできる立体です。
そして、この青い曲面をさらにy=0で切ると、青い実線の双曲線になります。

次に、4次元グラフを平面 $ c=0 $ で切ったときにできる立体も考えます。
それが、上のグラフの赤い曲面です。
そして、その赤い曲面をさらにy=0で切ると、赤い実線の2直線になります。

そして青い双曲線と赤い直線の交点が、まさに $ 1 \pm i $ となっています。

これらの様子を総合すると、2次方程式の虚数解 $ 1 \pm i $ は、

  • 3次元空間 (a, b, c) の曲面(縦軸をyの実部としたグラフ)
  • 3次元空間 (a, b, d) の曲面(縦軸をyの虚部としたグラフ)
  • y=0の水平な平面

の3つを重ねた時にできる共有点

であることがグラフで確認できました。

グラフ表示に使ったPythonプログラム

今回、グラフを描くのにプログラミング言語の「パイソン(Python)」を使いました。
以下が、そのプログラムです。
Jupyterという環境を使いました。

ちなみに、パイソンのプログラミングを学ぶなら、無料で使える Google Colaboratory がオススメです。
もちろん下のプログラムも Google Colaboratory で動作します(動作確認済)。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
%matplotlib inline
fig = plt.figure(figsize = (8, 8))

# Axes3D
ax = Axes3D(fig)

# タイトルを設定
ax.set_title(“$y=|x^2-2x+2|$”, size = 20)
#ax.set_title(“$ y = |x^2-2x+2|^2 *100 $”, size = 20)

# 軸ラベルを設定
ax.set_xlabel(“x-Real”, size = 14)
ax.set_ylabel(“x-Image”, size = 14)
ax.set_zlabel(“y”, size = 14)

# 表示角度の設定
ax.view_init(elev=10, azim=35)

# 座標のメッシュ
rr = np.linspace(-1.5, 3.5, 200)
ii = np.linspace(-1.5, 3.5, 200)
#rr = np.linspace(0.9, 1.1, 200)
#ii = np.linspace(0.9, 1.1, 200)
i0 = np.zeros(200)
r,i = np.meshgrid(rr, ii)
z = r + i*1j

# 曲線・曲面を描画
y0 = r*r-2*r+2
ax.plot_wireframe(rr, i0, y0, color = “red”)
y = np.abs( z*z-2*z+2 )
#y = ( np.abs( z*z-2*z+2 ) )**2 *100
ax.plot_surface(r, i, y, color = “yellow”, alpha=0.4)
plt.show()

あとがき

どの学年も文字式と関数の季節になりました。

今年から中学生は教科書改訂で「主体的な学び」が重視され、プログラミング教育も強化されました。
来年からは高校生でもそうなります。

そういう流れの中で、今回は、

高校生のレベルで数学を題材に「主体的な学び」を「プログラミング」も活用して行ったらどうなるか?

を実践してみました。

さらに今後の常識というか、新しい価値観である

「集合知」で「問題解決を加速する」という姿勢

も取り入れてみました。
ですから、問題解決の用語や流れも、それとなく意識してあります。

これが次世代型の教育であり、同時に、いま日本で遅れてしまっている教育でもあります。

今のところ私はそのように思っております。

教育者も間違えます。
先生が何でも知っていて間違いを起こさない聖人君子である、なんていう時代は終わっています。
そもそも非科学的で不合理です。

もう、1人の聖人君子や、優れたリーダー、1部の天才に問題の解決を任せるよな時代では、ありません。
というか、そんな人はいません。
幻想です。

今や、世界中の人たちがコンピューターでつながっているのです。
みんなが意見や知恵を出し合う「集合知」で、いち早く問題を解決していこう!
そのように考える方が大切です。

このような価値観でコンピューターを活用しながら問題解決を実践できる人。

それが、これから日本で、いや世界で多く必要とされる人たちなのだと思います。

現場からは以上です。

 


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

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

友だち追加


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

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

友だち追加

 


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

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

プログラミング教育 なぜパイソンが人気でオススメなのか?

pythonって知ってる?

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

学校の先生や塾の先生が知っておくべき3大プログラミング言語といえば、

  1. Scratch(スクラッチ)
  2. python(パイソン)
  3. JavaScript(ジャバスクリプト)

ですね!(塾長の偏見です)。

冗談を抜きにしても名前くらいは知っておくべきで、けっこう重要なキーワードだとは思います。

中でもpythonの人気はずっと上昇傾向ですね。

先日はプロコースの生徒たちを指導しましたが、python(パイソン)を使っています。プログラミング教室「マイクラミング」の話です。
そして先週、新規面談をした中学生も独学でpythonを学び始めたと言っていました。なぜかドヤ顔。最近は単に「プログラミングを勉強している」というより「pythonをやっている」という方がマウントをとれるのでしょうか。
また別の会議では、とあるプロバイダーのとある技術者さんが「python本格的にやりたいなー」とおっしゃってました。

そんな感じで私の身の回りでもpythonが盛り上がってきています。

ということで、今回は

  • なぜ、python は人気上昇中なのか?
  • なぜ、python がおすすめなのか?

について書きます。

ただし、どうしても塾長の感想を含んでしまうので、そこはごめんなさい。

pythonの対象年齢(対象レベル)とは

人気があるとはいえ、pythonは「テキストプログラム」のプログラミング言語です。そのため、どうしても次のハードルが出てきます。

  • 英単語をたくさん使う
  • 1文字でもタイプミスをしたら動かない

確かにpythonの文法はシンプルですが、それでも直ちに「小学生にもわかりやすい」とはなりません。少なくとも上の2つのハードルをクリアできる精神年齢が必要です。

もしも上の2点が心配ならば、スクラッチ(Scratch)から始めるのが無難だと思います。

例えば、1文字でもタイプミスをすれば動きません。カンマとピリオドを間違えただけでもエラーです。次の2つの例を見比べてみてください。

name = "太郎"
print( "私の名前は{}です。",format( name ) )
name = "太郎"
print( "私の名前は{}です。".format( name ) )

上のプログラムは間違っていて動きませんが、下のは正しいです。

たったの1文字の差です。

こうした1文字の間違えでも冷静かつ前向きに対処できる精神年齢(IQ的な能力)が必要です。

学年や年齢ではなく、次のような感覚で判断した方が無難だと思います。

プログラミングが初めての場合

  • 学力が平均点くらいの中学1年生
  • ミスに対して前向きで、ミスの原因を調べたり予想したりするのが得意な小学5年生
  • 英語で作文が得意な小学3年生

くらいが対象の下限になると思います。

プログラミング経験がある場合

  • マイクラミングのハイコース卒業者
  • スクラッチで「自分で考えて」一通りのプログラミングができる人
  • 他のテキストプログラミング言語で「自分で考えて」一通りの制御構文をプログラミングできる人

必ずしも文法の詳細を暗記している必要はなく、調べながらでも良いですが、「自分で考えて」プログラミングしてきたことが必須です。

考えなしに教科書やネットからコピー&ペーストしただけでは、たとえそれが動いたとしても、プログラミングを経験したことにはなりません。
たまにそういう人がいるので注意してください。

pythonが人気の理由

ネット上でpythonが人気だーと話題になるのは主に2つです。

  1. 人気ランキングでpythonが上位
  2. pythonの求人は年収が高い

ランキング上位について

人気ランキングというのは、プログラマーからの人気投票の結果です。どんな理由でも1票は1票ですから「なんとなく人気があって上位」ということです。
とにかく大雑把に「pythonが好き」という人の割合が高いよ、ということくらいしか分かりません。

後半で塾長がpythonを使ってみた感想を書いておきますので、参考にしてみてください。

年収が高い件について

これは人材の人数が少ないという意味で、確かに高収入になりやすいです。

pythonの求人内容は、主に情報解析や人工知能を使ったプログラミングです。

  • 情報処理や人工知能を扱える高度な数学を身に着けている!
    なおかつ、
  • pythonでプログラミングができる!

そんな高い能力を持った人なんて、そもそも人数が少ないです。
人にできないことができるのですから給料が高くなります。

今のところ、その種の仕事は数が少ないです。
しかし今後は増えていくと見込まれていますから、学生の皆さんは希望を持って良いと思います。

とはいえ、3年後、5年後にどうなるかは分かりません。
工業的なニーズや商業的なニーズは、就職する時が来たら、その時に流行っているもので考えた方が実用的です。

もしも就職がずっと先であるならば、

「できるだけ学校の勉強をプログラミングに生かす」

という姿勢で「基礎」をしっかり鍛えておくのが良いと思います。
そういう意味では業界色の薄いpythonやScratchが無難ですね。

プログラミング言語 python の特徴

次にプログラミング言語としての特徴を挙げてみました。

pythonの特長

  1. 文法がシンプルかつ十分(短い文で済む、カッコ不要など)
  2. 高機能(高度な技術、トレンドば技術にすぐ対応)
  3. マルチプラットフォーム(WindowsでもMacでもLinuxでも富岳でも)
  4. 書いたらすぐ実行できる(コンパイル不要)
  5. 基本的に全て無料
  6. すぐに調べられる(解説ページやサンプルプログラムが多い)

pythonの得意分野

  1. 統計の全般
  2. 科学シミュレーション
  3. 人工知能の利用や開発
  4. 画像処理
  5. Webサーバー
  6. ゲーム(遅くても良い分野)

およそ何でもOKです。
日本のスーパーコンピューター「富岳」でも、ちゃんとpythonでプログラミングができますよ。

pythonの苦手分野

  1. 高速処理が必要なゲームプログラム
  2. 高速で高スループットな処理が必要なサーバープログラム

書いたらすぐに実行できる「インタープリター言語」であるため、どうしても計算スピードが犠牲になります。
そのため極端に計算スピードを要求されてしまうような処理には向きません。

フォートナイトやファイナルファンタジーのような本格的なCGのゲーム開発は無理です。
また動画編集ソフトや高度な画像編集ソフトも、pythonで開発するには無理があるでしょう。
pythonでは性能不足です。

CPUやGPUの性能を限界まで使いきるような超高速処理のプログラムを作るなら、C言語やC++、あるいはそのWindows版であるC#がおすすめです。
ほんの少しだけ性能を妥協する代わりに、マルチプラットフォームで動くアプリを作るならJavaがおすすめです。マルチプラットフォームの中ではJavaが最速です。

ただし、そのようなアプりの中で「作業を自動化するためのプログラミング言語」としてpythonが採用されている場合もあります。例えばBlenderというCGを作るアプリです。

性能を抜きにすれば、pythonはトップレベルに強力なプログラミング言語と言えます。

実際にpythonを使ってみた感想

塾長はこれまで、仕事やバイトなどで、C言語、C++、Objective C、Visual C++、Visual Basic、BASIC、Java、JavaScript、PHP、python、SQL(どこまでプログラミング言語とみなすか悩ましいですが)などを使ってきました。

結論から言えば、それらの中で pythonがダントツに良かったです。

書きやすいし、読みやすいし、思ったことがすぐできる!

という意味で、とにかく使いやすいです。初めてpythonを使ってみたときは、本当に衝撃でしたよ。

プログラマーの視点で優れていること

まず「プログラマーの視点」から見て、使いやすいです。

簡潔で読みやすくて無駄がない。それなのに、奥が深い!

そんな文法です。

きっと、プログラミングに関する「先人の知恵」が、ふんだんに組み込まれているから、そんなエレガントな文法になったのでしょう。

例えば「デザインパターン」研究されてきた知恵の一部が、言語の仕様として最初から組み込まれています。デコレーターやイテレーションなどです。
他にも、標準で用意されているオブジェクトの型の種類がちょうど良いです。細かすぎず、粗すぎず、それでいて、順序付けできるか否か、イテレーティブか否か、変更できるか否か、というカテゴライズの全てを網羅しているラインナップです。

ちょっと細かい話になってしまいましたが、要するに、本当によく考えこまれた言語だなぁと思います。

こうした言語仕様の何がすごいかと言えば、pythonで良いプログラムを書くだけで、良い設計をしたのと同じ価値が生まれるということです。
コーディングと設計の区別が、もはや無くなってきたということです。
優れた言語仕様と読みやすさが相まって、pythonのプログラムは仕様書としての価値も高いと言えます。

実際 pythonには、プログラムから仕様書を自動生成してしまうツールがいくつか用意されています。

とはいえ、こうした「プログラマーの視点」から見たエレガントさは、他の新しいプログラミング言語も負けてはいません。いろいろなプログラミング言語がタケノコのように、あちこちで生まれている時代です。

しかし、それでもなお、pythonが凄いと言いたいです。その理由は次の通りです。

科学技術の視点で優れていること

pythonは、なんと「数学や物理の視点」から見ても使いやすいのです!

他のプログラミング言語と一線を画す理由が、正にこれだと塾長は思います。

これまでのプログラミング言語は、数学や物理を取るか、アプリを取るか、のどちらかでした。
数学や物理が得意になれば、アプリを作るのが苦手になります。
アプリを作るのが得意になれば、数学や物理が苦手になります。

ところがpythonは最初から両方できます。

数学や物理が使いやすいので、pythonは大学の研究室や企業の研究開発で、よく使われています。

かつて理系の研究室ではC言語やC++(以降、まとめて単にCと略記します)を使って、研究に使う数学や物理の公式をプログラミングしていました。Cは何でも作ることができて、しかもプログラムが爆速で動作する、という最強のプログラミング言語ですが、その代わりに、何でも自分たちで用意する必要があります。先輩から後輩へプログラムを引き継いで、改良したり機能を拡張したりして、多くのコストと時間をかけてプログラムをメンテナンスしていく必要がありました。

しかし今は pythonのおかげで、そんな苦労の大部分が不要になってしまいました。pythonではたいていのことが最初からできるからです。

よっぽど計算スピードが重要になる研究でもしない限り、もう研究室でCをやる必要はありません。Pythonのお手軽さを1度でも味わってしまったら、もうCには戻れないでしょう。

そして実は、pythonはCと仲良しです。python自身がCで作られているからです。そのためスピードが重要な部分だけCで作り、残りをpythonでつくる、というハイブリッドな開発もできてしまいます。実際に高速なライブラリーも多く提供されています。

さて、数学や物理のプログラミングがしやすいということは、数学や理科の教科書の延長線上でpythonが利用しやすい、ということです。つまり、これからは高校生や大学1年生の教育でもPytnonの利用が増えると思います。

Pytnonのプログラミングに慣れてしまうと、もう他の言語が「めんどう」「ムダが多い」などと思えてしまいます。

人気の秘密はこうしたエレガントさにあるのだろうと勝手に想像しています。

忘れても問題ない文法とは?

誤解をしてほしくないので、最後にテキストプログラムの文法について補足しておきます。

今回のブログでは、pythonのメリットを語るために、文法や言語仕様について多く書きました。

でも誤解をしないでください。実際には文法を細かく「暗記」する必要はありません。しかも、これはpythonに限ったことではありません。

プロの世界でさえも、細かい文法は調べながらプログラミングしています。

意外でしょうか?

でも、これは常識です。例えば、

「C言語で仕事するのは2年ぶりだな。if 文の書き方はJavaとどう違うんだっけ?」

「PHPひさしぶり。文字と文字を連結する演算子は何だっけ?」

みたいなことは、プロでもよくあります。

プロの世界では1人が7~8種類のプログラミング言語を扱うのが普通です。C言語だけ、pythonだけ、というプログラマーなんて新人くらいです。
とはいえ1つのプロジェクトに使うプログラム言語は1~3種類くらいで済みます。ですから1つのプロジェクトに従事している間は、残りの使っていないプログラミング言語の細かいことは、忘れてしまいます。

たいていのプログラミング言語は似ていますが、細かいところで違います。そのような

プログラミング言語によって異なる部分

については、いちいち細かく覚えていられませんし、そこの暗記にこだわる必要もありません。
代わりに、

  • 標準で使えるオブジェクトの型は言語によって違う
  • 変数の初期化、参照、代入の作法が言語によって違う
  • 分岐は if – else が基本だが、細かいルールや switch を使えるかなどは言語によって違う
  • 繰り返しは for や while が基本だが、細かいルールは言語によって違う
    ・・・

みたいな勘所が、経験とともに蓄積していくものです。

「何を暗記しなければならないか」という項目は十分に知っておく必要はあります。
だからと言って、今すぐに暗記している必要があるか否かは別問題です。

細かいことは、必要になったら調べて暗記します。そしてプロジェクトが完了するまでは暗記の状態を保ちます。
しかしプロジェクトが終わって使わなくなれば、また忘れてしまうでしょう。

そんな感じで良いです。その方が、

「今回、また新しいプログラミング言語を使うことになった。」

と言われても、びっくりせずに済みます。
ほかの言語との違いを調べて使いこなすことには、変わりがないからです。

逆に、少しでも記憶があいまいなら、じゃんじゃん調べて確認します。
不確かな記憶のままプログラミングを進めてしまう人の方が信用できません。

プログラミングで大切なのは、

× 文法の知識が完璧であること
○ 全て説明できること

です。

プログラムの1行1行について、

「なぜ、そう書いたのか」

を1文字も漏らさず説明できる必要があります。
1文字でもあいまいだったら、すぐに調べる必要があります。

不明なことは、すぐ調べて確かめる!

これ、大切です。

勉強も同じ

細かい知識を忘れても、大した問題ではない。

これは数学や国語でも同じなのではないでしょうか?

社会や理科は、もっとそうですよね!

例えば歴史。

細かいことは、レポートを書いているときは覚えているかもしれません。
しかし、それが終われば忘れてしまいます。
相変わらず社会の定期テストや入試問題の多くは「暗記の詰込み」ですが、受験が終わったら忘れます(※)。

それでも、歴史の流れや国際関係の背景は、いつでも語ることができるだけの素養が身につくでしょう。

・・・みたいな感じですね。

よく、カリスマ的な人がプログラミングの実況動画を出しています。

すらすらと軽快にプログラムを書いて見せています。
そんな風にできるのは、たまたま業務でよく使っているか、リハーサルを十分にしているからです。

そういう人でも、違うプログラミング言語で同じものを作れと言われたり、違うジャンルのアプリを作れと言われたら、しばらくの間は、調べながらプログラミングしていくことになります。

だからといって、その人の能力が低いことにはなりません。

すらすらプログラムを書ける場面は、自分にとって、ある程度プロジェクトが乗ってきた時期です。

プログラミングの経験が蓄積できていれば、たとえ最初の数百行が遅くても、残りの数千行から数万行のプログラムはすらすら書けます。

逆にコンピューターを使いこなせるはずのプログラマーが、文法の暗記で消耗しているようでは先が思いやられます。
暗記で苦労する「暇」があったら、どんどん調べまくって仕事を先に進めましょう。そうするうちに勝手に頭に入ります。

※ 最近の入試問題は、理科や社会でも暗記の詰込み要素が無くなってきました。
多くの資料でヒントがたくさん与えられている問題形式が多くなってきました。そのため暗記がうろ覚えだとしても、今まで調べたり学んだりしてきた経験が十分にあれば、ちゃんと解けるように工夫されています。

まとめ

今回はpythonの魅力について書きました。

そのためにpythonの文法や言語仕様について少し詳しく書いたところもありました。だからと言って文法の詳細を覚えてほしいと言っているのではありません。

1つのプログラミング言語について、特徴をよく調べて使いこなすことが大切です。

そして少し時間がたって細かい文法を忘れたとしても、気にすることはありませ。細かい文法は、使う時に調べて確認すればよいです。

大切なことは、

「なぜ、そう書いたのか」

を1文字も漏らさず説明できることです。

あいまいなことや不明なことを放置せず、すぐに調べて確認する姿勢が大切です。

このことは勉強も同じだと思います。

 


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

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

国公立大学

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

私立大学

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

公立高校

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

私立高校

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

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

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

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

 


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

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

友だち追加


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

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

友だち追加

 


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

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

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

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

塾長です。

もう春ですね。
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

定期テスト対策で時事問題の富岳からのプログラミング教室

マイクラミング プロコース 事例

塾長です。

今回の定期テストでは、さすがに出ないだろうと思っていました。

この大変な時期にも時事問題!?

しかし出るみたいです、時事問題。
一部の学校、一部の学年です。

子供の環境格差を反映してしまうテスト範囲の1つが時事問題です。
貧困家庭、保護者が政治や経済に無関心、保護者がニュースを見ない・・・こうしたご家庭の子供たちには解けない問題です。

それを是正するなら、授業中にニュース解説をしたり、授業中にニュースを調べさせる主体的な取り組みを実践するしかありません。
要は公教育かつ義務教育の機関である学校で、いかにして社会格差を吸収できるか。
しかし、授業時間が切迫している今の状況では、それができないから困っているはず。

さすがに今年度は出さないだろうと思っていました。

それなのに、また無茶をしますね。
何かの間違いでしょう。上司がチェックし忘れたとか。

子供たちがかわいそう・・・。

学校の先生には99%感謝と尊敬をしておりますけれども、
「ちゃんと組織として動いて欲しい」
という改善はお願いしたいです。

ということで、夜なべして時事問題対策の用語解説集をつくりました。

ふー。目が痛い。腰も痛い・・・

昨日から今日にかけて、必要な生徒たち全員に配り終えました。

富岳と不老

その用語解説集。
もちろん理化学研究所のスーパーコンピューター「富岳」も載せました。
8年ぶりの世界ランク1位ですからね。
名前の由来は「富士山」。

そして名古屋大学の「不老」も忘れてはいけません。
富岳と同じCPUのコンピューターで世界ランク36位
名前の由来は、大学のある「不老町」。
コンピューター処理の流れを表す「フロー」が読み方です。

計算スピードは富岳の方が60倍ほど高速ですが、人工知能や大規模記憶などが強化されています。
富岳の弟みたいなものですね。
ただ、不老は富岳より一足早く7月1日から運用を開始しています。

もちろん、不老も用語解説に載せました。

スーパーコンピューターでも使えるパイソン

その富岳や不老で、最もお手軽にプログラミングできるのがパイソン(Python)です。

  • シミュレーション
  • 人工知能
  • データサイエンス

などの研究をするのにパイソンがとっても便利なんです。
数学や物理を扱う機能がそろっているからです。
しかも無料で。

パイソンは科学技術に強い!

というワケです。

パイソンは8月開校の「プロコース」で

塾長のプログラミング教室で、この8月からプロコースを開講します。
実は、そこで使うのがパイソンです。

ハイコースを卒業する生徒がそろそろ出てくるからです。
彼らが言うのです。

もっと高度なことをやりたい!

と。

そのような生徒を対象に8月から限定的にサービスを開始します。

パイソンを選んだ理由は3つあります。

  1. 研究と就職の両面で将来まで役に立ちそうだから
  2. ジュニア、ミドル、ハイの環境に最初からインストールされているから
  3. 文法がシンプルでモダンだから

もちろん塾長が楽しんで使っているから(4つめ?)というのもあります。
教える本人が楽しいと思わなければ、教材を開発するまでに至りませんからね。

プロコースの方針として考えていること

一言でカッコつけて言いますと、

「次の世代に求められるコンピューターの使い方を教える。」

ということを常に考えています。

パイソンが人気とは言え、プログラミング言語には流行り廃りがあります。
ですから流行に左右されない芯の部分が生徒たちの中に残るように教えたいです。

何と言いましょうか、

プログラミングのエッセンス?
プログラミングのエキス?
プログラミング汁?

みたいな、10年や20年では変わらないプログラミングのセンスや勘所のようなものを教えていく方針です。
つまり生徒たちを、

「細かいことは自分で調べながらプログラミングできる」

という状態にしてあげたいと思っています。

そのために、例えば、あえて部分的にHTMLやJavaScriptを登場させたりします。
あるいは古い開発手法と新しい開発手法の両方を試してもらったりもします。

もちろんジュニア、ミドル、ハイの方針と変わらない部分もあります。

学校で習ってきた数学や理科、美術や技術などの知識もどんどん活用する!

この方針は変わりません。
塾ですから普遍的な教養とは何かを考えたいです。

プロコースでやること

スクラッチに比べると、パイソンはかなり高度なことができます。
しかもスクラッチに比べると超高速に処理ができます。

章の名前や構成は後で考えますが、ざっとこんな感じです。

  1. 導入
    ・スクラッチとパイソンを比較しながらプログラミングのスタイルを学びます。
    ・また概念の拡張として、整数、小数、文字列、配列や辞書、集合なども学びます。
  2. 計算力を体感する
    ・マインクラフトで学んできた3次元のベクトル空間を抽象化します
    マインクラフトは座標を(x,y,z)≡(横、高さ、縦)に対応させた空間です。
    これを(R,G,B)という色の空間に置き換えてお絵描きソフトを作ります。
    ・このように空間という概念を抽象化し、ハードウェアとソフトウェアの違いを体験します。
  3. 自動化を体感する
    ・ウェブスクレイピングを体験します。
    マインクラフトのプログラミングでは、よくブロックIDをインターネットで調べました。
    これを自動化します。
    ・調べた情報をCSVファイルという汎用的な形式で保存します。
    ・またパイソンで読み込める形式でファイルに保存して再利用性を考えます。
  4. データーベース
    ・スクレイピングしたデータをデーターベースにして管理します(RDBモデル)。
    ・SQLを簡単に紹介し、目的に応じてプログラミング言語が変わることを体験します。
  5. Webサーバーおよびアプリの開発
    ・データーベースを検索するアプリを3種類ほど作ります。
    ・コマンドラインのアプリ
    ・ブラウザで調べるアプリ(クライアント-サーバーモデル)
    ・Web-APIを使って調べるアプリ(REST-APIモデル)
  6. 人工知能
    ・詳細は企画中です。ここまで来るのに1年以上かかるでしょうから、ゆっくり準備します。
    人工知能の紹介程度になりますが2種類ほどやろうと思います。
    ・皮肉にも高校の教科書から削除された行列が人工知能では必須です。
    数学の基礎からどうやって教え直すのかが最大の課題でしょう。

ちょうどブログのサムネイルにある写真が、お絵かきソフトの完成図です。

マイクラミング プロコース 事例

画面上で絵を描くと、マインクラフトの世界でそれが実現されます。
背景を白紙にすればホワイトボードにもなります。

ところで、夏休みの宿題で「写し絵」(フロッタージュ)に取り組んだ人もいるでしょう。
10円玉に紙をかぶせて、鉛筆でこすると10円玉の模様を写し取れるという、あれです。

それと同じようなこともできます。
背景の画像をマウスでこすっていくと、マインクラフトの世界に、背景の絵が写し出されていきます。

そんなお絵かきソフトです。

学校で習った数学や美術(図画工作)のアイデアを使っています。

楽しそうでしょ!
そして頭が良くなりそうでしょ!!

こういうプログラミング教室って、他にはないと思います。
学校の学習指導要領に全て目を通してから作りました。

ソフトウェアの価値を理解できるという教養

空間座標の縦、横、高さを数字にすれば、どんな場所でも表せます。
色の三原色の赤、緑、青を使えば、どんな色でも表せます。

これをベクトルの(x,y,z)に当てはめて使うと、どちらも同じ数学の式になります。
例えば、場所の近さも色の近さも「距離」ととらえれば、どちらも三平方の定理で計算できます。

このように、ソフトウェアというのは、数学のような抽象化された概念を色々なものに当てはめて、新しい道具にしたものです。
学校で習う勉強は、とても抽象度が高いので、一見すると、何の役にも立たないことのように思えます。

しかしソフトウェアの世界では、その抽象度の高さが逆に大きな利用価値を生んでいます。

その価値を理解している投資家や政治家が多い国が、いち早く発展しているというワケです。
それは Google、Apple、Amazon、Facebook、Microsoft、Adbe、ZOOM などの歴史を見れば明らかですね。

残念ながら今までの日本には、抽象的な学問の価値やソフトウェアの価値を理解している人間が、ほとんどいなかったです。
いたとしても、そのような人材は、みな日本を出て海外に行ってしまいます。

スーパーコンピューターで世界一をとれるのは、ハードウェアだからです。
ソフトウェアについては、今後の日本の変化に期待したいですね。

ですから若い人にも大きな期待がかかっています。

高度の意味を取り違えたくない

逆に、機械の仕組みやコンピューターの仕組みなどは省略します。
プロコースではマイコンボード、LEDやモーターの基盤、ロボットなどは一切使いません。
ゲーム制作もしないです。

ロボットやゲームを作れば、いかにもプログラミング教室っぽいですかね?

塾長は、そのようなことを子供たちにやらせるのは反対です。
「職業に近い」という意味で「高度」なことを、いきなり子供たちにやらせるのは間違いだと思います。

子供たちが大きくなる頃には、今の職業の過半数は無くなっています。

ですから私の教室では、特定のマイコンや特定の機械を詳細に説明することはないです。
子供たちが大きくなる頃に廃れてしまうような流行りの技術は、教えても仕方がありません。

つまり、ただ単に大人向けの技術研修を簡単にしただけ、みたいな教育は、子供の将来には何の役にも立たないということです。

ロボット教室、ゲームプログラミング・・・

これらは教育というよりは「趣味」と割り切って楽しむ方が幸せでしょう。
学校や学習塾としてやるなら、イベントに使うくらいですかね。

客寄せパンダとしては良いかもしれません。
自分の子供に習わせたいかと言われたら、やらせたくはないです。

趣味としてやりたいと言われたら、それはそれで良いですよ。
おもちゃを買い与えるのと同じ意味で。

中学生や普通科の高校生に教えるべきことは、職業訓練ではありません。

学校で学んでいることを開発や発明につなげる発想方法だと思います。
学校で学んできた抽象的な概念を、身の回りの色々なことに当てはめてみる、モノや機械を抽象化して考える、というソフトウェア的な発想だと思います。

今時のプログラミングでよく登場するデータの構造や情報の扱い方でもよいでしょう。
モダンなプログラミング言語で扱われるデータ構造もまた、ものごとを抽象的にとらえるための器です。

それが分野を問わずコンピューターの持つパワーを使いこなすことに直結します。

ソフトウェア的な発想は、今の日本人の多くが苦手です。
今の日本人は、誰にでもハッキリ見えるものや流行のもの、保証されたものばかりに目が行きます。

しかし何かを創造していくには、それとは逆の視点や発想が必要です。
0から1を作り出す創造性をこれから強化しなければいけないと思います。
だから重視して教えようと思います。

ついついコンピューターというと、

「どんな技術を身に着ければよいか」

という話になりがちです。
就職活動中の人がそうなるのは正しいと思いますが、子供たちにとっては違うと思います。
目の前にいる大人たちが

「Javaを覚えた方が良いよ。」
「ロボットを作れた方が良いよ。」

などとアドバイスしたとしても、子供たちの未来では全く違う話になっているでしょう。

「何の役に立つのか」

という問いかけは、子供たちにとっては役に立たないのです。

僕らの先輩の世代は、相対性理論や量子力学、整数論などを全く役に立たない学問だと信じていました。
しかしカーナビや量子コンピューター、暗号によるセキュリティーなどは、これらが活用されまくっています。

先の教科書改訂で削除されてしまった高校数学の「行列」も、人工知能をプログラミングするのに必須の数学でした。

大人が言う「○○が将来の役に立つ」などというアドバイスなんて、所詮はそんなものです。
だれも未来について分かりません。

ですから今の流行に右往左往するよりも、

コンピューターで世の中をどう良くしていくか。
どんなものを作れば多くの人から喜ばれるのか。

という社会との関わりや希望について考えさせて、
それを実現させていく道具立てとしてプログラミングがある、

という順番で話をした方が、結局は近道になると思います。

そしてもちろん、職人が良い道具を切れる技で使いこなすように、プログラミングにも良い道具と技があります。
テスト対策や受験対策で暗記していた公式が、実はそうした良い道具なのです。

これから日本が豊かになるのか否かは、それが分かる人をどれだけ増やせるかにかかっています。

そのような話をした方が子供たちの将来のためになるでしょう。

 


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

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年以上も前の話しで、今は違います。

続きを読む

プログラミング教室のデモムービー

ヒーローズ植田一本松校と赤池校で開校したプログラミング教室!
デモの動画を作ってみました。

本日は赤池校で中学生の体験生が来てくれます。
明日は植田一本松校で高校生のプログラミング教室です。

スクラッチでマインクラフトがこんな風になっちゃいます。
ここまで発展できるプログラミング教室は、なかなか他にはないですよ。

楽しく!
高度に!!
クリエイティブに!!!

そんな教室の雰囲気が伝わればうれしいです。

小学生、中学生、高校生、オールOKです。

Scratch!
Minecraft!

そして

Python!

論理的思考力、数学的思考力、空間把握力・・・

教育用語で言うと難しそうですが、楽しく自然に身につきます。
個別指導の学習塾だからプログラミング教育必須化のツボも押さえてますよ。

ぜひどうぞ!