プログラミング初心者にお勧めする入門用言語

# 結論だけ欲しい人向け

JavaScript 最強。次点で Python。本は読め。番外で Scratch。

# 始めに

プログラミング初心者にどういった言語が向いているか、という議題はよく見かけます。つい最近、[プログラミング初心者が最初に習得すべきプログラミング言語](http://programming-study.com/trouble/programming-language-learn/) なんていう、記事がプチバズって面白がられていたりしていましたが、真面目な話、こういうのを茶化してばかりいても生産性がないので、ことあるごとに述べている持論を一回きちんと書き下しておきたいと思います。

プログラミングの間口は広ければ広いほど、将来に優秀なソフトウェアエンジニアが誕生する可能性が高まるので、少なくともプログラミングに興味を持ってくれた人があっさり挫折することなく、継続して取り組んでいけるような最初のきっかけを作りたいな、という風に思っています。

# 対象者

漠然と「初心者」と言っても、どういった人が対象か分かりにくいので、ここでは以下のような人物像を対象者とすることにします。

* 人生において初めてプログラミングに取り組む
* 授業や仕事ではなく自らの興味でプログラミングをしたいと思っている
* いつか詳しくなったら色々とやりたい事もあるが、まずはプログラミングそのものに入門したい

# 入門向け言語の条件

初心者向けの言語について語る時に、「Java はビジネスで広く使われている」だの、「PHP は変数を都合良く型を解釈してくれるから楽」だの、「全ての基本は C だ。メモリ管理を知らずして…」だの言う記事が見受けられますが、どれも入門向け言語の条件としては相応しくありません。

入門向け言語の条件の圧倒的ナンバーワンは**「環境構築が楽」**です。プログラミング初心者である人は、同時にコンピュータについても詳しくない可能性が高いことを考慮すべきです。ここで躓くと全てが終わり、何も進まないままです。

次いで、「最初に覚える事が少なく、また興味が続きやすい」といった事も、継続してプログラミングをしていくことを考えたら外せません。そしてプログラミングを覚えるという事は、大半は自習になると思うので「正しい情報が見つかりやすい」といった条件も大事ですね。箇条書きにまとめると以下のようになります。

* 環境構築が楽
* 最初に覚える事が少ない
* 興味が続きやすい
* 正しい情報が見つかりやすい

そのような理由から、下記のような言語は入門向けではありません。

* コンパイル型言語
* 静的型付け言語
* ライブラリが貧弱

ここには異論もあるかと思いますが、いかに簡単に書き始め、いかに早く何かしらの結果を得られるか、に焦点を当てた場合、少なからず納得していただける部分もあるのではないでしょうか。端的に言うと IDE がないと辛い言語、歴史が浅すぎる or ユーザが少なすぎる言語は外れるという事です。

# JavaScript

そこで、そう、JavaScript を圧倒的に推したいです。大事なことなのでもう一回言いますが、入門向け言語の条件の圧倒的ナンバーワンは**「環境構築が楽」**です。初心者である、いま人生において初めてプログラミングをやりたいと思っているその人がやりたいのは、**プログラミング**です。環境構築ではありません。その気持ちが冷めないうちに、さあ、今、コードを書き始めたいのです。

[JavaScript in 14 minutes](https://jgthms.com/javascript-in-14-minutes/) というサイトを初めて知った時、これほどプログラミング初心者に向けて考え抜かれたサイトはないと感動しました。曰く、「いま、Mac で Chrome 使ってるよね？まず "`⌥`＋`⌘`＋`J`" ってショートカットで JavaScript のコンソールが開くからそこに `alert('Hello World!')` って打って `Enter` して？」ですよ。どうですか、この圧倒的な環境構築の楽さ加減。というか環境構築していませんね。
2019-05-26 追記：[日本語版を作成して公開](https://js-in-14-mins.otchy.net/)し、紹介記事 "[14 分で JavaScript 入門](https://qiita.com/otchy/items/e43495c50793df39c2e8)" も書きました。

そう、今どきの環境で PC でブラウズしていれば、すでにそこに環境があっていきなりコードが書ける。というアドバンテージこそが、JacaScript を初心者に勧める最大最強の理由なのです。その上スクリプト言語かつ動的型付け言語なので、書けばすぐ動きます。またブラウザに組み込まれている別の利点として、DOM 操作ができるので、他の言語に比べると簡単に見た目の変化を起こすことが出来て、興味も続きやすいです。さらに将来的にステップアップして、`npm` を使うようになれば、ライブラリだって充実しています。

なにも JavaScript が言語として最強と言っているのではありません。「いつか詳しくなったら色々とやりたい事もあるが、まずはプログラミングそのものに入門したい」人を対象としているので、ここでプログラミングの楽しさを覚えたら、どんどん巣立っていっても良いのです。

あ、いま、**「ダウト！」**と叫ぶ声が聞こえてきました。そうですね、「正しい情報が見つかりやすい」なんて事は決してありません。ただこれは、歴史の長い言語共通の悩みで、確かに JavaScript や PHP が特に酷いなんてことはあるものの、ユーザベースの多さやライブラリの充実度とはトレードオフの関係にあると思います。この点については、後で[別の視点でフォロー](#正しい情報を見つける)したいと思います。

# Python

JavaScript ほど環境構築が楽でないまでも、Mac や Linux であればプリインストール、Windows でもインストーラで気軽に始められるという点で、Python もまた推せる言語です。JavaScript のように DOM 操作で簡単にビジュアルを変化させる事は出来ませんが、一方で必ず `pip` がセットになってるので、色々なライブラリを使えるようになるまでのハードルは低いです。なので、やりたい事が Web とかよりもむしろ「日々の手作業をできるだけ自動化したいんだ！」などであれば、JavaScript よりもお勧めです。

JavaScript と同様、スクリプト言語で動的型付けですし、インデントに意味を持たせ英文としての読みやすさを考慮した文法は、取っつきやすく間口が広いです。プログラミングってわけの分からない記号ばかりで謎、とか思う人にも向いているかも知れません。

ただ Python を勧める場合、Python2 と Python3 の話について触れないわけにはいかないでしょう。これらは同じ言語の異なるバージョンではあるものの、大幅な言語の拡張が行われたため、Python3 で推奨される書き方が Python2 と異なっていたり、そもそも Python2 のコードが Python3 で動かなかったりという事がよくあります。

いま**「新しく始めるなら Python3 だ」**とみんなが言います。ですが、叩かれることを覚悟で言うと、使っている OS が Mac か Linux なら、**入門に限っては**、プリインストールされている Python2 で始めて良いと思います。それほど、入門向け言語の条件の圧倒的ナンバーワンは**「環境構築が楽」**と信じています。

まあ、そんな状況なので、最低限自分が使っているのが Python2 なのか Python3 なのかを意識してなお、残念ながら正しい情報を見つけるのは困難です。

# 正しい情報を見つける

[入門向け言語の条件](#入門向け言語の条件)のひとつに「正しい情報が見つかりやすい」と書きました。一方でそれは「ユーザベースの多さやライブラリの充実度とはトレードオフの関係にある」とも書きました。ではどのように正しい情報を見つけたら良いのでしょうか。

ちょっと話は逸れますが、Web で得られる情報というのは言わば、広大な荒れ地に敷かれた、ろくに舗装もされていない砂利道のようなものだと思います。上手くゴールまでたどり着ける道もあれば、そうで無い道もある。最初は綺麗に舗装されていたと思ったら突然道が無くなったりするし、途中で自力で崖を登らないといけないかも知れない。ただその代わりに、はるか先、自分の足でも何でも使ってたどり着ける先は、地平線の彼方のフロンティア。そんなイメージです。

しかしながら初心者が最初にゴールとして目指す地点は、そんなフロンティアではありません。なのでここは、フロンティアまで 70% の地点くらいまでは運んでくれる高速道路を使いましょう。何の事はない、本です。初心者向けを謳った本の中には、それはまあ酷いクオリティのものもあるのですが、Amazon の書評で評判が良さそうなもの、発刊から 1 〜 2 年以内のものを選んでおけば、大きく外すことは無いでしょう。

本を読む大きなメリットとして、情報の一貫性が期待できることが挙げられます。プログラミングにもトレンドがあり、推奨される書き方やライブラリなどが日々進歩、変化し続けています。したがって、Web などで拾い集めた情報を混ぜて使うと、その記事が書かれた時期や記事を書いた人の知識レベルがバラバラであるが故に、出来上がったコードもなんともチグハグなものになりがちです。

一方、本というものはスナップショットであり、発刊された時点でのその著者のベストプラクティス集であると捉えることが出来ます。これこそが、本が高速道路たる所以です。初心者であるなら尚更、その本に書かれていることが、ともすれば 1 年遅れの知識かも知れない、という事は**気にしなくて良い**です。いったん一貫性のある記述で、1 年前時点までビュンと高速道路でやってきたら、そこから先は Web なり、別のもっと高度な本なりで補っていけば良いのです。

# Scratch

[Scratch](https://scratch.mit.edu/about/) という言語があります。ネタではなく本気で言っています。「環境構築が楽」「最初に覚える事が少ない」「興味が続きやすい」という点においては、完全に初心者向け言語としての条件を満たしています。これは子供向けに開発されたビジュアル言語で、まるでレゴを組み立てるが如く GUI で記述することが出来る言語です。これからプログラミングを始めようとする人が小学生ないし中学生くらいであったなら、圧倒的にお勧めです。

言ってみれば、画面にキャラクターを表示させて動かす事に特化した言語です。Scratch に触れたことがあるプログラマであれば、ものの 30 分で、矢印キーで自機を操作して障害物を避けながらゴールまで辿り着く、ようなゲームが書けてしまいます。それをさらっと書いてみせ、子供に「さあ改造してごらん？」と言って渡せば、センスのある子なら目をキラキラさせながら、自機の移動速度を変えてみたり、障害物を増やしてみたり、得点表示を付けてみたり、のめり込んで遊び続ける事でしょう。フルスクラッチで自作のゲームを作るまでそう遠くはないかも知れません。

# 終わりに

まだ学生だった当時、文字通り寝食を忘れてコードを書いていて、ただひたすらに楽しかった事が原体験にあり、プログラミングを新しく始める人にはそれを楽しんで欲しいな、という想いがあります。どうでも良い理由で C が初心者に勧められているのを読んだり、初心者向け連載記事の第 1 回が全部丸ごと環境構築に割かれているのを読んだりする度に、これで楽しくなくなってプログラミング辞めてしまう人がいるんじゃないか、と悲しく思っていました。

今回この想いをまとめた背景には、今後そういった記事を見かけるたびに、「良かったらこれも読んでくれ！」と紹介できるページを持っておきたかったというのもあります。願わくば、この記事をきっかけとして一人でも多くの人がプログラミングを楽しんでくれると嬉しいです。