現在では、プログラム (=ソフトウェア) がコンピュータの用途を決める。
コンピュータ・プログラムは「手続き」とも言われる。 実行する順序がとても重要。
これらの順序が違ったらうまくいかない。
abc.exeabc」の部分を「123」に書き換えてみる。
abc」の部分を「hello world」に書き換えてみる。
ふつうは、こんな 16進数を直接書いたりすることはない。 「プログラミング言語」というものを使って書く。
現在、こうした機能の多くはオペレーティングシステム (OS) と 呼ばれるプログラムが提供している。 たとえば、「画面に文字を表示する」という OS の機能を使えば、 文字の構造や、ディスプレイの種類などは考えなくてもよい。 プログラムを作るさいには、OSの機能の使い方も学ばなければならない。 しかし使っている OS が変わると作成したプログラムを変更しなければならないことが多い。
プログラムの作成のことを 「プログラミング」あるいは「ソフトウェア開発」という。
普通これには文書作成ソフト (例. メモ帳) を使う。
変換のためには、特別なソフトウェアが必要である。
コンピュータがプログラムを実行するには、 おもに2つの方式がある。プログラムの作成はそれによって変わってくる。 どちらも「命令を解釈して実行する」という部分は変わらない。
演算装置が直接 0 と 1 を解釈する。
通常インタプリタ、仮想マシン (VM) あるいはエミュレータなどと呼ばれる ソフトウェアがプログラミング言語を解釈する。 このソフトウェア (プログラム) そのものは ハードウェアの演算装置によって解釈される。
実行方式と用途によって、プログラミング言語を使いわける。 どの言語も、基本的には命令の列を記述するためのものである。
#include <stdio.h>
int main(int argc, char* argv[])
{
char s[100];
int i;
for (i = 0; i < 10; i++) {
s[i] = '*';
s[i+1] = 0;
printf("%s\n", s);
}
}
public class Program {
public static void main(String[] args) {
String s = "";
for (int i = 0; i < 10; i++) {
s += "*";
System.out.println(s);
}
}
}
ほかにも何百という言語がある。
ブラウザで F12 キーを押し、以下の行を入力する。
var s = ""; for (var i = 0; i < 10; i++) { s += "*"; console.log(s); }
「プログラムを作るためには数学が得意でなければならない」 - ある程度は真実。 ただし、計算が得意である必要はない。
例1: n 個の * をつなげて三角形を表示する。 この三角形を右寄せにするためには、何個の空白をつければよいか?
* ** *** **** ***** | → |
*
**
***
****
*****
|
例2: 幅w1ピクセル × 高さh1ピクセルの 縦長の画像がある。これを、 幅w2ピクセル × 高さh2ピクセルの 横長のウィンドウにフィットするように表示したい。 横幅は何ピクセルに縮小すればよいか?
基本的に、コンピュータは「あたりまえ」のこと、 つまり普通の常識で理解できることしかしない。 ただし、あまりにも大量の処理を高速にやるので、 常識からはかけ離れたことをしているように見える。
あらゆる手品には仕掛けが存在する。仕掛けがわかってしまえば 「なあーんだ」となる。ある意味で、プログラミングは手品に似ている。
→ 悪事を働くプログラムも沢山ある。
→ 「プログラムはあなたの意図したとおりには動かないが、 あなたの書いたとおりに動く」
→ GIGO (Garbage In, Garbage Out)
複雑すぎて書いた本人もよくわかっていないことがありうる。
どれも根本的な解決ではない。
このように、プログラマは「他人にわかりやすく伝える」ことが重要な職業であるので、 実際には数学的なものの考え方や技術的知識だけでは不十分である。 とくに大きなプロジェクトになればなるほど、国語力や 他人に連絡・報告したり議論したりする社会的スキルが重要になる。