人にやさしい言語へ プログラミング言語の歴史

 前回、プログラムとプログラミング言語についてお話しました。今回はその続き、プログラミング言語の歴史を辿っていきましょう。

まだ言語のない時代

 現代のプログラミング言語のように、機械へこのような動作をやってくれ、という指示を表したものとして自動織機で使用されたパンチカードがあります。

 19世紀中頃のイギリスでは産業革命によって大量の織物が作られていました。その自動織機の一つにジャカールという人が発明したものがありました。この自動織機は織物の柄がパンチカードに書かれており、それに従って機械が自動で織物を織っていました。

 このパンチカードを見て自動計算機を作ろうとしたのがイギリスのチャールズ・バベッジです。彼は最初のコンピュータを考えたと言われている人です。残念ながら当時の技術では自動計算機は作れず、彼の試みを失敗しますが、彼と親交のあったエイダ・ラブレスというイギリス貴族女性にして世界で最初のプログラマーを生み出すことに繋がります。

 このエイダ・ラブレスという女性は数学を愛好しており、先ほどのバベッジ氏が発明した解析機関の設計に関する記事の翻訳も担当しました。その記事の中で彼女は、この機械ではベルヌーイ数列をこのように計算しますよと説明し、ベルヌーイ数列を計算する機械語によるプログラムを掲載しました。このことがエイダ・ラブレス氏が世界初のプログラマーと言われる所以です。

 それから時は100年近く流れて1946年、世界初のコンピューターである「ENIAC」が登場しました。しかしこのコンピュータのプログラムは、プログラムボードと呼ばれる配線板に据え付けられた配線を組み替えることでプログラムを書いていました。

機械中心のプログラム言語たち

 それではこの時代のプログラムを少し見てみましょう。

 0010 0000 0001 0000 0000 0000 0000 1010
 
 何を言っているかさっぱり分かりませんが、実はこれ「それとこれを足して足し算をしてください」と言っています。

 前回の記事にて少し触れましたが、コンピュータは0と1の二進数、デジタルで全てが動いています。これは、「あるかないか」(=1か0か)のみを判断し、その組み合わせで動いています。たとえば、「あるあるないない」という順番で読み取れたら4、「ないあるあるない」なら6といった具合です。

 当時は機械がそのまま読み取れるような、機械側の言葉、「機械語」でそのままプログラミングをしていました。この0と1の組み合わせをコンピュータが読み取っていました。

 しかし、こんな0と1だけでプログラミングをするのは人間にとってすさまじく負担がかかります。0と1が何桁あって、それぞれどういう順番で並んでいるのか。これを正確に書かなくてはならず、もし間違えていたらどこが間違っているのかを探すことさえ気が滅入っていまいます。

 さすがにこれはつらいと皆が考えたのか、もう少しわかりやすくした言語が出てきました。これがアセンブラ言語と呼ばれるものです。さきほどのプログラムと同じものをこのアセンブラ言語で書いてみましょう。

 ADDA GR1,ADDRESS

 「add」や「address」など、英単語、人間の言葉が少しずつ出てきましたね。上のADDAは「0010 0000 0001 0000」、ADDRESSは「0000 0000 0000 1010」を示しています。要するに、人間の言葉と機械語を1対1で対応させて、少しばかり人間の負担を減らそうとしました。

 もちろん、0と1しか分からないコンピュータにとって、ADDA GR1,ADDRESSはそのままでは何を言っているか分かりません。ですのでコンピュータは1対1で何を示しているかが書かれている、いわば英訳辞典を片手に自分にとって分かる言葉、すなわち機械語にこれを翻訳してプログラムを理解します。この翻訳作業をアセンブル、翻訳するためのソフトウェアをアセンブラと言います。

