山田純一@シンプルワンブログです。
今回はプログラミングの基本の原理について話をしていきます。
20年以上プログラミングにかかわっていますが、この原理は言語がかわっても同じです。
基本を知ってしまうと、1つ目の言語を覚えてしまえば2つ目、3つ目は驚くほど短期間で習得することができます。
プログラミングって難しいと思う方もいるかもしれませんが、基本はここで書く3つのことが繰り返されるだけです。
分厚い本を読む前に、この基本を頭にいれてしまいましょう。
プログラミングの初学者が最初に学ぶこと【基本の3つの構文】
次の3つになります。
・順接(順番に実行)
・選択(条件を判断して分岐)
・反復(同じ処理の繰り返し)
プログラムはこの3つを繰り返すことで、動いているのです。
これは、構造化プログラミングといわれていて、オブジェクト指向プログラミングだと違うのじゃないかという反論もあるかもしれません。ただ、プログラムは今でもこの繰り返しで動いていますので、まずはこの3つを頭に入れてください。
■順接(順番に実行)
単純に、上から順番に動いていくということです。順次とか連接とか人によって違う言葉になっていることがあっても、同じことです。順番に実行されることです。
例えばおもちゃのロボットが歩くことを単純化して考えます(今回は右足から)。
・右足を一歩前に出す。
・右足に体重をのせる。
・左足を一歩前に出す。
・左足に体重をのせる。
真っすぐ歩くだけなら、これで延々と歩き続けられますね。
■選択(条件を判断して分岐)
何かの条件によってやることを変えることです。
ここでは、真っすぐ歩いていたロボットが壁にぶつかったとします。そのまま右足、左足を出し続けようとしてもできませんよね。
ゼンマイ仕掛けの単純なおもちゃのロボットでは、ウィンウィンと音を出しながら、壁の前で足踏みを続けてしまいます。
足を出し続けているだけだから仕方がありません。そこで、ロボットを少しだけ賢くしてあげます。
・もし壁にぶつかったら、回れ右をする。
・右足を一歩前に出す。
・右足に・・・(また繰り返し)
これで、元来た道を引き返すことができます。後方にも壁があったら直線を行ったり来たりするだけですが、以前のように止まってしまうことにはなりません。
■反復(同じ処理の繰り返し)
プログラミングのときにでてくる処理の最後の1つが反復、いわゆる繰返しの処理です。
さっきのロボットをずっと動かしつづけるためには、
・右足を一歩前に出す。
・右足に体重をのせる。
・左足を一歩前に出す。
・左足に体重をのせる。
・もし壁にぶつかったら、回れ右をする。
・右足に体重をのせる。
・左足を一歩前に出す。
・左足に体重をのせる。
・もし壁にぶつかったら、回れ右をする。
(以下・・・略)
以下は略しましたが、歩かせ続けるためには、歩かせる分だけこれを延々と続ける必要があります。これでは歩かせようとすればするほどプログラムは長くなってしまいます。
そこででてきたのが反復(繰り返しです)
・次の処理を繰り返す。
・右足を一歩前に出す。
・右足に体重をのせる。
・左足を一歩前に出す。
・左足に体重をのせる。
・もし壁にぶつかったら、回れ右をする。
・繰返しここまで
これだけで、ロボットは動き続けることができますね。
ロボットをお掃除ロボットだと思えば、あれは歩いているわけではないけど、
・以下繰り返し
・前に進む
・もし障害物があったら、障害物がない方向を向く
・繰り返しここまで
センサーで障害物を察知しているだけですね。これでは終わらないから、一定時間掃除したらとか、家(充電場所)を見つけたら止まるとかいろいろな条件で停止のプログラミングはされていますが、考え方は一緒ですね。
プログラミングは、基本このような処理の流れで動いています。
例えばスマホのゲームアプリも、車についているカーナビも、今世の中は様々なプログラムであふれています。こまかくひもといていくとほとんどがこの3つの構文を延々と繰り返しているものです。
プログラミングの基本を原理原則から身に付けておけば、将来も安泰
僕がプログラミングをはじめたのは最初に書いた通り20年以上前になります。最初の言語はC言語でした。
その後数々の言語を使いました。実際に仕事で好かったものだけでも10を超えてました。
(アセンブラ、COBOL、FORTRAN77、C言語、C++、PASCAL、VisualBasic、Java、Perl、PHP、Python・・・)
言語も細かい方言があったり、単に構文を覚えて動かしてみた程度なら他にも知っている言語があったりするし、言語によって自分の習熟度には違いはありますが、プログラミング言語の基本はみな同じです。
もちろん、今日のはプログラムが動く基本の3つの構造なので、実際にプログラミングをしていくにはほかにも覚えることはありますが、それは別途お伝えしておこうと思います。
はじめての人は、ひとつのプログラミング言語をしっかりと覚えよう
「プログラミング言語は何を覚えればいいですか?」と聞かれることがよくありますが、どの言語でもいいので、まず1つのプログラミング言語をしっかりと習得してしまうことが大切です。原理原則からしっかりと身に付ければ、応用ができます。
ちなみに、この形でのプログラムの開発方法は、先にももちょっとでてきましたが、
【構造化プログラミング(structured programming)】といいます。1969年にE.ダイクストラという学者が論文で発表した方法になります。
実際にプログラミングをする場合、この3つの考え方に加えて、プログラムをいくつかのかたまりに段階的に分割して、使う場所から呼び出す【モジュール化】も重要ですが、そのあたりは今後お伝えします。
1つ目が仕事でつかえるようになるのに数カ月かかったとしても、2つ目以降のプログラミング言語は、人により違いはあっても、ちょっとした構文の違いを対比して覚えるだけなら数日から一週間程度です。
もちろん、仕事で使おうと思うと、プログラムをする環境とかその言語特有の部品や書き方、言語によっては新たな概念もでてくるので、ある程度実践でこなしていく必要はあります。
それでも基本の考え方は一緒です。
いくつかのプログラミング言語の入門書をみても、全体を網羅しておしえているものは
・まずはやってみよう
・条件分岐
・反復
で、やってみようは、
Hello、World!
とコンソール(テキスト)で出力したり、画面に出す。
2+3=5 などの計算をする。
その後、ちゃんと分岐、反復を教えるという流れのものが多かったです。言語によらずみな同じでした。
(C、Java、Python等、言語によらず同じ)
原理原則は一緒だとおもって、繰り返しますが、何か一つの言語をしっかりと覚えるということをやると次にもつながります。
プログラミング入門書の最初が Hello, World! ではじまっている理由
プログラミングの入門書の最初は、多少のアレンジはあるものの、画面表示関数呼び出し("Hello, World!") で、ディスプレイにHello, World! と表示させるものが多いです。
これは、C言語の伝説的名著、C言語のバイブルといわれていた「プログラミング言語C」という書籍から始まったもので、カーニハンとリッチーの共著のため、K&Rといわれて親しまれていました。
というか、今では考えられないことですが、自分が最初にプログラミングを覚えたころは、C言語を学ぼうとしても書店の本棚にはプログラミング言語の日本語の本は、この1冊しかありませんでした。 難しい本なので習得するのに時間はかかりますが、この本しかなかったので、1冊をしっかりやることでプログラミングを身に付けることができたと思っています。
まずは1冊か2冊、しっかと身につけよう
今では、よほどマイナーなプログラミング言語でなければ、何冊も書店にならんでいて迷いますよね。まずは、基本の文法がのっている簡単なものを一冊(とっかかり程度の導入書籍の場合は追加でもう1冊)をしっかりと身に付ければ、どんなプログラミングができるようになります。
自分の考えたものが、プログラミングで思ったように動くのは楽しいものです。将来にもつながる原理原則からひとつずつ階段をのぼっていきましょう。