プログラミング、プログラミングと騒がれていますが、そもそもプログラミングって何なのか?どんなものなのか?どんなプロセスで作られるのか?どんな道具がいるのか?をもう一度簡単にまとめてみます。
1.プログラミングって何?
プログラミングとはプログラムを作る事を表します。そして、プログラムを作る事を職種にしている人達をプログラマーと呼びます。
業界では、プログラムの事をコードと呼び、プログラマーをコーダー(コードを書く人)、プログラミングをコーディングと読んだりします。
プログラムは、ゲーム機でも飛行機でもロケットでも、そしてスマホにも入っていますが、”ある操作を行ったときに、複数の処理を自動で行うための動き”を作る作業です。(厳密にもう少し専門的な言方がありますが、ここでは簡単にイメージできるように)
例えば、自動運転の未来の車を想像します。車に乗って「スタート」と言うと「目的地はどこですか?」と車に尋ねられます。「●●銀行へ」と指示を出すと、車はその目的地を探し地図にルートを表示し、「よろしいですか?」と尋ねます。「はい」という答えを出すと、車は自動運転が始まり目的地まで連れて行ってくれる。
こんな動きも全てプログラムですね。
プログラムである部分を少し書き出してみます。
①車は(正確には車のコンピュータ)は、車に人が乗車した事を知らなければなりません
②スタートと言うと言葉を検知したら目的地を尋ねなければいけません
③目的地の言葉を聞いたら、その言葉を解析しなければいけません
④解析した言葉から目的地を探し出し、現在位置から目的地まで地図のルートを示さなければいけません
⑤自動運転が始まると、地図通りには知らせるために、方向を変えたり、スピードをコントロールしたり、歩行者を避けたり、信号を検知しながら安全に目的地まで走る制御をしなければなりません。
大きく分けてこのくらいになりますが、しかし、①〜⑤までの各動き、もっともっと細かいプログラムでできていますね。
例えば、地図に目的地までのルートを示すと簡単に書きますが、コンピュータには地図という概念はありません。わかるのは、自分が今いる緯度と経度です。そして目的地も同じく緯度と経度。その目的までの道のりは数字化されたデータと一方通行などの情報。これからある計算を行い道のりを探し出し、画面上に線を引く。という処理になります。
自動運転と簡単に書きますが、エンジンをかける、周囲の物体を確認する、アクセルを踏む、ハンドルを切る、、、など沢山の処理があり、その中の例えば、ハンドルを切るにしても、方向と角度と速度を制御しなくてはいけませんね。
これらの動きを全て動くように、CPUが理解できる命令を組み合わせて作り上げる作業をプログラミングといいます。
命令と文法はコードと呼ばれますので、コードを書くという意味でコーディング、そしてそれを書く人だからコーダーなのですね!
2.プログラミングはどうやって書くのか?
CPU(コンピュータの頭脳)部分がわかるコードを人間がそのまま書く事は不可能です。それは、暗号か宇宙語のようなもので、それをそのまま書ける人は世の中には居ないのではないでしょうか?
そして、CPUのメーカーや種類も沢山あります。
例えば、皆さんが使っているiPhoneかAndroid の携帯….沢山の種類とメーカーがありますね!実はこれはの中に入っているCPUもそれぞれ違う物で、それぞれ違う命令で動きます。
さあ、こんなに凄い種類のしかも人間ではわからないCPUのコードを使って、人はどうやってプログラムを作るのでしょうか?不思議ですね。
実は、プログラミングの世界には、プログラムを書くためルールや言葉を持っています。
人間が理解できないCPUの言葉を、人間がわかる言葉で作れるためのルールと言葉。これをプログラミング言語と呼びます。
プログラミング言語には、C言語、BASIC、FORTRAN、COBOL、JAVA、PYTON、アセンブラ、C++、PHP、、、など沢山の種類があります。
これらそれぞれのプログラミング言語は人間が作り出した、CPUを動かすための人間がわかる言葉で、書く言語にはそれぞれの書き方文法などが用意されています。
プログラマーは、その言葉を使って自動運転などのプログラムを作っていきます。その作業をプログラミングといいます。
3.なぜプログラミング言語は沢山あるのか?
アセンブラができた
コンピュータが開発された当時はプログラミング言語なんてありませんでした。そして直ぐにアセンブラという言語ができました。
アセンブラは人間の言葉に近い単語を並べて細かく細かく制御を作っていくもので、とてもCPUよりだったため、プログラマーは相当大変な作業が必要でした。しかし、それでも、多くの方がこのアセンブラで大変なプログラムを開発されていました。
弊社のクムクムを推薦いただいている、前Googleアメリカ本社副社長の村上さんも、昔アセンブラで大型コンピュータのプログラムを書いていたと当時のお話をお聞きしました。
BASICができた
そのうち、このアセンブラの大変さを克服するために色々な言語が開発され、中でも有名になったのがBASIC です。
BASICはとても人間の言葉に近いために1970年代頃から一気に流行しました。
パソコンも徐々に普及し始め、趣味で自宅でプログラミングを楽しむ人達も増えだし、BASICでのゲームブマログラミングや、雑誌なども増え始めました。
しかし、BASICには一つの大きな欠点がありました。
それは完成したプログラムが遅い!と言う物です。本来のコンピュータの持っている力を出しきれないくらい遅いのです。
これはBASICが動作する方法によるもので、簡単に言うなら、BASICは、作られたプログラムコンピュータが理解できる翻訳プログラムが動いてる上で動くから、いちいち翻訳をしながら動くので遅いというものです。これはインタープリタと呼ばれる方式です。
Cができた
この欠点を補って、本来のコンピュータの持ってパワーでもっと早く動くプログラムを作りたいということで開発されたのがC言語です。
C言語はBASICと同じように、人間がわかりやすい言葉でプログラミングができる上、完成したプログラムを動かしても速いというものです。
遅いと速いは何が違うかというと、先程の自動運転の処理。処理が遅いと、前に人が立っている危険を検知してブレーキを踏むという処理が速いと遅いとではどうなるでしょうか?…..
C言語は作りやすい速いから一気にプログラム言語のトップに立ちました。
しかし、これも一つ欠点があります。
それは、作ったプログラムをBASICほど簡単に確認できないから、開発が少し面倒なのです。
BASICはコンピュータとの間に翻訳プログラムがいるため、遅いが、作って直ぐに動かして動作の確認ができます。時間でいうと、わずか、0.1秒?とにかく瞬時です。
しかしC言語は、作ったプログラムをCPU語に翻訳した新しいプログラムに変換してから動かす(コンパイル)という一手間が要ります。この変化時間が少しかかります。BASICはどんなプログラムでも瞬時ですが、C言語はどんな小さなプログラムでも2-3秒。プログラムが大きくなればなるほど時間がかかります。
そして、もうひとつの欠点は、せっかく変換してくれたプログラムを、さあ!と動かしても、プログラムにミスが一つでもあると動かない!または動いたふりをして、突然動かなくなる。
頑張って頑張って作ったプログラム、待って待って変換されたプログラム、さあ!….動かない!…..めげます。
さらに、ミスのある箇所が動くまではミスが出ないで正しく動いているフリをする。こともあります。
これはかなり重大です。
BASICはミスがひとつでもあると翻訳できないので動いてくれませんが、C言語は、CPU語にコンパイルするときにミスがなければコンピュータ語に変換を完了し動いてしまいます。つまり、動かないプログラムでも、また、めちゃくちゃに動くプログラムでもCPU語に変換してしまいす。
しかし企業は、処理速度が速いC言語をプログラミングの主流にとき始め、仕事もどんどんC言語開発が増えていきました。
こんなこともあり、BASICプログラマーは短期間に沢山増えましたが、C言語になってから、プログラマーになるハードルが高くなりました。このころ、C言語をマスターできずにプログラマーを廃業したBASICプログラマーが世の中に増えました。
その後の動き
BASICからCに移ったように、その後多くの言語が開発されました。そして、それらの言語は、それぞれの目的を持って開発されています。
処理速度はそんなに急がないが、インターネットのプログラムが作りやすい言語や、サーバーの処理をしやすい言語、AIの処理に使いやすい言語など、それぞれの目的に合わせた言語が、PHPやJAVAやPythonなど、、、今もまだ色々な言語が研究されています。
しかしそれらの全ては、C言語を基本に作られています。PHPやPythonも、C言語で作られた部分を通して動いています。だから、C言語を学ぶことは様々な言語の根本を学ぶことになり、C言語を学べば、様々な言語に応用できる基礎と応用力をつけることができるのです。
C言語は、C++やC#という進化した言葉にもなりましたが、元はCで、そしてそれはアセンブラになり、CPU語になります。
言語に左右されないプログラマーを目指す
プログラマーの一番犯してはいけないことは、プログラム言語を特定するとということです。
面接時に「私はプログラマーを希望します」という質問に対して「Pythonが好きでPythonのプログラマーとして頑張りたいです」
という人が増えました。一時前はJAVAでした。
求人する企業側にも問題があります。
“PHPプログラマー募集”などと、言語を指定して募集する企業も多く見受けられます。
これはプログラマーにとってはあまりに中途半端であり、企業側にとっては社員の使い捨てを感じます。
プログラマーというのは言語に左右されず、求めるものに最適な答えを作り上げられるための組み立ての頭と、それに最適な言語を使い、最短で作り上げる!ということが必要です。
流行や趣味に左右されず、しっかりとした根本握った、応用の効くプログラマーでなくては、昔のBASICプログラマーのように、寿命は短くどんどん生きていける時間がなくなります。
最近は技術の進歩も早く、プログラム言語の進化衰退も激しい時代です。一時期流行し、企業でも求人されたRubyもだんだん見られなくなってきました。とにかくこんな時代だからこそというか…..いつの時代にも必要なのは、根本をまずはマスターしたプクラミング学習をすることです。
どうすればいいのか?
目的によって異なりますが、小学生には、まずは物を作るための順序のマスターです。
プログラミングテクニックではなく、道具でも言語でもありません。
作りたい完成品を頭に描いて、それをどう作り上げていくかの順序をマスターする事です。
それが文部科学省の言う「プログラミング的思考」に結び着きます。
小学生には、ものを作る順序をプログラミングを使ってしっかり教えてくれる学習教材が必要です。
専門用語やフローチャートより、まずは手軽にこの順序をしっかりおしえてくれる教材を探して下さい。
小学生以降の人達、一般の方々にも当然小学生と同じように、物を作るための順序は必要ですが、プログラミングをマスターしたいなら、まずはC言語です。そして、それも画面だけでなく、実際の物が動くプロクミングが学びやすいと思います。
もちろん画面だけのプログラミングでも十分ですが、これからの時代は、IoTやAIが主流になります。
サーバー側のデータ処理も面白いですが、根本のC言語を効率よく学ぶのであれば、C言語と組み合わせて、ボードやロボットを制御する方がよりリアルに学習できます。
多くの学習教材が出ています。
自分の目的に適した教材、多くの教材から探し出すのは難しい事ですが、是非しっかり吟味して進めていただければと思います。
ここでも色々な教材をご紹介できる機会を作っていきたいと思います。