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

Python

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

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月24日、大学入試センターがその「サンプル問題」を発表しました。

新しく加わる「情報」という科目に注目です。

どんな問題?
傾向と対策は?
難易度はどれくらい?

気になりますよね。
詳細を見ていきましょう。

大学入試でプログラミング!いつから?

2025年1月に実施される共通テストからです。

つまり、この4月から受験生になる中学3年生の世代からが対象です。

生年月日で言えば、

  • 2006年4月2日生まれ ~ 2007年4月1日生まれ
  • 平成18年4月2日生まれ ~ 平成19年4月1日生まれ

にあたる学年以降です。

この学年が教育改革が完成してから大学を受験する最初の世代となります。
つまり、この学年以降は、完全に新しいカリキュラムへ移行します。

教科書改訂が全面的に導入され、高校入試の出題傾向も新しくなります。
そして高校に進学した瞬間に、高校でも教科書改訂です。
新しいカリキュラムで高校3年間を過ごすので、大学入試も新傾向になるというワケです。

  • 小学校では、移行措置的に英語が準必須化
  • 中学校では、教科書改訂およびパソコン1人1台が導入された世代として初の高校入試
  • 高校では、論理国語やプログラミングなどを新設した新指導要領の最初の世代
  • そして大学入試も新指導要領の形式へ完全移行

この世代からは、てんこ盛りの大学入試です。

そもそも情報ってどんな教科?

高校の情報科は2科目です

  • 情報1(必須科目)
  • 情報2(選択科目)

という構成です。
このうち大学入試に出題されるのは「情報1」の方です。

情報1は高校1年生または2年生で履修するようです。
多くの高校は1年生になるでしょう。

ということで、まず「情報1」の章構成から確認しましょう。

  1. 情報社会の問題解決
    → 問題解決の流れ、モラル、法規、セキュリティ、リテラシーなど
  2. コミュニケーションと情報デザイン
    → デジタル情報の技術や種類、情報の収集法・表現法・評価法など
  3. コンピューターとプログラミング
    → 論理演算、誤差、制御、データの基本構造、アルゴリズム、モデル化とシミュレーションなど
  4. 情報通信ネットワークとデータの活用
    → ネットワーク技術、データ形式、データベース、統計・解析など

これらのうち、プログラミングを実践するのは第3章と第4章です。
だいたい高1の2学期後半からがプログラミングになりそうですね。

そこで、この情報1の「プログラミング」について、その実態を見てみましょう。

想定されるプログラミング言語

プログラミングといえば最初に気になるのが「言語」です。

高校では何語でプログラミングをするのか?

これが気になります。
それを知ることができる参考資料を見つけました。

2020年7月に文部科学省が高校の先生向けに出した研修資料です。

高等学校情報科「情報1」教員研修教材(本編) (文部科学省)

この中の演習で使われているプログラミング言語は3つです。

  • Python 3系 (数学関数:math、 グラフ表示:matplotlib、 確率や行列:numpy)
  • R (パイプ処理:dplyr、 形態素解析:RMeCab、 グラフ表示:ggplot2)
  • SQL

プログラミング初心者の人にとっては、頭が痛くなるような用語が並びますね。
まぁ、とにかく、

少なくとも3種類のプログラミング言語は学ぶ

ということを知っておいてくださいませ。

Python(パイソンと読みます)は、外部機器の制御や数学モデル、物理モデルのシミュレーションで使われていました。
Rは、形態素解析を使って単語の出現頻度を分析したり、箱ひげ図やグラフ図を表示するのに使われていました。
SQLは、リレーショナルデータベース専用の言語ですが、その演習問題が少しありました。

ちなみに、これらのプログラミング言語は、無料で入手できます。

プログラミング言語以外では、Excel の関数やグラフ機能が使われていました。
箱ひげ図や散布図の表示、相関係数の計算、回帰分析や統計的仮説検定などにExcelが使われていました。

補足

3月30日に検定を通った情報1の教科書が一部で公開されました。
ニュースによれば、

  • Scratch
  • JavaScript

