Taiki's Blog

ビジネスやテクノロジーの変化に迫ります

プログラミング発展の経緯とその発展を支えた要因

ãprogrammingãã®ç»åæ¤ç´¢çµæ

こんにちは、Taikiです。

2020年に小学校でプログラミング教育が必修となりますが、どういう目的で文科省はこれを導入したのでしょうか。文科省の説明をこちらになります。

プログラミング教育とは、子供たちに、コンピュータに意図した処理を行うよう指示することができるということを体験させながら、将来どのような職業に就くとしても、時代を超えて普遍的に求められる力としての「プログラミング的思考」などを育むことであり、コーディングを覚えることが目的ではない。また、こうしたプログラミング教育を実施する前提として、言語能力の育成や各教科等における思考力の育成など、全ての教育の基盤として長年重視されてきている資質・能力の重要性もますます高まるものであると考えられる。

 出典:文部科学省

つまり、プログラミング教育の目的は、プログラマーを増やすことではなく、プログラミングに必要な論理的思考を身に着け、今後の勉強や将来の仕事に役立たせる事としています。

こういった取り組みを踏まえ、今回はプログラミングの歴史に触れ、どうやってプログラミングが発展してきたのか、に迫ります。

目次はこちらになります。

プログラミング発展の歴史

まずは代表的なプログラミング言語(以下言語)の年表をみていきましょう。

    年代            言語
1940年以前 機械言語(チャールズ・バベッジ)
1940年代  アセンブリ言語
1950年代  COBOL(グレース・ホッパー)
1960年代  FORTRAN(IBM・ジョン・バッカス)
1970年代  B言語(ケン・トンプソン)
C言語(デニス・リッチー)
Smalltalk
SQL
1980年代  C++
Objective-C
Perl
1990前半  Python(グイド・ヴァンロッサム)
Microsoft Visual Basic(Microsoft)
1990後半  Ruby(まつもとゆきひろ)
Java(サン・マイクロシステムズ)
PHP(ラスマス・ラードフ)
JavaScript
2000年代  C#Microsoft
D言語
Go(Google)
2010年代  Dart (Google)
Swift (Apple)
Hack (Facebook)

年表をみると、言語が多数存在することは分かりますが、各々どんな違いがあるのでしょうか。

言語は、機械語アセンブリ言語、手続き型、オブジェクト指向型の4種類に大別できます。機械語アセンブリ言語の2種類を低水準言語、そして、手続き型、オブジェクト指向型の2種類を高水準言語と呼びます。低水準言語は機械語または機械語に近いため可読性が低く、高水準言語は抽象化され可読性の高い言語となります。

機械語

機械語とは、コンピュータのCPUが解読可能な命令を数値化したものです。当初は機械語でコーディングされていましたが、数字の固まりを人間が解読する事は困難でした。

アセンブリ言語

アセンブリ機械語をベースに開発され、幾分人間にも理解しやすい言語に変わりました。高水準言語と同じくコンパイラを使って機械語に変換しCPUに解釈させました。コンパイラとは翻訳機のようなものです。

しかし依然ハードウェア依存が強く柔軟性に乏しいため、複雑な処理に不向きでした。当然プロセッサなどアーキテクチャの知識が必要となるため、開発者にはハードウェアの専門性も要求されました。

手続き型言語

制約の多かったアセンブリをより抽象化し、ハードウエア依存を少なくした言語が手続き型です。C言語COBOL、BASIC、Pascalなどがこれに該当します。手続き型の登場で、ルーティンやサブルーティンといった概念が定着し、一連の処理をモジュール化することが一般的になりました。

処理をモジュール化すると、どんなメリットがあるでしょうか。

  • 処理のまとまりを再利用できるため、効率化を生みます
  • 再利用するとキャッシュにも記憶されて、高速化を生みます
  • 再利用の分だけプログラムが短くなり、可読性が上がります

しかし、時代とともに大規模プロジェクトが増え、開発の規模も大きくなり、手続き型だけでは、大人数でプログラムを管理する事が困難になりました。

オブジェクト指向型言語

