ソフトウェア開発がもたらしてきた功績の歴史をひもとくムービー「The Art of Writing Software」
「0」と「1」からなる単純な情報の集まりであるコンピューターソフトウェアは、かつては不可能だったさまざまな機能を可能にしてきました。人類に多くの可能性を与えてきたソフトウェアの歴史を振り返るムービー「The Art of Writing Software」では、その歴史と世界に与えてきた意味が解説されています。
The Art of Writing Software - YouTube
コンピューターは音楽を奏でる楽器のようなもの。
一つ一つの機能は与えられた指示を忠実にこなすことしかできませんが、それが無数に集まることで非常に高度な機能が実現されます。
作曲家が演奏の指示を行うのは「楽譜」。プログラマーがコンピューターに指示を行うのは「ソフトウェア」です。
ムービーに登場するのは、「アルゴリズム解析」の分野を切り開いた第一人者であるドナルド・クヌース氏。「数行のコードを加えるだけで、私はハイになることができました。これは、詩をしたためる人や音楽家と同じような感覚かもしれません」と、プログラムがもたらす喜びについて語ります。
クヌース氏は50年にわたってプログラミングの研究に携わってきた人物。著書「The Art of Computer Programming」はクヌース氏自ら「ライフワーク」と位置づけるものとなっています。
クヌース氏がコンピューターに最初に触れたのは1957年のこと。当時はまだ「プログラム」が生まれたばかりの時代で、知人にプログラミングのやり方、そしてプログラミングが結果を導き出せることに夢中になったクヌース氏は、夜も寝ずにプログラミングに没頭する時期を送ったとのこと。
初期の段階においてもコンピューターは非常に速く結果をはじき出すことができ、非常にパワフルなツールでした。しかし当時のコンピューターは、コンピューターだけが理解できる「マシン語」で指令を与える必要がありました。
「ネットスケープコミュニケーションズ」社の最初期に携わっていた大物プログラマー、ジェイミー・ザウィンスキー氏は「コンピューターは非常に頭が悪いものです。理解させるためには非常に簡単な単語を使い、しかも厳密に定められた話法で指示を行う必要があります」と語ります。
初期のプログラマーは、数字の組み合わせであるマシン語を使ってプログラミングを行いました。
それらの数字は、コンピューターだけが理解できる「0」と「1」の並び、「バイナリコード」を意味しています。
しかし、数字を使って指示を与えるのは人間にとって退屈な作業であるばかりか、間違いを起こす原因ともなります。そのため、もっと人間にとって使いやすい方法が編み出されることになりました。
最初の方法は、数字を名前や記号に置き換えるというもの。これは「アセンブリ言語」と呼ばれるプログラミング言語で、コンピューターはその内容を自らバイナリコードに変換して命令を実行します。
アセンブリ言語も人間にとっては面倒な点が残るものではありましたが、人間がわかりやすい言葉からコンピューターがわかりやすい言葉へと「翻訳」するという処理をコンピューター自身に行わせるという考え方は、ソフトウェアの世界に革命をもたらしました。
1957年、IBMが4年の開発期間の後に初の高級言語であるFORTRANを発表しました。FORTRANの登場により、プログラマーは今や慣れ親しんだ数式や論理構造を用いてプログラミングすることが可能になりました。
そのようにして書かれたプログラムを、FORTRANは「コンパイラ」を使ってコンピューターが理解できるマシン語に変換してコンピューターが動作できるようにします。
またFORTRANの登場により、プログラマーはコンピューターごとに異なるマシン語を覚える必要がなくなりました。
FORTRANは、コンピューターを必要とし、またその概念を支持する科学者やエンジニアのために開発されました。
1959年、今度はビジネス用途のために開発されたプログラミング言語「COBOL」が誕生しました。グレース・ホッパー氏によって開発されたCOBOLは、自然言語である英語に近い記述方法を取り入れることを目指した言語で、ビジネスシーンで広く用いられる言語となりました。
その後数十年にわたり、さまざまなニーズに合わせた数多くの言語が開発されてきました。その結果、最初はコンピューターに対するプログラミングの内容が「現在の引数に新しいデータを加えよ」と動作そのものを指示するものだったのが……
「高価な書籍のリストを価格順に並べて作成せよ」と、最終的に欲しい結果を具体的に指示するものへと変化していきました。
今や多くの人がExcelで「全従業員の給与の平均値を求めよ」と数式を入力するような形で、コンピューターに自然な言語を使って指示を行えるようになっています。
標準化されたコンパクトな指示を記述するというのは、プログラムに与えられた「ありとあらゆるデータを処理する」という目的の一側面に過ぎません。そのためには、データを「0」と「1」の二進数で処理を行うコンピューターが処理できる形に変換・組織化する必要があります。
そしてもちろん、小数点もまた二進数によって表現される必要があります。
数値によってアルファベットの「文字や記号」が表現されるようになり……
文字を使った「文字列が表現できるようになります。
そして複数の文字列が集まった「リスト」が作られ……
リストは「表」へと進化。
そしてさらに「ツリー」など、複雑な意味を持つ構造を表現できるようになります。データがどのように表され、組織化されるのかを定義することが、非常に重要になってきました。
その結果、途方もなく膨大な量のデータが世界中のコンピューターによって処理されるようになりました。
統一モデリング言語の開発に携わったグラディ・ブーチ氏は、「今や、自分の身近なところにある複数のカメラが捉えた私が生まれてから死ぬまでの情報を、角砂糖1個分ほどのメディアに全て記録して保存できるようになりました」と、ものすごいペースで進化してきたコンピューター技術を語ります。その結果、「そのデータを使って何ができるようになるのか」という別の新たな疑問が生み出されます。
プログラマーが実現したいのは、答えを知り、問題を解決するという目的です。そのためにプログラマーは適切な言語を選択し、どのような形でデータを持ち、構造化されるべきかを定義します。
次にプログラマーは、タスクを成し遂げるための手順を一つ一つ作り上げていきます。その姿は、まるで料理人が料理のレシピを書き上げるようなもの。プログラマーにとってのレシピは「アルゴリズム」です。
「ハイパーテキスト」という概念を生み出した情報技術のパイオニア、テッド・ネルソン氏は「アルゴリズムはコンピューターに『○○をやりなさい』と指示を与えることを意味するのではなく、ある一つの出来事を実現するために必要な一連の動作を実現することを意味します。単純なことです」と述べています。
しかし実際のアルゴリズムの中身は必ずしもシンプルなものではありません。「数を大きさ順に並び替える」という単純な動作だけでも、そこには何百というアルゴリズムが存在します。
実際にコンピューターが使われるシーンでは、「顧客をリストの中から探し出す」という目的や……
「A地点からB地点への最短ルートを見つける」という目的も存在。
さらに、「ハリケーンをモデリング化する」と行った目的も。このクラスになると、使われるアルゴリズムは極めて複雑なものになっています。
簡単なものから複雑なものまで、全てのコンピュータープログラムは「言語」「データ構造」「アルゴリズム」、そして多くの人による労力によって成り立っています。
クヌース氏はプログラミングの難しさについて「プログラムを書くということは、私の人生の中のどんなことよりも難しいことです。一度に多くの事柄を頭の中に入れておき、考える必要があります」と語ります。
プログラマーは、常に進化を続けるコンピューターの世界の中でソフトウェアを開発します。
プログラマーの尽力がこれまで、コンピューターの世界をより複雑にし、壮大な結果をもたらしてきました。
新しいソフトウェアを開発することは、人類が持つ想像力を発揮する行為です。
それは、ハイテク技術の頂点に立つものであり……
そして「芸術」でもあるのです。
「私がやりたかったことは、エレガントな形で要素を組み合わせることで、誰もがそれを理解して笑みを浮かべられるようにすることです」
ソフトウェアプログラマーは人類の限界を押し広げ、意識を拡大し、情報とインタラクションがあふれる世界で人々に力を与えてきました。
昔の人々はこれを「魔法」と呼んだかもしれません。しかしそれは魔法ではなく、コンピューターを動かすための「ソフトウェア」なのです。
・関連記事
私たちが何気なく使っているソフトウェアはどのように開発されているのか? - GIGAZINE
コンピュータを進化させてきた偉大なるアルゴリズムまとめ - GIGAZINE
誕生から50年を迎えたプログラム言語BASICの歴史、その精神とは - GIGAZINE
若かりし頃のビル・ゲイツがMicrosoftの今後やプログラミングについて語るインタビュー - GIGAZINE
「人間様が気分よくプログラミングするための言語」Rubyは何を目指すのか - GIGAZINE
ジョブズは「ネットをするために人々はコンピューターを買う」と1985年に予言していた - GIGAZINE
・関連コンテンツ