プログラミング言語も色々
- プログラミングの勉強を始めたが難しくて挫折しそう
- プログラミングは難しくないと聞いたのに、自分には向いていないのではないか
など、プログラミング学習での悩みは色々とありますよね。
プログラミングに難しさを感じるのには色々な理由があるのですが、
今日は、プログラミング言語の難易度についてです。
私たちが普段使っている日本語や英語のような自然言語と同様に、プログラミング言語にも多くの種類があります。
自然言語と同じように、それぞれ特徴を持っています。
そのため、一般的に、
- 習得するのが難しい
- 取り組みにくい
と言われる言語があります。一方で、
- 初学者向け
- 取り組みやすい
と言われている言語もあります。
今日は、それぞれ3つずつプログラミング言語を紹介します。
プログラミング言語の人気ランキングほど広く知られている言語難易度ランキングがあるわけではないので、いくつかのランキングなどから私が考えるものです。
参考程度に、見て頂ければと思います。
- 自分が取り組んでいるプログラミング言語が、実は難しいと言われている言語だった。もう少し学習を続けてみよう
- 別のプログラミング言語に取り組むことを検討しよう
など、何か次の手が見えるかもしれません。
難しい
C++
難しいカテゴリーの1つ目は、
です。
C++は、1980年代に登場して以来、広く用いられている汎用プログラミング言語です。
このC++は、習得するのが難しめのプログラミング言語であることでも知られています。
取り組むのが難しい理由としては、
- C言語の理解が前提
- オブジェクト指向についての理解が前提
- プロフェッショナル向けの多くの機能がある
などがあると思います。
C++は、C言語から派生したプログラミング言語です。C言語の機能や特徴を引き継いでいます。そのため、C++を学ぶ時には、事前にC言語について理解している必要があります。C言語は、ハードウェアを直接制御できるプログラミング言語です。C言語自体の習得に、CPUやメモリなどコンピュータのハードウェアの理解が必要です。
これらのC言語の前提が、C++の習得難易度を上げていると考えられます。
また、C++は、オブジェクト指向言語です。
オブジェクト指向とは簡単に言うと、プログラミングするときに、様々なモノ=オブジェクトに注目してコードを書いていく方法です。
かなり大胆な説明ですが、オブジェクト指向というのは概念の一種です。
オブジェクト指向プログラミングに慣れるには、カプセル化、継承、多態性(ポリモーフィズム)といった独自の考え方を知る必要があります。
この点も、C++への取り組みを難しくしています。
さらに、C言語を拡張する形で開発が進められてきたC++は、C言語にはない多様な機能を持っています。これらの膨大な機能も、C++学習者をたじろがせる理由の1つです。
そんなC++を学習するときは、
- C言語の基礎を学ぶ
- オブジェクト指向を理解する
ことから始めると、続けていると思います。
Haskell
2つ目は、
です。
Haskellは、純粋関数型プログラミング言語です。
関数型プログラミングというのは、プログラミングの書き方の一つで、
関数を基本としてコードを書くスタイルです。
ここでの関数は、入力を何かに変換して出力するもの、のことで、PythonやC言語などの関数(まとまった処理をするコード群)というよりは、数学の関数に近いイメージです。
関数プログラミングが可能な言語には、
- LISP
- Ocaml
- Haskell
- Scala
- Erlang
などがあります。
その中でも、Haskellは、純粋型関数言語と言われています。
これは、変数に値を再代入できない=変数の値は常に一定、ということです。
ここで???、となると思います。そのため、ここでは純粋関数型プログラミング言語では、PythonやC言語のようなコードの書き方は認められていない、というくらいの認識で大丈夫です。
純粋型関数言語であるHaskellを学ぶ時には、必ず関数型プログラミングを知る必要があります。
関数型プログラミングの学習のとっつきにくさが、Haskellの学習難易度を上げていると考えられます。
Rust
3つ目は、
です。
Rustは、2010年に発表された比較的新しいプログラミング言語です。
C言語、C++に代わる言語として開発が進められています。
マルチパラダイムプログラミング言語であるため、オブジェクト指向、関数型プログラミング、手続き型(C言語のように命令を一つずつ手順で記載する方法)など色々な書き方ができるプログラミング言語です。
stackoverflowの2019年、開発者向けの調査では、
開発者に好まれる言語の1位を獲得しています。
Microsoftが試験的にRustを使い始めるなど、今後の使用拡大が期待されています。
そんなRustですが、C++の代替として期待されていることもあり、習得難易度は高いとされています。
イメージとしては、とっつきにくいが、一度使い方に慣れると、
熱烈なファンになる可能性がある言語がRustだと思います。
易しい
Python
易しいカテゴリーの1つ目は、
です。
これまでも、何回か記事で紹介してきたPythonです。
- シンプルな文法
- 豊富なフレームワーク / ライブラリ
- 世界中に広がっているユーザー=コミュニティの多さ
などの点から、非常に人気が高いプログラミング言語の一つです。
シンプルにプログラミングコードを書けることから、初学者にお勧めのプログラミング言語です。
実際に、学校のプログラミング教育でPythonが使われるケースも世界中で見られます。
コードの書きやすさとともに、
- DjangoやFlaskなどのWeb開発用のフレームワーク
- TensorflowやPyTorchなどの機械学習のフレームワーク
- NumPyやMatplotlibのようなデータ分析用のライブラリ
などのフレームワーク / ライブラリが充実していることも、学習者にプラスに働きます。
自分で1からすべてのコード記述するのではなく、
- 便利な機能がまとまったプログラムの集まり=ライブラリ
- 汎用的に使う機能をまとめた枠組み=フレームワーク
を使うことで、自分の作りたいものを最短距離で作る、という経験を得やすいです。
世界中にPythonを使っている人がいる=コミュニティが大きい
ということもプログラミング学習時に有利に働きます。
色々なイベントに参加したり、解消できないエラーに関してインターネットのQ&Aサイトを使って聞いてみるということが簡単にできるためです。
このPythonの
- プログラムのコードを書きやすい
- いろいろなツール(フレームワーク / ライブラリ)を十分活用して、作りたいものを簡単に作ることができる
- 使っている人が多い
という点は、初学者にPythonをお勧めする理由です。
PHP
2つ目は、
です。
PHPは汎用プログラミング言語ですが、特にウェブページ作成などの際のサーバーサイドの開発で使用されています。
サーバーサイドというのは、その名の通りサーバー(サービスを提供するコンピュータのこと)で動くプログラムやサーバー内での処理です。
サーバーで動くプログラムや、サーバー内処理を記述するためによく使われるのがPHPです。
サーバーと対比して使われることが多い用語は、クライアント(サービスを使う側のコンピュータ)です。
PHPは、特にWeb開発の領域において、
- HTMLなどのマークアップ言語との親和性が高い
- 利用者が多い
などの点から広く用いられています。
簡単にWebページを作成できることから世界中で広く用いられているオープンソースのソフトウェアであるWordPressはPHPで開発されています。
Web開発に興味がある人には、
取り組みやすいプログラミング言語だと思います。
Go
3つ目は、
です。
2009年に登場したGo言語はまだ新しい言語です。
取り組みやすさは、同時期に登場したRustとは対照的と言えるでしょう。
- シンプルな文法のため、コードが短くなる傾向がある
- 人気が出てきているため、情報やコミュニティが成長している
などの点から比較的取り組みやすい言語と言えます。
それでも、PythonやPHPなどのインタプリタ型言語とは違い、
Go言語はコンパイル型言語なので、少し難易度は上がるという見方もできます。
インタプリタ型言語というのは、簡単に言うと
コードを書いて、そのまますぐにプログラムを走らせることができる言語です。
そのまますぐにプログラムを走らせることができない状況なんてあるのか?
と疑問に思うかもしれません。
この、すぐには走らせられない言語が、コンパイル型言語です。
コンパイル型言語では、プログラムのコードを書いた後に、
それをコンパイルする必要があります。
コンパイルとは、人間が書いたプログラムのコードをコンピュータが理解できるような機械語に変換することです。
コンパイル型言語では、人間が書いたコードを、まとめてコンピュータが直接実行できる形に変換後、初めてプログラムを走らせることができます。
一般的には、コンパイル型言語は、インタプリタ型言語よりは取り組みの難易度は高めと言われています。
コンパイル型言語では、ほかにC言語やC++などが代表例です。
コンパイル型言語であるGo言語は、PythonやPHPに比べるとやや取り組みにくく感じるかもしれません。
しかし、Go言語のコードのシンプルな記載方法という点から、コンパイル型言語への入門という位置付けで、
Go言語の学習は一つの選択肢となると思います。
相性もある
今日は、
(私の主観を大いに取り入れつつ)
- 難しめのプログラミング言語として、C++、Haskell、Rust
- 比較的取り組みやすいプログラミング言語として、Python、PHP、Go
を紹介しました。
それぞれ強みがありますが、プログラミングに慣れていない初学者の場合は、
PythonやPHPなどが有力候補となると思います。
プログラミングに慣れてきて、
もっと他の言語も学習したい
という場合に、C++、Haskell、Rustが候補となります。
今日紹介した、6つのプログラミング言語は、どれもそれぞれの特徴を活かし、様々な分野で使われています。
近年特に、広く知られ、使用人口が増えているものもあります。
プログラミング言語の好みは人それぞれ、とも言われます。
気になる言語があった人は、ぜひ一度試してみてください。
それぞれの言語の魅力に気づくかもしれません。
コメント