読者です 読者をやめる 読者になる 読者になる

きくらげ観察日記

好きなことを、適当に。

プログラミング初心者が最初に選ぶべき言語73選

これからプログラミングを始めようとする人にとって、最初の壁となるのが「プログラミング言語の種類が多すぎて、どの言語を勉強すればいいかわからない」ということだと思います。
今日はそんなプログラミング初心者のために、選ぶべき言語をたった73種類に厳選しました。入門書を買う時などの参考にしてください。

Java

言わずとしれたプログラミング言語。一度コードを書いてしまえばWindowsだろうがMacだろうがAndroidだろうがどんな環境でも大抵実行できてしまうのが特徴です。

こんな人におすすめ:

  1. Androidのアプリを作ってみたい人
  2. 環境に合わせてプログラミング言語を選ぶのが面倒な人

Python

スクリプト言語と言って、書いたプログラムをそのまま実行することができます。ライブラリも豊富で、例えば「Twitterでつぶやいてみたい」と思ったら次の瞬間にはツイートできているくらい楽に開発を行うことができます。また、文法もわかりやすく、初心者向きであると言えます。また、数学系のライブラリも充実しています。

こんな人におすすめ:

  1. 何の言語を選べばいいかわからない人
  2. 統計や数学的な処理をやらされそうな人
  3. Web系をやってみたい人

Scheme

Lispという言語の方言で、言語自体の仕様がとても小さいことが特徴です。言語自体はとてもシンプルですが、それらを組み合わせて使うことで他の言語にも劣らないパワーを発揮します。

こんな人におすすめ:

  1. 覚えることは少ない方がいいと思う人
  2. 初心者なのに大学の講義でいきなりSICPを読まされる羽目になった人

Prolog

プログラマーが問題を書いたら言語処理系がその問題を勝手に解いてくれるという、かなりレアな機能を持つ言語です。

こんな人におすすめ:

  1. 自分でプログラムを書くのが面倒な人
  2. 教養として論理型言語にも触れてみたい人

APL

A Programming Languageの略でAPLです。プログラミング言語といえばこれですね。特殊な記号を使ってプログラミングを行うので専用のキーボードを買う必要があるのが欠点といえば欠点です。

こんな人におすすめ:

  1. 人と違うプログラムを書きたい人
  2. APLのキーボードを既に持っている人

Lua

主にゲーム内のプラグイン等に利用される言語です。ゲーム開発をする人は覚えておいて損はないかも。

こんな人におすすめ:

  1. ゲームを作りたい人

Common Lisp

クラッシュバンディクーファイナルファンタジーLispを使って書かれているという噂があります。こちらもゲーム開発をしたい人におすすめ。
最近の言語は多かれ少なかれLispの影響を受けているので、勉強しておいて損はありません。

こんな人におすすめ:

  1. ゲームを作りたい人
  2. とにかく何でもできる言語が欲しい!という人

Haskell

非常に柔軟な型システムを持つ言語です。他の言語では実行してみないとわからないような様々なエラーを、コンパイル時に検出してくれます。静的型付き言語でありながら、型で煩わしい思いをすることなくコードを書くことができる言語です。

こんな人におすすめ:

  1. 実行する前にプログラムのバグがわかってほしい人
  2. モナドを理解した人

Agda

定理証明支援系の1つ。Haskellに似ていますが、Haskellよりもさらに強力な型システムを持っています。

こんな人におすすめ:

  1. 定理証明支援系を使いたいけど、Coqの記法がとっつきにくいと思う人
  2. Haskellは好きだけど、依存型が無いのが不便だと思う人

Ruby

日本発のスクリプト言語の1つ。Ruby on Railsで一躍有名になりました。

こんな人におすすめ:

  1. Webサイトを作ってみたい人
  2. call/ccしてみたいけど、Schemeはとっつきにくいと思う人

Sed

もはや正規表現以外見向きもされなくなってしまった悲しい言語です。実は -e regexする以外にも色々な命令があります。

こんな人におすすめ:

  1. edよりも強力なテキスト編集能力が欲しい人
  2. 今まで何気なくsed -e 's/hoge/fuga/'していた人

