2020年より小学校でプログラミング教育が必修化となったり、転職などでプログラミングが良く話題になっていますが、そもそもプログラミングって何なのでしょうか?
今回はプログラミングがどういったもので、どうやって学習するのかを解説しています。
1.そもそもプログラミングってどういう意味?
コンピューターに
「〇〇をやってね、それが終わったら×××してね、もし□□の場合は△△をやってね~」
というふうに、やって欲しい事を順序だてた指示のことをプログラムと呼び、このプログラムを作る事がプログラミングとなります。
私たちも人にお願いする時、このように指示することがありますよね。
その場合は日本語を使って指示しますが、コンピューターにお願いするときは日本語でお願いするのではなく、コンピューターが分かる言葉で指示する必要があります。
この言葉の事をプログラミング言語と言います。
世界中にたくさんの言語(日本語、英語、ドイツ語、中国語など)があるように、プログラミング言語も数多くの言語が存在しています。
2.なんでプログラミングってあるの?何に使われてる?
プログラミング(プログラム)は何の役に立っているでしょうか?
世の中には様々なコンピューターが活躍しています。
パソコンやスマートフォンはもちろんの事、インターネットにつなぐためのルーター、自動販売機、レジ、クーラー、車の制御など、大小さまざまなコンピューターが使われているものは、全てプログラムで動いています。
プログラムが入っているってことは、つまり誰かがプログラミングしているって事です。
このようにプログラミングによって作られたプログラム、現在の世の中のテクノロジーを支えている1つであることがわかります。
3.プログラミングを学ぶと良いことがある?
プログラミング(プログラム)が身の回りにたくさん使われている事を説明しましたが、プログラミングを学習する事は製品(サービス)を作る以外にも様々なメリットが存在しています。
学校や会社の研修などでもプログラミングを取り入れている所が増えている事から、非常に注目されている学習分野でもあります。
1.順序立てた考え方ができる
論理的思考力と言う言葉で表現される、物事を順序だてて考える力が付きます。
例えば【卵焼き】を作ってもらう場合を考えます。
人間に依頼する場合とコンピューターに依頼する場合を比較してみましょう。
<人間が相手の場合>
「卵焼き作って!冷蔵庫に卵と調味料があるから、3人分ね!」
といった感じで漠然とした依頼でも伝える事ができます。
作る人も、わからない事があれば依頼する人に確認もできます。
<コンピューターが相手の場合>
「まず冷蔵庫から卵を3つ取り出してください」
「キッチンの収納から、20cmのフライパンを取り出してください。もし、同サイズのフライパンが存在する場合、最後にサイズ確認したフライパンを使います」
「キッチンのコンロにフライパンをのせてください」
「キッチンのコンロに火をつけて中火にしてください」
「10秒待ってから油を15cc入れてください」
「フライパンを3cm持ち上げて、ゆらしてください。5秒間揺らします」
「フライパンをコンロにのせてください」
「フライパンに卵を3個、割っていれてください」
「フライパンに塩コショウを1gかけてください」
「2分待ってから火を止めてください」
「20cmの大きさのお皿を食器棚から取り出してください。存在する場合、初めに確認したお皿を取り出します」
「フライパンから卵を取り出して、お皿にのせてください」
と言った感じでしょうか。
コンピューターにはあいまいな指示を伝わらないため、このように細かく指示する必要があります。
つまりプログラミングは
目的を明確にする ⇒ 目的を達成するために必要な事を洗い出す ⇒ コンピューターが理解できるレベルに細分化して順序化する
といった作業が必要となります。
この作業を繰り返し学習する事で論理的思考力を鍛える事が可能となります。
2.単純にゲームやツールが作れて楽しい、便利
プログラミングを学習することで、様々なアプリケーション(ソフトウェア)を作る事ができます。
たとえばゲームが作れたり、自分専用のスマホアプリが作れる、仕事用の便利ツールを作るなど、用途に応じて好きなことがコンピューター上で実現できてしまうのもプログラミングの魅力です。お仕事をされている方の場合、自動化ツールなどを作って業務効率アップなども可能です。
プログラミングを学習するのは論理的思考力を鍛えるのに効果的ではありますが、なかなか目標が無いと続かないので、お子様向けプログラミング教室ではゲームを作る事を目標にしていたり、大人向けプログラミング教室ではアプリケーション制作を目的にしていたりしますね。
3.受験の役にたつかも!?
学生の方の場合、プログラミングが受験の役に立つ場合があります。
私立中学校ではScratch(スクラッチ)やマインクラフトによるプログラミングが入試科目になっていたり、プログラミング検定などの資格を優遇対象にしていたりするところも増えています。
大学入学共通テストでは2025年度より教科として「情報」を追加される事になり、その内容の一部としてプログラミングが出題されるようです。
4.プログラミングを使った仕事にも付けるかも
プログラミングスキルを身に着ける事によって、就職に有利になる可能性があります。
特にシステム開発系の会社についてはプログラミングが直接業務に関連するため、評価される可能性はあるでしょう。
また最近では、プログラミングスキルがある人はフリーのエンジニアとして活躍される方もおられます。高スキルの方は年収が1000万円を超えていたりしますので、夢のある職業と感じる方も多いでしょう。
今後、IT人材が足りなくなってくる事も予想されているため、有利なスキルになる可能性があります。

