プログラミングを学ぶとき、誰しもがいちばん最初に思いつく疑問。
プログラムって、なに?
一般的には「一連の手順」などと言われます。ただプログラマーとしては、この説明は本質とは思えない。
プログラミングの立場から、プログラムとは何か?の解釈を新たにしてみます。
「プログラムとは」の一般論
ChatGPTに聞いてみよう
分からないことは、今の時代、ChatGPTに聞くのがてっとり早い。聞いてみましょう。
プログラムとは何か?
プログラムは、コンピュータに対して実行を指示するための一連の命令や手順の集合です。プログラムは、ソフトウェアの基本的な構成要素であり、コンピュータが特定のタスクを実行するための手順を示すものです。
プログラムとは、コンピュータに対する一連の命令や手順の集合。
間違ってはいない。
間違ってはいないけど…
コンピュータに命令する、のは分かったけど…
じゃあプログラムって、いったいなんの役に立つの?
これがピンとこない。プログラムって、いったいなにしてるんだ?
「役に立つ」とはなにか考える
基本に立ち戻り考える。「役に立つ」とはどういうことなのだろう?
役に立つとは「アウトプット」があること
人で考えてみる。「役に立つ人」とはなにか?たぶん、お願いしたことをやってくれる人でしょう。
この資料の内容を、プレゼンシートにまとめて
プレゼンシート作成…
プレゼンシートできました!
これでプレゼンシートを作ってくれたなら、「役に立つ人」でしょう。役に立つとは「アウトプットがある」こと。
「アウトプット」のためには「インプット」が必要
プレゼンシートをつくるときも、依頼した資料の内容を無視されると。困ります。つまりなにかをお願いするときは、お願い内容という「インプット」が必要になります。
役に立つ人=「インプットからアウトプットを創り出せる」人
ここから言えること。「役に立つ」とは、インプットからアウトプットを創り出せることをいう。
「資料内容」というインプットから、その内容を解釈してプレゼンシートを作成する。そしてプレゼンシートというアウトプットを出す。これで「役に立つ」と言えるでしょう。
役に立つプログラムとは?
インプットからアウトプットを創り出すことができれば、「役に立つ」。
同じように、「役に立つプログラム」は、インプットからアウトプットを創り出すことができる。
プログラムにおける「インプット」と「アウトプット」
では、プログラムにおけるインプットとアウトプットとは、なにか?
プログラムにおけるインプットとアウトプットには、以下のようなものがあります。
- ユーザー入力 キーボート操作やマウス操作
- 外部受信 ネットワークでの受信、カメラからの受信
- 他プログラム入力 他プログラムからの起動パラメータ、他プログラムからのメッセージ
- ディスプレイ出力 文字やグラフィックの表示
- サウンド出力 音楽や効果音
- 外部送信 ネットワークへの送信
- 他プログラム出力 他プログラムを起動するパラメータ、他プログラムへのメッセージ
ユーザー入力、ディスプレイ出力、あたりは分かりやすい。実際に目に見えるもの。
外部受信や外部送信も、イメージはしやすい。いまどきのプログラムはインターネットで通信しながら動いている。
他プログラム入力/出力は、ちょっとイメージしにくいかも。
プログラムは、他のプログラムと協調して動いていることが多い。そのプログラム間でやり取りするデータも、インプットでありアウトプットである、ということ。
ゲームプログラムの例
例えば、マルチプレイヤーの対戦ゲームのプログラムだとしたら、インプットとアウトプットは以下の通り。
インプット
- ユーザー入力 コントローラ操作
- 外部受信 インターネットから受信する他キャラクター動作
- 他プログラム入力 ゲーム本体プログラムからの入力(例えば本体でのスリープ操作など)
アウトプット
- ディスプレイ表示 自キャラクターや他キャラクター、フィールドなどの表示
- 外部送信 自キャラクタの動作をインターネットで送信
- 他プログラム出力 操作状態をゲーム本体プログラムに通知
ゲームプログラムは、インプットに対し、何かしらの処理を行い、アウトプットを創り出している。ということになる。
プログラムとは「インプットからアウトプットに変換する手順」
冒頭で、プログラムとはコンピュータに対する一連の命令や手順の集合のこと。と述べました。いままでの話から、もう少し補足しましょう。
コンピュータに対し「インプットからアウトプットを創り出すための命令や手順」一連を示したもの。
そしてその手順を、プログラミング言語を使ってコンピュータに示すわけです。
プログラムの設計とはすなわち、なにをインプットするとなにをアウトプットするか、を考えること。これが重要です。
プログラム設計については、以下も参考にしてください。
手順が複雑なら構造化で分解:【カレー作りで学ぶ】構造化プログラミング~3つの要素ですべてを作る
インプットとアウトプットのルール:契約による設計~あなたのモジュールが守るべき約束
コメント