• トップ
  • ブログ一覧
  • コンピュータアルゴリズムの基礎を確立したドナルド・アーヴィン・クヌース
  • コンピュータアルゴリズムの基礎を確立したドナルド・アーヴィン・クヌース

    メディアチームメディアチーム
    2023.05.12

    ITエンタメ

    コンピュータアルゴリズムを提唱したのは誰?

    ミツオカミツオカ
    今、大量のデータの中から最適なものを探すプログラムを作ってますが…
    にゃんこ師匠にゃんこ師匠
    おお!
    ミツオカも難易度の高いプログラムを開発できるようになったか!
    ミツオカミツオカ
    いや…
    いざ作ろうとしたら頭の中でごちゃごちゃになって…
    にゃんこ師匠にゃんこ師匠
    そういうときにはアルゴリズムが大事だな
    ミツオカミツオカ
    アルゴリズムにはいつも苦戦しています
    にゃんこ師匠にゃんこ師匠
    そうだな、そもそもコンピュータでのアルゴリズムの必要性を唱えたのは約50年前で、ドナルド・アーヴィン・クヌースというアメリカの科学者だったんじゃ!
    ミツオカミツオカ
    50年前!?!?
    にゃんこ師匠にゃんこ師匠
    クヌースの書いた本が多くの人に影響を与え、アルゴリズムも広まったのだ!

    一度やると決めたら探求心が尽きないクヌース

    ドナルド・アーヴィン・クヌースは1938年、アメリカウィスコンシン州ミルウォーキーに生まれました。

    父は印刷会社を営むかたわら、高校で簿記の講師もしていました。

    そんな家庭に生まれたクヌースは何事も調べることが好きな少年でした。

    そしてある日、製菓会社の単語を見つけるコンテストに参加します。

    2週間学校を休み、地下室に籠り辞書をめくり続け、「Ziegler's Giant Bar」からできる単語を見つけていきます。

    その単語数は4500会社が想定していた2000の単語をはるかに超え優勝しました。

    ケース工科大学に進学

    大学はオハイオ州のケース工科大学に進み物理学を専攻しました。

    大学では、初めてのコンピュータであるIBM 650に触れます。

    コンピュータのマニュアルを熟読したクヌースは、自分でもプログラミングができると確信し、マニュアルを超えるプログラムを書こうと決意します。

    それからはプログラミングを熱心に勉強して、大学のバスケチームを支援するための選手の能力に基づいたプログラムを書くまでになりました。

    このことは新聞やニュースにも取り上げられ、クヌースのプログラミングへの探求は尽きず、1958年には技術専門紙を立ち上げました。

    また物理学から数学へと専攻を変え、学士号と修士号も同時に取得するという、大学創立以来の偉業も成し遂げます。

    ミツオカミツオカ
    スポーツとコンピュータ。
    この時代に早くも取り入れていたとは、先見の明がすごすぎですね
    にゃんこ師匠にゃんこ師匠
    ノートに書きこんでいたデータをコンピュータに入力して分析する。
    このような考え方は革新的で、クヌースの先取りする力とそれを実現化する頭脳力は大したものだな
    ミツオカミツオカ
    今はプロアマ問わず、コンピュータを使っての選手のトレーニングスケジュールや相手チームとの対戦の作戦計画はあたり前ですからね

    The Art of Computer Programming

    1963年カルフォルニア大学で博士号を取得すると、助教授として勤務するようにもなりました。

    クヌースのコンピュータに関する興味は尽きず、特にコンパイラについては知れば知るほどその先へと導かれるのでした。

    そんなクヌースに出版社からコンパイラについての執筆依頼がありました。

    クヌースはこれまでに出版されていたコンピュータ論文や出版本について不十分であると感じていたので、良い機会と感じ引き受けることにしました。

    また、コンピュータにおけるアルゴリズムの必要性を日頃から感じていました。

    そのため、アルゴリズムの歴史や背景などを詳しく書いた「今までにないコンピュータの本」として執筆を進めました。

    「The Art of Computer Programming」発刊

    1968年「The Art of Computer Programming」が完成。

    答えにたどり着くまでの手段である「アルゴリズム」を「プログラミングに取り込むことは重要である」と、多くの人に気づかせた一冊となりました。

    アルゴリズムによって、「速く処理できるか」「簡単に作れるか」「正しく実行できるか」などの要素を考え、操作しやすい優れたプログラムを作ることができます。

    アルゴリズムは今やプログラミングする上で欠かせないものとなったのです。

    にゃんこ師匠にゃんこ師匠
    例えばA地点からB地点へ行くとしたら、AからBを結んだ直線の道筋を選べば最短というものではない
    ミツオカミツオカ
    単にまっすぐ進んだら家や木や障害物だらけで、川もあるし、そもそも道がないところを通るようになってしまいますもんね
    にゃんこ師匠にゃんこ師匠
    そうじゃ、そこで安全に道を通りながら、より速くBへたどり着ける道を探すことが必要なのだ
    ミツオカミツオカ
    なるほど
    にゃんこ師匠にゃんこ師匠
    プログラムを書く時にもこのように最良な手段である「アルゴリズム」を考える
    ミツオカミツオカ
    そうすることで、自分が作りたいプログラムが書きやすくなるのですね

    文芸的プログラミング

    クヌースが執筆した「The Art of Computer Programming」は入りきらない内容が多すぎて第2巻、第3巻…と続いていきますが、それと並行して新しい組版処理システムの開発も進めていきます。

    The Art of Computer Programming」は数式を表記することも多いのですが、出来上がった本の数式の表示がクヌースの満足のいくものではなかったのです。

    そこで自分が納得できる本にしようと組版処理システムを作ることにしたのでした。

    TEXの設計

    クヌースはまず過去から現在までの組版の技術を調査することから始めていきます。

    そしてその調査をもとにプログラミングに取り掛かり、システムを完成させるため1年間の長期休暇も取り、開発に没頭しました。

    こうして1978年に組版処理システム「TEX」を完成。

    TEX」はWindowsMAC、どちらでも使用でき、文字の大きさや種類などの制御指令を埋め込むマークアップ方式の文書処理システムにしました。

    合字の表示も可能にしたMETAFONT

    また「TEX」の開発とともに、クヌースはそれに付随してフォント作成用のプログラム「METAFONTを開発します。

    METAFONT」は文字の形を描けるプログラムであり、それを組版用のファイルとして保存し、それを元に他のフォントを生成できるようにしました。

    キーボードにない文字や文字を合わせた合字も作成ができ、「TEX」での複雑な化学式や物理式の表示も可能となったのです。

    TEX」は数式を扱う科学者やエンジニアなどには読みやすくわかりやすいと好評で、オープンソースにしたこともあり、約3ヶ月間で1000人のユーザーを集めました!

    にゃんこ師匠にゃんこ師匠
    実は、「TEX」は今も印刷会社で使用されている
    ミツオカミツオカ
    すごーい!
    あの複雑な数式の表記は確かに専用のシステムがあると助かりますよね
    にゃんこ師匠にゃんこ師匠
    専門書や論文などが見やすく、わかりやすく印刷できるのも「TEX」のおかげじゃ

    文芸的プログラミング「」

    クヌースは「TEX」を実装される仕組みとして「WEB」を用いました。

    WEB」は、「プログラミングは、芸術であり、文学である」と文芸的プログラミングを提唱するクヌースのプログラミングの理想とするものでした。

    一般的なプログラミングではソースコード中にコメントが書かれますが、「WEB」では単なるコメントとせず、ソースの概要が項目ごとにわかりやすく書かれています。

    そして「weave」のプログラムを使用すると、レイアウトされたドキュメントとなる「TEX」となります。

    また「tangle」のプログラムを使用すると、コンパイルできる「Pascal」のソースコードを生成します。

    WEB」は修正する箇所がわかりやすく、プログラム作成者以外でも修正しやすいメリットがありましたが、WEBのソースコードを書くのはかなり手間がかかり、普及することはありませんでした。

    しかし文芸的プログラミングは、その後のプログラムの書き方について一石を投じるものとなりました。

    終わりなき研究と執筆

    クヌースの賞金小切手

    クヌースは完成した「TEX」にはまだ満足できず、徹底的にバグを見つけ修正していき、1989年に完成したバージョン3はようやくクヌースの納得いくものでした。

    そこでクヌースは冗談を交えて、自分の出版物や「TEX」でバグを見つけたら賞金を出すことを発表します。

    賞金は2.56ドル

    賞金小切手が見つけた人に贈られます。

    バグを見つけるのは難しく、見つけた人は「コンピュータ界の最高の栄誉」だとして、贈られた賞金小切手の写真をネットにアップして自慢するのでした。

    これは2008年まで続きました。

    尽きぬ探究心

    The Art of Computer Programming」はアルゴリズム分析を用いたプログラミング技法は、計算機科学の新たな道しるべとなり、クヌースは1974年にチューリング賞を受賞します。

    クヌースは「The Art of Computer Programming」を1973年に第3巻を出版した後、第4巻は分冊の形で少しずつ出版しています。

    今後第7巻まで執筆する予定であり、クヌースは手を休めることはできません。

    1993年スタンフォード大学の教授を辞めてからも、クヌースはプログラミングを続け、パソコンに向かう毎日です。

    大好きなオルガンを時々奏でながら。

    ミツオカミツオカ
    1冊の本を書き始めたら、それがもう自分のライフワークになってしまったということですね
    にゃんこ師匠にゃんこ師匠
    それだけコンピュータプログラムは奥が深いということだな
    ミツオカミツオカ
    やっぱり私にはプログラミングは難しいのかな…
    にゃんこ師匠にゃんこ師匠
    そんなことはない!
    あきらめたらそこで試合終了ですよ…?
    ミツオカミツオカ
    そうですね、安〇先生!
    わからないことは師匠に聞きますから、今後ともよろしくお願いします
    にゃんこ師匠にゃんこ師匠
    うむ、ところで大量のデータから最適なものを探すプログラムとは
    具体的にはどんなものを作っておるのだ?
    ミツオカミツオカ
    喋れる猫を✖✖✖してくれる✖✖✖を✖✖✖するプログラムです
    にゃんこ師匠にゃんこ師匠
    協力不可じゃな!

    ライトコードでは、エンジニアを積極採用中!

    ライトコードでは、エンジニアを積極採用しています!社長と一杯しながらお話しする機会もご用意しております。そのほかカジュアル面談等もございますので、くわしくは採用情報をご確認ください。

    採用情報へ

    メディアチーム
    メディアチーム
    Show more...

    おすすめ記事

    エンジニア大募集中!

    ライトコードでは、エンジニアを積極採用中です。

    特に、WEBエンジニアとモバイルエンジニアは是非ご応募お待ちしております!

    また、フリーランスエンジニア様も大募集中です。

    background