@mizumotokのブログ

テクノロジー、投資、書評、映画、筋トレなどについて

プログラミング言語の歴史

プログラミング言語の世界は、1950年代から現代までにわたり驚くべき進化を遂げてきました。科学技術計算からビジネスアプリケーション、そしてウェブやモバイル開発まで、各時代に登場した言語は、それぞれの時代のニーズに応じて進化してきました。本記事では、主要なプログラミング言語について、その開発者、特徴、そして簡単なコード例を交えながらその歴史を振り返ります。これから学び始める方にも、経験豊富なエンジニアにも、新たな発見があるかもしれません。

プログラミング言語概覧

プログラミング言語の発展は、数十年にわたる技術革新によって進められてきました。以下は、主要なプログラミング言語を時系列で紹介します。

言語名 リリース年 特徴
FORTRAN 1957 科学技術計算用に開発された最初の高水準言語
LISP 1960 人工知能研究に使用されたプログラミング言語
COBOL 1960 企業や政府の商業データ処理に使用された言語
ALGOL 1960 アルゴリズムの記述に適した言語で、後の多くの言語に影響を与えた
BASIC 1964 初学者向けに開発されたプログラミング言語
C 1972 UNIXオペレーティングシステムの開発に使用され、後の多くの言語に影響を与えた
Pascal 1970 教育用に開発された構造化プログラミング言語
C++ 1983 C言語オブジェクト指向の概念を追加した言語
Objective-C 1984 NeXTSTEPや後のmacOSiOSアプリ開発に使用された言語
Perl 1987 テキスト処理やスクリプト言語として普及
Python 1991 簡潔で読みやすいコードを書くことを目指した汎用プログラミング言語
Ruby 1995 プログラマーの生産性と楽しさを重視したオブジェクト指向言語
Java 1995 クロスプラットフォームのアプリケーション開発を目指した言語
JavaScript 1995 ウェブ開発におけるクライアントサイドのスクリプト言語
PHP 1995 動的なウェブページを作成するためのサーバーサイドスクリプト言語
C# 2000 マイクロソフトによる、主にWindowsアプリケーション開発向けの言語
Scala 2003 Javaと互換性があり、関数型プログラミングオブジェクト指向を統合した言語
Go 2009 Googleによって開発されたシンプルで効率的なシステムプログラミング言語
Rust 2010 メモリ安全性を強調したシステムプログラミング言語で、パフォーマンスが求められる領域で人気
Kotlin 2011 Androidアプリ開発向けのモダンなプログラミング言語で、Javaとの互換性が高い
Elixir 2011 並行処理に優れた関数型プログラミング言語で、スケーラブルなシステムの開発に適している
Dart 2011 Googleが開発した言語で、特にフロントエンド開発に使用される
TypeScript 2012 JavaScriptに静的型付けを追加したスーパーセット
Julia 2012 数値計算とデータ処理に特化した高性能なプログラミング言語
Swift 2014 Appleが開発した、iOSmacOSのアプリケーション開発に使用される言語

1950〜1960年代

FORTRAN(1957)

開発者: John BackusとIBMチーム

「FORmula TRANslation」の略で、科学技術計算用に開発された最初の高水準言語。数値計算やシミュレーションの分野で広く使用されています。

  • 数値計算に最適化: 行列計算や浮動小数点演算が効率的に行えるため、数値シミュレーションや気象予測、物理学の計算で使用されることが多い。
  • コードの簡潔さ: 数学的な表現を直接プログラムに反映しやすい。
  • 広範なサポート: 大規模な科学技術計算ライブラリが充実しており、特にスーパーコンピュータでの使用に適している。
PROGRAM HelloWorld
PRINT *, 'Hello, World!'
END PROGRAM HelloWorld

LISP (1960)

開発者: John McCarthy

「LISt Processing」の略で、人工知能研究のために開発された言語。リスト操作と関数型プログラミングに特化しています。

  • 関数型プログラミング: 関数を第一級オブジェクトとして扱い、高度な抽象化が可能。
  • 動的型付け: 型が動的に決まるため、柔軟なプログラミングが可能。
  • メタプログラミング: プログラム自身を操作する能力が強力で、自己変形型プログラムが書ける。
