初心者が初めて学ぶプログラミング言語の選び方

プログラミング-その他

最近、初等教育でプログラミングが必須になったり、プログラミングスクールの広告が急増していたりと社会的にプログラミングへの注目が高まっていると感じられます。

そんな中、この記事に辿り着いたあなたは以下のような悩みを持っていると思います。

たくさんのプログラミング言語があるみたいだけど、初心者は何から勉強すればいいの?

この記事では、初心者が最初に学ぶプログラミング言語の選び方について私の考えを説明します。
もちろん、個人的な考えですので必ずしも正しいことが書かれているとは限りません。
しかし、自分や今までプログラミングを教えてきた知人の中から、プログラミングをきちんと身につけることができた人に共通する性質を見て、「このような選び方がいいんじゃないかな?」と考えています。

…とは言え、まず「書き手は何者なのか?」と気になると思うので、少しだけ自己紹介します。

私は、中学生の頃から約15年間プログラミングに触れ続けてきた現職のプログラマーです。
業務経験として今まで触れてきた分野は、Webアプリケーション・システム開発(SI)・ゲーム・Android/iOSアプリなど様々です。
また、学生時代は人工知能(AI)を研究テーマにしており、画像処理機械学習を応用したテーマで修士論文を書き、マスターの学位を取得しています(また、当時は趣味で音楽情報処理もやっていました)。

もっと詳しいことは以下の記事をご覧ください。

…と、これまでの人生で様々なプログラミングに関わる経験を積んできたので、「プログラミング」という軸で俯瞰的に物事を見ることには長けていると思っています。

この記事の対象者

  • 最初に学ぶプログラミング言語をどうやって選べばいいかわからない人
  • 「プログラミング」という軸でどういう分野があるのか俯瞰的に見てみたい人

結論:あなたがやりたいことによって答えは変わります!

結論から言いますと、あなたが何をやりたいかによって最初に学ぶべきプログラミング言語は変わります。

まず、プログラミング言語には得意分野があります。
これさえ勉強しておけば全部OK!」という言語は存在しないということです。
そのため、あなたがやりたいことに適したものを選択する必要があります。

…とは言え、「自分のやりたいことに適した言語って何なんだろう?」「そもそも、プログラミングでどういうことができるんだろう?」と悩む人も多いと思いますので、いくつか例を紹介していきます。

では、「やりたいことが途中で変わってしまったら、勉強は無駄になってしまうの?」と言えば、そうではありません
プログラミング言語にはそれぞれ適した用途がありますが、根底にある「考え方」は計算機科学に基づいているためほとんど変わりません。
そのため、1つの言語をしっかり理解することで、他の言語もすぐ理解できるようになります

Webアプリを作りたい

2021年現在、Webアプリを作りたいならまず JavaScript を勉強すると良いと思います。

ReactVue.js といったフロントエンド(UI/UXなどの見た目に関わる領域)フレームワークだけでなく、Node.js といったサーバサイド(裏側のデータ操作などに関わる領域)フレームワークも登場しています。
すなわち、Webアプリに関わる領域をすべて JavaScript で完結させようとする動きが出てきています。

また、世界的に見ても JavaScript のシェアは高いです。
日本で言うと Ruby on Rails の需要が高いように感じられますが、Googleトレンドを見ると JavaScript の需要のほうが圧倒的に高いです。

他の選択肢としては、RubyPHP が挙げられます。
PHP はWeb専用の言語と言っても過言ではないので、他への応用を考えるならRubyが良さそうです。

HTML / CSS はプログラミング言語?

ところで、Webと言えば HTML / CSS が代表的な技術として考えられると思いますが、これらは「プログラミング言語ではない」と考えています。

実のところ、「プログラミング言語の定義」はハッキリしておらず、しばしば「チューリング完全である」ことがプログラミング言語の必要条件として挙げられます。
そして、HTML5 / CSS はチューリング完全であるらしいので、それを考えると一種のプログラミング言語とも言えます(ただし、これは必要条件と十分条件を混同した良くない議論だとは思いますが…)。

しかし、HTML / CSS はそもそも計算を目的とした技術ではなく、デザインを目的とした記述方法です。
そのため、「プログラミング言語」という枠組みに当てはめるのは強引ではないか、というのが私の考えです。

Flutter(Dart)はどうなの?

当ブログでは Flutter(Dart)に関する記事を多く上げています。
Flutter は Web アプリだけでなく、モバイル・デスクトップアプリケーションも同一コードで作成できる、最近登場したフレームワークです。

ここまで広いプラットフォームをサポートしたフレームは今までになく、海外では既にかなりの人気を集めており、出遅れている感がある日本でも今後伸びていくことは間違いないでしょう。

しかし、Flutter は Dart という独自言語を利用します。

Dart 自体も新しい言語であり、既存の言語の良いところを集めつつ、独特の最新機能を搭載する使いやすいプログラミング言語です。

しかし、初心者が Dart に手を出すのはあまりオススメできません
というのも、新しい分まだまだ発展途上の部分があり、基本的に英語・一次ソースから情報を探っていく力が必要になります
日本ではまだあまりメジャーではなく、日本語ドキュメントが乏しい(あるいは間違った資料が多い)こともあり、情報の取捨選択能力も必要になります

そのため、最初の言語として Dart を選ぶのは避けた方が良いと思います。

ゲームを作りたい

2021年現在、ゲームを作りたいならまず C# を勉強すると良いと思います。