を使っている教科書もあるようです。

どんなプログラミングが出題されるの?

高校の教科書で扱われるプログラミング言語が分かりました。
次に気になるのが、

どのように出題されるのか?

です。
そこで3月24日に発表されたサンプル問題の実際を見てください。ソースは「大学入試センター」です。

大学入試センターサンプル問題_情報_問2

ご覧のとおり、大学入試では特定のプログラミング言語に依存しないような問題文で出題されます。
しかしながら実際には、

何らかのプログラミング言語を使ってプログラミングした経験がなければ、問題文の意味すら分からない

という状況です。
上の問題文を見れば、それがお分かりと思います。

プログラミング言語の知識レベル

情報1の教科書では3種類のプログラミング言語が紹介されるのでした。
一方、上で見たように、入試問題では、

特定のプログラミング言語に依存しないようなプログラムの書き方

で出題されるようです。

つまり、プログラミングの実体験を通じてプログラミングの「センス」を身に着けておく必要がある、ということです。
PythonでもRでも他のプログラミング言語でも良いですが、経験を通じて「センス」を磨けということです。

それでは逆に、

「プログラミングのセンス」

とは、いったい何なのでしょうか?

結論から言えば、次のような概念をプログラムで表現したり使い分けたりできる能力です。

データ型の種類について

  • 整数型
  • 小数型
  • 文字列型
  • 配列型

演算について

  • 四則演算
  • 論理演算

文法について

  • 変数の初期化
  • 変数への代入
  • 添え字による配列の参照
  • 添え字による配列への代入

制御の種類について

  • 順序処理(プログラムが上から下へ実行される前提)
  • 繰り返し処理
  • 条件分岐処理
  • 繰り返しの中で添え字をインクリメントする考え方

その他

  • 「表示」「切り捨て」などの関数はプログラミング言語に依存しない表記
  • オブジェクト指向プログラミングが前提(型の自動変換、文字列の足し算など)

まだ不明な点

情報1の内容からすれば、次のデータ構造が出題されても当然と予想します。

  • 辞書型(連想配列、キー・バリュー形式のデータ)
  • 集合型(順序がなく重複を許さない形式のデータ)

とはいえ、古いプログラミング言語では存在しないデータ型です。
教員側の研修が間に合わない懸念などがあれば、もしかしたら出題されないかもしれません。

教科書ではデータ形式を学ぶ中で、どうしても上のデータ型が出て来ます。
例えばWeb APIでインターネットから情報を取得する単元では、JSON形式というデータ形式が「キー・バリュー形式」の1つとして紹介されています。
これは Python では「辞書型」、JavaScriptやPHPなどでは「連想配列」と呼ばれています。
その基礎になっているデータ構造が「集合型」です。

どちらも現代の情報処理では必須のデータ構造ですが、古いプログラミング言語には存在しません。
大学入試の範疇になるかどうかは、様子見ですね。

フローチャートでプログラミングを学ぶだけでは不十分

情報1の中でフローチャートも学びます。
フローチャートを使えば、特定のプログラミング言語によらずに、プログラムの流れを記述することができます。

そう考えれば、

プログラミングの試験は全てフローチャートでやれば良いじゃん

という素朴な疑問が生まれます。

しかし、ここで高校は「高等教育」であることを忘れてはいけません。
高校のプログラミング教育は、実際にプログラミング言語を使った情報処理やシミュレーションが想定されています。
義務教育とは違い、より実践的なのです。

フローチャートでは「変数に値を代入する」などといった細かいことは表現しません。
データの型の違いや配列の添え字処理などは、実際にプログラミングしてみないと感覚がつかめません。

プログラミングの実践的な能力までテストしようとすれば、フローチャートでは不十分。
大学入試センターは、きっとそのように判断したのでしょう。

というワケで、フローチャートで論理的にプログラムの流れを書けるだけでは不十分です。

