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

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

iwasiman
April 24, 2023

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

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

iwasiman

April 24, 2023
Tweet

More Decks by iwasiman

Other Decks in Programming

Transcript

  1. 先端技術勉強会 技術講習会
    2023/4
    @iwasiman
    Advanced
    -STUDY GROUP-
    第4回 ゴーファーくんと辿る
    プログラミング言語の歴史
    Technology
    TECH-SESSION
    祝・再開催 Update版
    2023/4/24

    View Slide

  2. 2
    この技術講習会(先端技術勉強会)について
    ゆるくやっていくので、気軽にいきましょう!
    ⚫ 新年度開始、メンバー15人に増加。グループを超えて部門の活動となりつつ
    あるので今まで通り続けていきます!!
    ⚫ 頻度は不定、基本1H+α、だいたい夕方にやっています。
    ⚫ とりあえず始めてみて様子を見ながら続けます。
    ⚫ 説明中も適宜ブレイク(間)を挟むので、リアクションはその都度音声でも
    チャットでもOKです!
    ⚫ テーマはフリー、参加者から聞いたりして決めていきます。
    ⚫ 次回テーマは [いよいよPythonかも?] ,[フロントエンドを題材に前後編で
    資料作成中] 。その後のテーマ候補も募集中です!
    ⚫ 皆さんが講師をしてくれるのも大歓迎です!
    第1回 ゴーファーくんと学ぶGo言語の世界 [再開催中]
    第2回 AWSの基本情報の歩き方
    第3回 ゴーファーくんと学ぶAWSサーバーレスの世界
    第4回 ゴーファーくんと辿るプログラミング言語の歴史 ★今日はここ★
    第5回 ゴーファーくんたちと学ぶRust言語の世界 [再開催中]
    第6回 ゴーファーくんと探るMendixの有用性
    第X回 某先生がPythonの機械学習コンペ(Kaggle)の話をいつか語ってくれるのでは…?
    第Y回 ゴーファーくんたちと辿るJavaScriptの潮流 (前編、資料作成中!)
    第Y+1回 ゴーファーくんたちと辿るフロントエンドFWの潮流(仮) (テーマが大きいので後編)

    View Slide

  3. 第4回
    ゴーファーくんと辿る
    プログラミング言語の歴史
    目的:様々なプログラミング言語と歴史を
    全体の視点から概観し、
    今後使う機会に備えてもらう
    友達を探しに行くよ!
    祝・再開催 Update版
    2023/4/24

    View Slide

  4. 1. 20世紀までの進化の系譜
    2. プログラミング言語の分類
    3. まず、主要言語の分布イメージ (2枚)
    4. コンパイル型言語の潮流 (3枚)
    5. コンパイル型言語の新たな流れ
    6. スマートフォン時代の到来
    7. インタプリタ型言語の発展 (3枚)
    8. テック系ジャイアント企業との関連
    9. 近年のトレンドいろいろ
    10.おまけ:プログラマーの通り名
    11.おまけ:各言語の実行速度差イメージ
    12.本日のまとめ
    ゴーファーくんと辿る
    プログラミング言語の歴史
    ⚫ SQL、HTML、CSS、Shell系の話は除きます
    ⚫ 組み込み系やデータ処理やデータサイエンス系用途を除いた、一般的なアプリケーション開発で使う言語を扱っています
    祝・再開催 Update版
    2023/4/24

    View Slide

  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」での
    世界初のバグ
    !!
    インタプリタ型
    インタプリタ型
    関数型言語: 数学的な関数を主軸にした言語。参照透過性、高階関数etc。
    結構難しい。今日のモダンな言語群にその考え方が受け継がれている。


    View Slide

  6. 6
    2. プログラミング言語の分類
    ◆①コンパイル型/インタプリタ型
    ◆コンパイル型:コンパイラ型とも。テキストのコードを実行形式にコンパイルして動
    作。実行速度が早い。1980年代までの多くの言語が該当。
    ◆インタプリタ型:1行ごとに実行。実行速度より開発効率、柔軟性を重視。動的言
    語、軽量級言語、スクリプト系言語などとも呼ばれる。
    ◆②型の扱い
    ◆型なし:データがその種別の情報を持たない。(機械語のみ)
    ◆静的な型:コンパイル時にチェック。C, C++, Java, C#, Kotlin, Go, Rustなど
    ◆動的な型:型が実行時に決まる。手軽に書け柔軟性が高い。Python, Ruby, PHP, JS
    ◆③ベースになる考え方、計算モデル
    ◆手続き型:コンピュータの実行手順そのままのベーシックな計算モデル。計算は
    「逐次実行」「条件判断」「繰り返し」から構成する。
    ◆オブジェクト指向型:クラスとメソッドを持ったオブジェクト指向をベースに。多く
    の言語が備えている。
    ◆関数型:同じ入力に対しては常に同じ出力を返す数学的な「関数」をベース。
    ◆論理型:述語論理をベースにしたモデル。メジャーな言語では使われていない。
    3つの分類方法
    近年は進化し
    混合している(後述)
    「マルチパラダイム」といって、ほとんどの言語は複数の考え方を備
    えている。オブジェクト指向型+関数型が多い。
    パラダイム: ものの見方、考え方の枠組み

    View Slide

  7. 7
    3. まず、主要言語の分布イメージ①
    Webアプリ
    フロントエンド
    (クライアントサイド)
    バックエンド(サーバーサイド,
    バッチ系も大まかに含む)
    コンパイル型言語(静的)
    インタープリタ型言語(動的,LL,軽量級,スクリプト系)
    2014
    1996
    2002
    登場年
    (基本はv1)
    2012
    1995 1995
    1994
    2015
    2019
    1995
    オレンジが2000年代後半以降の、
    一般に”モダン”と分類される言語
    ★定番言語でも新Verならモダンと
    呼ぶ場合もアリ
    WebAssembly(WASM,ワズム)
    という技術で、各言語の実行ファ
    イルでJS処理を部分的に受け
    持ったり。C/C++,Rustが主。
    今後の発展に注目…
    2020
    2009
    JavaとC#が同世代
    右の3つを「JVM系言語」
    2000年代後半頃から手軽さや
    開発速度、アジャイルとの親和性で
    若い企業で採用多し。
    実行速度ではコンパイル型に劣る
    2016
    2003
    モダン
    モダン
    (ES6以降)
    モダン
    モダン モダン
    2014
    ちょっとマイナーな
    エリクサー言語
    1987
    Node.js, Denoは
    言語でなくJS実行環境
    JavaScript、型で強化した
    TypeScriptがフロントエンド
    の華。ブラウザの上で動く言語
    は現状これだけ。しばらくは独
    占状態が続くハズ…?
    この勉強会で今後
    フィーチャー予定です

    View Slide

  8. 8
    3. 主要言語の分布イメージ②
    低レイヤー、低水準、システムプログラミング
    1972 1983
    iOS: Objective-C→Swift
    Android: Java→Kotlin
    2012 2015
    モバイル、
    スマートデバイス
    コンパイル型言語(静的)
    2014
    2016
    2018
    2013
    2015
    モバイルバックエンド
    ネイティブアプリ開発
    クロスプラットフォーム開発
    Webアプリのバックエンド
    と同じ言語群
    Flutter: AltJSのDart言語を使用
    React Native: JavaScript
    .NET MAUI: C# ←★出たばかり!
    2022
    クラウドプラットフォーム
    デプロイしやすさが強み
    基盤技術でも使われたり
    長らくC,C++の独壇場だったが、
    置き換えられると期待大
    モダン
    モダン
    モダン
    モダン
    モダン

    View Slide

  9. 9
    2003-
    2001-
    サポート終了
    (2014)
    4-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 20
    2023/3
    2018
    2011
    2006
    Java SE8
    2014
    2000
    5年もの長い停滞期間…
    OracleがSun買収!!
    Servlet/JSP
    Java Applet→終了
    ライセンス有料化の噂などでイメージダウン…
    10以降は半年ごとにリリース。有償のサポート延長がある
    2004
    流行らず
    Springの後継たりえる新たなWebフレームワークが登場せず。
    この間、Ruby,PHPの台頭、Pythonの急上昇、JavaScript復権
    とフロントエンドの発展、クラウド[2006-]、コンテナ[2014-]、
    GoやRustのような新しい言語登場…など変化が続き出遅れる
    C/C++
    古めの名著は
    Javaが多い
    Groovy→流行らず
    AWS認定試験でも
    レガシー扱い…
    2022/11 v3

    View Slide

  10. 10
    4-2. 続き JVM系言語
    2003
    2000 2010 2020
    ◆Scala (スカラ)
    ◆オブジェクト指向言語と関数型言語の特徴を統合した言語。Scalable languageより。
    ◆Java仮想マシン(JVM)上で動くのでJavaの資産も使える。
    ◆2010年代前半にスタートアップ企業などで採用され一時は話題になったが、
    現在は言語全体の中ではシェアは低め…
    ◆Kotlin (コトリン)
    ◆”Better Java”を合言葉にnull安全保証を始め様々な機能を追加した言語。
    ◆こちらもJVM上で動くのでJavaと完全同居可能。コードは.ktだがビルドすると.jarになる。
    ◆由来はバルト海のコトリン島。フィンランド語の「やかん」でロゴもやかん。IDEのIntelliJ IDEAで
    知られるチェコ本社のJetBrains社製、ロシアのサンクトペテルブルグ生まれ。
    ◆2017よりAndroidネイティブアプリ開発サポート開始、2019にJavaに代わり正式推奨言語に。
    ◆バックエンドでもJava製システムのリプレイスなどに先進企業で使われている。
    V3.2.2
    2023
    V3.0
    2021
    関数型言語の
    系譜
    2011
    V1.0
    2023
    V1.8.20
    2016
    インタプリタ型
    言語も影響
    https://www.scala-lang.org/
    https://kotlinlang.org/
    2021年登場のKotlinの
    マスコット
    名前がまだないとのこと
    サポート!!
    2021に実はロゴ更新
    最新のコーディング本
    言語はKotlin! (2023)
    採用!!

    View Slide

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

    View Slide

  12. 12
    https://rustacean.net/
    https://www.rust-lang.org/ja/
    2000 2010 2020 2022
    5. コンパイル型言語の新たな流れ
    ◆Go (ゴー)
    ◆Javaを超える十分な実行速度、クラウドやコンテナとの親和性、低レイヤー系など、
    隙間を埋めた独自の立ち位置。マスコットのゆるいゴーファーくんが目印。
    ◆Rust (ラスト)
    ◆”Better C”だったGoよりさらに高速でC/C++に完全に並び、置き換えられるのではと
    期待。Mozilla製。Stack Overflowの愛される言語 2016年から7年連続1位に輝く!!
    ◆ガベージコレクションなし、様々な機能でメモリ安全、型安全を確保。
    ◆由来は”錆び”のRust等。メンバーに自転車愛好家が多く自転車のチェーンがロゴに。
    ◆非公式マスコットがカニさんの「フェリス(Ferris)」。鉄に関連することを意味する
    形容詞ferrousより。
    ◆次期Android OS, Windows, Linux, ビルドツール系などで次々採用...
    ◆日本での事例はまだ少なめだが本は24冊、機運が高まっている。
    先進的なエンジニアに注目。学習曲線が急(=むずい)と言われる…
    2009
    V1.0 V1.20.3
    2012 2023/4
    Python(の開発速度)
    モダンな言語の長所
    2010
    V1.0
    2015
    V1.69.0
    2023/4
    C/C++、
    関数型言語の系譜
    Hello! !!
    この勉強会の第1回、第5回
    でフィーチャーしてます!!

    View Slide

  13. 13
    2007/1 iPhone登場
    2010頃~ スマホブーム始まる
    2000 2010 2020
    6. スマートフォン時代の到来
    2008
    関数型言語の
    Smalltalk,
    C言語
    ◆Objective-C (オブジェクティブ・シー, ObjC)
    ◆実は歴史が古く、OS用に作られた言語。けっこうマイナー。
    ◆2007年のiPhone登場の衝撃の頃、iPhoneネイティブアプリの開発言語として発表。
    ◆しかし現在では後続のSwiftにほぼ置き換わっている。両方ともApple印。
    ◆Swift (スウィフト)
    ◆Objective-Cの資産も使えるようにしつつ、様々な言語のアイデアを受けて作られた。
    ◆Objective-Cよりだいぶ習得しやすいと言われ、アプリ開発者に歓迎された。
    ◆由来はSwift=アマツバメ (時速169kmの鳥類最速種)。高速な動作や開発のイメージ。
    ◆LinuxやWindowsでも動くが、ほぼMacやiOSネイティブアプリ開発用。
    2014
    V5.8
    2023/3
    本物の
    アマツバメ
    他の様々な
    言語
    Androidでの開発は、前述のように
    2016年からKotlinサポート、
    2019年に正式推奨に
    モダンな言語のバージョン1登場:
    Kotlinが2016で最若手
    Rustが2015, Swiftが2014

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  17. 17
    8. テック系ジャイアント企業との関係
    ◆G: Google
    ◆社内の標準言語7つはC, C++, Java, JavaScript, Python, Go, TypeScript
    ◆Go言語を開発 [2009] 、コンテナのKubernetesでも使用
    ◆クロスプラットフォーム開発FW Flutter専用のAltJS言語、Dart (ダート) [2011]
    ◆フロントエンドのJavaScriptフレームワーク、Augular (アンギュラー) [v2は2016]
    ◆A: Apple
    ◆MacOS/iOSアプリ用のObjective-C [1984]、後続のSwift [2014]
    ◆F: Facebook (現meta)
    ◆PHPを魔改造したHACK(ハック)という言語を内部では使っているらしい [2014]
    ◆社内の採用言語はPython, C++, HACK。さらにRustがジョイン [2022/8]
    ◆フロントエンドのJavaScriptフレームワーク、React (リアクト) [2013]
    ◆A: Amazon (主にAWS)
    ◆特定の言語を保有していないので概ね中立。
    ◆AWS Lambdaも好きな言語で可能。Lambda自体の基盤の仕組みでは
    Rustも使われている。
    ◆M: Microsoft
    ◆バックエンドで伝統的なC# [2000]、フロントエンドを加速させたTypeScript [2012]
    ◆90年代末~ゼロ年代の悪のMS帝国のイメージから一新、仕様を積極公開し開発者に
    寄り添った姿勢に。
    ◆汎用コードエディタのVisual Studio Code [2016]、GitHubを買収 [2018]、
    Teamsの台頭 [2020-]、BingにAI搭載[2023]と着実に進めている。
    Angular
    黙示録の四騎士
    Microsoft CEO
    サティア・ナデラ氏
    2014-

    View Slide

  18. 18
    9. 近年のトレンドいろいろ
    ◆①インタプリタ型言語の型サポートや、型推論
    ◆Python: 3.5から型ヒントを書けるように
    ◆PHP: 7.*から型を書けるように
    ◆Ruby: Ruby3で静的型チェッカー導入
    ◆C#: 3.0から[2008]、Java: ようやく10から[2018]、varで変数宣言すると型推論されるように
    ◆Go, Rust, Kotlin, Swift, 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が登場 Kotlin: val で変更不可に
    ◆C#: 7.2あたりからreadonly修飾子が強化
    ◆Rust: “let x = 5;”が不変、識別子mutをつけて初めて可変に
    ◆Go, Rust: 未使用の変数もコンパイル時に弾ける
    ◆⑤オブジェクト指向の見直し
    ◆ゼロ年代のオブジェクト指向=絶対正義 ではなくなってきている
    ◆「継承より移譲」の考え方。 Kotlin: クラスはデフォルト継承不可
    ◆クラスや継承を敢えて持たない言語もある。例: Go, Rust
    ◆⑥コード設計の重要性
    ◆書いて終わりでなく変更され続ける→保守性や変更容易性が重要
    ◆リファクタリング、ドメイン駆動設計(DDD) 、Clean Architecture
    ◆テスト駆動開発(TDD)などが注目
    ぬるぽってなんぞ?
    2002
    20周年!

    View Slide

  19. 19
    10. おまけ: プログラマーの通り名
    言語名 通り名 補足
    COBOL COBOLer (コボラー) 揶揄的、自虐的なニュアンスも。なおPL/I使いの通り名はない…
    C, C++ 特に定まっていない C/C++ ProgrammerとかC+er(シープラー) C++er(シープラプ
    ラー)
    C# C#er (シーシャーパー) CSharp+erでCSharper。悪い意味はない。
    Java 特に定まっていない ジャバラーとかJava屋、ネタでJavarista (ジャバリスタ、コーヒーのバリスタ)
    など
    Scala Scalalian (スカラリアン)
    Scalman (スカルマン)
    後者はネタ。石森章太郎氏の昔の漫画と同名とのこと
    Kotlin 特に定まっていない? “ことりなー”だとちょっとkawaiiかも
    Perl Perler (パーラー)
    Perl Monger (パール・モンガー)
    後者は世界のPerlユーザーグループ名に使われている。
    Monger: 何かを売りつける商人、つまらないことに夢中になる人の意。詳
    しい人とか信者的なニュアンスあり
    PHP PHPer (ペチパー) PHPer Kaigi などカンファレンス名で使われる一方、揶揄的にも使う。
    Ruby Rubyist (ルビイスト) “Rubyに対し単なるお客さん以上の気持ちを持っている人”の意。(日本
    Rubyの会に定義あり) 技術的に高い人は昔はRuby Hackerと呼んだらしい。
    Python Pythoner (パイソナー)
    Pythonista (パイソニスタ)
    前者は比較級で単にPythonを使う人。あまり使わない言葉。
    後者が自由に使いこなせる人の称号的なもの。熱狂的な信者の意味も。
    JavaScript JavaScripter (ジャバスクリプター)
    JSer (ジェイサー)
    JavaScriptのユーザー≒だいたい「フロントエンドエンジニア」。(バックエン
    ドもあるが) なおTypeScript使いの独自の通り名は特にない模様。
    Go Gopher (ゴーファー) マスコットのゴーファー君と同じ。eGoist(エゴイスト) というネタも。
    Rust Rustacean (ラステイシャン) Crustacean (クラステイシャン, カニやザリガニの甲殻類)の言葉遊び。
    マスコットもカニさんのフェリス。Go, Rustは公式で通り名を提供。
    ~er:
    単に使う人、謙遜、場合により悪い意味も
    ~ist:
    同じく使う人、Rubyで使われる

    View Slide

  20. 20
    11. おまけ:各言語の実行速度差イメージ
    遅い..
    ガベージ
    コレクションの壁
    仮想マシンの壁
    インタプリタ型
    言語の壁
    最速!!
    JVM言語であるScala、Kotlinも大まかにはJavaと同程度と思われる。
    C#も、JVMと似た仮想マシンの仕組みの上で動いている。
    詳しくは 『第5回
    ゴーファーくんたちと学ぶ
    Rust言語の世界』 にて!
    Blazingly Fast!
    メモリ安全の防壁
    機械語
    機械語
    中間ファイル
    逐次実行
    メモリ操作の罠
    注:簡略化していますが、実際のプログラムの
    実行速度には、これら「~の壁」以外にも
    言語の仕組みなど様々な要素が関係します。
    このインタプリタ型言語の壁までの間に、かなり大きい速度の差あり。
    Node.jsなどJS実行環境はコンパイル型とインタプリタ型の中間
    らしく、比較的速い。
    主要言語の中では実は遅さが目立つ。Python→
    マシンコードへ変換するコンパイラの「Codon」
    論文発表、C++並みの速度とのこと [2023/3]
    詳しくは 『第1回 ゴーファーくんと
    学ぶGo言語の世界』 にて!

    View Slide

  21. 21
    12. 本日のまとめ
    ◆様々なプログラミングパラダイムを持った言語があり、互いに影響を
    与えあいながら発展してきました。今も進化が続いています。
    ◆世界/日本でのシェア、ネット上の情報量、開発者からの人気などの
    パラメーターは相関関係がありながらも、微妙に違ったりします。
    ◆単一の言語で全てを賄う試みは過去でも成功したことがなく、
    目的ごとに、それぞれの言語の特徴を活かして使い分けをしていく
    時代が続いています。
    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/
    後を頼んだよ…
    Javaの公式
    マスコット、Duke

    View Slide