現状、汎用ゲームエンジンとして圧倒的にシェアが高いのは Unity です。
そして、Unity では C# を使ってスクリプトを書いていくので、まず C# から勉強し始めるのが良いでしょう。

以前は JavaScript(のようなもの)や Boo という言語を Unity で利用することもできました。
しかし、利用者が非常に少なかったため、現在は C# のみサポートされています

Googleトレンドを見ると、他の選択肢と比べて Unity のシェアが飛び抜けていることが分かります。

なお、コンシューマーゲーム(家庭用ゲーム機向けのゲーム)の制作では未だに C++ が主流です。
ただし、C++ は初心者が手を出すには敷居が高い言語のため、まずは C# を勉強して Unity でゲーム作りの流れを学んでから、改めて C++ に挑戦する、というイメージが良いでしょう。

機械学習/AIに興味がある

2021年現在、機械学習やAIに興味があるなら Python を勉強すると良いと思います。

と言うのも、Python には NumPyPandasMatplotlib といった行列・ベクトルデータの扱いや可視化に向いたライブラリが充実しています。
そのため、数学的な実験をするベースがしっかりしており、理解を進めるには良い環境が揃っていると言えます。

また、識別・回帰などの機械学習アルゴリズムが一通り揃った scikit-learn や、テキスト(形態素)解析向けの mecab、画像処理向けの OpenCV などもライブラリが充実しています。

これらは別々のライブラリですが、色々と考えるのが面倒な人向けに Anaconda という環境構築フレームワークが存在しており、とりあえずこれを入れておけば機械学習をするには困ることがないです。

…と、余計なことに邪魔されず研究に集中できる環境を作りやすいので、Python をおすすめします。

最終的には動作速度が問題になってくると思われるので、次点では C++ がおすすめできます。

競技プログラミングに興味がある

最近、特に学生の間で競技プログラミングが注目されています。
競技プログラミングとは、ある問題を解決するプログラムを制限時間内に作成し、正確性・実行速度などを競うものです。
ゲーム感覚でプログラミング能力を高められるほか、新卒採用時にはその人のプログラミング能力を大まかに掴むことができるため人気が出ているようです。

競技プログラミングには C++ をおすすめします。
と言うのも、C++ は他と比べて非常に細かいところまで制御できる言語のため、実行速度を突き詰める場合は適しているのです。

しかし、C++ は習得難易度が高いという欠点もあります。
敷居が高いと感じた人は、その次に競技プログラミング言語として人気のある Python に挑戦するのが良さそうです。

とりあえず勉強してみたい

別に作りたいものは無いけど、コンピュータそのものに興味がある」という変わった方もいるかもしれません。
そういった方は、C++C を勉強すると良いと思います。
C++ は C の領域を完全にカバーしていますので、以降 C++ で話を進めていきます。

C++は、他の言語と比べてハードウェアに密接に結びついた機能が多いです。
どういうことかと言いますと、CPU(中央演算処理装置)やメモリを意識してコードを書かないといけない場面が多いのです。
そうしなければ、再現性の低い厄介なバグが発生する可能性があります。

コンピュータに対する高度な知識を要するため、他の言語ではハードウェアとの結びつきは上手く隠されており、言語自体がサポートしてくれている場合が多いです。
その分、ハードウェアに対する理解が進みにくいという欠点があるのです。

よって、コンピュータ自体の理解を進めたい場合は、C++にチャレンジしてみるのが良いと思います。

学習のモチベーションを維持するには?

お疲れさまでした。
ここまで、「やりたいこと」に対するオススメのプログラミング言語を紹介してきました。

プログラミングの学習を進める際のアドバイスですが、プログラミング言語自体の勉強はそこそこにして、アプリ(作りたいもの)作りを進めていくのが良いと思います。

理由ですが、実際に経験することで勉強した内容が定着するからです。
特に、オブジェクト指向などの高度に抽象的な内容になってくると、実際に困らないと存在意義がよく分からない場合が多いです。
このような「よく分からない」状態で勉強を進めても、「意味のわからない用語」をたくさん覚えるだけでモチベーション維持が難しくなってしまいます。

最初から綺麗なプログラムを書いて、スマートなアプリを作りたい!」と思う気持ちは分かりますが、どれだけ綺麗に見えるアプリでも、いくらか泥臭い部分が存在します
そもそも、プログラミング言語自体もどんどん進化していますので、去年「綺麗に」書いたコードが今年はもう「汚く」なってしまうということはよくあります。

…と、いくら勉強してもキリがないので、まずあなたができる範囲で頑張ってみるというのが大切なのです。

それに、「作りたい!」と思ったものが実際に作れるとかなり嬉しくなります
自信にもつながりますし、勉強ばかりを重視するのではなく、どんどんアプリを作ってみてください

まとめ

初めて学ぶプログラミング言語は、「あなたがやりたいこと」に合わせましょう。

  • Webアプリ → JavaScript, Ruby, PHP
  • ゲーム → C#, C++
  • 機械学習/AI → Python, C++
  • 競技プログラミング → C++, Python
  • コンピュータ自体に興味がある → C++, C

また、プログラミング言語にはそれぞれ適した用途がありますが、根底の考え方は同じです。
そのため、1つのプログラミング言語をしっかり理解することで、他のプログラミング言語も簡単に理解できるようになります

モチベーション維持には、言語自体の勉強を進めながらも、アプリをどんどん作っていくのが良いと思います。

コメント

タイトルとURLをコピーしました