全10952文字
PR

 米プリンストン大学で1999年の秋から行われている一般人向け講義「Computers in Our World」。『プログラミング言語C』の著者としても知られる伝説の計算機科学者ブライアン・カーニハン氏が、今こそ知っておくべき「デジタル世界」の基礎知識をやさしく解説する人気の授業だ。本特集ではその中から、「プログラミングとプログラミング言語」についての講義を4回にわたってお届けする。

 アルゴリズムは細かい点や実用性を無視した、抽象的または理想化された手順を書いたものです。アルゴリズムは正確で曖昧さのないレシピです。それは、それぞれの意味が完全に知られていて定義されている、あらかじめ決められた基本的な操作の集まりで表現されます。すべての可能な状況をカバーしながら、それらの操作を通して、一連の手順を詳しく説明し、最終的に停止することが保証されています。

 アルゴリズムとは対照的に、1本のプログラムは決して抽象的なものではありません。プログラムはタスクを達成するために、実際のコンピューターが実行しなければならない、1つひとつの具体的なステップを書き表したものです。

 プログラミング言語を見ていく前に、アルゴリズムとプログラムについて整理しましょう。アルゴリズムとプログラムの違いは、青写真と実際の建物の違いに似ています。1つは理想化されたもので、もう1つは実物です。

 プログラムを次のように見ることもできます――1つあるいはそれ以上のアルゴリズムで表現された、コンピューターが直接処理できる形式。

 プログラムは、メモリー不足、限られたプロセッサー速度、無効または悪意のある入力データ、欠陥のあるハードウエア、ネットワークの切断、および(背景に潜んでいて、他の問題を悪化させることが多い)人間の弱点といった、実際上の問題について配慮しなければなりません。アルゴリズムが「理想化されたレシピ」であるならば、プログラムは、敵の攻撃を受けながら軍隊のために毎日食事を用意する調理ロボットのための、「詳細な手順を記述したもの」なのです。

 ここまでは比喩で話を進めてきましたが、もちろんこの先は、プロになれるほどではないにせよ、何が起きているかを理解してもらえる程度には詳しく、実際のプログラミング(訳注:プログラムを書くこと)を説明していきます。

 プログラミングはとても難しい場合があります。なぜなら、正しく行うためには細かいことをたくさんこなさなければなりませんし、小さな失敗が大きなエラーにつながる可能性もあるからです。それでも、不可能なことではありませんし、仕事で使えるスキルであるというだけでなく、とても楽しいものでもあり得るのです。

 コンピューターに私たちが望むことや必要なことすべてをやらせるためには、膨大な量のプログラミングが必要ですが、世界にはそれを行うために十分な数のプログラマーがいません。

 したがって、コンピューティングにおける継続的なテーマの1つが、コンピュータープログラミングの詳細にますます大きく関わるようにすることなのです。このことが、タスクを処理するために必要な計算の道筋を表現するための、プログラミング言語の議論へとつながっています。

 特に現代のハードウエアの複雑さを考えると、コンピューターのリソース(構成要素、資源)を管理することも困難なのです。そこで私たちは、コンピューター自身を管理するためにもコンピューターを使います。それが私たちをオペレーティングシステムへと導きます。

 プログラミングとプログラミング言語が本特集の話題です。

 本特集に出てくる、プログラミング例の構文の詳細は読み飛ばしても構いません。それでも、計算の表現方法の類似点と相違点に関しては、しっかり見ておく価値があります。