プログラミング初心者が最初に「JavaScript」を学ぶべき理由とは

プログラミング初心者にとって最初に学習する言語選びはとても重要です。求人需要や学習難易度のデータ、今後の将来性などを加味してこれから学ぶべき言語を紹介しています。初心者でもエンジニアとして活躍したいと思っている方は、ご覧ください。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

本稿は、Free Code Campのブログ記事を了解を得て日本語翻訳し掲載した記事になります。本記事は、Free Code Campの講師を務めるQuincy Larson氏によって投稿されました。

 

初心者にとってプログラミング学習への旅は、ほとんどの場合、深夜のGoogle検索から始まります。

このとき通常は、「◯◯を学習」などの検索ワードを打ち込むはずです。しかし、人々は検索する言語を、どのように決めているのでしょうか。

「シリコンバレーでいつも冗談になっている言語だから、Javaを学ぶ。」または、「今人気が高いから、Haskell。」もしくは、「Go Gopherが可愛いからGo。」のように考えて決めるかもしれません。

 

あるいは、このようにはっきりと決まらない場合には、おそらく次のような検索になるでしょう。

「どのプログラミング言語を最初に学ぶべきか?」

もっともインフォグラフィック(情報を視覚的に示した図)で検索しようとする人はあまりいないかもしれませんが、探せば次のようなものが見つかります。

1-of594b5qtcjr9mfsrti-5g-620x338

画像:「どのプログラミング言語を最初に学ぶべきか?」のインフォグラフィック

最初に学ぶプログラミング言語を決めるのは楽しいものです。しかし、最初のプログラミング言語を何とか使えるようになるまでに、何百時間もの練習が必要です。そのため、次の要素について考えるべきです。

毎年新しいプログラミング言語が誕生し、これらの言語について学術論文が執筆されます。それからWeb上のコミックも。先月のこのコミックは一見の価値があります。

(左から右に読み進める3コマ漫画)

1-she624vf-hrpgldwd8hkkw-292x1024