Awk

正規表現どころかほとんどその存在を見なくなってしまった哀れな言語です。

こんな人におすすめ:

  1. Unix文化全盛期にタイムスリップする予定のある人

Forth

Forthは逆ポーランド記法の言語なので、比較的日本語に近い文法でプログラムを書くことができます。

こんな人におすすめ:

  1. hoge(a, b)じゃなくてa b hogeと書きたい人
  2. Let Over Lambdaを読んでForthの処理系を実装してしまった人

Perl

すでに滅びつつある言語です。今から学ぼうと思っている人はRubyPythonをやりましょう。

こんな人におすすめ:

  1. 特になし

シェルスクリプト

プログラミング言語の機能としては貧弱ですが、Unix系のOSであれば大抵どこでも動くというメリットがあります。

こんな人におすすめ:

  1. 日常的に行っているちょっとした作業を楽に行いたい人
  2. USP友の会の会員になってしまった人

C

初心者が最初に学ぶべき言語はCだとよく言われますが、自分としてはそれは間違いだと思います。

こんな人におすすめ:

  1. 勧められるがままに『猫でもわかるC言語』みたいな本を買ってしまった人
  2. 機械を動かしたい人

C++

C+αを目指したつもりが、いつのまにか全く別な言語になってしまいました。

こんな人におすすめ:

  1. 速度が気になるけどCよりは高級な言語を使いたい人
  2. いかにコンパイル時に全ての処理を終わらせるかに命をかけている人

Coq

定理証明支援系。様々な言語にコードを変換できるため、Coqで正しさが証明されたコードをHaskellで使う、といった方法も可能です。

こんな人におすすめ:

  1. 四色定理を証明したい人
  2. 自分のプログラムが本当に正しく動いているのか自信のない人

Konoha

数年前まで開発が進んでいたのですが、今公式サイトを見てみたら結婚式のサイトに大変身を遂げていました。
konohascript.org

こんな人におすすめ:

  1. 近々結婚する予定のある人

Elixir

Erlangを現代的な文法に直したような言語です。ErlangVM上で動き、もちろんActorも使えます。
個人的にはかなりいい線行っていると思うのですが、Web系の人が大絶賛してるのが少し心配な所。

こんな人におすすめ:

  1. 将来性のある言語を学びたい人
  2. !みたいなErlangの謎記号にうんざりしている人
  3. 複数サーバーの上で動くような大規模アプリケーションを作る予定のある人

Elm

FRPの考え方の元に生まれたAltJS。Haskellっぽい文法でプログラミングできます。DOMとの連携もばっちり。

こんな人におすすめ:

  1. Angularを使ってみて失敗したなと思った人
  2. Haskellっぽい言語をクライアントサイドでも使いたい人

PureScript

たくさんあるHaskellっぽいAltJSのうちの1つです。Extensible Effectsを使っていたりして、元になっている言語であるHaskellより先進的な部分もあるのが驚き。

こんな人におすすめ:

  1. HaskellでHogeTとかMonadHogeみたいなやつを大量に作るのが明らかに間違いだと思っている人
  2. Haskellっぽい言語をクライアントサイドでも使いたい人

GHCJS

たくさんあるHaskellっぽいAltJSのうちの1つです。こちらは本当にHaskellをJSに変換してしまうことを目標としています。

こんな人におすすめ:

  1. Haskellっぽい言語をクライアントサイドでも使いたい人

Fay

たくさんあるHaskellっぽいAltJSのうちの1つです。こちらはHaskellのサブセットになっています。

こんな人におすすめ:

  1. Haskellっぽい言語をクライアントサイドでも使いたい人

OCaml

MLの方言です。多相バリアントやFunctorなど、他の言語には見られない面白い機能があります。

こんな人におすすめ:

  1. 関数型言語を勉強してみたい人
  2. 開発者が日本にいる言語を使いたい人

R

統計処理用の言語です。表を用意して検定をしたりグラフを書いたりするだけなら、非常に簡単に行うことができます。