開発の規模が大きくなるにつれ、万人に分かりやすい言語が求められるようになりました。そこで登場したのがオブジェクト指向型言語です。JavaC#PythonRubyJavaScriptPHPがこれにあたります。オブジェクト指向の狙いは、オブジェクトという概念を使い、多くの人に分かりやすさを提供することです。

オブジェクト指向型の思想設計は人間の思考パターンに似ています。人間は、知らない「モノ」を理解するときに、どんなことを考えるでしょうか。おそらく、その「モノ」が自分の知るカテゴリーのどこに属するかを考えるのではないでしょうか。例えば、知らない「モノ」があるとします。それが「食べ物」「甘い」「イギリス発」と聞けば、自ずと脳内整理し、その情報を「洋菓子」という分類に格納するでしょう。

このように、新しい「モノ」をつくったり説明するときには、カテゴリーを用意して分類分けしておくと、多くの人の理解を助けてくれます。ストレージのフォルダ構成も大規模であるほど細かく分類化されているものです。

オブジェクト指向型も、体系的な設計思想を基礎にしているため、大人数で開発したり仕様が変更しても全体の認識が合わせやすくなります。

このようにプログラミング言語は足りないものを補完しながら発展を続けてきました。

プログラミングの発展を支えたもの

プログラミングはどういう経緯で発展したのでしょうか。

最も大きな要因は時代背景にあります。1940年代はまだ機械語の時代でしたが、第二次世界大戦の最中でした。戦争が終わると、COBOLなどの手続き型が登場し、1980年代にはC++Javaなどのオブジェクト指向型が主流になりました。

アーキテクチャの発達

戦後、産業化が進むにつれ、アーキテクチャが発達しました。アーキテクチャが発達するとリソースが向上しプログラムの処理も速くなります。その理由は、下のプログラムの動きを見るとイメージしやすいでしょう。

①ハードディスク上でプログラムを記述する

コンパイルしEXEファイル(機械語)に変換する

③EXEファイルのコピーがメモリ上に作成される

④メモリ上のプログラムをCPUが解釈して実行する

プログラムが動く時は、ディスク、メモリ、CPU全てのリソースを使うため、昨今のマシンリソースの向上はプログラム処理の高速化を支えました。

プログラミングの発展はまさに従藍而青(じゅうらんにしょう)

「従藍而青」という4字熟語をご存知でしょうか。

「青は藍より出でて藍より青し」ともいいます。糸を青く染めるために、染料の藍に浸して乾かす、これを繰り返すことで、染料の藍よりも鮮やかな濃い青に仕上がります。

新しい言語も既存の言語をベースに改良を重ね、より高いレベルに発展してきました。機械語はアッセンブリに影響を与え、アッセンブリはB言語に影響を与え、B言語はC言語に影響を与え、C言語C++Javaに影響を与えました。既存の言語に改良を重ね、分かりやすさと便利さを追求して新しい言語が生まれ、その度に多機能化されました。

次第に、関数のような処理のモジュール化が浸透し、オブジェクト指向のような設計思想が生まれ、ライブラリのような関数やクラスの集合体が登場しました。

つまり、時代と共にプログラの共用部品が続々と開発され、プログラムを一から書かなくてもその部品を再利用し組み合わせれば、新しいサービスが生まれる時代になりつつあります。自動でプログラムをバージョン管理できるGitなども加われば、アジャイル開発の流れは必然と言えるでしょう。

まとめ

今回はプログラミング言語の歴史に触れ、言語の大まかな種類や特徴、そしてプログラミングが発達した理由に迫りました。

収穫加速の法則で分かるよう、アーキテクチャやプログラミングは、イノベーションの速度を加速させ、様々なサービスを世に送り出しています。そこで次は、どんなプログラミング言語がどういうサービスをつくっているか、について書きたいと思います。

収穫加速の法則(しゅうかくかそくのほうそく、英: The Law of Accelerating Returns)とは、アメリカの発明家レイ・カーツワイルが提唱した、一つの重要な発明は他の発明と結び付き、次の重要な発明の登場までの期間を短縮し、イノベーションの速度を加速することにより、科学技術は直線グラフ的ではなく指数関数的に進歩するという経験則である。また、彼がこの法則について言及したエッセイの表題でもある。伝統的な収穫逓減あるいは限定的な収穫逓増と対比する概念として提唱している。

出典:Wikipedia