= プログラミングって何? =
== 何このページ ==
* このページではプログラミングを学ぶ上で最低限知っておきたい「プログラム」についての知識についてつらつらと紹介します。
== プログラムとはなにか ==
プログラムという言葉についてみなさんは多少なりイメージを持っていると思います。しかし、具体的にプログラムとはなんなのかを知っている人はそれほど多くないかもしれません。プログラムとは一体何者なのでしょうか。<
>
私たちはコンピュータを日常的に利用しています(MMA的には計算機と呼んだほうがいいかもしれません)。パソコンは立派なコンピュータの一種ですし、今流行っているスマホなんかもコンピュータです。意外に思われるかもしれませんが、テレビにもコンピュータは入っているし、炊飯器やエアコンにもコンピュータは入っています。<
><
>
分かりやすくするためにエアコンを考えましょう。エアコンに入っているコンピュータは何をしているのでしょうか。エアコンにはリモコンを使って指示を与えることができます。「冷房にしろ」とか「設定温度を24度にしろ」とか「6時間後にオフになるようにして」とか様々です。リモコンから与えられた指示はエアコン内のコンピュータに渡されます。エアコン内のコンピュータはこの指示をもとに処理をして、その指示を実現します。<
>
例えば「冷房にして」という指示を受け取ると、コンピュータはその指示をもとに様々な処理を行ってエアコンの各部を制御します。その結果エアコン全体が冷房運転するようになるわけです。他の設定温度を変えたりおやすみタイマーを設定したりといった機能もこうして実現されています。<
>
分かりやすく書くと下のような感じになります。<
><
>
'''指示→コンピュータ→結果'''<
><
>
指示というのは例えば「冷房にしろ」などといったものです。こういった指示はコンピュータに「入っていく」ものなので、'''入力'''と呼ばれます。普段エアコンにリモコンを使って行っているのは入力なわけです。入力はコンピュータに入って行くものすべてを指します。リモコンからの入力以外にもエアコンには入力が存在します。それは「周りの空気の温度」という情報です。これはエアコンにつけられているセンサーからエアコン内のコンピュータに「入っていく」もので、この情報をもとにエアコンは温度を調整します。これも立派な入力です。<
><
>
逆にコンピュータから出てくるものを'''出力'''といいます。エアコンの場合冷たい空気は出力の一種でしょう。パソコンに話を変えれば、ディスプレイに表示されている物、スピーカーから出てくる音、これらは出力と言えます。<
><
>
入力、出力という言葉を使って先程の流れを言い直すと以下の感じになります。<
><
>
'''入力→コンピュータ→出力'''<
><
>
つまりものすごく大雑把にいってしまえば、「コンピュータは入力を受け取ってそれを処理し出力を出すものだ」と言ってしまえるわけです。この表現は大雑把ですが、コンピュータの本質をすごく捉えています。<
><
>
今まで書いてきたことから考えると、コンピュータは入力を処理し出力を出すことが仕事だと言えます。しかし、コンピュータはそれ自身はただの電気回路に過ぎないのでただ入力を与えても何も処理をすることはできません。コンピュータには入力をどのように処理すれば良いのかを教える必要があるわけです。<
>
この処理の方法について記述したものを'''プログラム'''といいます。そしてそのプログラムを作ることを'''プログラミング'''というわけです。コンピュータはここ最近急激に処理能力が向上しましたが、それでもプログラムがないと処理をすることはできません。プログラムとデータがあってはじめてコンピュータは仕事できるわけです(コンピュータが処理する対象となる情報のことを'''データ'''といいます。入力も立派なデータです)。
== プログラムの作り方 ==
ではプログラムはどのようにして作られるのでしょう。<
><
>
コンピュータの演算装置はたしかにここ最近急激に性能が上がりましたが、それでもやってることは昔とそれほどかわりがあるわけではありません。何が言いたいのかというと、'''コンピュータは数字しか扱えません'''<
>
最近のコンピュータは文字や画像や動画や音声など多様な形式のデータを扱ってるように見えますが、内部的にはどれも数字として扱われています。コンピュータは数字しか扱えないというのは曲げられない現実なので、それに合わせてコンピュータで扱いたいものは数字に変換してやる必要があるのです。<
><
>
プログラムもコンピュータが扱うものなので、この例外ではありません。やっぱり数字であらわしてやる必要があるのです。厳密に言えば、コンピュータが扱える数字はいわゆる2進数です。つまり0と1だけです。だからプログラムも0と1だけで書いてあげる必要があります。実際私たちが普段使っているプログラムは全部(パソコンのものもエアコンなんかで動いてるものも)0と1だけで記述されています。こういったものを機械のために書かれた言葉という意味で'''機械語'''といいます。<
><
>
しかし、機械語はなにぶん0と1だけなので人間が扱うのは至難の業です。というか多分無理です。これではプログラムを作るのはとんでもない苦行になってしまいます。そこで0と1の並びを適当な英単語(addとかjalとか)に置き換えて、もう少し人間にとって分かりやすくしたモノが開発されました。こういったものを'''アセンブリ言語'''といいます。アセンブリ言語で書かれたプログラムはそのままではコンピュータが理解出来ないので、'''アセンブラ'''というプログラムを使って機械語に直して使います。機械語に直すという一手間はかかりますが、それでも人間にとってはこっちのほうが使いやすいのです(このあたりの話はI科だと2年の「計算機通論」で勉強できます。J科は知らん)。<
><
>
しかしアセンブリ言語でもあまりに巨大なプログラム(OSとか)を書くには、やっぱり不便でした。「こういう処理をもっと楽にかければいいのに……」と考えた人たちが複雑な処理を人間にとって分かりやすい方法で記述し、それをあとで機械語に翻訳するという方法を取るようになりました。こうして生まれたのが'''プログラミング言語'''です。プログラミング言語というのはアセンブリ言語よりもさらに複雑な処理をさらに人間にとって分かりやすくかけるように定められたルールです。「こういう処理をしたいときはこう書く」というルールを予め決めておくわけです。そうして書いたプログラムは'''コンパイラ'''というプログラムを使って機械語に翻訳されます。コンパイラは書かれたプログラムをプログラミング言語のルールに従って解読し、対応する機械語に翻訳していきます。こうして人間にとって分かりやすい方法でプログラムを書いて、かつそれをコンピュータに実行させるということが可能になりました。<
><
>
これまでの流れを矢印を使って表すとこうなります。<
><
>
'''プログラミング言語で書いたプログラム→コンパイラ→コンピュータが実行出来るプログラム'''<
><
>
プログラミング言語で書いたプログラムは、ふつうファイルの形で保存しておきます。このファイルのことを'''ソースファイル'''といいます。よく「ソース」と略します。ソースをコンパイラに入力すると、コンパイラは必要な処理を行ってコンピュータが実行出来るプログラムを作ってくれます。コンパイラが具体的に何をしているかについてはここでは書かないことにします(--(つまり、誰か書いてくれ)--)。
== プログラミング言語の種類 ==
プログラミング言語にはいろんな種類があります。毎年馬鹿みたいな数生まれては消えていきます。ただやっぱりそのなかでもある程度普及している言語というのはあります。それを覚えておくと何かとプログラミングを勉強していく上で役立つでしょう。MMAで良く名前を聞く言語を挙げておくとこんな感じです。
* C
* C++
* C#
* Perl
* Ruby
* Haskell
* Scheme
* Java
* PHP
* VisualBasic
* R
* Erlang
* Brainf*ck
* LISP
* Objective-C
全部を勉強しようと思うと多分死ぬし、初めてプログラミングを学ぶ人にはきつい言語もあるので、とりあえずFPでは一番オーソドックスな'''C'''を勉強することにしているようです。<
>
Cはそれはそれは大昔からある言語ですが、今主流の言語はだいたいCをベースとしていることもあり、今でも根強い影響を残している言語です。そのためCを勉強しておけば他の言語を勉強するときにも理解が進みやすいという利点があります。ただCにはポインタなどちょっと理解しにくい概念があるので、そこで躓くひとが多いようです。<
><
>
FPはよく「地雷」と言われている科目ですが、きちんと理解して演習をやっていれば単位は取れる科目です。概念さえ理解すればあとは問題をこなすうちに勝手に身についていきます。まずはCでプログラムを書いてみることが大事だと思います。特に(新)J科の人はここできちんと基礎を固めておくと後で楽になります。