何か好きなプログラミング言語を1つ決めて、普段から少しずつプログラミングに慣れていく必要があるでしょう。
勉強の中に、情報処理やシミュレーションをコンピューターで日常的に行う習慣を組み込んでいく必要があります。

Python がおすすめ

それでは何のプログラミング言語がオススメ?

という話になると思いますが、私は pythonをおススメします。
次のようなメリットがありますから、初学者にはやっぱり Python です。

  • 無料かつパソコンならほぼ全て動かせる
  • 情報1の教科書で学ぶ内容に合っている
  • 文法が簡潔(文末の;やブロックの()や{}が不要など)
  • データ形式や記載法が近代的
  • 統計やデータ解析の機能が豊富
  • 初心者向けの参考書が多い
  • ネット上ですぐに調べられる

確かに、プロのプログラミングの世界では、日本ではまだまだ Pythonはマイナーです。
一方で大学の研究室では Python が文系理系を問わず多く使われています。

なお、日本のプロがPythonをそれほど使わないのは、日本の産業が「ハードウェア中心」「ものづくり中心」だからです。
あるいは日本では英語が読めないプログラマーや数学ができないプログラマーが多いため、海外の最先端に比べると技術が古かったり偏ったりしています。
ものづくり系ではC言語が主流で、Web開発系ではPHP、ゲーム開発ではC#やJavaという感じですね。

しかし今後はPythonや他の言語を使う人口が増えてくると思います。

どちらにしても、1つのプログラミング言語を通じてプログラミングのエッセンスを学ぶなら、文法の細かいことは少ない方が良いです。
特にこだわりが無ければ Pythonで学びましょう。

数学の「統計」を知っていることが大前提

プログラミング言語の話に偏ってしまいました。
ここで決して忘れてはならない大前提を書いておきます。

それは、あらゆる学年で学んできた「統計」の知識が前提だということです。
具体的には以下の数学が問題文中にバンバン出て来ます。

  • 小5の「円グラフ」「棒グラフ」
  • 小6の「合計」「平均」「中央値」「最頻値」「範囲」「階級」「度数分布表」「度数折れ線」
  • 中1の「相対度数」「累積度数」(パレート図)
  • 中2の「四分位範囲」「箱ひげ図」
  • 中3の「標本調査」
  • 数学1の「分散」「標準偏差」「散布図」「相関係数」「仮説検定の初歩」
  • 数学Aの「場合の数」「事象の確率」「期待値」「独立な試行の確率」「条件付き確率」
  • 数学Bの「数列」「ベクトル」「確率変数」「確率分布」「二項分布と正規分布」「区間推定」「仮説検定」

あくまでも「情報」の試験であるため、数学Bの知識をどこまで使うかは微妙です。
あまり数学を高度にしてしまうと、数学Bとの試験の区別が無くなります。

数学Bとのすみ分けは考慮されるだろうと思います。

教育改革で継続的に強化されてきた数学の分野が「統計」です。
英語の4技能と並んで、数学の統計も強化しています。

プログラミングは「人間の考え」を「コンピューターが分かる言い方」に翻訳していく作業と言えます。
とはいえ、翻訳できるのは、人間の考えのうちのほんの1部。
人間が「厳密に論理的に考えている部分」だけになります。

そして、人間が論理的に考えていることを超厳密に表現できるのが「数学」です。
コンピューターと数学が切っても切り離せないのはそのためです。

さらに物理シミュレーションのように、テーマによっては他の数学や物理の公式も使うことがあります。

入試問題用の「方言」が生まれる危険性

サンプル問題に載っているプログラムを見て感じた違和感が1つあります。
色々なプログラミング言語を経験して来た人ならすぐ分かることです。

それは、中途半端なプログラムだということです。つまり、

「手続き型プログラミング」

をしているようで、実は、

「オブジェクト指向プログラミング」

を暗黙のうちに前提にしています。

どっちかにしろよ!

などと突っ込みたくなる中途半端なプログラミングなのです。
変数名がローマ字というセンスも古臭いですね。今どきは英語です。
ちなみに最近のプログラミング言語は、変数名を日本語にしてもOKです。