(defun hello-world ()
  (print "Hello, World!"))
(hello-world)

COBOL (1960)

開発者: Grace HopperとCODASYL委員会

「COmmon Business-Oriented Language」の略で、商業データ処理に特化した言語。ビジネスアプリケーションで広く使用されています。

  • ビジネスプロセスに最適化: 商業計算やデータ処理に向けて設計されており、帳票作成やファイル操作が得意。
  • 英語に近い構文: 読みやすい英語ライクな構文で、ビジネスユーザーにも理解しやすい。
  • 大規模システムのサポート: トランザクション処理やレポート生成のための豊富な機能を備えています。
IDENTIFICATION DIVISION.
PROGRAM-ID. HelloWorld.
PROCEDURE DIVISION.
DISPLAY 'Hello, World!'.
STOP RUN.

ALGOL (1960)

開発者: ALGOL委員会

「ALGOrithmic Language」の略で、アルゴリズムの記述に適した言語。プログラミング言語の発展に多大な影響を与えました。

  • 構造化プログラミング: 制御構造(if、whileなど)が標準化され、コードの構造が明確。
  • 記述の明確さ: アルゴリズムの表現が容易で、他の多くの言語に影響を与えた。
  • 標準化: プログラミング言語設計の基盤となり、多くの後続言語に影響を与えた。

begin
  print("Hello, World!");
end

BASIC (1964)

開発者: John G. Kemeny と Thomas E. Kurtz

「Beginner's All-purpose Symbolic Instruction Code」の略で、初心者向けに開発されたプログラミング言語。教育と簡単なプログラムの開発に使用されました。

  • 簡潔な構文: 簡単な命令セットで、プログラミングの学習が容易。
  • インタラクティブな環境: 対話的にプログラムを実行できるため、即時のフィードバックが可能。
  • 広範な利用: 初期のパーソナルコンピュータに搭載され、広く普及した。
PRINT "Hello, World!"

1970年代

Pascal (1970)

開発者: Niklaus Wirth

教育用に開発された構造化プログラミング言語。プログラムの設計と構造の明確さを重視しています。

  • 構造化プログラミング: 制御構造(ループ、条件分岐など)が明確で、プログラムの構造が分かりやすい。
  • 強い型チェック: 型安全性が高く、プログラムのバグを早期に発見しやすい。
  • 教育目的: プログラミングの基礎を学ぶための言語として広く利用された。
program HelloWorld;
begin
  writeln('Hello, World!');
end.

やさしいPascal入門

やさしいPascal入門

Amazon

C (1972)

開発者: Dennis Ritchie

UNIXオペレーティングシステムの開発のために設計された汎用プログラミング言語システムプログラミングや組み込みシステムで広く使用されています。

  • 低レベル操作: メモリ管理やハードウェアとの直接的な操作が可能。
  • 移植性: C言語で書かれたプログラムは、異なるプラットフォーム間で比較的容易に移植できる。
  • 標準ライブラリ: 幅広い標準ライブラリが提供されており、さまざまな機能をサポート。
#include <stdio.h>

int main() {
    printf("Hello, World!\n");
    return 0;
}

1980年代

C++ (1983)

開発者: Bjarne Stroustrup

C言語オブジェクト指向の概念を追加した言語。システム開発やゲーム開発などで広く使用されています。

  • オブジェクト指向: クラスや継承などの概念をサポートし、再利用性とメンテナンス性が向上。
  • テンプレート機能: 型に依存しないコードを記述できるテンプレート機能を提供。
  • 標準テンプレートライブラリ (STL): データ構造やアルゴリズムを提供するライブラリが充実している。
#include <iostream>

int main() {
    std::cout << "Hello, World!" << std::endl;
    return 0;
}

Objective-C (1984)

開発者: Brad CoxとTom Love