こんな人におすすめ:

  1. 自分はプログラマーではなくデータアナリストだと思う人

S

ベル研生まれのRの先祖です。現在も使えるのかはよくわかりません。

こんな人におすすめ:

  1. 歴史の勉強をしたい人

Io

プロトタイプベースのオブジェクト指向言語です。Smalltalkよりはとっつきやすそうな文法です。

こんな人におすすめ:

  1. メッセージ送信がキーワード:値形式なのに疑問を感じる人
  2. プロトタイプベースの言語を齧ってみたい人

Self

Smalltalkに近いオブジェクト指向言語です。クラスの概念はなく、委譲ベースのプログラミングスタイルとなっています。

こんな人におすすめ:

  1. 新たなプログラミングパラダイムを学びたい人
  2. Smalltalk的なオブジェクト指向に触れたい人

Smalltalk

元祖オブジェクト指向的な存在です。if文やら何やらも全てメッセージパッシングで表現されます。1つの巨大な環境(Emacs LispでいうEmacsのようなもの)があり、その上でプログラムを動かします。

こんな人におすすめ:

  1. Rubyあたりを使っていて、そろそろ1ランクステップアップしたい人
  2. 整った環境でプログラミングしたい人

Emacs Lisp

Emacsプラグインを書くためだけに作られた言語です。プラグインを書くのにまともなCommon Lispを使いたいという一派もかつては存在したようですが、今では虫の息です。
www.mag2.com

こんな人におすすめ:

  1. Emacsを使っている人
  2. プログラミングを通して人生の質を高めたい人

LOGO

亀ロボットを操作して、画面や紙の上に図形を描画することのできる言語です。子供のプログラミング入門には最適かもしれません。

こんな人におすすめ:

  1. 8歳児
  2. フラクタル図形を書きたい人

Egison

非決定的なパターンマッチングが行えてしまう恐ろしい言語です。

こんな人におすすめ:

  1. HaskellOCaml等のパターンマッチじゃ物足りない人

F#

マイクロソフトが生み出した関数型言語です。モナドがない代わりにコンピューテーション式というものがあります。

こんな人におすすめ:

  1. Windows用アプリケーションを作らないといけなくなったHaskeller

C#

マイクロソフトが生み出したオブジェクト指向言語です。LINQが便利。
マイクロソフトは言語を作るセンスだけはあると思うのですがどうでしょうか?

こんな人におすすめ:

  1. C*系の言語なんてどれも一緒と思っている人

TypeScript

マイクロソフトが生み出した型付きJavaScriptです。JSの微妙な部分は大体解消されています。やはりマイクロソフトは言語を作るセンスだけはあります。

こんな人におすすめ:

  1. JavaScriptは嫌いだけど、クライアントサイドの処理を書かなければならない人

Visual Basic

前言撤回。この言語は糞以外の何者でもありません。

こんな人におすすめ:

  1. 騙されてVBの入門書を買ってしまった人。

J++

マイクロソフトが生み出したJavaもどきです。マイクロソフト製のJVM上で動きますが、独自機能を追加しまくったために訴訟沙汰に。

こんな人におすすめ:

  1. Javaアプレットを作りたい人

J#

マイクロソフトが生み出したJavaもどきです。J++が滅んだ頃に登場しました。こちらは.NETで動きます。

こんな人におすすめ:

  1. Javaは使いたいけど、わけあってJVMのない環境にいる人

GoogleJava

特にこれといった名前はありません(しいて言うならDalvik VM?)が、GoogleAndroidのためにオレオレJavaを作っています。もちろんこちらも訴訟沙汰に。Write once, run anywhereはどこへやら。

こんな人におすすめ:

  1. Android開発を行いたい人

Dart

GoogleJavaScriptの代替を目指して失敗した言語です。クライアントサイドのデファクトスタンダードとなる道を諦め、AltJSとなる道を選んだようですが、今の所流行る兆しはまったくありません。

こんな人におすすめ:

  1. Google大好きな人

Go

Googleが開発した言語です。goroutineという軽量スレッドが便利らしいですね。あとマスコットキャラがキモかわいい。

