#プログラミング言語 #mbti
はじめに
インターネット上ではしばしば、プログラミング言語の良し悪しについて議論が起こります。各派閥が優位性を主張して譲らず白熱しますが、わかり合うことはないでしょう。
個人的には、プログラミング言語の好みにプログラマーとしての性格や思考回路を見出すほうが面白いです。
そこで、性格診断としてポピュラーなMBTIの4つの指標をプログラミング言語の特徴に無理やり当てはめてみます。根拠のない分類はプログラマーに嫌われそうですが、厳密なものではなく、あくまで言語の性格や設計思想、エコシステムの特徴を捉えるための遊びとしてお楽しみください。
以下、Google Gemini 2.5 Proで生成した内容です。ぱっと見悪くなさそうだったので1回しか試行していません。
指標の再定義
Extraversion - 外向 vs Introversion - 内向
- E (Extraversion - 外向)
- 外部との連携、広範なエコシステム、コミュニティ、Web/UI開発、多様なライブラリ/フレームワークを重視・得意とする
- I (Introversion - 内向)
- 内部の整合性、パフォーマンス、コアロジック、自己完結性、システムプログラミング、言語仕様の厳密さを重視・得意とする
Sensing - 感覚 vs iNtuition - 直観
- S (Sensing - 感覚)
- 具体的、明示的、手続き的、ハードウェアに近い、既存の確立された方法、詳細な記述を好む
- N (Intuition - 直観)
- 抽象的、概念的、宣言的、パターン、新しい可能性、メタプログラミング、高レベルな概念を好む
Thinking - 思考 vs Feeling - 感情
- T (Thinking - 思考)
- 論理性、効率性、厳密なルール、パフォーマンス、型整合性、数学的な正確さ、エラーへの厳格さを重視
- F (Feeling - 感情)
- 開発者体験(DX)、可読性、表現力、コミュニティの調和、柔軟性、実用性、寛容な構文やエラーハンドリングを重視
Judging - 判断的態度 vs Perceiving - 知覚的態度
- J (Judging - 判断的態度)
- 構造、計画性、静的型付け、明示的な宣言、コンパイル時チェック、厳格なパラダイム(純粋なOOなど)を好む
- P (Perceiving - 知覚的態度)
- 柔軟性、適応性、動的型付け、型推論、スクリプティング、マルチパラダイム、実行時の自由度を好む
16タイプの言語性質
ISTJ - 体系的オプティマイザ (Systematic Optimizer)
内部の制御とパフォーマンスを最重視。具体的で明示的な構文を持ち、論理的な正確性と効率性を厳密に追求する。構造化され、計画的な開発を好み、静的型付けとコンパイルが基本。
例: C, C++, Ada, Go, Assembly, SQL, Eiffel
ISFJ - 信頼性あるメンテナ (Reliable Maintainer)
内部の安定性と一貫性を重視。具体的で実践的な手順に従い、確立された方法で開発を進める。システムの信頼性や保守性を優先し(利用者の安定性への配慮)、予測可能な結果をもたらす構造を好む。
例: COBOL, PL/SQL, あるいは特定の規約に厳格なフレームワーク下の言語)
INFJ - 信念あるアーキテクト (Principled Architect)
内部の概念的整合性とビジョンを重視。高度な抽象化を用い、根底にある原則(純粋性、安全性など)を追求する。表現力豊かで調和のとれたシステムを目指し、その原則に基づいた構造(しばしば強い型システム)を持つ。
例: Haskell, F#, Elm
INTJ - 戦略的マスターマインド (Strategic Mastermind)
内部の論理と複雑なシステムの構築に焦点を当てる。強力な抽象化能力を持ち、パターンや長期的な可能性を見据える。論理的な正しさ、効率性、そしてしばしば複雑な型システムによる厳密性を最優先する。計画的で構造化された静的型付け言語。
例: Rust, Haskell, OCaml, F#, Scala, Ada
ISTP - 実用的ティンカラー (Pragmatic Tinkerer)
システムや問題との直接的な対話を重視。具体的で実践的な操作を好み、その仕組みを理解しようとする。効率的な問題解決をその場で行い、柔軟でインタラクティブな探索を可能にする。
例: Forth, 低レベルなスクリプト環境
ISFP - 職人気質クラフター (Artisan Crafter)
内部状態や埋め込みやすさに焦点を当てる。シンプルで具体的な構文を持ち、即時の効果や「手触り感」を重視する。統合しやすく、小規模で心地よいインタラクションを作るのに向いており、柔軟性を持つ。
例: Lua
INFP - 理想主義エクスプローラー (Idealistic Explorer)
内部のモデルや概念的な理想(純粋性、並行性など)を探求する。高レベルな概念で可能性を模索し、表現力やシステムの調和、回復力を重視する。柔軟で、しばしば動的・対話的。
例: Smalltalk, Erlang, R (特定の側面)
INTP - 論理的セオリスト (Logical Theorist)
中核となる論理や理論的可能性の探求に焦点を当てる。高度な抽象化やメタプログラミングを駆使し、論理的なエレガンスと整合性を重視する。非常に柔軟で、しばしば動的、実験を奨励する。
例: Lisp (Scheme/Clojure), Prolog, APL
ESTP - 動的プロブレムソルバー (Dynamic Problem-Solver)
外部とのインタラクションや迅速な結果を重視。実践的で具体的なデータやイベントを扱い、効率的に「物事を終わらせる」ことに長ける。適応性が高く、スクリプティングや動的な環境での素早い問題解決に向く。
例: 一部のシェルスクリプト, JavaScriptの特定の利用法
ESFP - 魅せるパフォーマー (Engaging Performer)
利用者とのインタラクションや幅広いアピールを重視。実践的で具体的な結果を出しやすく、導入が容易。親しみやすさ、開発者の心地よさ、寛容な構文を好み、柔軟で動的な環境(Web、GUI)で魅力を発揮する。
例: PHP, Tcl/Tk, Objective-C (UI開発), JavaScript (シンプルな用途)
ENFP - 表情豊かなカタリスト (Expressive Catalyst)
広大なコミュニティとエコシステムを持ち、多様な領域への接続を重視。高レベルな抽象化で可能性を探り、開発者の幸福感、可読性、表現力を大切にする。非常に柔軟で、多くは動的型付けであり、迅速なプロトタイピングと創造性を促進する。
例: Python, Ruby, JavaScript, Elixir, Groovy, GDScript
ENTP - 賢いイノベーター (Clever Innovator)
異なるシステムやアイデアを接続し、統合やツール開発に力を発揮する。斬新なアプローチ、強力な抽象化、メタプログラミングを探求し、「賢い」解決策を好む。非常に柔軟で、既存の慣習に挑戦し、しばしば動的。
例: Perl, Julia, ClojureScript
ESTJ - 効率的マネージャー (Efficient Manager)
大規模なエコシステムを持ち、エンタープライズ等での利用が多い。明示的で具体的な構文と確立された手法を好み、効率性、堅牢性、明確なロジックを重視する。構造化され、静的型付けと計画的なプロセスが基本。
例: Java, C#, MATLAB, SAS, COBOL, Pascal/Delphi, PowerShell
ESFJ - 支援的ファシリテーター (Supportive Facilitator)
コミュニティ標準や幅広い採用、ユーザー向けのアプリケーションを重視。実践的で段階的な開発プロセスと、明確で具体的な構文を持つ。チームでの保守性、コミュニティの慣習への準拠、ユーザーフレンドリーさを優先する。確立された構造と予測可能性を好む。
例: Visual Basic (全盛期), フレームワーク規約下のPHP/JS
ENFJ - 鼓舞するオーガナイザー (Inspiring Organizer)
大規模な協調、コミュニティ形成、広範な影響力を重視。高レベルなビジョンと抽象化を用いて、大きなシステムやエコシステムを組織化する。開発者の協力、共有された価値観、生産的なエコシステムの創造を優先する。ビジョン達成のための構造と計画性を持つ(プラットフォームやフレームワークなど)。
例: .NETプラットフォーム全体, Railsエコシステムなど
ENTJ - 指揮するストラテジスト (Commanding Strategist)
広範な適用性やプラットフォームでの優位性を目指す。強力な抽象化とモダンな機能を活用し、将来の能力に焦点を当てる。パフォーマンス、論理的一貫性、大規模での効率性を重視する。強力な静的型付けと構造化された設計で、大規模アーキテクチャを可能にする。
例: Swift, Kotlin, Scala, TypeScript, D, Vala, Crystal
各言語のパラメータ評価
- I-E: 内向0-外向1
- N-S: 直感0-感覚1
- F-T: 感情0-思考1
- P-J: 判断的態度0-知覚的態度1
# | 言語 | タイプ | I-E | N-S | F-T | P-J |
---|---|---|---|---|---|---|
1 | Ada | ISTJ | 0.1 | 0.8 | 0.95 | 1.0 |
2 | APL | INTP | 0.1 | 0.1 | 0.8 | 0.1 |
3 | Assembly | ISTJ | 0.0 | 1.0 | 0.9 | 1.0 |
4 | C | ISTJ | 0.1 | 0.9 | 0.9 | 0.8 |
5 | C# | ESTJ | 0.8 | 0.7 | 0.8 | 0.9 |
6 | C++ | ISTJ | 0.1 | 0.9 | 0.9 | 0.9 |
7 | Clojure | INTP | 0.4 | 0.05 | 0.7 | 0.05 |
8 | ClojureScript | ENTP | 0.9 | 0.1 | 0.7 | 0.1 |
9 | COBOL | ESTJ | 0.5 | 0.9 | 0.6 | 1.0 |
10 | Crystal | ENTJ | 0.7 | 0.2 | 0.7 | 0.8 |
11 | D | ENTJ | 0.6 | 0.3 | 0.8 | 0.8 |
12 | Dart | ENTJ | 0.8 | 0.3 | 0.7 | 0.8 |
13 | Eiffel | ISTJ | 0.3 | 0.7 | 0.9 | 0.9 |
14 | Elixir | ENFP | 0.8 | 0.2 | 0.3 | 0.2 |
15 | Elm | INTJ | 0.3 | 0.1 | 0.9 | 0.9 |
16 | Erlang | INFP | 0.4 | 0.2 | 0.3 | 0.2 |
17 | F# | INTJ | 0.6 | 0.1 | 0.9 | 0.8 |
18 | Forth | ISTP | 0.1 | 0.9 | 0.8 | 0.1 |
19 | GDScript | ENFP | 0.7 | 0.4 | 0.2 | 0.1 |
20 | Go | ISTJ | 0.3 | 0.8 | 0.8 | 0.9 |
21 | Groovy | ENFP | 0.8 | 0.4 | 0.3 | 0.1 |
22 | Haskell | INTJ | 0.1 | 0.05 | 0.95 | 0.9 |
23 | Java | ESTJ | 0.8 | 0.7 | 0.8 | 0.9 |
24 | JavaScript | ENFP | 0.95 | 0.2 | 0.3 | 0.05 |
25 | Julia | ENTP | 0.7 | 0.1 | 0.8 | 0.2 |
26 | Kotlin | ENTJ | 0.8 | 0.2 | 0.8 | 0.9 |
27 | Lisp (CL/Scheme) | INTP | 0.2 | 0.1 | 0.7 | 0.05 |
28 | Lua | ISFP | 0.2 | 0.7 | 0.4 | 0.1 |
29 | MATLAB | ESTJ | 0.7 | 0.8 | 0.8 | 0.8 |
30 | Nim | INTJ | 0.4 | 0.2 | 0.7 | 0.7 |
31 | Objective-C | ESFP | 0.7 | 0.7 | 0.4 | 0.3 |
32 | OCaml | INTJ | 0.3 | 0.1 | 0.9 | 0.9 |
33 | Pascal (Delphi) | ESTJ | 0.6 | 0.7 | 0.7 | 0.9 |
34 | Perl | ENTP | 0.6 | 0.2 | 0.4 | 0.05 |
35 | PHP | ESFP | 0.9 | 0.7 | 0.2 | 0.1 |
36 | PowerShell | ESTJ | 0.8 | 0.6 | 0.7 | 0.8 |
37 | Prolog | INTP | 0.2 | 0.1 | 0.9 | 0.4 |
38 | Python | ENFP | 0.9 | 0.2 | 0.2 | 0.1 |
39 | R | INFP | 0.4 | 0.2 | 0.2 | 0.2 |
40 | Ruby | ENFP | 0.8 | 0.2 | 0.1 | 0.1 |
41 | Rust | INTJ | 0.1 | 0.2 | 0.95 | 0.95 |
42 | SAS | ESTJ | 0.6 | 0.8 | 0.8 | 0.9 |
43 | Scala | ENTJ | 0.7 | 0.1 | 0.9 | 0.8 |
44 | Smalltalk | INFP | 0.2 | 0.2 | 0.3 | 0.1 |
45 | SQL | ISTJ | 0.2 | 0.9 | 0.9 | 0.95 |
46 | Swift | ENTJ | 0.7 | 0.3 | 0.8 | 0.8 |
47 | Tcl | ESFP | 0.6 | 0.8 | 0.4 | 0.1 |
48 | TypeScript | ENTJ | 0.9 | 0.3 | 0.8 | 0.8 |
49 | Vala | ENTJ | 0.6 | 0.4 | 0.7 | 0.8 |
50 | Zig | ISTJ | 0.2 | 0.8 | 0.8 | 0.8 |