日本語にするか英語にするか、どっちかにしろよ!

などなど突っ込みたくなります。
とにかく、技術的にも文化的にも変な問題文になっています。

受験者にとって不幸なのは、

入試対策としてプログラミングの「方言」を入試用に学ぶ必要が出てくるかも?

という懸念です。

今回のサンプル問題の出し方は、フローチャートよりも実践的な能力を試すための苦肉の策だったと言えます。
とはいえ、その策が「共通テスト用の方言」を生んでしまうのは良くありません。

特定のプログラミング言語に依存しないようなプログラムの見せ方

をどのように表現するのか。
これが、大学入試センターにとって大きな大きな課題でしょう。

考えられる1つの案としては、フローチャートとのハイブリッド的な記載でしょうね。

マイクラミングのプロコースはPython

最後は宣伝です。

ヒーローズ植田一本松校では、プログラミング教室「マイクラミング」を開講しています。
プログラミングの根本的な考え方から超丁寧に学びます。

ジュニア~ハイコースは、主に義務教育に対応しています。プログラミング言語はScratch(スクラッチ)です。

プロコースは、高等教育に対応しています。ハイコース卒業生か、それと同等以上の生徒が対象です。Pythonを使います。

日本では、Pythonを使うプログラミング教室の多くが、WebサーバーやWebアプリの開発を学ぶ社会人向けです。
中には大学数学を持ち込んで人工知能の開発へジャンプしてしまうコースもあります。

中学生や高校生に合ったコースを見つけるのは、なかなか大変です。
中学や高校で習う数学の知識を活用しるようなコースともなれば、さらに見つけるのが大変になります。

自分の息子にやらせたいと思えるプログラミング教室が無い!

そう考えて開発したのがマイクラミングでした。

私が塾の先生として、息子にやらせるものとして、独自に開発しました。
プログラミングの考え方や本質を学べるように、ちゃんと学校で学んだことを活用するように、念入りに開発しました。

その考え方に共感してくれる教室が、だんだん増えてきました。
北海道から九州まで。

こだわりの内容です!
手前味噌で恐縮ですが、自信をもってお勧めしますよ!

お問い合わせ、お待ちしております!!

 


進学実績

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

国公立大学

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

私立大学

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

公立高校

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

私立高校

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

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

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

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

 


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

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

友だち追加


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

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

友だち追加

 


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

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

マインクラフト「プログラム」と「コマンド」の違いとは?

プログラムとコマンドの区別

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

マインクラフトのプログラミング教室をやってきて、今年で4年目くらいです。

プログラミングとは何か?

まだまだ、これを説明する必要性があるのですが、ちょっとした課題も感じています。
みなさんは

「コマンド」と「プログラム」の区別

言えますか?

作業頭になっている危険性

マイクラのコマンド。
Windows のプロンプトのコマンド。
何かのゲームで裏技的に使うコマンド。

そのようなコマンドを「打つ」ことが「プログラミング」なのだと思い込んでいる人たちがいるのです。

もちろんプログラミング経験が無くて何だかわからずにそう思うのは仕方がありません。
知らないで、あてずっぽうに想像しているだけならば問題ないです。

問題なのは、プログラミングを経験してもなお、そう思い続けている人たちです。

何が問題かと言えば、

「作業頭」

になってしまっていることです。
「作業」は必要なことですが、多くの場合は工夫して、減らしたり無くしたりできます。
それをせずに、ただ同じ作業を繰り返すだけ、つまり考えることを放棄している状態を

「作業頭」

と私は呼んでいます。
創造力を発揮するのとは逆の意味です。そうなっている危険性があります。
ゲーム依存症の人たちに多いです。

「めんどくさい」

が口癖です。
工夫をしないし、考えることを拒むので、
傍から見ると、面倒な行動をわざわざ好んでやっているように見えます。

そういう人たちに「プログラミングの良さ」を伝えるのって、すごく難しいんですよね。

どうしたら伝わるのか。

