プログラミングを始めたいと思っても何から始めていいのかわからないというというのがわからないですよね。そもそも何がわからないのかが、わからないという禅問答のような状態。どうしても最初は取っ掛かりが必要ですよね。このページは今まで書いてきた記事のまとめながらプログラミングを始めるにあたっての取っ掛かりを書いていきたいと思います。
プログラミングとは何?
そのそもプログラミングとは何なのか?なんとなくわかっているかと思いますが、今一度、プログラムって何なのかをとらえてみて、それを学ぶ意義について考えてみたいと思います。
プログラミングは世の中にある機械に指示をだす
身の回りを見渡してみると今の世の中、ありとあらゆるものが機械化されています。絵に描いたとおり自動販売機、信号機、エアコン、冷蔵庫、テレビゲーム、スマホ、ルンバに産業用ロボットと数えあげたらきりがありません。でも、それらの機械を動かしているのがプログラムです。よく機械をプログラムがなければただの箱と称しますが(逆に機械屋はプログラムのことを箱がなければただの文字列と皮肉ったりしますが)、プログラムはそれら機械に命を与えるようなものです。
プログラミングとはプログラムをさらに人間が操作すること
世の中の様々な機械を動かすプログラム。皆さんが学ぼうとしているプログラミングとは、そのプログラムを更に人間が指示するように命令文を書く行為となります。つまり、人間ではとてもかなわないような力を出せる機械、1秒間に何万回と計算できる機械をプログラミングすることで制御できるということです。
プログラミングにはお作法がある
機械に指示を出せるプログラム、それを書く行為であるプログラミングにはお作法(文法)があります。機械は言った通りのことを忠実にこなしてくれますが、曖昧な指示だと理解してくれません。正確に順番立てて指示する必要があります。後で説明があるプログラムの基本である順次・分岐・反復の操作であったり、データ型である変数や配列、更に効率的に処理する関数などを組み込んであげる必要があります。
プログラムを学ぶことは機械を味方につけること
プログラムを何故学ぶのかについては、結局は機械を味方につけることです。最近はAI(人工知能)が再び話題になってきて、このままだと仕事が奪われるというAI脅威論がでています。でも、AIのことがわからないからといってAIに仕事を奪われるかもしれないという側面に目を向けるのではなく、プログラムを理解してAIをメンテナンスしたり、AIによって新たに生まれる仕事に目を向けた方がいいのではないかと思います。
歴史をみるとパラダイムシフトと呼ばれる時期が必ず来ます、産業革命のときに蒸気機関によって仕事を奪われた人達が確かにいましたが、その反面、工業機械を整備するエンジニアが生まれたり、工場で働く人達を増やしました。またインターネットは、人々を一気につなげ情報の拡散スピードを上げました、また商品もネットで購入するという形となり、既存メディアの新聞や雑誌が売れなくなる、実店舗の売り上げが下がるという面も生みましたが、一方でYoutuberなどの新しい職業がうまれたり、サイトをメンテナンスするWebエンジニアという職業も生みました。なお、これに関しては映画ドリームで同じような場面がありました。この点について記事にしたのがこちらです。
つまり、結論としてAIって何?得体のしれないものと喧嘩するのではなく、プログラムを学ぶことで理解してAIをはじめとする機械を味方にするのがプログラムを学ぶ意味の1つになります。
プログラミングを学んで将来何になれるの?
プログラミングを学ぶ意義については前のページで説明しました。では、具体的にプログラミングを学んで将来何になれるの?ということについてイメージを伝えていきたいと思います。
プログラミングを学んで得られること
プログラミングをなぜ学ぶのかについては機械の力を味方につけるというのが大きな意義だということを説明しました。一方でプログラミングを学ぶことで得られる能力もあります。
それは挙げるとしたら以下の3つ表現力/論理的思考/理数分野と英語に強くなるかと思います。
こちらについては詳しくはこの記事に書いていますので詳細はこちらを参照してください。
プログラミングを学んで将来何になれるか
さて、プログラミングを学ぶということで将来何になれるのか?単純に考えるとプログラマーですよね。でも、プログラミングを学ぶことは先に書いた通り機械を味方につけるという直接的な効果と、表現の幅が広がる・論理的思考力の向上・理数系と英語に強くなるという副次的な効果があります。言い換えるとこの能力が生かせるところならどこでもというところになります。
といっても具体例って何ということになるので以下のように具体例を挙げてみました。
それぞれの職業となぜそうなのかについて詳しくはこちらの記事で詳しく書いていますのでこちらを参照ください。
学校教育での必須化の流れ
2020年から小学校でプログラミングが必須化という情報が様々なところで見られるようになり、プログラミング教室も雨後の筍のようにボコボコとできはじめているような気がします。しかし、そもそも、このプログラミングの必須化っていうのは何なのかということを考えてみたいと思います。
学校教育課程におけるプログラミングとのかかわり
小学校でのプログラミング必須化を考えるにあたり、小学校から大学入試までのプログラミングとのかかわりを考えてみたいとおもうのですが、それが下表になります。
まず2020年から小学校でプログラミング必須化といっているとおり2020年より前は小学校ではプログラミングに触れることはありません。一方、中学以上に目を向けるとプログラミングが授業の中に触れられています。しかし、一方で2020年以降では(正確には段階的に)中学校以上でもプログラミングに関する内容が拡充されたり、さらに必須度合が高まっているのが見て取れますね。
小学校の必須化とは教科化ではない
まず昨今のプログラミングブームを冷静にとらえるために、必須化というのは何を意味しているのかというと必須化というのは、必ず学校教育の中で教えてくださいよというだけであり、プログラミングが1つの教科になるわけではありません。つまり、一定時間教えればよいのであって、教科でないので点数が付かないわけです。では、小学校におけるプログラミングはどうなるかというと、国語や算数、理科の授業において、それらの教科の理解を助けるためにプログラミングを使ってみましょうというレベルなのです。
そのあたりの必須化、教科科、試験科目といった言葉の違いとどう変わるのかについてはこちらの記事に詳しく書いてありますのでこちらを参照ください。
小学校のプログラミング教育で求められていること
小学校のプログラミング学習においては「論理的思考」が求められます。小学校の学習指導要領には次のよう書かれています。
総則 第3 教育課程の実施と学習評価
児童がプログラミングを体験しながら,コンピュータに意図した処理を行わせるために必要な論理的思考力を身に付けるための学習活動
論理的思考力とは
では、論理的思考力とはいったいどのようなものでしょうか?定義は色々あると思いますが簡単にいうと次のようになります。
物事を整理して因果関係を見つけ結論まで矛盾なくシンプルなわかりやすい道筋を示すこと
つまり
物事を整理して = 事象を観察して問題を因数分解
因果関係を見つける = 事象を抽象化して一般化する
結論まで矛盾ない道筋を示す = プログラム化(フローチャート化)
という形になります。この一連の流れをプログラミング教育の中で鍛えていくこととなりますが、前半の問題分析と一般化の部分が何を作るかというプログラムの要件を決めるところになり、この結論まで矛盾ない道筋を示すところがプログラムで表現する領域になります。
プログラムは次の3つパーツでなりたつ
結論まで矛盾ない道筋を示すという点をプログラムで表記するのですが、この道筋は全て次の3つの組合せで成り立ちます。それは順次処理・反復処理・条件分岐です。どんなに複雑なプログラムも必ずこの3つのパーツの組合せで構成されます。
世の中には数えきれないほどのプログラミング言語が存在しています。そんな数多くあるプログラミング言語、その言語も時代によって流行り廃りもあり、この言語を覚えておけば一生安泰というものはありません。そのため学校教育ではプログラミング言語をそのものを学ぶのではなく、プログラムを作る上での根底にある論理的思考を重視するのです。
この論理的思考とプログラムの基本である順次・反復・分岐について詳しくはこちらの記事をご覧ください。
次はいよいよプログラミング学習の始め方についてです。