NeXTSTEPや後のmacOSiOSのアプリケーション開発に使用された言語。オブジェクト指向の機能をC言語に追加しています。

  • オブジェクト指向: Smalltalkから影響を受けたオブジェクト指向の概念を導入。
  • メッセージパッシング: オブジェクト間の通信がメッセージパッシングに基づいており、柔軟な設計が可能。
  • Appleのプラットフォーム: macOSおよびiOSのアプリケーション開発で使用される。
#import <Foundation/Foundation.h>

int main() {
    NSLog(@"Hello, World!");
    return 0;
}

Perl (1987)

開発者: Larry Wall

テキスト処理やスクリプト言語として普及した言語。システム管理やウェブ開発などで使用されています。

  • 正規表現: 強力な正規表現機能を提供し、テキスト処理が容易。
  • CPAN: 多くのライブラリが集められたCPAN(Comprehensive Perl Archive Network)があり、機能を簡単に追加可能。
  • 柔軟な構文: 多様なプログラミングスタイルをサポートし、スクリプトから大規模アプリケーションまで対応。
print "Hello, World!\n";

1990年代

Python (1991)

開発者: Guido van Rossum

簡潔で読みやすい構文が特徴の高レベル言語。データ分析、ウェブ開発、機械学習などで広く使用されています。

  • 簡潔な構文: 読みやすいコードが書け、開発効率が高い。
  • 豊富なライブラリ: 標準ライブラリやサードパーティ製ライブラリが豊富で、さまざまな用途に対応。
  • 多用途性: ウェブ開発、データ分析、機械学習など、幅広い分野で使用される。
print("Hello, World!")

Ruby (1995)

開発者: Yukihiro Matsumoto

プログラマーの生産性と楽しさを重視したオブジェクト指向言語。特にウェブ開発で人気があります。

puts "Hello, World!"

Java (1995)

開発者: James GoslingSun Microsystems

クロスプラットフォームのアプリケーション開発を目指した言語。企業向けシステムやモバイルアプリで広く使用されています。

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

JavaScript (1995)

開発者: Brendan Eich

ウェブ開発におけるクライアントサイドのスクリプト言語。動的なウェブページやアプリケーションの作成に使用されています。

  • クライアントサイドスクリプト: ブラウザ上で動作し、ユーザーインタラクションを動的に処理。
  • イベント駆動型: ユーザーのアクションや他のイベントに反応するプログラムが書ける。
  • 広範な利用: フロントエンド開発で標準的な言語であり、Node.jsなどでサーバーサイドプログラミングにも使用。
console.log("Hello, World!");

PHP (1995)

開発者: Rasmus Lerdorf

動的なウェブページを作成するためのサーバーサイドスクリプト言語。ウェブ開発で広く使用されています。

  • サーバーサイドスクリプト: ウェブサーバーで実行され、動的にコンテンツを生成。
  • データベース統合: MySQLPostgreSQLなど、データベースとの統合が簡単。
  • 広範な利用: WordPressなどのコンテンツ管理システムがPHPで開発されており、非常に普及している。
<?php
echo "Hello, World!";
?>

2000年代

C# (2000)

開発者: Microsoft

主にWindowsアプリケーション開発向けに設計された言語。オブジェクト指向と.NETフレームワークを活用しています。

using System;

class Program {
    static void Main() {
        Console.WriteLine("Hello, World!");
    }
}

Scala (2003)

開発者: Martin Odersky

Javaと互換性があり、関数型プログラミングオブジェクト指向を統合した言語。ビッグデータ処理などで使用されます。

object HelloWorld {
    def main(args: Array[String]): Unit = {
        println("Hello, World!")
    }
}

Go (2009)

開発者: Google

シンプルで効率的なシステムプログラミング言語。並行処理やネットワークサーバーの開発で人気があります。

  • シンプルな構文: 読みやすく、シンプルな構文で、迅速な開発が可能。
  • 並行処理: ゴルーチンと呼ばれる軽量スレッドによる効率的な並行処理が可能。
  • パフォーマンス: C言語に匹敵するパフォーマンスを持ちながら、簡潔な構文で開発が可能。
package main

import "fmt"

func main() {
    fmt.Println("Hello, World!")
}

2010年代

Rust (2010)

開発者: Mozilla

