Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ゴーファーくんと辿るプログラミング言語の歴史/history-of-programming-languages-with-gopher

 ゴーファーくんと辿るプログラミング言語の歴史/history-of-programming-languages-with-gopher

会社の若手向けに開催した勉強会の資料です。
一般的なアプリケーション開発をターゲットに、主要言語と歴史を解説しています。

Be01969dc1e5ac0998183f9a114dbf58?s=128

iwasiman

July 04, 2022
Tweet

More Decks by iwasiman

Other Decks in Programming

Transcript

  1. 先端技術勉強会 技術講習会 2022/7 @iwasiman Advanced -STUDY GROUP- 第4回 ゴーファーくんと辿る プログラミング言語の歴史

    Technology TECH-SESSION
  2. 2 この技術講習会(先端技術勉強会)について ⚫ 頻度は月1回?程度、基本1H。時間は夕方がよさそうです。 ⚫ とりあえず始めてみて様子を見ながら続けます。 ⚫ 今回もスライドで資料を作りましたが、Web上のリソースなどの参照が メインになる回もあるかもしれません。 ⚫

    説明中も適宜間を挟むので、リアクションはその都度音声でもチャット でもOKです! ⚫ テーマはフリー、参加者から聞いたりして決めていきます。 次回テーマは [未定] です。 ゆるくやっていくので、気軽にいきましょう!
  3. 第4回 ゴーファーくんと辿る プログラミング言語の歴史 目的:様々なプログラミング言語と歴史を 全体の視点から概観し、 今後使う機会に備えてもらう 友達を探しに行くよ!

  4. 1. 20世紀までの進化の系譜 2. プログラミング言語の分類 3. コンパイル型言語の潮流 (3枚) 4. コンパイル型言語の新たな流れ 5.

    スマートフォン時代の到来 6. インタプリタ型言語の発展(3枚) 7. テック系ジャイアント企業との関連 8. 近年のトレンド 9. おまけ:プログラマーの通り名 10.本日のまとめ ゴーファーくんと辿るプログラミング言語の歴史 ⚫ SQL、HTML、CSS、Shell系の話は除きます ⚫ 組み込み系やデータ処理やデータサイエンス系用途を除いた、一般的なアプリケーション開発で使う言語を扱っています
  5. 5 1. 20世紀までの進化の系譜 ◆1940年代のPlankalkül(プラン カルキュール)が最初とも言われる が、設計のみ。 ◆1954年のFortlan (フォートラ ン)がほぼ世界最初の言語として 知られる。

    ◆1959年のCOBOL(コボル)が 事務処理言語として普及、金融系 で今も稼働。 ◆この2つが長く生き残るが、滅んだ (?)言語も他の言語に様々な影響 を与えている。 ◆1963年のBASIC(ベーシック)が ビギナー向け、80年代のパーソナ ルコンピュータ普及に貢献。 Microsoft誕生のきっかけにも。 ◆1971年のC言語がUNIXや WindowsなどOSの主要開発言 語。今も現役。 ◆1983年のC++(シープラスプラ ス、シープラプラ)が、オブジェクト 指向を取り入れたCの上位互換。 https://www.itmedia.co.jp/enterprise/articles/0703/26/news021.html 記事の図を拝借 https://xtech.nikkei.com/it/article/COLUMN/20060825/246464/?ST=ittrend 現在メジャーな 高水準言語 特定分野でまだ 現役な言語 関数型言語 の系譜 コンパイラ型 1947年 ハーバード大 「マークII」での 世界初のバグ !! インタプリタ型 インタプリタ型
  6. 6 2. プログラミング言語の分類 ◆①コンパイル型/インタプリタ型 ◆コンパイル型:コンパイラ型とも。テキストのコードを実行形式にコンパイルして動 作。実行速度が早い。1980年代までの多くの言語が該当。 ◆インタプリタ型:1行ごとに実行。実行速度より開発効率、柔軟性を重視。動的言語、 軽量級言語、スクリプト系言語などとも呼ばれる。 ◆②型の扱い ◆型なし:データがその種別の情報を持たない。(機械語のみ)

    ◆静的な型:コンパイル時にチェック。C, C++, Java, C#, Kotlin, Go, Rustなど ◆動的な型:型が実行時に決まる。手軽に書け柔軟性が高い。Python, Ruby, PHP… ◆③ベースになる考え方、計算モデル ◆手続き型:コンピュータの実行手順そのままのベーシックな計算モデル。計算は 「逐次実行」「条件判断」「繰り返し」から構成する。 ◆オブジェクト指向型:クラスとメソッドを持ったオブジェクト指向をベースに。多く の言語が備えている。 ◆関数型:同じ入力に対しては常に同じ出力を返す数学的な「関数」をベース。 ◆論理型:述語論理をベースにしたモデル。メジャーな言語では使われていない。 3つの分類方法 近年は進化し 混合している(後述) 「マルチパラダイム」といって、ほとんどの言語は複数の 考え方を備えている。 パラダイム:ものの見方、考え方の枠組み
  7. 7 2003- 2001- サポート終了 (2014) 3-1. コンパイル型言語の潮流:Java 1991 2000 2010

    2020 Javaの公式 マスコット、Duke ◆Java (ジャバ、コーヒーのJavaは「ジャワ」) ◆由来は開発チームが通ったコーヒーショップのメニューという説が最有力。 ◆クラスベースのオブジェクト指向、マルチスレッド、ガベージコレクション等 手堅い特徴。Sun Microsystems製。 ◆90年代後半のインターネット黎明期、オブジェクト指向のブームと重なり 大きく普及。 ◆Strutsで標準を定めた開発と相性がよく、ゼロ年代のWeb開発、特に 大規模エンタープライズ開発をC#と共に長らく強力に支える。 ◆Oracleによる買収の混乱の頃から徐々に衰退の兆しを見せ、2010年代後期 に遂に首位をJavaScript、Pythonに明け渡すことに… ◆古いバージョンで固定されたレガシーアプリ保守や大企業の下請けで苦労、 転職前に問題プロジェクトで苦労…などとマイナス面と関連して語られる ことも多く、現在ではネガティブ、レガシーなイメージも多めに。 JDK1.3 Java SE6 Java SE7 Java SE10 Java SE18 2022 2018 2011 2006 Java SE8 2014 2000 5年もの長い停滞期間… OracleがSun買収!! Servlet/JSP Java Applet→終了 ライセンス有料化の噂などでイメージダウン… 10以降は半年ごとにリリース。有償のサポート延長がある 2004 流行らず Springの後継たりえる新たなWebフレームワークが登場せず。 この間、Ruby,PHPの台頭、Pythonの急上昇、JavaScript復権 とフロントエンドの発展、クラウドの登場、コンテナの登場、Goや Rustのような新しい言語登場…など変化が続き出遅れる C/C++ 古めの名著は Javaが多い Groovy→流行らず AWS認定試験でも レガシー扱い…
  8. 8 3-2. 続き JVM系言語 2003 2000 2010 2020 ◆Scala (スカラ)

    ◆オブジェクト指向言語と関数型言語の特徴を統合した言語。Scalable languageより。 ◆Java仮想マシン(JVM)上で動くのでJavaの資産も使える。 ◆2010年代前半にスタートアップ企業などで採用され一時は話題になったが、 現在は言語全体の中ではシェアは低め。 ◆Kotlin (コトリン) ◆”Better Java”を合言葉にnull安全保証を始め様々な機能を追加した言語。 ◆こちらもJVM上で動くのでJavaと同居可能。 ◆由来はバルト海のコトリン島。IDEのIntelliJ IDEAで知られるチェコの企業JetBrains社製。 ◆2015より、Javaに代わりAndroidネイティブアプリの開発の推奨言語に。 ◆バックエンドでもJava製システムのリプレイスなどに先進企業で使われている。 V3.1.3 2022 V3.0 2021 関数型言語の 系譜 2011 V1.0 2022 V1.7.0 2016 インタプリタ型 言語も影響 https://www.scala-lang.org/ https://kotlinlang.org/ 2021年登場のKotlinの マスコット 名前がまだないとのこと 採用!!
  9. 9 C/C++ 実行環境の方 名前がよく変わる 2000 2010 2020 3-3. 続き:MS系 2000

    ◆C# (シーシャープ) ◆Javaに似すぎていたVisual J++という言語が黒歴史で消えた後に登場。 ◆由来はC++をさらにインクリメント、++を足して4つで#という説が有力。 ◆Microsoft謹製、開発のIDEはお馴染みVisual Studioを使う。Javaと並んで2000年代の サーバーサイド開発を支えた。MS系技術の中核。 ◆型推論を始めJavaよりも改良が速く、現在も精力的に進化が続いている。 ◆各技術を用いたデスクトップアプリ、(今なら)ASP.NET Coreを用いたWebアプリ、 ゲームエンジンのUnityを用いたゲーム開発など、実は適用分野が幅広い。 ◆言語の選択肢が多いためか、Web開発でのシェアは少なめ。 ユーザーがビジネス寄りだからか、ネット上の情報が意外に少ない。 ◆なおVisual Basic .NET(VB.NET)も一応続いているが、 C#が完全上位互換。 ◆関連技術の流行り廃りが速く、名前の変遷がややこしい… 2011年の名著! 後半のサンプル コードが実はC# V1.0 2002 V5.0 2012 V9.0 2020 .NET Framework 1.0 2002 .NET Framework 4.6 2015 .NET Core 1.0 2016 .NET Core 3.1 .NET 5 .NET 6 2019 2020 2021 VBも この頃 Unityの公式 マスコット、 ユニティちゃん
  10. 10 https://rustacean.net/ https://www.rust-lang.org/ja/ 2000 2010 2020 2022 4. コンパイル型言語の新たな流れ ◆Go

    (ゴー) ◆Javaを超える十分な実行速度、クラウドやコンテナとの親和性、低レイヤー系など、 隙間を埋めた独自の立ち位置。マスコットのゆるいゴーファーくんが目印。 ◆Rust (ラスト) ◆”Better C”だったGoよりさらに高速でC/C++に完全に並び、置き換えられるので はと期待。Mozilla製。Stack Overflowの愛される言語 2016年から7年連続1位。 ◆ガベージコレクションなし、様々な機能でメモリ安全、型安全を確保。 ◆由来は錆びのRust。メンバーに自転車愛好家が多く自転車のチェーンがロゴに。 ◆非公式マスコットがカニさんの「フェリス(Ferris)」。鉄に関連することを意味する 形容詞ferrousより。 ◆次のOSやブラウザの開発言語になるのではと言われる。 ◆日本での事例がまだ少ない割に本は10冊程出ており、先進的な エンジニアに注目されている。学習コストが高いと言われる… 2009 V1.0 V1.18.3 2012 2022/6 Python(の開発速度) モダンな言語の長所 2010 V1.0 2015 V1.62.0 2022/7 C/C++、 関数型言語の系譜 Hello! !!
  11. 11 2000 2010 2020 5. スマートフォン時代の到来 1984 2008 関数型言語の Smalltalk,

    C言語 ◆Objective-C (オブジェクティブ・シー, ObjC) ◆実は歴史が古く、OS用に作られた言語。けっこうマイナー。 ◆2007年のiPhone登場の衝撃の頃、iPhoneネイティブアプリの開発言語として発表。 ◆しかし現在では後続のSwiftにほぼ置き換わっている。 ◆Swift (スウィフト) ◆Objective-Cの資産も使えるようにしつつ、様々な言語のアイデアを受けて 作られた言語。こちらもApple製。 ◆Objective-Cよりだいぶ習得しやすいと言われ、アプリ開発者に歓迎された。 ◆由来はSwift=アマツバメ (時速169kmの鳥類最速種)。高速な動作や開発の イメージ。 ◆LinuxやWindowsでも動くが、ほぼMacやiOSネイティブアプリ開発用。 2014 V5.6.1 2022 本物の アマツバメ 他の様々な 言語 Androidでの開発は、前述の ように2015年からKotlin推奨
  12. 12 6-1. インタプリタ型言語の発展 1987 1990 2000 2010 2020 ◆Perl (パール)

    ◆新約聖書の”高価な真珠”(Pearl)にちなんだ命名。 ◆強力な正規表現を持ち、90年代終わり~ゼロ年代のWebの掲示板などでも活躍。 サーバーサイドの後続の言語に影響を与えつつ、その役目をほぼ終えた… ◆Ruby (ルビー) ◆メジャーな言語の中で唯一日本発、親はまつもとゆきひろ(Matz)さん。1965年生まれ。 ◆Pearlが6月の誕生石で次の7月の誕生石から取ったと言われる。 ◆純粋オブジェクト指向言語、プログラミングを楽しめることを設計思想に。 ◆アジャイル界隈やベンチャー、インターネット系企業などから根強い支持。エンジニア界隈 に愛好者や著名人が多い。初級~上級まで本やネット情報も豊富。 ◆しかし近年はPythonその他に押されて世界的なシェアでは下がっている。型サポートや 高速化等々、今後の動向が注目されている。 V5.0 1994 V5.36 2022 1995 著名FW登場 Ruby on Rails 2004 V2.0.0 2013 V3.0.0 2021 V3.1.2 2022 Pythonも C 個人ホームペー ジ全盛期 ブログ、SNS、 2chなど ゼロ年代後半~2010年代後半まで、Webの バックエンド軽量言語ではRubyとPHPが有名 講演多数のMatzさん 今もITエンジニア界の カリスマ的存在 2015頃まではRuby非公式 マスコット「るびくる」がいた。 ほか、ラブライブ!の黒澤ル ビィがネタに使われたり Perlは徐々に他の言語に 置き換わり姿を消す…
  13. 13 1991 6-2. インタプリタ型言語の発展 1995 2000 2010 2020 ◆PHP (ピーエイチピー)

    ◆動的Webページ作成が最初の用途だった所から発展。 ◆PHP: Hypertext Preprocessor より。マスコットはelePHPant。 PHPという文字を崩すと象っぽいかららしい。 ◆Web制作や初級者層にもユーザーが多い。求人、本、ネットの情報も豊富。形を変 えながらしぶとく生き残っている。 ◆AWS Lambdaの対応言語になかったりクラウドでは若干仲間外れ感あり。 ◆Python (パイソン) ◆実は歴史が古い。”Battery Included”な豊富なライブラリ、Glue(糊)言語。 ◆python=ニシキヘビ。由来はイギリスの番組『モンティ・パイソン』より。 ◆TIOBE Indexで2020年のプログラミング言語ランキング遂に1位、首位継続中! ◆データサイエンス、システム管理、教育。ここ1年でWebアプリの本も出揃ってきた。 V5.0 クラス導入 2004 V7.0 型導入 2015 V8.0 高速化等 2020 V8.1.6 2022 Perl C V2.0 2000 V3.0 下位互換なし 2022 V3.10.5 2008 AI・機械学習 ブームで大浮上!! 2016?前後 V3.5 型ヒント 2015 青いエレファント Pythonエンジニ ア育成推進協会 のマスコット
  14. 14 6-3. インタプリタ型言語の発展 1995 2000 2010 2015 2020 ◆JavaScript (ジャバスクリプト)

    ◆最初の名称はLiveScriptだったが、Java人気にあやかり名前を変えた。 ◆ゼロ年代は忌み嫌われたいらない子扱いだったが復権、バックエンドも こなす主要言語に返り咲いた。 ◆ここまで変化の激しい言語は珍しく、歴史が面白い。仕様が毎年 進化し続けている。 ◆TypeScript (タイプスクリプト) ◆AltJS言語:TSでコードを書き「トランスコンパイル」するとJSコードに変換されて 動作。充実した型サポートと型推論でVSCode上で実装支援。JSの完全上位互換。 ◆Microsoft謹製。言語設計者が同じなので実は文法がC#と似ている。 ◆他のAltJS言語:Dart (ダート) JavaScript置き換えを狙ったが叶わず、しかし クロスプラットフォーム開発FWのFlutter(フラッター)専用言語として生まれ変わった。 公式ロゴのフォントは Windows10標準の ”Segoe UI” 第一次 ブラウザ戦争 IEが勝つ ECMAScript 策定するも 混乱期 Google Maps,Ajax フロントエンド元年 復権開始!! ES2020 V1.0 V4.7.4 ES2021 ES2022 Angular ES2015(ES6) 2011 2012 2014 2000 2005 2009 2022 V2.0 2016 2018 V3.0 2010年代後半から動きが大きく、 「フロントエンドエンジニア」という 職種が認知されるように 名著。2版は コードがJSに! 2022/6 祝 IE終了!!
  15. 15 7. テック系ジャイアント企業との関係 ◆G: Google ◆社内の標準言語7つはC, C++, Java, JavaScript, Python,

    Go, TypeScript ◆Go言語を開発 [2009] ◆クロスプラットフォーム開発FW用のAltJS言語、Dart (ダート) [2011] ◆フロントエンドのJavaScriptフレームワーク、Augular (アンギュラー) [v2は2016] ◆A: Apple ◆MacOS/iOSアプリ用のObjective-C [1984] ◆後続のSwift [2014] ◆F: Facebook (現meta) ◆PHPを改造したHACK(ハック)という言語を内部では使っているらしい [2014] ◆フロントエンドのJavaScriptフレームワーク、React (リアクト) [2013] ◆A: Amazon (主にAWS) ◆特定の言語を保有していないので概ね中立。 ◆AWSのLambda関数もお好きな言語で、となっている。 ◆Lambda自体の基盤の仕組みではRustも使われている。 ◆M: Microsoft ◆Javaと並びバックエンドで伝統的なC# [2000] ◆フロントエンドを加速させたTypeScript [2012] ◆90年代末~ゼロ年代の悪のMS帝国のイメージから一新、仕様を積極公開し 開発者に寄り添った姿勢に。 ◆汎用コードエディタのVisual Studio Code [2016]、GitHubを買収 [2018]、 Teamsの台頭 [2020-]など着実に進めている。 Angular 黙示録の四騎士 Microsoft CEO サティア・ナデラ氏 2014-
  16. 16 8. 近年のトレンド ◆①インタプリタ型言語の型サポートや型推論 ◆Python: 3.5から型ヒントを書けるように ◆PHP: 7.*から型を書けるように ◆Ruby: Ruby3で静的型チェッカー導入

    ◆C#: 3.0から[2008]、Java: ようやく10から[2018]、varで変数宣言すると型推論されるように ◆GoとRust, TypeScript: 言語仕様で最初から型推論を組み込み ◆②関数型プログラミングスタイル ◆Scala: 関数型言語の流れを受け継ぐ言語 ◆JavaScript/TypeScriptフレームワークのReactも関数コンポーネントが主流に ◆③Null安全:「Nullは10億ドルに相当する誤りだった」 [2009] ◆Kotlin: 型名の後に?をつけないとnull非許容、ぬるぽを言語で防ぐ ◆TypeScript: 2.0から設定ファイルでstrictNullChecks導入、true推奨 ◆④不変(Immutable): 変数には値を再代入しない方が安全という考え方 ◆モダンJavaScript: 変数宣言はletよりconst推奨。TypeScriptはreadonlyがある ◆Java: 1.8あたりからImmutableなListが登場 ◆C#: 7.2あたりからreadonly修飾子が強化 ◆Rust: “let x = 5;”が不変、識別子mutをつけて初めて可変に ◆Go, Rust: 未使用の変数もコンパイル時に弾ける ◆⑤オブジェクト指向の見直し ◆ゼロ年代のオブジェクト指向=絶対正義 ではなくなってきている ◆「継承より移譲」の考え方 ◆クラスや継承を敢えて持たない言語もある。例: Go, Rust ◆⑥コード設計の重要性 ◆書いて終わりでなく変更され続ける→保守性や変更容易性が重要 ◆リファクタリング、ドメイン駆動設計(DDD) 、Clean Architectureのような設計技法、 テスト駆動開発(TDD)などが注目 なんぞ? 2002 20周年!
  17. 17 9. おまけ: プログラマーの通り名 言語名 通り名 補足 COBOL COBOLer (コボラー)

    揶揄的、自虐的なニュアンス。なおPL/I使いの通り名はない… C, C++ 特に定まっていない C/C++ ProgrammerとかC+er(シープラー) C++er(シープラプ ラー) C# C#er (シーシャーパー) CSharp+erでCSharper。悪い意味はない。 Java 特に定まっていない ジャバラーとかJava屋、ネタでJavarista (ジャバリスタ、コーヒーのバリスタ) など Scalla Scalalian (スカラリアン) Scalman (スカルマン) 後者はネタ。石森章太郎氏の昔の漫画と同名 Kotlin 特に定まっていない? Perl Perler (パーラー) Perl Monger (パール・モンガー) 後者は世界のPerlユーザーグループ名に使われている。 Monger: 何かを売りつける商人、つまらないことに夢中になる人の意。詳 しい人とか信者的なニュアンスあり PHP PHPer (ペチパー) PHPer Kaigiなどカンファレンス名で使われる一方、揶揄的にも使う。 Ruby Rubyist (ルビイスト) 入門者でなく詳しい人に使う。最上級で格調高い。言語レベルで改造でき る人は昔はRuby Hackerと呼んだらしい。 Python Pythoner (パイソナー) Pythonista (パイソニスタ) 前者は比較級で単にPythonを使う人。あまり使わない言葉。 後者が自由に使いこなせる人の称号的なもの。熱狂的な信者の意味も。 JavaScript JavaScripter (ジャバスクリプター) JSer (ジェイサー) JavaScriptのユーザー≒ほぼ「フロントエンドエンジニア」と同義。(バックエ ンドもあるが) なおTypeScript使いの独自の通り名は特にない模様。 Go Gopher (ゴーファー) マスコットのゴーファー君と同じ。eGoist(エゴイスト) というネタも。 Rust Rustacean (ラステイシャン) Crustacean (クラステイシャン, カニやザリガニの甲殻類)の言葉遊び。 マスコットもカニさんのフェリス。 ~erの比較級: 単に使う人、謙遜、場合により悪い意味も ~istの最上級: マスタークラスの人への尊称的呼び名
  18. 18 10. 本日のまとめ ◆様々なプログラミングパラダイムを持った言語があり、互いに影響を与 えあいながら発展してきました。今も進化が続いています。 ◆世界/日本でのシェア、ネット上の情報量、開発者からの人気などのパラ メーターは相関関係がありながらも微妙に違ったりします。 ◆現在は単一の言語で全てを賄うのではなく、目的ごとに、それぞれの言 語の特徴を活かして使い分けをしていく時代となっています。 Creative

    Commons Attributions 3.0 The Gopher character is based on the Go mascot designed by Renée French. それではまた次回! 資料中の様々なロゴやマスコットは、その言語や技術の公式・非公式のものです。 カニさんと友達になれたよ! この動画が動きで分かりやすいのでオススメ Most Popular Programming Languages 1965 - 2019 https://www.youtube.com/watch?v=Og847HVwRSI UPDATED!! Most Popular Programming Languages 2000 - 2021 https://www.youtube.com/watch?v=JP1hzHfaEHw Stack Overflow Developer Survey 2022 https://survey.stackoverflow.co/2022/ 後を頼んだよ…