IT人材の不足数に関する試算結果
※ 出典:経済産業省IT人材需給に関する調査(概要)より抜粋(https://www.meti.go.jp/policy/it_policy/jinzai/gaiyou.pdf)
4.プログラミングって難しい?目的別にプログラミング言語を紹介
1.プログラミングって難しいの??
プログラミング言語によって難易度は異なりますが、基本的には入門部分は簡単なものが多いです。ただし、奥が深い分野でもあるので、完全にマスターする事を目的とすると挫折しやすいでしょう。
そもそも、プログラミングは「目的とする動作(ゲームやサービス・ツール)」を実現するための道具です。目的を達成するために必要となるプログラミングスキル(または自分で調べて理解できるスキル)を身に付けておけば充分で、完全にマスターする必要は無いと考えています。
様々なプログラムを作っていくうちに、自然とプログラミングスキルが身に付きます。
何か新しいモノを作る事が好きな人は、比較的楽しくプログラミングに取り掛かることができるので、難しいとは感じない傾向があります。
2.どのプログラミング言語で学習したらいいの?
プログラミングを始めるにあたり、どのプログラミング言語を選択すれば良いか迷う人も多いでしょう。
ここでは、目的別のおススメプログラミング言語を紹介します。
1.ゲームが作りたい人(小学生~中学生)・気軽に簡単にプログラミングをやってみたい人
Scratc(スクラッチ)をおススメしています。
スクラッチは世界中で使われている教育用プログラミング言語で、命令ブロックを組み立てるだけで簡単にプログラムを作る事が可能となっています。
WEBブラウザーで直接プログラミングできるので気軽にチャレンジする事ができます。

スクラッチでは命令ブロックを組み立ててプログラムを作ります。
また、スクラッチの公式サイトでは様々な人が作品を投稿しており、プログラム内部も見ることができるので、さまざまなテクニックを学ぶ事が可能です。

スクラッチ(Scratch)公式サイトでは様々な作品が閲覧可能
まずは個人的にゲームを作りたい初心者の方や、気軽に簡単にプログラミングをやってみたい人はおススメです。
【スクラッチ公式サイト】https://scratch.mit.edu/
2.スマホアプリが作りたい人(プログラミングが初めての人)
日本ではあまりメジャーではありませんが、AppInventorという言語がおススメしています。
この言語はアンドロイドアプリを作るための言語なのですが、スクラッチと同じように命令ブロックを組み合わせて作る事ができます。もともと英語版しかありませんでしたが、日本語化プロジェクトが進んでいて、英語が苦手な方でも使いやすくなっています。
作ったアプリはスマートフォンにインストールする事もできます。
スクラッチと同じようにWEBブラウザ上でプログラミングする事が可能です。(※要グーグルアカウント)

AppInventorでは感覚的にUIを配置できます。

AppInventorはブロックにて組み立て可能
【AppInventor日本語版サイト】https://appinventor.tmsoftwareinc.com/
【AppInventor公式サイト※英語版】https://appinventor.mit.edu/
日本語版サイトにもチュートリアルが用意されていますので、基本的な動作はWEB上で学習できます。
ただ、日本語版については2021年10月時点で参考書がほとんど販売されていないのが難点ですが、ある程度直感的に作る事ができるアプリなので、一度チャレンジしてみるのも良いでしょう。
なお、筆者が自社プログラミング教室用に作った教材を電子書籍で販売していますので、興味のある方はご参考ください。
3.スマホアプリが作りたい人(プログラミング経験者または本格的に取り組みたい人)
<Androidアプリケーションを作りたい場合>
Androidアプリケーションを作りたい場合、KotlinまたはJavaが選択肢となります。
Kotlinが主流になりつつありますが、Javaで作られたアプリケーションも多数存在しています。
KotlinはJava言語を簡潔に改良されたプログラミング言語であるため難易度は下がりますが、市場としてはJavaの方が使われている事もあるので、難しいところです。
独学で学ぶのであれば、参考書やWEBサイトをみて勉強する事になるかと思います。
自分に合った参考書(またはWEBサイト)に応じて、まずは言語を選んでチャレンジしてみてはいかがでしょうか。
【Kotlin】https://developer.android.com/kotlin
【Java】https://java.com/ja/
公式サイトのリンクを張っていますが、初心者の方はリンク先に飛んでもイマイチよくわからないと思います。
インターネットで「Kotlin 入門」のように調べてから始めるのが良いでしょう。(以下同様)
<iOSアプリケーションを作りたい場合>
iOSアプリケーションを作りたい場合、SwiftまたはObjective-Cが選択肢となります。
Objective-Cで作られたアプリケーションは多く存在しますが、現在主流はSwiftになっているためSwiftを選んだ方が無難だと思います。
【Swift】https://www.apple.com/jp/swift/
4.WEBアプリケーションが作りたい人
WEBアプリケーションは仕組み上、フロントエンドとバックエンドに分かれています。
簡単に言うと、フロントエンドはWEBブラウザ上で見える部分のシステムで、バックエンドをウェブブラウザから繋がっているサーバー側のシステムです。
フロントエンドとバックエンドそれぞれ使われているプログラミング言語が異なるため、一人ですべて作るのであればそれぞれ学ぶ必要があります。
フロントエンドはHTML、CSS、Javascriptが一般的です。
バックエンドはRuby,PHP,Python,Javaなど様々な言語が存在しており、関連するミドルウェア(データベースなど)も含まれます。
ただし、それぞれの言語を学習したからと言って、すぐにWEBアプリケーションが作れるわけではなく、また1からWEBアプリケーションの仕組みを作るには膨大なスキルと時間が掛かります。
そこで、フレームワークを活用する必要があります。フレームワークにはWEBアプリケーションとして必要となる機能が揃っており、あとは肉付けするだけで目的のWEBアプリケーションを作る事ができます。(フレームワークは様々な種類があります)
したがって、まずWEBアプリケーションがどういったものを学習した上で、目的に応じてWEBフレームワークを選択し、必要となるプログラミング言語を学習する流れが効率的かと思います。
「WEBアプリケーション 入門」で検索すると様々な情報がありますので、まずはそこからチェックしてみましょう。
5.プログラミングを学んで将来に備えたい
特に目的は無いけど、プログラミングをやってみたい!!教育用ではなく本格的なプログラミングスキルを身に付けたい!!
という方は、学習しやすい言語から身に付けると良いでしょう。
学習しやすい言語とは、参考書や学習用WEBサイトが豊富、プログラミング教室が豊富、困った時の技術情報が多いなどがあげられます。
そういった点で、Python、JavaScript、PHP、C言語などがおススメです。
「(言語名) 入門」で検索すると環境構築からプログラミングまで様々なサイトを見つける事ができます。
5.どうやって学習すればいい?効率良く学ぶには?
プログラミングを学習するための方法は色々あります。好みに応じてチャレンジしてみましょう。
1.オンラインの入門情報から学ぶ
「(プログラミング言語名) 入門」で検索すれば、ある程度の情報を見つける事ができます。
ただし、対象言語のインストールだけだったり、プログラムが羅列されているだけだったりと、体形的ではない事も多いので、初心者の方がオンラインだけで進めるのは難しいかもしれません。
慣れてくるとインターネットの情報だけで色々できるようになりますが、初めは補助的な位置づけ位に考えておいても良いでしょう。
2.市販の技術書で学ぶ
大きめの書店に行けば様々なプログラミング言語の本が販売されています。
本は初心者向けのものから、技術者向けなど多岐にわたりますので、パラパラっとめくってみて自分ができそうな本を選んでください。
ただし、言語によって本の種類が少なかったり、古い本だと書いている内容では動かなかったりすることがあります。
基本的には新しい本を選ぶのと、独学で学ぶ事になるので、わからない点があればインターネットを活用するようにしましょう。
3.プログラミングスクールで学ぶ
昨今ではプログラミングスクールが数多く存在しているので、直接講師から学ぶ方法です。
プログラミングスクールによって特徴が設定されていることから、自分に合ったスクールを選ぶことができます。
難点としては、通常の習い事より少し高めの金額設定になってしまいます。専門性のある分野である事や、講師一人に対して人数に限界があるためかと思われます。
近くにプログラミングスクールが無い方はオンラインスクールも選択肢として良いと思います。
4.効率的に学ぶ方法
1.受け身にならない
技術書を読んで技術書の通りにプログラムを作っただけ、プログラミングスクールで教材通りにプログラムを作っただけ、ではプログラミングスキルはなかなか身に付きません。
学習した事をアウトプットすることで、確実にスキルが定着します。
例えば
・学んだプログラムを少し変えて、どのように動作が変わるかを確認する
・学んだテクニックを活用して、違うプログラムを作ってみる
・いまいちわからない部分を質問する
など、積極的にプログラムを作って動かす事が大切です。
2.目的意識を明確にしておく
プログラミングは一朝一夕では身に付かないため、コツコツ学習する必要があります。
コツコツ継続して学習するためには、「なぜプログラミングをやっているのか」を明確にしておくと良いでしょう。
・ゲームを作りたい
・転職して年収をアップしたい
・会社を辞めてフリーになりたい
・○○みたいなサービスを作りたい
・受験に有利にしたい
など、自分が納得できる目的や動機を確認しておくことが大切です。
3.関連技術に興味をもつ
学んでいるプログラミング言語だけでなく、周辺の技術や情報に興味を持つ事も大切です。
たとえばpythonを勉強している場合でも
・pythonってどんな特徴があるの?
・人工知能って何?どんな参考書があるかな?
・どういった特徴があるの?具体的に使われているところは?
・pythonの技術者って需要あるのか?どんな就職先があるのか?
・検定試験とかあるのかな?
など、関連した情報を調べてみることで、新たな目標を見つけたり、学習している意義を感じてモチベーションになることがあります。
7.とにかく楽しんでプログラミングしよう!
プログラミングは捉え方しだいで「楽しい!面白い!」と感じる事も「ただただ面倒・・・」と感じる事もできます。
プログラミングを学習するにあたっては、とにかく「楽しい!面白い!」を見つけて続けることが大切です。
プログラミングは頭はひねってコードを書き、思った通りに動かなかったり、バグを直すのにメチャクチャ時間がかかったり、動いたと思ったら思わぬところでバグがでたり、と色々大変な作業ではありますが、ようやく動いた時は、苦労した以上の喜びや楽しさを感じる事ができます。
ぜひ沢山の方にプログラミングにチャレンジして頂きたいと思いっております。