メモリ安全性を強調したシステムプログラミング言語で、パフォーマンスが求められる領域で人気が高まっています。

  • メモリ安全性: 所有権と借用チェックにより、メモリ管理の安全性を確保。
  • 高パフォーマンス: C++に匹敵するパフォーマンスを持ちながら、より安全なコードを提供。
  • コンカレンシー: 並行処理のサポートが強力で、スレッドセーフなコードが書きやすい。
fn main() {
    println!("Hello, World!");
}

Kotlin (2011)

開発者: JetBrains

Androidアプリ開発向けのモダンなプログラミング言語で、Javaとの互換性が高い。簡潔で安全なコードが特徴です。

  • Javaとの互換性: Javaとの高い互換性があり、既存のJavaコードと統合しやすい。
  • 簡潔な構文: コードが簡潔で読みやすく、開発者の生産性を向上。
  • 安全なコード: Null安全などの機能を提供し、実行時エラーを減少させる。
fun main() {
    println("Hello, World!")
}

Elixir (2011)

開発者: José Valim

並行処理に優れた関数型プログラミング言語で、スケーラブルなシステムの開発に適しています。

  • 並行処理: Erlang VM上で動作し、大規模な並行処理やスケーラブルなシステムをサポート。
  • 関数型プログラミング: 不変性や高階関数を強調し、シンプルで安全なコードが書ける。
  • 耐障害性: システムの障害を部分的に処理し、全体のシステムの信頼性を向上。
IO.puts "Hello, World!"

Dart (2011)

開発者: Google

特にフロントエンド開発に使用される言語で、モバイルアプリケーションの開発に適しています。

void main() {
  print('Hello, World!');
}

TypeScript (2012)

開発者: Microsoft

JavaScriptに型付けを追加した言語で、大規模なアプリケーションの開発を容易にします。コンパイル時に型チェックを行い、より安全なコードを書くことができます。

function greet(name: string): void {
    console.log(`Hello, ${name}!`);
}

greet('World');

Julia (2012)

開発者: Jeff Bezanson、Stefan Karpinski、Viral B. Shah、Alan Edelman

数値計算とデータ処理に特化した高性能なプログラミング言語。科学技術計算やデータ分析で使用されています。

  • 高性能: コンパイラによってネイティブコードに変換されるため、CやFortranに匹敵するパフォーマンスを持つ。
  • **動的型

付け: 型推論が強力で、開発効率が高い。 - 科学計算向け**: 数値計算ライブラリやデータ処理のためのツールが豊富。

println("Hello, World!")

Swift (2014)

開発者: Apple

iOSmacOSのアプリケーション開発に使用される言語。安全性とパフォーマンスが重視されています。

  • 安全性: 型安全性とメモリ安全性を強調し、エラーの発生を防ぐ。
  • 高パフォーマンス: 高速な実行速度を持ち、パフォーマンスが重要なアプリケーションに適している。
  • 簡潔な構文: コードが簡潔で読みやすく、開発効率が高い。
import Swift

print("Hello, World!")

その他のトレンド

WebAssembly

用途: ブラウザでの高性能なアプリケーション開発

ブラウザでネイティブに近い性能を発揮するバイトコード形式。C/C++やRustなどからコンパイル可能で、ブラウザ内でゲームやシミュレーションなどの高性能なアプリケーションを動作させるために使用される。

AI/ML専用言語

用途: AI、機械学習

PythonがデータサイエンスやAI分野でのデファクトスタンダードになっているが、JuliaやRも依然として重要な役割を果たしている。また、TensorFlowやPyTorchなどのライブラリがAI/ML開発をリードしている。

Low-code/No-code Platforms

用途: 迅速なアプリケーション開発

プログラミングの専門知識を持たない人でもアプリケーションを開発できるようにするためのプラットフォーム。これにより、非エンジニアもビジネスニーズに応じたツールやアプリを迅速に作成できる。

Quantum Computing Languages

用途: 量子コンピューティング

量子コンピュータ向けのプログラミング言語やライブラリが発展している。例えば、IBMのQiskitやMicrosoftのQ#などがある。

まとめ

プログラミング言語は以下のような進化をたどってきました。