プログラミングについて簡単に解説|イメージが大事
皆さんこんにちは。
あなたは、プログラミングについてどのようなイメージを持っているでしょうか?今回の記事では、プログラミングの基本的な構造について紹介していきます。
近年プログラミングブームが巻き起こっていますね。多くの人が、プログラミングに関心を持ち始めており、その技術を身に着けるひとが増えてきています。今や、プログラミングは必須なものとなりました。
今の時代プログラミングを学んでおいて損はありません。むしろ得ばかりです。そこで今回の記事では、プログラミングを全くやったことがない人に向けて、プログラミングの概要について説明していこうと思います。
この記事が対象としている人
- プログラミングを全くしたことがない人
- 少しだけプログラミングについて知ってみたい人
- 自分に武器が欲しい人
プログラミングとは?
そもそも、プログラミングとは何でしょうか?すでにわかってるよという方は読み飛ばしていただいてOKです。
結論を言いますと、プログラミングは、コンピュータにやってほしいことを指示することといえます。
プログラミングが日常的に使用されるようになる前から、機械による生産や制御の仕組みはありました。近代になってからイギリスで紡績の効率を上げる機械が発明されたことが始まりです。
その後、機械は様々な分野にも発展していき、電気回路などを用いてさらに効率化されました。電子回路を用いることで、作業の自動化をすることもできました。
しかし、電気回路と機械の組み合わせだけでは大きな欠点があったのです。それは、仕様の変更が柔軟にできないということです。
例えば、自動販売機も昔は電子回路だけで実現されていたようです。しかし、この自販機では偽硬貨を使われることがあり、新しいタイプの偽通貨が登場するたびに自販機の回路を変える必要がありました。
回路だけで作られていた機械の仕様を変えるには、また一からすべて設計しなおす必要があったといいます。
この手間は大変なもので、偽もののコインが出るたびにコストがかかる作業を強いられていました。そこで出てくるのがプログラミングです。
プログラミングを自動販売機に組み込む技術ができたことにより、回路だけで作るよりもはるかに効率よく、さらに低コストで新しい偽硬貨に対応した自販機を実現できるようになりました。
回路の時は、物理的に一から作り直しますが、プログラムの場合は、プログラムのほうを書き換えればそれで済む話なのです。
プログラミングはゲーム開発やソフトの開発にも用いられています。プログラムを自由に書くことができ、柔軟な結果を作ることができるからです。もはや、ゲームなどは、回路だけでは実現不可能でしょう。(ちなみに、プログラミングも回路がないとできません。持ちつ持たれつなのです。)
言語によって特徴が異なる
プログラミングがどういったものなのか、概要をつかむことができたところで、ひとつ、前提を言っておこうと思います。それは、一口にプログラミングといっても、用いる言語によって向き不向きがあるということです。
ここではてなが二つ出てきます。
1つ目:言語?プログラミングって英語とかフランス語みたいに言語があるの?
2つ目:向きと不向き?どれもできることは同じじゃないの?
まず一つ目の言語についてですが、初代(に近い)プログラミング言語のC言語を始め、Java、Python,HTMLなど、それぞれ毛並みの異なる言語があります。さすがに、記述する際はどの言語もアルファベットでの記述で統一されていますが(日本語でプログラムを書くことは基本的にできません。でも一部例外あり)、形式が大きく異なるもの同士もあります。
例えば、webサイトを構築する際に使われる言語であるHTMLでは、
<p>ここに文章</p>
↑このようなタグと呼ばれるものを用いて、その中に文章を書くことで、それがwebに表示されるようになります。
一方、C言語などでは、メッセージを表示するとき、
printf(“ここに文章\n");
というような書き方をします。
わかりづらかったらもうしわけないのですが、この例でも、言語によってかなり差があるということがお分かりいただけると思います。
また、二つ目に言語によって向き不向きがあるといいましたが、例えば先ほどの例のHTMLはwebサイトを構築するときに用いる言語でありサイトを作ることに向いています。C言語でいえば、windowsなどのOSを構築することに向いているといえます。
このように、それぞれの言語が作られた背景には、何かしら作りたいものにマッチするようにフォーカスされているという事情があるのです。
ですから、おそらくこの記事を読んでいる皆さんは、これからプログラミングについて詳しく学んでいこうと思っている人が多いでしょうが、言語を学ぶ際に、自分が作ろうとしているもの(アプリやソフト)に適した言語を選ぶ必要があります。
だって、アプリつくりたいのにHTMLを始めたらいつの間にかwebサイトができちゃいますもんね(アプリが作りたかったのに…!)。
おそらく、ほとんどの人がアプリを作りたいと思っていると思いますので、まずは、Javaあたりから始めるとよいと思います。本屋さんでは、最近かなりわかりやすいJavaの教本(その他の言語ももちろんあります)がたくさん出てきているので、まずは、入門書の購入からスタートしてみましょう。
プログラミングで必要な基本機能について
まず、プログラミングを学ぶ前に知っておいてもらいたいことがあります。それは、プログラミングをするうえで必要な基本的な機能のことです。その機能は二つあります。
一つが入力機能で、もう一つが出力機能です。
まず、コンピュータは様々な回路や部品が積まれていますが、だれにも使用されなかった場合、ただの箱になってしまいます。まあ、結構当たり前な話ですね。そして、コンピュータを使用してもらうためには、入力機能と出力機能が最低限必要です。
入力機能はコンピュータがどういった処理をすればいいか、指示するためにあり、出力機能は処理した結果をコンピュータから外へ出すためにあります。利用者は出力された結果をもとに、次の指示を行います。
つまり、入出力機能はコンピュータと利用者をつなぐ架け橋のようなものなのです。よって、この機能がないと、コンピュータを使用したくても使用できず、ただの箱と化してしまうのです。
このことから、プログラミングをする際は、入力と出力が必須であるとわかると思います。これを覚えておきましょう。
どの言語にも共通する考え方
ここからの話は初心者の方には少し難しいかと思います。しかし、今回の記事を読んだだけで挫折してしまってはもったいないです。できるようになるためにはあきらめないことが必要で、逆に言えば、あきらめなければ必ずできるようになります。
最初からできる人なんてほぼいないのですから、今わからなくても割り切って、これからできるようになればいいんだという気持ちで付き合っていきましょう。
プログラミングにはどの言語にも共通する考え方というのがあります。もちろん、プログラミングは言語の特色に合わせた考え方をすることが必要なのですが、それでも、ほぼすべての言語で共通する、いわば基礎的な考え方があるのです。
では、その考え方を言いますと、「順次」「条件分岐」「繰り返し」です。言葉だけ聞いてもピンとこないと思いますので、一つ一つ説明していきます。
順次とは
まず、「順次」についてですが、これについては特に特徴はありません。しかし、この考え方が前提として頭に入っていないと、そもそもプログラムを組むことができないでしょう。「順次」とは、読んで字のごとく、順番に次の処理を実行していくという意味です。わかりやすく言えば、原則としてプログラムは上から下(↓)へ順番に実行されていくよっていう感じです。
すべてのプログラムはこの「順次」という考え方に沿って作られていきます。先ほどのC言語の例で示した
printf(“ここに文章\n");
という処理も「順次」実行されていきます。
しかし、この考え方では、まだ何か物足りないと思いませんか?例えば、自販機の例を出しますと、
「お金を入れる」→「ボタンを押す」→「飲み物が出る」
という順次処理があります(かなり大雑把に示しましたが)。
ではどうやって「お金を入れた後にボタンが押せるようになる」のでしょうか?お金を入れたことが感知された後に、何かしらの処理が行われなければボタンが押されるようにはならないように思います。このような、その場その場で対応する処理というのは、「順次」だけではどうしても担いきれません。
条件分岐とは
そこで登場するのが、「条件分岐」という考え方です。言葉の区切りで意味を見ていきますと、”条件”によって”分岐”させるという意味です。自販機の処理でいくと、お金を入れた時に限り、ボタンが押せるようになる、という処理を実現していることになります。
これを用いれば、「ボタンを押したときに、お金が十分入れられていれば飲み物を出す」という処理も実現可能になります。条件分岐を用いることで、より柔軟性に富んだプログラムが書けるようになるのです。
実際のプログラムを例に出してみますと、if文やswitch文がこの条件分岐の処理に該当します。
if文は、下のように書きます。()の中の条件が満たされたとき、中の処理が実行されるようになっています。これ以外にもいろいろ書き方があるのですが、代表的なものとして紹介します。
if(条件)
{
処理1;
}
else if(条件)
{
処理2;
}
else
{
その他の処理 ;
}
この、条件の部分に入るものは、自販機でいうと、「お金が入れられたか」という条件が入ります。そして、処理の部分には「ボタンを押せるように許可する」といったような処理が入ります。
else ifという文を追加することにより、「もし、上の条件に当てはまらなくとも、ここの条件に当てはまれば、この中の処理を実行する」というように書けます。さらに当てはまらなかった場合、elseをもちいることで、その他の処理を実現することができます。
このelse ifと、elseは、柔軟性をより高めることができますが、書いても書かなくてもどちらでもよいものとなっています。ですから、場合によって使い分けろということです。
switch文の場合は、下記のとおりです。
switch(数値)
{
case 1:
処理1;
break;
case 2:
処理2;
break;
default:
その他の処理;
break;
}
上のほうの()の中に、数値と書いてありますが、その通りこの中には条件ではなく数値を入れます。そして、{}のなかでは”case 1:”などと書かれてありますが、()の中に入れられた数値とcaseの横に書かれている数値が同じだった場合、そのcaseの下に続く処理を実行していくというものになっています。
例えば、()の中の数値が1に該当するものだった場合、case 1:の処理が実行されることになります。該当するcaseがなかった場合、default:の処理に飛びます。break;は、そこで処理を打ち切るという処理になります。この文がなかった場合、そのまま下のcaseの処理が実行されていきます。
また、()の中には数値を書くといいましたが、実際には、そのまま具体的な数字を書くわけではありません。簡単な話なのですが、あらかじめ数値を決めてしまっては、毎回同じ処理になってしまいますので、柔軟性がまったくなくなってしまうからです。
ですので、()の中には通常、変数と呼ばれるものを入れます。これから学習していけばわかるようになると思いますが、プログラミングでは、データを保持するのに変数という考え方が必須です。変数というのは、値を持っておくことができる箱と考えていてください。
この変数は、処理によっては内容を変えることができます。つまり、場合によって中身を変えることができるのです。この変数を用いて()の中に指定すれば、処理に柔軟性が出てきます。
逆に、1や2のように、あらかじめ決まった値は変数の逆で、定数と呼ばれています。
ここまでが条件分岐の概要でした。
繰り返しとは
上記の例の中で、例えば、自販機に1000円札が入れられたときはどうでしょうか?たとえ150円のジュースのボタンを押してもまだ買うことができますよね。この時、自販機の中では、まだお金が入っているから処理を続けるという判断が下されています。
この時、ボタンを押した後でもまたボタンを押せる状態になりますよね。これは、処理が繰り返されているという風にとらえることができます。この考え方が「繰り返し」となります。
実際のプログラミングでは、for文やwhile文が該当します。
for文は、
for(初期値;条件;増分)
{
繰り返したい処理
}
という構造になっています。
初期値の部分には変数の中に数値を設定し、条件には、その変数の値がどこまで増えてほしいか(減ってほしいか)を設定し、増分はその変数の値をどのくらいのペースで増やしていくかを設定します。
ちょっとわかりずらくなりましたね笑。僕の中のイメージでは、
- 初期値 → スタート位置を決める
- 条件 → ゴール位置を決める
- 増分 → 進む速さを決める
という風に考えています。例えば、初期値に i=1; 条件に i<=5; 増分に i=i+1 と設定したとします。この場合、iという変数は、1から5まで、1ずつ進んでいくことになります。このとき、1ずつ進んでいって、全部で5回かけてゴールしていますよね、この5回分、forの中の処理が繰り返されるようになっているのです。
条件の部分では、iという変数の値が条件を満たさなくなったときに処理をやめさせるという役割を持っています。 i<=5 では、iが5までの間は処理を続けるけど、iが6を超えた瞬間処理をやめるよという意味になるのです。
そして、iという変数を用いていますが、実はこの変数は、処理の中で使うことができます。
例えば処理の内容を
printf(“%d",i*2);
という風にしてやれば、2,4,6,8,10 という順番で出力されます(%dにi*2が代入されて表示される感じです)。
while文は、
while(条件)
{
繰り返したい処理
}
という風に書きます。()の中に条件と書いてありますが、ここの条件の部分が満たされているとき(trueの時)は、処理をいくらでも繰り返します。しかし、処理中に条件を満たさなくなるような処理が行われると、次からの処理は行われなくなります。
具体的に言いますと、例えば、()の中に、 i!=0 (iが0と等しくないときという意味) と書かれていた時、i=5だったとします。この場合、iは0ではないので、中の処理が実行されますね。そして、その中の処理が i=i-1; という処理だったとします。処理が繰り返されるたびにiの値が1ずつ減っていくという処理です。
すると、最初のうちは、i!=0を満たしたままですが、処理が繰り返されるうちにiの値は確実に0へ近づいていき、いずれ i==0(iは0と等しいという意味) になります。その時、i!=0という条件を満たさなくなりますので、繰り返しの処理が終了します。
ここで一つ、while文を使う際に気を付けてほしいことがあります。それは、無限ループに陥らないように処理の内容を考えるということです。
先ほどの例で行きますと、i!=0の間処理が繰り返されますが、処理の中でi=i-1;をしていなかった場合、いつまでたってもi!=0が満たされたまま処理が繰り返し続けられますので、無限ループに陥ってしまいます。プログラミングを始めたばかりの人は必ずと言っていいほどここでつまづききます。
繰り返し処理のこともある程度理解していただけたと思います。
ライブラリについて
ここまでくれば、簡単なプログラミングはできるようになっています。といってもまあ、様々なコードをたくさん書かないと、なかなか身についていかないのがプログラミングではあるのですが・・・。
それはともかく、これまで学んできた文だけでは、なんだか機能として物足りないとは感じませんでしたか?プログラムをたくさん書いていくと、こういう時にこういう機能がすぐ使えたら便利なのになー、と思うようなことがしばしば出てきます。
if文やfor文はあくまで基本的な機能であり、実際はもっと応用された機能を使わなくてはならない局面は少なからずあります。そんな時利用するとよいものが、ライブラリというものになります。ライブラリというだけに、様々な機能が格納されています。
たとえば、C言語の場合、ANSI C89という標準規格によって、stdio.hやmath.hというライブラリが定められています。stdio.hを用いなければ、入出力はできませんし、math.hを用いれば、複雑な数学の計算を、利用者は何も考えずに、数だけ指定すれば計算してくれるようになります(意外とmath.hは使い道あるよ)。
ライブラリは言語によってそれぞれちがいますが、使い分けることでとても便利です。何かしら実現したい機能がある場合は、まずはライブラリの機能を調べてみるとよいかもしれません。ネットでその言語のライブラリについて検索すると(例えば 「C言語 ライブラリ」 という感じで)詳しい情報が多く乗っていますので、使用するときはネットを活用するとよさそうです。
最後に
今回は、プログラミングの基礎中の基礎を解説していきました。初めての方にとっては、少し難しく感じられる部分もあったかもしれません。しかし、ここであきらめてはもったいないです。プログラミングはこれから活用していくことが求められてくるからです。
まずは、入門書を買い、ある程度知識を積んだところで、次にネットの情報をあさりながらアプリやゲームを作ってみるとよいでしょう。そうすることで、もっとプログラミングの魅力に気づけると思います。
今回の記事が、これからプログラミングを始める人の参考になり、プロへと成長していくための踏み台の一部になってくれたら光栄です。
物は試しです。とにかくコードを書きまくりましょう。