プログラミング言語の難易度
※難易度は1(易)~5(難)までの5段階。
プログラミング言語を難易度でランキングしてみると、難易度を分けている要因が見えてきます。
たとえばPythonは、サーバーサイドで動き、コンパイルが不要で、ガベージコレクションを持つ言語。たとえばCは、サーバーサイドで動き、コンパイルが必要で、ガベージコレクションが無い言語。という見方になります。
難易度1|2345を分けているのは、プログラミング言語か否かです。HTML&CSSは、そもそもプログラミングではなくマークアップ言語です。プログラミング言語のような制御構文が無いため、単に記法を覚えるだけで習得できます。
難易度12|345を分けているのはプログラムの動作環境です。JavaScriptとVBAはクライアントサイド(ユーザーの端末側)で動くプログラムゆえに動作環境を得やすく、未経験者でも開発を始めやすい言語なので難易度は低いです。難易度3以上のサーバーサイドで動くプログラミング言語はサーバーの知識が必要となり、それゆえに未経験者にとっては扱い方を理解するまでのハードルとなっています。
難易度123|45を分けているのはコンパイルの要・不要です。コンパイルとは機械がプログラムを読めるように翻訳する作業です。この仕組みと手間が一段と難易度を上げている要因です。実はSwiftも実装時にコンパイルが必要なのですが、開発環境Xcodeでの開発中はいちいちコンパイルしなくても(インタラクティブに)開発できるため難易度が下がります。
難易度1234|5を分けているのはガベージコレクションの有無です。C、C++の難易度がもっとも高い要因は、ガベージコレクション(プログラム実行中のメモリ管理)を持たないためです。プログラミングにおいてメモリの配分と解放をプログラムしなければらないため、未経験者は容易に手を出せない難しさとなっています。
この記事では、私が実際に書いた経験にもとづいてプログラミング言語の難易度を、もう少し噛み砕いて分かりやすく解説していきます。
-
プログラミング言語|おすすめは1Python2JavaScript3Java
Contents
難易度の感じ方には個人差があるのでは?
プログラミング言語の難易度には、どうしても個人的な主観が入ってしまうものです。
もし、気になるプログラミング言語があったとして、その言語を使っている経験者に難易度を聞いたとしてもあまり参考にはならないでしょう。なぜなら、その経験者は長くそのプログラミング言語と付き合ってきているので、もはや難しく感じないからです。つまり、慣れや贔屓目があるので、難易度の感じ方には個人差が出てしまうのです。
私は小学生のときにBASIC言語でプログラミングを覚えて、社会に出てからしばらくはVisualBasicを業務で使っていました。次に習得するプログラミング言語を探したときに、それぞれの言語で一度、プログラムを書いてみてから決めた経験があります。
VBA、JavaScript、PHP、Ruby、Python、Java、C言語、C++などなど、世の中でよく使われるプログラミング言語で実際にプログラムを書いてみると、難易度にはずいぶん差がありました。その経験を活かして、慣れや贔屓目を抜きにして難易度を付けました。
実際にプログラミングしてみた経験では、HTML、CSS、JavaScriptなどのウェブ系の言語はとても難易度が低いことが分かります。
プログラミング言語の難易度は習得時間や挫折率に影響します。とくに未経験者にとっては学習コストに大きく影響します。
プログラミング未経験者が学習を始めるときは、ウェブ系のプログラミング言語を選ぶと学びやすくて挫折しにくいです。
プログラミング言語の難易度
プログラミング言語の習得難易度
- 難易度1:HTML、CSS
- 難易度2:JavaScript、VBA
- 難易度3:Ruby、PHP、Python、Swift、SQL
- 難易度4:Java、C#
- 難易度5:C、C++
難易度は1(易)~5(難)までの5段階。
HTML&CSSは、プログラミング言語ではありませんが、未経験者がはじめに学習する言語として最適です。コーディングの基礎を学べて、ウェブページを作れるようになります。
HTML&CSSの経験がある方に推したいのはJavaScriptです。HTMLファイルの中に埋め込むことができる言語なので、プログラミング未経験者が手を付けやすく理解しやすいです。ちなみにPHPも、HTMLの中に埋め込んで書ける利便性の高い言語です。
Excelをよく使用しているならVBAが良いでしょう。ExcelにはVBAの開発環境がすでに入っています。VBAの記法はやさしく、プログラムの実行結果をシートで確認しながら学ぶことができます。PythonもExcel自動化やファイル操作などの業務タスク自動化に使いやすい言語です。
プログラミング言語の難易度に差が生まれる原因
プログラミング言語の難易度に差が生まれる原因には、次のようなものがあります。
- 環境構築:プログラミングを行うために用意する場所・道具。プログラミング言語や開発用ツールをインストールすることは未経験者にとってやや難しい。
- 文法:プログラムの書き方。各プログラミング言語によって文法や記法が異なる。ただし制御構造はほぼ共通している。
- 型:コンピューターに認識させる値のかたち。静的型付け、動的型付けがある。動的型付け言語の方が簡易。
- コンパイル:機械が読めるように翻訳する作業。C系、Javaはコンパイルが必要なので難しい。未経験者にはコンパイル不要な言語が良い。
- パラダイム:プログラミングの手法・スタイル。手続き型、関数型、オブジェクト指向など。
コンパイル・パラダイムとは
コンパイルとは、人間が書いたプログラムをさらに機械が読めるように翻訳する作業です。パラダイムとは、プログラムの構築概念です。日記のようにつれづれと書くか、教科書のように章立てて書くか。というような概念に似ています。
「有名だからC言語をやってみようと思った。」「システムエンジニアの友人がやってるからJavaにしてみた。」みたいに、よく考えずに難しい言語に手を出してしまうと挫折の原因になります。
-
【口コミ調査】人気集中のプログラミングスクール
HTML(難易度1)
- 環境構築:HTMLの学習環境はエディタとブラウザさえあれば始められるほど容易。
- 文法:ウェブページでよく使われているHTMLタグは決まっており、覚えることが限られている。
- 型:概念なし。
- コンパイル:なし。
- パラダイム:概念なし。
- 独学は可能。本を見ながら学習できる。ウェブにも多くの見本と解説がある。
- 自身でウェブサイトを立ち上げたり、ウェブ制作やライティングの仕事を請け負って副収入を得ることも可能。
HTMLはウェブページをレイアウトするための言語で、マークアップ言語と呼ばれます。
マークアップ言語は、プログラムの実行結果を出力するために使ったりもするので、プログラミング学習と併せて覚えておくと便利です。
HTMLの難易度は低く、スクールのカリキュラムでもまず手始めに学習する言語になっています。ウェブ上にもHTMLの情報がたくさんあります。
プログラミング未経験者はHTML&CSSから学習すると、プログラミング言語への足かけになります。
HTMLは独学でも身につけられる言語です。IT未経験者だけどプログラミングに興味がある場合は、まずHTMLの学習から始めてみると向き不向きを判断できると思います。私は学生のころに自力でウェブページを作ってみたくて夢中で身についてしまいました。
CSS(難易度1)
- 環境構築:CSSの学習環境はHTMLと同様にエディタとブラウザさえあればよい。
- 文法:CSSの書き方は決まっており、覚えることが限られている。
- 型:概念なし。
- コンパイル:なし。
- パラダイム:概念なし。
- 独学は可能。本を見ながら学習できる。ウェブにも多くの見本と解説がある。
- 自身でウェブサイトを立ち上げたり、ウェブデザイナーの仕事への道が開ける。
HTMLを装飾・デザインするための言語です。スタイルシート言語と呼ばれます。
HTMLとセットで学習するのが適切です。HTMLと同様に難易度が低く、ウェブページを作る楽しさを味わいながら学習していけます。
ウェブ上にはCSSの情報があふれているので、分からないことを調べるのも容易です。
CSSは、HTMLと常に一緒に使用される言語です。独学でも身につけられます。IT未経験者の場合は、まずHTMLの学習から始めて、ウェブページを作る中でCSSを覚えていくと良いでしょう。私は自分のブログを立ち上げてからCSS扱うようになりましたが、ウェブデザインの楽しさのうちに覚えていくことができます。
JavaScript(難易度2)
- 環境構築:環境構築が簡単。エディタとウェブブラウザくらい。
- 文法:ウェブでの使用目的がわかりやすい関数が用意されているので、未経験者でもプログラムを組みやすい。
- 型:動的。(未経験者でも簡単です。)
- コンパイル:なし。
- パラダイム:マルチパラダイム。主に手続き型。(未経験者でも簡単です。)関数型、オブジェクト指向も可能。
- 開発の内容によっては、制御構造を身につける機会に恵まれないことがある。
- コンパイル不要。ウェブブラウザで実行結果を確認しながら開発できる点が簡便。
JavaScriptは、ウェブサイトに動きを付けたりや計算機能を付けたりするのに使われます。そのため、学習の目的を見つけやすく、プログラミング未経験者にも学習難易度の低い言語です。
Googleは、JavaScriptベースに生み出した言語Google Apps Scriptを駆使して、Googleスプレッドシートなどの高度なウェブアプリケーションを開発しています。GoogleマップにはJavaScriptの応用技術Ajaxが使われています。
ウェブアプリ開発をより簡便に行えるフレームワークVue.js、サーバーでのjavaScript実行環境Node.jsも注目されています。
JavaScriptはウェブ開発には欠かせないため需要が尽きません。今後も発展を期待できる言語なので、身につけておくと長く使えるスキルになります。
プログラミング未経験者に「一つだけプログラミング言語を学習するなら、どれ?」と質問されたら、私なら迷わずJavaScriptを推します。記述が簡単で、ウェブでの利用目的を見出せるので、学習意欲を維持しやすいです。挫折率がもっとも低い言語ではないかと思います。
VBA(難易度2)
- 環境構築:VBAの動作環境として簡易なのはExcel。開発モードが実はすでにExcelに入っている。
- 文法:記法の自由度が高い。そのせいで、他人が書いたコードを読み解きづらい。自分ですら読めなくなることがある。
- 型:静的。(よく型のエラーが発生します。)
- コンパイル:不要。
- パラダイム:主に手続き型。(未経験者でも簡単です。)関数型、オブジェクト指向も可能。
- 他のプログラミング言語と比べて文法が独特。レトロなのでうんざりするような書き方を強いられることもある。
- コンパイル不要。ワークシートで動作を確認しながら開発できるのは、学習において楽。
VBAはMicrosoftのアプリケーション(ExcelやAccess)に機能追加したり自動化したりできるプログラミング言語です。
やりたいこと(処理)を上から順に記述していけばよいので、とても書きやすいです。プログラム実行の結果をExcelシートで確認できる点が難易度を易しくしています。
記法に厳密なルールがなく、人それぞれの記述のバラつきが大きくなります。
そのため、他人の書いたVBAプログラムを読み解くのは困難になりがちです。自分の書いたプログラムさえ、3ヵ月後に読めなくなったことがありました。
Excelワークシート間のコピペ作業や、毎日の繰り返し入力作業などを自動化できます。普段の業務でExcelを使っているならVBAは強力な武器になります。
私が社会人になってまず武器にしたのがVBAです。Excelを使う業務を自動化していったところ、社内での評価がどんどん上がっていきました。業務でExcelを使っている方は、VBAで学習するのが良いでしょう。私の場合は、VBAのプログラミングスキルを流用するかたちでPythonを習得しました。
Ruby(難易度3)
- 環境構築:環境構築が簡単。Rubyのインストールとエディタがあれば良い。
- 文法:Rubyの記法はルールがゆるく、どのように書いてもそれなりに動く。反面、他人のコードを読み解きにくい。
- 型:動的。(未経験者でも簡単です。)
- コンパイル:不要。
- パラダイム:主にオブジェクト指向。(未経験者でも簡単です。)関数型も可能。
- コンパイル不要なので、プログラムを書いて、すぐ実行しながら組み上げていくことが可能。
- Ruby on railsというフレームワークでアプリ開発がより簡単になる。ただし、プログラミングとは言い難い。
RubyにはRuby on Railsというウェブアプリ開発用のフレームワークがあり、プログラミング未経験者にも学習しやすい言語です。
Ruby on Railsを利用すると、パーツを組み合わせるようにして見栄えのよいウェブサイトやアプリを作れます。食べログや価格ドットコム、クックパッドなどの大規模なウェブサービス・サイトにも使われています。
ただ、フレームワークを使わないRubyは、決して読み書きしやすい言語には感じません。Perlのような古臭い記法が残っており、一見では呪文のように見えます。他人の書いたコードを読み解くのに苦労します。(英文のように書けるPythonがいかに合理的な言語仕様であるかを感じました。)
記法のルールがゆるいRubyの開発現場では、チーム内で厳密なルール作りが必要になります。これがRubyの余計な開発コストになっているので、開発現場でRubyが使われる機会は減っていくでしょう。
TwitterもRuby on Railsで開発されましたが、現在はScalaに移行しています。
Ruby on railsのおかげでRubyのプログラミングは簡便になり、一時は大人気となりました。現在はPHPやPythonで同様の開発ができるようになり、Rubyの需要は下がっています。シェアを伸ばしているPHP(Lavavel)またはPython(Django)を学習したほうが今後のために良いと感じます。
PHP(難易度3)
- 環境構築:環境構築がやや難しい。環境構築ツール(XAMPPなど)があるが、パソコンが不得意な人には厳しい。
- 文法:比較的わかりやすく、学習しやすい。
- 型:動的。(未経験者でも簡単です。)
- コンパイル:不要。
- パラダイム:主に関数型。(未経験者でも簡単です。)手続き型、オブジェクト指向も可能。
- プログラムの実行結果がウェブへの出力となるので確認しやすく、学習しやすい。HTMLの知識が必要。
- サーバーを含めたウェブサービスの構造を理解していける。ただ、データベース連携まで含めると習得にはやや時間がかかる。
- コンパイル不要。
ウェブとの親和性が高いだけあって、未経験者でもPHPの役割を理解しやすく、学習の目的を見出しやすい言語です。ただ、学習するための環境構築がやや難しいです。
PHPはウェブサーバー側で動く言語です。多くのウェブサイトに使われているサイト管理ツールWordPressもPHPで動いており、PHPがデータベースと連携してウェブページを動的に生成しています。つまり、WordPressを使っているサイトのすべてがPHPのお世話になっています。
自分でブログ運営してみたいという方は、WordPressをPHPの学習に利用できます。
そのほか、Yahoo!やFacebook、Wikipediaなどの大きなウェブサービスにも使われています。
また、クラウドソーシングでもブログの改修や機能追加の案件がかなり多いです。身につけると副収入につなげやすいプログラミング言語です。
私の場合はプログラミングの知識がある状態でPHPを習得しましたが、未経験者でも始めやすい易しい言語だと感じました。人によってプログラムの記述がやや乱れるものの、用途がウェブに偏っているので分かりやすいです。このブログもPHPを使ったWordPressで運用しています。
Python(難易度3)
- 環境構築:環境構築が簡単。Pythonのインストールとエディタがあれば良い。
- 文法:Python独自の記法・ルールがあり、読み書きしやすい。何でもできる言語でありながら、開発コストが非常に低い。
- 型:動的。(未経験者でも簡単です。)
- コンパイル:不要。(処理速度を速くしたい場合は、C言語でコンパイルできます。)
- パラダイム:マルチパラダイム。主に関数型、オブジェクト指向。(とても柔軟です。)
- コンパイル不要なので、プログラムを書いて、すぐ実行しながら組み上げていくことが可能。
- ライブラリが豊富なので、ファイルやExcelを操作したり、写真を編集したり、自在なプログラムを簡単に実現。
Pythonはプログラミング言語のなかでも記述量が少なく、書きやすくて読みやすい言語です。
プログラミング言語を探していた時にいろいろ書いてみた中で、もっとも無駄がなくスマートに記述できる言語だと感じました。
他のプログラミング言語よりも格段に簡易な記述ルールのおかげで、学習のハードルが低くなっています。
Pythonは、データサイエンスの分野でデータ分析に使われていた言語でしたが、近年は人工知能の開発にも使われています。
ライブラリが豊富なので、どんな分野でも応用が利く柔軟性を持っています。
ライブラリとは
特定分野での開発を簡便にするために、その分野に特化した数式や関数をまとめたツールです。
Excelのライブラリを使えばExcelを操作できます。ウェブ開発のライブラリを使えばウェブアプリケーションも作れます。YouTubeやInstagram、DropboxなどもPythonで作られています。
PythonのバージョンはPython2とPython3があります。現在はPython3が主流になり、ウェブ上の情報も入手しやすくなってきています。
人工知能やブロックチェーンなど、未来の技術開発に使われる言語として定着したので、これから身につける価値がとても高い言語です。
私がPythonに決めた理由は、Pythonでプログラミングを試してみたときに「こんなに書きやすい言語は他に無い」と感じたからです。簡易な記法と豊富なライブラリのおかげで、学習コストが低いわりに応用性が高いです。プログラミング自体を学びたい人にもすごくおすすめです。
Swift(難易度3)
- 環境構築:Macのパソコンを持っているなら簡単に構築できる。環境構築はXcodeをインストールするだけ。
- 文法:前身のObjective-Cのような、やや難解な記法のなごりがある。
- 型:静的。
- コンパイル:必要。ただし、Xcodeで対話的に実行デバッグが可能なため扱いやすい。
- パラダイム:マルチパラダイム。主にオブジェクト指向。関数型。
- Macが好きだったりiPhoneアプリを作ってみたいならSwift一択。
- 実装にはコンパイルが必要であるが、開発環境Xcodeで対話的に開発できるので難易度には影響しない。
AppleがObjective-Cに替わる言語として生み出したのがSwiftです。MacOS用アプリやiPhoneアプリの開発に使われます。
個人的には、Objective-Cの記法を引きずったような書きにくさを感じましたが、開発環境のXcodeの使い勝手が良いので難易度は低いと感じます。
AppleのOS上で動くアプリケーションの開発には長らくObjective-Cが使われてきましたが、現在は開発現場でもSwiftを使う機会が増えています。
iPhoneアプリを開発してみたい。という方にはSwiftです。
Appleのパソコン(iMacやMacBook)があれば、Xcodeをインストールするだけで学習を始められます。
スマホのシェアが今後どうなっていくのかは見通しがつきません。SwiftはApple製品(MacBookやiPhone、AppleWatchなど)のシェアと運命をともにする言語なので、そこを慎重に判断する必要があります。私個人の考えでは、Swiftに学習コストを捧げるのはちょっと怖く感じます。用途が狭すぎるからです。
SQL(難易度3)
- 環境構築:データベースを構築するのは手間がかかる。未経験者の場合は環境構築に相当な時間がかかる。
- 文法:データベース言語による。ただ、書き方は決まっており、触れているうちに覚えられるほど簡単。
- 型:概念なし。データの型は厳密であり、間違いは許されない。
- コンパイル:なし。
- パラダイム:概念なし。
- 未経験者の場合はデータベースが何なのか、何に活用するのかを理解することが難しい。
- Microsoft Accessの使用経験があれば、データベースの理解は早い。
- データの型やインデックスを理解するのが難しい。
SQLはデータベースを操作するための言語で、データベース言語と呼ばれます。Microsoft AccessやMySQLなどは聞いたことがあると思います。
データベースによって記法がやや異なりますが、よく使われる構文はどのデータベースも同じです。
プログラミング言語ではありませんが、プログラムのような制御構造を持たせることもできます。
構築済みのデータベースを操作する機会・環境があれば、SQLの学習はそれほど難しくはありません。
私が業務で使っていたのがMicrosoftSQLServerですが、Windowsのパソコンにインストールして使うことができます。MySQLならHeidiSQLというデータベースソフトが使いやすいです。ただ、未経験者の場合はデータベースの必要性が分からないと、SQLを学習する意味が分からないかもしれません。
Java(難易度4)
- 環境構築:環境構築が難しい。JDKや統合開発環境のインストールは、パソコンが不得意な人には厳しい。
- 文法:オブジェクト指向の恩恵もあり、プログラムは読みやすい。ただ、オブジェクト指向の理解に時間がかかる。
- 型:静的。
- コンパイル:必要。(面倒です。)
- パラダイム:マルチパラダイム。主にオブジェクト指向。関数型。
- 記法のルールが整理されていないような雑さがある。慣れないと冗長で書きにくいと感じた。
- プログラム実行にはコンパイルが必要なので面倒。
Javaは、C++から派生した言語ですが、オブジェクト指向でプログラミングできる点でC言語よりは記述しやすいです。
ただ、Java未経験者だった私が書いてみた感想は、けっこう難しい。未経験者にとってはオブジェクト指向の理解自体が難しいと思います。
Javaは、もともと家電製品に組み込みする制御プログラムのために生まれた言語です。今では金融機関や官公庁のシステムなどへ用途が広がり、多くの企業のシステムに利用されています。
組み込みとは、家電製品などのボタン操作で実行するプログラムを組み込むことです。Javaの名前はよく耳にするわりに正体が見えにくいのは、家電やシステムの裏側に隠れている存在だからです。
Javaの存在が目に見えるのはAndroidOSのスマホアプリです。最近では、派生言語のKotlinがAndrioidアプリ開発に使われることが増えてきました。
Javaは生活に近い分野での需要が高く、現代の社会基盤を担う言語とも言えます。習得には時間がかかりますが、今後も仕事に困らないという恩恵を受けられます。
「未経験でもSEに!」みたいな求人を行っているシステム開発会社では、自社で育成を行って、2~3ヵ月間でJavaを叩き込んで現場に送り出します。当然2~3ヵ月では無理があるので、あとは現場で揉まれながらスキルアップしていくことになります。キツいですが、ITエンジニアへの近道なのは間違いないです。
C/C++(難易度5)
- 環境構築:環境構築が難しい。パソコンが不得意な人には厳しい。
- 文法:他の言語では必要がないような、細かな制御文や関数を記述する必要があるので記述量が多い。記法の自由度が高くマイルールで書くことができる反面、他人のコードを読み解きづらい。
- 型:静的。(C#はバージョンにより動的。)
- コンパイル:必要。(面倒です。)
- パラダイム:手続き型(C#はマルチパラダイム。)
- ポインタやメモリの概念など、コンピューターに関する知識が必要となる。
- プログラム実行にはコンパイルが必要なので手間がかかり、面倒。
C言語は、プログラミングに興味がある人なら誰でも知っているほど有名な言語です。
C言語の学習ではプログラムのみならずコンピューターについても深い知識が身につきます。そのため、理系大学や専門学校ではC言語を履修させるところもあります。
C言語を書いてみて私が感じたのは、未経験者にはかなり難しいということです。
C言語やC++は、官公庁や銀行、物流管理など社会生活を支える大規模なシステム開発に使われています。
C++、C#、Java、Rustは、C言語の影響を強く受けているプログラミング言語です。
C#は、Unityというゲーム開発ツールとセットなら開発のハードルが下がるため、難易度がやや易しくなる感じがしました。
Rustは2010年に生まれた新しい言語で、難解なC言語に替わるプログラミング言語を目指して改良が続いてますが、難易度は高めです。
ただ、C系の言語は総じてややこしく面倒くさくて、未経験者が手を出すと習得に相当な時間がかかってしまいます。
C言語のプログラム実行を自動車の運転に例えるなら、運転の仕方や交通ルールに加えてエンジンやミッションの構造まで知っておかないと運転できないような感じです。わざわざコンパイルしなくても動くプログラミング言語はあるわけで、C言語に費やす膨大な学習時間はもったいなく感じました。
まとめ
- まったくの未経験者なら、とにもかくにもHTML&CSS。プログラミング言語でなないけど、もっとも簡単な言語です。プログラミング言語への足かけになります。
- ウェブデザイナーやウェブエンジニアに興味があるならJavaScriptを推します。学習がウェブ開発なので楽しく感じられる。今後も技術の進化への期待が大きい。
- VBAはMicrosoft Excelがあれば開発環境が入っています。Excelの手作業を自動化したい人は、今すぐに学習を始められます。
- Pythonは、個人的に習得して良かったプログラミング言語です。未来の技術を作る言語として定着したので、今後も食いっぱぐれなし。
- Macが好きならSwift一択。SwiftはiPhoneやMacと運命をともにしているので、今はいいけど今後の需要は不明。学習する前に慎重に判断したほうがいいです。
- C言語、またはC系(Java含む)の言語は難易度が高いです。未経験者には難しい。手を付けるなら年単位の学習計画を心すべし。