こんな人におすすめ:

  1. Google大好きな人
  2. 並行プログラミングをしたい人

J言語

先ほどのJ++やJ#とは全く関係ありません。APLから独自記号を除いたような言語です。

こんな人におすすめ:

  1. APL用キーボードを無くしてしまった人

Ark

ポール・グレアムが開発したLispの方言です。中置記法の関数合成など、Lispをすこしだけ便利にしてくれる機能がたくさん用意されています。
しかし、わざわざ新しい言語にする必要があるほどのものだったのかは永遠の謎。

こんな人におすすめ:

  1. Lispは好きだけど、たまに書くのがだるくなってしまう人
  2. 自作サイトがYahooに買収された後、なんだかんだでYコンビネータ―に就職したい人

Ada

ランデブーと呼ばれる機能を用いて、アクター+セマフォ+αのようなことができます。

こんな人におすすめ:

  1. 並列処理を行いたい人

Nim

C言語に変換される言語。文法は割といい感じですが、わざわざ新たに学ぶ必要があるかは微妙。

こんな人におすすめ:

  1. PythonとかRubyが好きだけど、諸事情によりバイナリにコンパイルされる言語しか使えない人

Tcl/Tk

Tkすらあまり使われなくなってしまった今、この言語は滅ぶのを待つばかりでしょう。

こんな人におすすめ:

  1. さくっとGUIを表示したい人

Windows PowerShell

.batファイルから大きな進化を遂げた言語。シェルスクリプト的な立ち位置なのに、型があったりとやたらリッチ。
しかしそろそろWindowsbashが使えるようになるらしいので、この言語がこの先生きのこれるかは不明。

こんな人におすすめ:

  1. ちょっとした作業を自動化したい人

VimScript

Vimプラグインを書くための言語です。プログラミング言語としてはあまりにも貧弱…。

こんな人におすすめ:

  1. どうしてもVimを使いたい人

Clean

Haskellと違い、一意型という一回しかアクセスすることのできない型を用いて純粋関数型プログラミングをおこないます。
どのみちモナド欲しくなりそう。

こんな人におすすめ:

  1. モナドとは別なアプローチによる純粋関数型プログラミングに興味のある人

D言語

C++とは別の方向にCから発展していった言語。高階関数とかも使えるらしいので便利かも。使おうと思えばインラインアセンブリとかも使えるらしいです。

こんな人におすすめ:

  1. ある程度速度が要求されるけど、高級な言語を使いたい人

Groovy

Javaの構文を少しだけいい感じにしたような言語。こういう既存の言語のシンタックスシュガー集みたいな言語は最終的に滅ぶ運命にある。

こんな人におすすめ:

  1. Javaは好きじゃないけど、ScalaやKotlinをやるほどでもないかな…という人

Kotlin

比較的新参のAltJava。nullableかどうかを型で判別できるのはいいと思う。でもそれくらいしかScalaと比べた時の利点がなさそう。コンパイルScalaより速いらしい。

こんな人におすすめ:

  1. Scalaが宗教的に無理な人

Scala

JVM上で動く関数型言語。配列のアクセス演算子がなかったりと、言語仕様は比較的シンプル。そのシンプルな仕様を組み合わせて、他の言語機能を実現しているLispのような言語です。パターンマッチや型クラスもあるので関数型好きも満足。

こんな人におすすめ:

  1. 実用的なアプリケーションを関数型言語で開発したい人

Clojure

JVM上で動くLisp。普通のLispとはかなり記法が違います。何気にLispの方言の中で一番将来性があるかもしれません。

こんな人におすすめ:

  1. とにかくLispで開発したい人

Boo

.NETで動くPythonみたいなやつ。マイクロソフトは全く関係ないです。

こんな人におすすめ:

  1. .NET上で動く言語を使いたいけど、C#やF#等があまり好きではない人

CoffeeScript

AltJSブームの火付け役。今見てみればただのJSのシンタックスシュガー集ですが、TypeScriptやElm等もこいつのおかげで生まれたと思えばその存在価値は大きいでしょう。文法はかなり好きです。