それが最近感じている課題です。

コマンドとプログラムの区別がつかない子供や大人たち

私のプログラミング教室ではマインクラフトを使っています。
プリンターやディスプレイの代わりです。

プログラミングの結果が真っ黒な画面に表示されても、何も面白くありません。
だから結果の表示先をマインクラフトにしているワケです。

そのマインクラフトには「コマンド」と呼ばれる機能があります。

詳細はあとで説明しますが、そのコマンドをプログラムだと勘違いしている人をたまに見かけます。
お子さんだけではなくて、大人でも勘違いしている人がいます。

なぜ区別できないとマズイのか?

初めての人なら、この勘違いは仕方がありません。
「あるある」です。

しかし、ずっと勘違いしたままではマズイです。

特に、社会人でこの区別がつかないのは、かなり深刻です。
「作業」と「仕組み」の区別がついていないってことです。

生産性に直結します。

マイクラの豆腐建築で考えてみる

ここでマインクラフトのコマンドについて少し説明します。

例えば、下のような豆腐建築を考えてみます。
1辺が5ブロックの立方体で、中をくり抜いただけ。そういう単純な建築です。
(マイクラの世界では直方体の単純な建て物のことを豆腐建築と呼ぶそうです)

豆腐建築

普通に作業するなら、プレイヤーはブロックを1つ1つ置いて建築します。
1辺が5ブロックの大きさなら、必要なブロックの数は82個です。

これを1つ1つ置いて建築を進めます・・・めんどうですね。

そこでコマンドを使えば、たった3行です。

① コマンドで豆腐建築

/fill ~1 ~ ~1 ~5 ~4 ~5 stone
/fill ~2 ~ ~2 ~4 ~3 ~4 air
/fill ~3 ~ ~1 ~3 ~1 ~1 air

この例ではマイクラのfillコマンドを使っています。
fill コマンドは「2つの座標を対角とする直方体」を石や空気で埋めつくしてくれます。
(高校数学で習う立体空間の座標ですから、少し慣れが必要です。塾生は小学生でも理解しています。)

そして紛らわしいことに、プログラミングでも同様に3行です。

② プログラムで豆腐建築(スクラッチの場合)

マイクラ豆腐建築_スクラッチ

やっていることはfillコマンドと一緒です。
ちなみに、Pythonでプログラミングすると、こうなります。

③ プログラムで豆腐建築(Pythonの場合)

mc.setBlocks(1,0,1,5,4,5,1,0)
mc.setBlocks(2,0,2,4,3,4,0,0)
mc.setBlocks(3,0,1,3,1,1,0,0)

おやまぁ。

コマンドとプログラム。
①も②も③も、確かに似ています。
結果も同じ。

  • コマンドもプログラムも形が似ている
  • 手数も同じ
  • コマンドもPythonも英語で、なんか上級っぽい

これだけ共通していれば、勘違いしてしまうのも無理がありません。
でも口を酸っぱくして言わなければなりません。

全く違います!

コマンドは「作業」ですが、プログラムは「仕組み」です。

逆に、この2つの違いが言えるようになることが

プログラミングって何?

を理解する第一歩なのかもしれませんね。

コマンドとプログラムの違いを挙げてみよう!

コマンドもプログラムも、コンピューターに命令を与える点では同じです。
ですから、コマンドをいくつも実行していけば、プログラムと同じ結果を得られます。

しかし、コマンドは実行したら終わりです。
そこで消えてしまいます。

上の豆腐建築で考えてみましょう。

建物が壊れたり、ワールドを作り直したりした後で、また豆腐建築をやり直すとしましょう。
そうなると、また3行のコマンドを打ち直す必要があります。

コマンドは消耗品です。
同じことを10回するためには、同じコマンドを10回打ちなおす必要があります。
そして打ち直す回数が増えればミスの回数も増えますし、時間も体力も消耗します。

プログラムであれば、実行ボタンを押すだけです。
最初よりも2回目以降の方が、むしろ楽です。
回数が何回に増えようが、人間の行動は1回であることに変わりありません。

