第4回 - プログラムを作るとはどういうことか

0. コンピュータ・プログラムとは

復習

現在では、プログラム (=ソフトウェア) がコンピュータの用途を決める。

「手続き」の考え方

コンピュータ・プログラムは「手続き」とも言われる。 実行する順序がとても重要。

例: カレーの作り方

  1. 肉・野菜を炒める。
  2. 水を入れる。
  3. ルウを入れる。
  4. 火を止める。

例: 自動販売機

  1. お金を入れる。
  2. 商品を購入する。
  3. おつりを出す。
  4. 1. に戻る。

これらの順序が違ったらうまくいかない。

1. プログラムはどうやって実行されるか

Windows 用のプログラム abc.exe

ふつうは、こんな 16進数を直接書いたりすることはない。 「プログラミング言語」というものを使って書く。

内部の動き

現在、こうした機能の多くはオペレーティングシステム (OS) と 呼ばれるプログラムが提供している。 たとえば、「画面に文字を表示する」という OS の機能を使えば、 文字の構造や、ディスプレイの種類などは考えなくてもよい。 プログラムを作るさいには、OSの機能の使い方も学ばなければならない。 しかし使っている OS が変わると作成したプログラムを変更しなければならないことが多い。

2. プログラムはどうやって作成するか

プログラムの作成のことを 「プログラミング」あるいは「ソフトウェア開発」という。

ソフトウェア開発の手順

  1. 作りたいものと実現方法を決める。
  2. 実際のプログラム (文書) を書く。

    普通これには文書作成ソフト (例. メモ帳) を使う。

  3. 0と1の列に変換して実行する (あるいは、変換せずに実行する)。

    変換のためには、特別なソフトウェアが必要である。

  4. 動かなかったら 2. に戻る。

インタプリタとコンパイラ、仮想マシン(VM)

コンピュータがプログラムを実行するには、 おもに2つの方式がある。プログラムの作成はそれによって変わってくる。 どちらも「命令を解釈して実行する」という部分は変わらない。

方式1. ハードウェアによる実行 (ネイティブ)

演算装置が直接 0 と 1 を解釈する。

プログラム 命令 ... 演算装置

方式2. ソフトウェアによる実行 (インタプリタ、仮想マシンあるいはエミュレータ)

通常インタプリタ、仮想マシン (VM) あるいはエミュレータなどと呼ばれる ソフトウェアがプログラミング言語を解釈する。 このソフトウェア (プログラム) そのものは ハードウェアの演算装置によって解釈される。

プログラム 命令 ... 架空の 演算装置 (プログラム) 演算装置

プログラミング言語

実行方式と用途によって、プログラミング言語を使いわける。 どの言語も、基本的には命令の列を記述するためのものである。

ネイティブで実行される言語

インタプリタ/VMが解釈する言語

ほかにも何百という言語がある。

最初のプログラム (Javascript)

ブラウザで F12 キーを押し、以下の行を入力する。

var s = ""; for (var i = 0; i < 10; i++) { s += "*"; console.log(s); }

プログラミングと数学

「プログラムを作るためには数学が得意でなければならない」 - ある程度は真実。 ただし、計算が得意である必要はない。

例1: n 個の * をつなげて三角形を表示する。 この三角形を右寄せにするためには、何個の空白をつければよいか?

*    
**   
***  
**** 
*****
    *
   **
  ***
 ****
*****

例2:w1ピクセル × 高さh1ピクセルの 縦長の画像がある。これを、 幅w2ピクセル × 高さh2ピクセルの 横長のウィンドウにフィットするように表示したい。 横幅は何ピクセルに縮小すればよいか?

3. プログラミングと常識

基本的に、コンピュータは「あたりまえ」のこと、 つまり普通の常識で理解できることしかしない。 ただし、あまりにも大量の処理を高速にやるので、 常識からはかけ離れたことをしているように見える。

常識から離れたようにみえる処理

あらゆる手品には仕掛けが存在する。仕掛けがわかってしまえば 「なあーんだ」となる。ある意味で、プログラミングは手品に似ている。

機械は万能ではない

4. プログラミングで大変なこと

やりたいことを決定するのが大変

やりたいことを他人に伝えるのが大変

正しい動きを保証するのが大変

機能を修正する・追加するのが大変

ソフトウェア開発を支援する技術

どれも根本的な解決ではない。

5. 職業プログラマに必要とされるもの

このように、プログラマは「他人にわかりやすく伝える」ことが重要な職業であるので、 実際には数学的なものの考え方や技術的知識だけでは不十分である。 とくに大きなプロジェクトになればなるほど、国語力や 他人に連絡・報告したり議論したりする社会的スキルが重要になる。


Copyright (c) 2015 Yusuke Shinyama