パソコン>基礎の基礎>プログラムの「ろ」

 「プログラム」とひと括りに言っても、実際には多種多様のものがあります。
 大別すると、
   1. 機械を自動的に動かすためのもの。(=制御系)
   2. パソコン単体で完結する、ワープロや表計算ソフトなど。(=デスクトップ系)
   3. パソコン単体で完結するゲーム。(=ゲーム系)
   4. パソコンのハードウェア上でアプリケーションソフトが動作できるようにしたり、
     ハードウェアそのものを管理したりするOS。(=オペレーションシステム)
    パソコンにもいろいろなモノがくっ付いていて、キーボードで入力したり、
    モニタに映したりするのもOSの仕事です。
 そうです、プログラムと一括りに言ってもプログラムが実現する機能には多種多様な
モノがあるのです。

 それぞれをもう少し解説しますと、

  1. 制御系
     最近ちょっと流行ってるロボットなどがこのカテゴリに入ります。 また、工場内で稼働している各種の工作機械や搬送装置なども制御系と言われますが、これらを動かしているソフトは多くの場合シーケンサと呼ばれる制御系に特化したコンピュータ上で動いています。 パソコンと異なるのは、アナログ入出力/デジタル入出力などの外部のモータやアクチュエータを制御するのに便利なインターフェースが充実していたり、温度や湿度、塵埃などの悪い環境にも耐えうるような設計になっていたりします。

  2. デスクトップ系
     外部機器を制御する必要のない、表計算ソフトやワープロソフトなどを言います。 例外的にプリンタに出力したりしますが、プリンタの制御自体は後術のOSがやってくれますので、ワープロソフトなどが独自にプリンタを制御するソフトを書くことはありません。

  3. ゲーム系
     文字通り、ゲームですが結局やってることはキーボードやマウスの入力、画面とオーディオの出力しかありません。 ゲームに関してはそのアイディアがモノを言うのでグラフィックが綺麗とか3Dゴリゴリみたいな要素はありますが、これらの多くはパソコンの性能がカバーしてくれます。 本来ゲームソフトの真骨頂はそのアルゴリズムで、一時期オセロの必勝法を探るアルゴリズムの考案に世界が熱くなりましたが、世界最強の人間に勝つようになってからオセロ熱は減衰し、概ね21世紀を迎える頃には有力ソフトの開発が終了するなどしましたが、一部のマニアの間では最強アルゴリズムの探索が続いているようです。 オセロは将棋や囲碁と違い、始めたら必ず60手以内に終了するという終点の見えるルールが必勝アルゴリズムが見いだしやすいのではないかという錯覚を誘い、ちょっとソフトを囓ったくらいの人がやってみたくなるようですが、結局最強ソフトと言われた「Logistello」も自己対戦で膨大な対戦データを作ってこれから有利な手を学習するというところに落ち着いていったので、私的には結局アルゴリズムではなく学習という感じですが、裏を返せば学習よりも優れたアルゴリズムを見いだせなかった人間の負けと言うことみたいです。
     囲碁や将棋も学習を基本とするソフトがボチボチ人間を負かすとこまで来ているようですし。
  4. OS
     OS=Operating Systemのことで、コンピュータ上で動くソフトに対し入出力デバイスへのアクセスを供与したり、CPUやHDD/RAMなどの内部資源に対するアクセスを供与したりして、コンピュータ全体を管理するソフトです。
     複数のソフトを同時に動作(=マルチタスク)させたり、ここのソフトが要求する各資源に対するアクセスを競合しないように調停したり、OSのデキしだいでソフトの操作性が変わってきます。 またコンピュータ資源をいかに効率よく活用するかという事もOSに課せられた大きな仕事といえます。
     そう思って最近のWindowsを見てみると、複数のコアを持つCPUであったり、広大なメモリ空間であったりのハードウェア環境がずいぶんとOSの動作を助けてくれているように思えます。
     OSがより高性能なハードウェアを要求すると、チップメーカはそれに応えるデバイスを供給するようになり、OSは更に高性能/高機能化して「More power」となり、果てのない欲求合戦となる訳ですね。

 この「 パソコン>基礎の基礎 」では、自分がどのようなソフトを作ろうとしているのか、例えば自分が仕事で制御系ソフトを作る必要があるのだけれど、機械を制御しているだけでいいのか、品質の合否判定をする必要があるのか、計測値の統計データを蓄積する必要があるのか、生産管理と連動してリアルタイムに加工品種を選択する必要があるのか、UI(=ユーザーインターフェース)を利用して作業者による選択を即したり情報を通知したりする必要があるのか、などなど求められる機能・性能を的確に見極め適切なスペックを提供するための方策を考察します。