画像:8つのプログラミング言語を使って姫を救う方法(toggl社によるコミック)

  1. JavaScriptを使う
  2. 城に攻め込むために、ライブラリを選び、ノードを生成して、フレームワークを構築するのに何時間も費やす
  3. しかし、フレームワークが完成する頃には、城の要塞が破壊されていて、姫は他の城へと逃げていた
  4. Cを使う
  5. 城に攻め込むためのライブラリと、姫を救うためのライブラリを準備したら――いざ出陣!
  6. 姫と、彼女の犬、彼女の衣服全て、彼女の食べた全てのものを救い出す。失敗――ヌルターミネーターを忘れていたかもしれない?
  7. C#を使う
  8. LINQ(統合言語クエリー)を使った救出計画を説明するだけで、数時間かかる。
  9. 諦めてStack Overflowで質問をして、Jon Skeet氏(Googleのエンジニアで、『C# in Depth 』などの著者)に全て任せる
  10. Javaを使う
  11. 「城の攻略計画」を、プロダクション環境に迅速にデプロイする
  12. オーバーロードで、2種類の城を定義する。しかし姫はいない(オーバーロードできない)。
  13. LISPを使う
  14. GOを使う
  15. 「捕らわれた姫の救出」はサポートされていなかった。標準ライブラリに、すでに自由の身になった姫を発見する。この姫はJPanelで作られたのか?
  16. PASCALを使う
  17. 姫、城、救出計画を宣言する
  18. 酒に入りびたり、任務のことは忘れる
  19. PHPを使う
  20. 姫をPHPで救わなければならない

最初に学ぶプログラミング言語を選ぶときには、選択肢が不足することはありません。

次のグラフは、過去12年間において、プログラミング学習に関して最も検索されているキーワードです。

1-znaagcc5fn0-dqy43ileqq-620x212

Javaには浮き沈みがあります。Pythonの検索は徐々に増えていて、最も人気の高い言語となりつつあることが伺えます。

しかし、これら2つの言語に加えて、過去数年で検索数がゆっくりと増えている存在がいます。それがJavaScriptです。

これらのプログラミング言語を論じる前に、明らかにしておきたい点があります。

  • 特定の言語が、他のどの言語よりも客観的に優れていると主張するつもりはありません。
  • エンジニアは最終的に複数の言語を学ぶべきだという考え方には、同意しています。
  • エンジニアは最初の言語をまず深く学習すべきだという考えです。――また、その最初の言語としてJavaScriptを選ぶべきだと考えています。

最初に、現在プログラミングが教育機関でどのように教えられているかを見ることから始めましょう。

 

コンピュータサイエンス入門

1-eu4cwrzxut3ybnfzet-q8q-620x546

画像:大学のコンピュータサイエンスの課題におけるコードの質(x軸に時間、y軸にコードの質)

  • ソースコードの行数がゼロの状態
  • まずシンプルなプロトタイプを作成する
  • プロトタイプのままにしておく
  • 罪悪感を感じる
  • 指導教官に、デモを提出するよう言われる
  • エンジニアの友人に相談したところ、ソフトウェアテストについて初めて知る
  • 課題の提出期限

伝統的に大学においてプログラミングは、コンピュータサイエンスの領域の科目として教えられてきました。コンピュータサイエンスそのものは、数学の延長線上にある学問と見なされたり、または電気工学の学位取得課程のカリキュラムに含まれています。

あなたもすでに聞いたことがあるかもしれませんが、

「筆と顔料について学ぶだけではプロの画家にはなれないのと同様に、コンピュータサイエンスの教育だけではプロのプログラマにはなれない。」――エリック・レイモンド

 

2016年現在も多くの大学は、プログラミングをコンピュータサイエンスであるかのように扱い、コンピュータサイエンスを数学であるかのように扱っています。

その結果、多くのプログラミング入門のコースでは、Cのような抽象度の低い言語や、MATLABのような数学に特化した言語が主に使われているのです。

コースを担当する学部の教授もあまり変わることはなく、TIOBE社によって毎年公表される人気プログラミング言語のインデックスや、次のIEEEによるランキングも順位はほとんど変わりません。

1-8ywwh_urweoxysvswtneba-620x371

10年前から、上位ランキングに並ぶこれらのプログラミング言語は、ほとんど変わっていません。

しかし、学術界において変化が起こり始めています。

2014年、PythonやJavaは、アメリカの上位の教育プログラムにおいて最も人気のある言語として追い抜きました。

1-728hwv2yp3pjy1_qmgqg1g-620x398

画像:アメリカのトップ39位のコンピュータサイエンス学科の入門コースにおいて使われる言語のランキング(Philip Guoによる調査)

 

また、もう1つの変化も起こりつつあります。仕事で使われているプログラミング言語は、教育課程で教えられる言語とは異なるのです。

1-fuxhg3xtbuyah-ncpys4lq-620x585

画像:最も人気のあるプログラミング言語 Stack Overflowが2016年に行った調査によると、49,397人のエンジニアが回答した最も人気のある言語が「JavaScript」でした。

エンジニアの半数以上がJavaScriptを使っています。JavaScriptはフロントエンドのWeb開発に不可欠であり、徐々にバックエンドの開発にも関連する言語になっています。

また、ゲーム開発やIoT(Internet of Things:モノのインターネット)などの分野にも広がっています。

 

求人広告でも、JavaScriptはJavaの次によく見られるようです。

1-nju6zeorusbe-4ub290ftw-620x378

画像:世界最大の求人情報サイトIndeed.comによるデータ

しかし、JavaScriptはあなたにとって正しい選択でしょうか?あなたが最初に学ぶプログラミング言語として選ぶ価値はあるでしょうか?私が最初に述べた4つの要素の点から、考えてみましょう。

 

要素1:言語の求人需要

知的好奇心からプログラミングを学ぶ場合には、ここは読み飛ばしても構いません。しかし、ほとんどのプログラミング学習者は、プログラミングを自分のキャリアに生かしたいと考えている人が多いので、この要素は重要になります。

先にも述べたように、Javaは最も多くの求人広告に掲載されている言語です。 そしてJavaScriptが僅差で2位です。

JavaScriptは、約20年前に誕生しましたが、Netflix、Walmart、PayPalなどの企業にアプリケーションを構築する主要なツールとして使われるようになったのは最近のことです。

その結果、多くの企業がJavaScriptを書けるエンジニアを雇い始めていますが、雇用市場においてはまだ人数が足りていないのです。

1-eanhlhomisf-by0grracyq-620x388

画像:Indeed.comによるデータ

Javaのエンジニアの求人倍率は約2.7倍です。

同様にPHPやiOSのエンジニアの求人倍率も高めです。一方、JavaScriptの求人倍率は約0.6倍しかありません。JavaScriptのスキルを持っていれば、売り手市場です。

 

[PR] プログラミングで挫折しない学習方法を動画で公開中

要素2:言語の将来性

JavaScriptは他のどの言語よりも、速いスピードで発展しています。

1-gxmw33x9gb5lboyn02hkw-620x497

画像:GitHub Octoverse 2016より

Google、Microsoft、Facebook、Netflixなどの企業からの潤沢な投資と才能のあるエンジニアの貢献によって、言語としても発展を続けているのです。

例えば、TypeScript(JavaScriptのスーパーセットである静的型付き言語)は、100人以上のオープンソースの貢献者によって、改良が続けられています。彼らの多くはMicrosoftやGoogleで働くエンジニアです。

Javaの場合には、このような企業間の協力は難しいと思います。オラクルは(サンマイクロシステムズの買収によりJavaの所有権を取得し、)Javaのソースコードを利用しようとする会社に対しては、著作権侵害訴訟をよく起こしています。

 

要素3:学習の難易度

1-d8titw3skawgd-ioyhh2nq-620x260

画像:XKCD comicのパロディ

ほとんどのエンジニアは、高水準のスクリプト言語が比較的学びやすいということに同意すると思います。JavaScriptはPythonやRubyと同様にこのカテゴリに含まれます。

大学では最初のプログラミング言語としてJavaやC++などが教えられていますが、初心者にとっては難易度がかなり高いといえるでしょう。

 

要素4:学習中に形にできるプロジェクト

JavaScriptはこの点において特に優れています。JavaScriptはブラウザを搭載したデバイス上であれば、どこでも動作します。基本的に何でも構築することが可能で、ほとんどあらゆるプラットフォームで動作します。

JavaScripが普及したことにより、Stack Overflowの共同設立者であるJeff Atwood氏は、新しく次のルールを宣言しました。

「JavaScriptで書くことができるアプリケーションは、最終的にはJavaScriptで書くこと」

そして時間が経つにしたがって、このルールは力が強くなっています。

Javaもかつて、どこでも動作すると約束されていました。しかし、今年初めにJava Appletが廃止されたことは記憶に新しいかと思います。

Pythonにも同じような問題があります。

「友人のために作ったゲームをどうやって渡したらいいですか?学校の生徒たちがインストールしなくてもいいように、このゲームを私のスマートフォンに移植して彼らに見せる方法はありますか?」――この質問を受けたことにより、教育用の言語としてPythonを使うことをやめた:James Hague氏の記事より(『Retiring Python as a Teaching Language』)

これとは対照的なのが、私たちのオープンソースコミュニティのメンバーがブラウザ上でCodePenを使って構築したアプリで、次にご紹介します。ブラウザ上で見れば動作します。

1-i-bre5pf0rk6wgz5yjugjw-620x588

1970年代スタイルのサイモンゲーム

1-gtvqi4luu0-_soyhi93lbg-620x313

ライフゲーム (Conway’s Game of Life)

1-jkx-vf8esz0gyv_l6s2i9a-620x301

スター・ウォーズをテーマとした検索システム

1-pii9yxaunjansffwvdotdq-620x383

ローグライクゲームの一種であるダンジョンクロウル( Dungeon Crawl )

 

一つの言語をよく学ぶこと、その次に2つ目の言語を学ぶこと。

もし様々な言語をどれも中途半端に学ぶとしたら、学習効果は望めません。

基礎力をつけて次に進むには、最初の言語をよく学ぶ必要があります。そうすれば、2つ目の言語の学習ははるかに簡単になるはずです。

そこから、さらに多くの言語を学ぶことで、より応用力のあるエンジニアになれます。

  • コンピュータ内のメモリの操作の仕組みを理解するには、Cが適しています。またCは演算の処理速度も速いです。
  • C++はゲーム開発に適しています。
  • Pythonは科学と統計学に適しています。
  • 大手のIT企業で働くとしたら、Javaを使えることが重要になります。

それでも最初に学ぶ言語はJavaScriptがおすすめです。

次に、予想される4つの反論に答えてみます。

 

反論1:JavaScriptは処理速度が遅いのでは?

JavaScriptは、実用的な目的の範囲では、処理速度も速くパフォーマンスの高い言語です。

次のグラフは、主要な言語のベンチマーク(処理速度の測定結果)を示しています。

JavaScript (Node.js)は、Python、Ruby、PHPよりも処理速度の順位が上です。C++、Java、Goなどのパフォーマンスの高い言語に近い処理速度が実現されています。

1-h91cfce8nlgyhfm4clbv6w-620x363

画像:ネスト構造のループの処理速度(秒)

 

反論2:JavaScriptは静的型付け言語ではない

PythonやRubyと同じように、JavaScriptは動的型付き言語です。便利なところもありますが、困った点もあります。

例えば、exampleArrayという配列を生成して、値を設定して、長さを取得するとします。

code1-620x124

しかし誤ってexampleArrayを文字列として定義した場合、次のようになります。

code2-620x123

この種のエラーは、動的型付き言語ではよく起こります。そのため、ほとんどのエンジニアはエラーを防ぐためにチェックを行い、テストも実施します。

あなたが最初に学ぶプログラミング言語は絶対に静的型付け言語にしようと考えているとしても、私はJavaScriptを最初に学ぶことをおすすめします。TypeScriptをすぐに理解できるというメリットもあります。

 

反論3:しかし、本当に作りたいものはモバイルアプリです

そうだとしても、私はやはりプログラミング初心者にJavaScriptを学ぶことをおすすめします。

  1. JavaScriptは、AngularJS、Cordova、React Nativeなどのフレームワークを、ネイティブアプリの開発ツールとして使えます。
  2. モバイルアプリで面白いことを実現するには、例えばNode.jsやExpress.jsなどのWeb開発用フレームワークを組み合わせて用いて、バックエンドを構築する必要があります。

 

また実際にモバイルアプリの開発の仕事に携わるまでには、時間がかかる可能性があることも伝えておきたいと思います。

特に最初のうちは、エンジニアの仕事の半分近くはWeb開発に関わります。全体の仕事に占めるモバイルアプリの開発の割合は、わずか8%ほどしかありません。

1-6rsfhngrzfyx-9p37fvtpa-620x584

「あらゆることに関してアプリの開発が求められ続ける」という壮大な構想は、現実ではありません。その代わりに、ほとんどのスマートフォンのユーザーは、これ以上新しいアプリをダウンロードしない傾向にあります。

ユーザーがアプリを使っていることは確かですが、多くの場合、そのアプリはFacebook、Google Mapsなどほんの一握りです。そのため、モバイルアプリの開発におけるエンジニアの需要が高いのは、特に大手の企業においてであるのが現状です。

モバイルアプリの開発は将来予測が難しい仕事だといえます。JavaScriptを使うことで、モバイルアプリの開発、メンテナンス、配布をより簡単に行うことが可能です。そのため、 FacebookやGoogleなどの企業は、JavaScriptを使ったモバイルアプリ開発において役立つツールに、巨額の投資をしています。

 

2016年現在、ほとんど全ての開発はWeb開発です。現代においては、全てのものがWebというプラットフォームに関係するからです。あなたがいつも会話に使っているデバイスから発信される電波も、あなたの子供を送迎する車も、――すべてのものがWebを通して繋がっているのです。

そのためJavaScriptが重要なのです。

 

反論4:JavaScriptは10日間で書かれたおもちゃ言語(toy language)なのでは?

C++も人々から嫌われやすい言語ですが、それにも関わらずJavaScriptと同じように成功し、現在ではほとんどどこにでも普及しています。

そのため、人気のあるエリート言語ではなくJavaScriptを学んでいることを誰かに批判されたときには、C++の開発者の有名な言葉を思い出してください。
「世の中には2種類のプログラミング言語がある。それは、人々から嫌われる言語と、誰にも使われない言語だ。」――ビャーネ・ストロヴストルップ氏

 

まとめ

今回、言語の将来性、学習難易度を元にJavaScriptという言語をおすすめしていますが、当然身につけたい言語が決まっている場合はその言語を優先すべきです。

とはいえ、今後エンジニアを目指すのであればその言語を使用している求人の量、起業を目指すのであればその言語が使えるエンジニアの数が重要指標になります。

これから学習しようと思っている初心者の方は、独学で始められるJavaScriptの学習サイトも合わせてご覧ください。

[お知らせ]TechAcademyでは最短4週間でフロントエンドの技術が身につくフロントエンドオンラインブートキャンプを開催しています。JavaScriptを使ってリッチなWebサービスを作りたい方はぜひご覧ください。

また、現役エンジニアから学べる無料のプログラミング体験会も実施しているので、ぜひ参加してみてください。