人にやさしいプログラミング言語の登場

 ですが、いくら単語と1対1で置き換えたといっても、人間の言葉は単語だけでなく文法もセットでついてきます。人間の言葉のような文法ではないアセンブラ言語もやっぱり人には理解しづらいものでした。

 そして1954年、IBMのジョン・バッカスによって考案された「人にやさしいプログラミング言語」が登場しました。Fortran(フォートラン)です。

 この言語は史上初の高級言語として登場しました。高級言語というものは、特徴として「人にとってわかりやすい」「機械のプロセッサに依存した処理を書かなくてもいい」「メモリの制御など、機械側の操作を意識しなくていい」という、人ファーストな言語です。この対義語は「低級言語」「低水準言語」などと呼ばれ、こちらに機械語やアセンブラ言語が入ります。

 このFortranは現在使われているC言語やJavaなど、始祖にあたる言葉とされています。実は科学技術計算の分野ではいまだ現役の言葉です。特にベクトルプロセッサを積んだスーパーコンピューティングの領域では今でもトップランナーです。

 1960年には事務計算用言語としてCOBOLが登場します。こちらもまだまだ現役です。上にあげたC言語は1972年に登場し、UNIX(企業のサーバーなどで広く使われているOS)の主要開発言語として普及しました。このC言語からは、オブジェクト指向機能を追加したC++や、より高級な言語として作られたJava、そのJavaに対抗してマイクロソフトが作成したのがC#となります。

 一方、1987年にPerlという言語が登場してから、スクリプト言語と呼ばれるものがでてきました。当初のスクリプト言語は機能少なめの簡易言語といった雰囲気でしたが、Perl以降、PHPやPythonなどが多く現れました。

 このスクリプト言語の中で有名なのがJavaScriptです。1995年にリリースされたNetscapeブラウザに組み込まれたこの言語、もともとはLiveScriptという名前でした。その後、Javaが人気だったのでその名前にあやかろうと今の名前になりました。そのため、JavaとJavaScriptは関係がありません。JavaScriptの省略みたいな名前がJavaではないんですね。

進化する言語たち

 このように、プログラムにて用いられるプログラミング言語は少しずつ人間に寄り添った形に変わっていきました。またあくまで機械語以外のその後にでてきたプログラミング言語たちは機械語に翻訳されるため、その翻訳のしやすさによって、この方面の処理にはこの言語が優れている、その方面にはこちら、といった具合に、得意不得意が現れます。この点は人間の言語と変わりません。英語のように主語を抜かすととたんに文意が崩壊する言語もあれば、中国語のように文字だけでは発音がさっぱり分からない言語もあります。これはプログラミング言語でも同じわけです。

 その点に関して言えば、高級言語と低水準言語でも差があります。翻訳をするということはその分時間がかかる、処理が遅くなるということです。低水準言語でも1対1で翻訳すればよいアセンブラ言語は総じて高級言語よりも早く翻訳が終わるため、処理が早くなります。

 そして、プログラミング言語の得意不得意がどこでかみ合うかはその時代、その分野によって求められるもので様々です。そのため、プログラミング教育では一つの言語だけを勉強する賭けをするのではなく、どのプログラミング言語にも対応できる、全てのプログラミング言語の根幹となるプログラミング的思考を鍛えることなどに力点が置かれています。

 「人と機械の橋渡しをするプログラミング言語」、その変遷の歴史の中に人々の希望が隠れていることが感じられます。
 
 
(参考)
http://www.itmedia.co.jp/enterprise/articles/0703/26/news021.html
http://www.yamamo10.jp/yamamoto/lecture/2005/3E/1st/html/node4.html

世界初のプログラマー、エイダ・ラブレス

各スクールレッスンで大好評!プログラミング脳を養う「西嶋式プログラミングパズル」

ステムアカデミーキッズ開発者の西嶋孝文氏によって考案されました。このパズルの対象者は小学校低学年~ご年配の方まで、幅広い方々が楽しめます。パズルを通してプログラミング思考を養い、プログラミングの考え方や記号の使い方を学ぶことはもちろん、考える力、論理的思考力、推理力、問題解決力、集中力などあらゆるスキルを身につけることができます。

ぜひ沢山の人に楽しく学んで頂き、これからプログラミングを学んでいくための素地となるパズルになっていけば幸いです。WEB上では毎週問題を掲載しますので、ぜひチャレンジしてみてください。

>プログラミングパズルの解き方
>西嶋式プログラミングパズルとは
>西嶋式プログラミングパズル問題一覧

※プログラミング脳を育てる「西嶋式プログラミングパズル」(c2019 StemAcademyKids Nishijima Takafumi)は、色・サイズ等を加工してご家庭や個人でご使用いただくことができます。但し、再販売・再配布を禁止致します。また著作権はステムアカデミーキッズ開発者に帰属します。商用利用をご希望の方は、ステムアカデミーキッズ事務局へお問い合わせくださいませ。