こんな人におすすめ:

  1. JavaScriptに不満はあるけど、わざわざ別言語を学ぶのは面倒な人

Crystal

型付きRuby。それ以上でも以下でもない。

こんな人におすすめ:

  1. Rubyに型が欲しい人

Erlang

アクターという方法を用いて平行処理を行う言語です。記法が独特すぎるため大ブームが来ることは一生ないでしょうが、アクターの考え方はElixir等に受け継がれていくでしょう…。

こんな人におすすめ:

  1. 大規模な並行処理を行いたい人

Hack

Facebook製のAltPHPみたいなやつです。

こんな人におすすめ:

  1. Facebookに就職する予定のある人

Rust

GoとかDくらいの立ち位置にある関数型言語。型クラスもあったりしていい感じです。個人的には次学ぶべきはこの言語じゃないかなと思っています。

こんな人におすすめ:

  1. 比較的低レイヤの部分でも関数型言語を使いたい人

Objective-C

SmalltalkのオブジェクトシステムをCに組み込んだキメラのような言語です。普通にCだと思って読んでたコードにいきなりメッセージパッシングが登場してくるので非常にキモい。しかもキーワードが一々長すぎ。

こんな人におすすめ:

  1. オブジェクト指向 == キーワード:値形式のメッセージパッシングだと思う人

Swift

Appleが開発、iOS向けに登場したまともな言語。まとも。そのかわり特筆すべき点も特に無い。extendで既存の型にメソッド追加できるのは面白いかも。

こんな人におすすめ:

  1. スマホiPhone, ノートPCはMacBook, 家に帰ればiMacの人

Haxe

FlashからJS, Pythonなど、複数の言語に変換できる言語です。

こんな人におすすめ:

  1. サーバー側とクライアント側で言語は違うのに同じ処理をしたい場合に直面してしまった人
  2. その昔ActionScriptで遊んでいた人

JSX

JavaScriptXMLリテラルを追加しただけのAltJSです。似たようなものにhsx(Haskell+XML)というものもあります。

こんな人におすすめ:

  1. Reactを使っている人
  2. 一々document.createElementとか書くのがだるい人

JSX

え、JSXはさっきもう紹介したって?
こちらのJSXはDeNA製のAltJSです。言語としてはTypeScriptに近いかもしれません。

こんな人におすすめ:

  1. DeNAに就職予定の人

JSX

こちらのJSXはAdobeの言語です。Photoshop等を自動で動かすのに使います。

こんな人におすすめ:

  1. Photoshopの作業を自動化したい人

JavaScript

適当に作ってみた所、なぜか全世界で使われるようになってしまった言語。
JavaScript: the Good Parts』とかいう本が出版されてしまう程度にはクソな言語です。

こんな人におすすめ:

  1. クライアントサイドの開発をしたいが、AltJSは使いたくない人

HSP

中学生向け言語として有名なHSP。入門用には最適かもしれません。

こんな人におすすめ:

  1. とりあえず何か作ってみたい中高生

vvvv

ビジュアルプログラミング言語。点と点を線でつなぐことによってプログラムを表現します。
画像処理が得意らしいです。

こんな人におすすめ:

  1. VJをやってみたい人
  2. 新たなパラダイムに興味のある人

Miranda

Haskellの先祖みたいなやつです。

こんな人におすすめ:

  1. 遅延評価型純粋関数型言語に興味はあるけど、Haskellはなんとなく嫌だという人

Nu

Macで動くLispみたいな奴です。

こんな人におすすめ:

  1. Macのアプリ開発をLispでやりたい人

Iota

Iotaには、なんと関数は1つしかありません。そして、関数と関数適用以外の概念はIotaには存在しません。
これでもチューリング完全なので、理論的にはどんなプログラムも書けてしまうはずです。不思議ですね。

こんな人におすすめ:

  1. リファレンスを漁って色々な関数の仕様を調べるのが面倒な人

どうでしょうか。この中から学んでみたいと思うような言語は見つかりましたか?