もっと複雑で大きな作業になったらどうでしょう。

豆腐建築を5軒×4列=20軒で並べて村を作りたい。

つまり、こんな村を作るならどうでしょうか。

豆腐建築の村

コマンドであれば1軒で3行ですから、3行×20軒=60行を打ち込む必要があります。
やってられません。

プログラミングならこうなります。

マイクラ豆腐建築の村_スクラッチ

やっぱり

豆腐建築を10軒×10列=100軒で並べて町を作りたい。

などと気が変わっても、プログラムならすぐ対応できます。

「4回繰り返す」「5回繰り返す」をともに「10回繰り返す」に変更するだけです。

あるいは、

建物の色を1軒1軒変えたい。

となったらどうでしょうか。

豆腐建築の村_カラー

コマンドの場合は、大量かつ複雑になります。
しかしプログラムならば1行の修正で済みます。

マイクラ豆腐建築の村_カラー_スクラッチ

このように、やることが複雑になるほど、大規模になるほど、プログラムは威力を発揮します。

プログラムがコマンドより優れている点

コマンドの限界はすぐに感じます。例えば

  • 「似たような作業をたくさんやる」
  • 「少しずつ変えて実行する」
  • 「他の人に同じことをやってもらう」
  • 「複雑な作業を組み立てる」
  • 「少しずつノウハウを蓄積する」
  • 「蓄積したノウハウを他の人に渡す」

などなど。
やるたびに消えてしまうコマンドでは、こうしたことができません。

そういう時こそプログラムの出番です。

プログラムがコマンドよりも優れている点をまとめるとこうなります。

  • 再利用できる
  • 複雑なこともできる
  • 大量の作業もできる
  • 速く正確にできる
  • 人に渡せる
  • 蓄積できる
  • 改良できる

これを一言でまとめると、

プログラムは「仕組み」

です。
一方、コマンドはその場その場で終わってしまいます。
結果を得ることはできますが、その場限りの成果です。

コマンドは「作業」

だと言えます。

仕組みを作れるプログラミングの方が、作業の効率化や発明につながるというワケです。

未来を考えるからプログラミングの価値が出る

マインクラフトはゲームですから、一瞬また一瞬を、刻々と楽しむものです。

今さえ良ければ満足

という感覚の連続です。
そもそもゲームってそういうものです。

ですから、ゲーム操作のほとんどは、その場限りの操作です。
その場限りの行動とその場限りの満足。
とても本能的です。

しかし、未来のことまで考え出したらどうでしょう。
マインクラフトの世界に「未来」を加えると、状況が変化してくるわけです。

  • もしかしたら、また同じことをやるかもしれない
  • もっと速く便利にしたい
  • 他の人もできるようにしたい

このような想像力を働かせたときに、初めてコマンドの限界を感じるようになります。
そこでプログラミングの出番になるワケです。

人間と動物の理性を区別する1つが「未来」を考えられるか否かだそうです。

  • 将来に備える
  • 複雑なことを簡単に実現する
  • 人と協力する
  • 社会に貢献する

こうした未来志向の欲求に応えるのがプログラミングです。

そして未来志向が強くなるほど、プログラミングの価値がよく分かるようになるでしょう。

ゲーム操作をプログラミングするのはムダ

逆に1回しかやらないことであれば、プログラミングのメリットはほとんどありません。
1回しかやらないのですから、コマンドを3行打つことも、プログラムを3行書いて実行することも、同じです。
むしろコマンドの方が楽かもしれません。

同じように、たとえば、

  • モンスターをスポーンさせる
  • プレイヤーを動かしてゲームを進める

などといったゲーム操作をプログラミングしたところで、何の価値もありません。
子供たちにとっても、何も面白くないでしょう。
そもそもゲーム操作の多くは1回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

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

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

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

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

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

昨年(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人が受講している時間帯でした。
低学年から高学年まで、年齢はいろいろです。やっぱりプログラミングは無学年ですね。

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

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

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

続きを読む