C++が嫌われる理由とは? C++を今から学習する価値はあるか

#エンジニアブログ

 

C言語を基に、オブジェクト指向の考えを加えた「C++」は、誕生から約40年を経て、今なおさまざまなジャンルで使われている主要なプログラミング言語です。

 

その一方で、言語自体の難易度が高く、構造的な問題を抱えている側面もあり、C++を苦手に感じているエンジニアが少なくないことも事実です。

 

では、C++はどのような理由から嫌われているのでしょうか。ここでは、C++が嫌われる理由を紹介するとともに、それでもC++が使われ続ける理由についても解説します。

 

また、過去にも「今流行りのGo言語と!?「Androidアプリ開発のニューノーマル?Kotlinとは」など、他の言語についてもご紹介していますので、合わせて是非ご覧ください。

 

C++」とは

 

C++(シープラスプラス)は、1972年に誕生した「C言語」を基につくられたプログラミング言語で、1983年に公開されました。略して「シープラ」や「シープラプラ」とも呼ばれます。

 

C++はC言語の拡張版ともいえる立ち位置にあり、オブジェクト指向を取り入れてプログラミング効率を改善しつつも、可能な限りの互換性が保たれています。そのため、C言語でつくられた古いシステムの改修にC++を使うことで、効率改善とオブジェクト指向の導入を行うケースがよくあります。

 

C++の活躍の幅は広く、OSやブラウザ、MySQLなどのデータベース、金融系、仮想通貨インフラ、ゲームなどで用いられるほか、IoTやロボット、自動運転などハードを直接動かすジャンルでも重宝されています。

 

一方で、C言語との互換性を優先したために引き継いだ弱点もあり、その後Javaが登場したことで「C++は過去の言語だ」という意見も聞かれます。

 

C++」が嫌われる5つの理由

1.仕様が複雑である

C++は仕様が複雑なため、簡潔な記法を好むプログラマには向かないプログラミング言語です。その一方で、自由度が高く、他の言語にはない高度な処理も可能です。

 

たとえば、C++ではユーザー独自の記法を取り入れることが可能となっており、フレームワークの構築も柔軟です。しかし、これらは複雑なので、使いこなすためには時間と労力を要します。

 

こういった特徴から、実行速度やメモリー効率がことさら重視される分野以外では、言語習得における費用対効果が小さくなってしまい、あまり実用的ではありません。

 

2.ソースコードが読みづらい

C++のソースコードは読みやすいものではありません。なぜなら「機械語(マシン語)」に近く、人間が構文を理解することが難しくなっているためです。

 

C++では、他の言語では省けるようなコードが必要になることや、必要な関数がないといった弱点があります。そのため、C++に精通していないエンジニアがコードを使いこなせず、ぐちゃぐちゃにしてしまうことがよくあります。

 

ソースコードを理解しづらいことは、構文エラーが発生する可能性が高くなることとイコールです。事前にエラーの可能性を発見しづらい上に、エラーが起こったときの修正にも時間がかかります。

 

3.エラーメッセージがわかりづらい

C++は、テンプレート関係のエラーメッセージがわかりづらい傾向があります。そのため、エラーの文面を読んでも原因の特定ができないことが多く、エラーの解消に時間がかかります。

 

C++では、エラーが発生した場合、エラーの箇所や文脈を解読し、エラーの原因を特定する想像力やスキルが必要になります。C++の標準ライブラリでは、テンプレートが多く用いられるため、この問題は避けて通れません。

 

4.習得が難しい

C++は仕様が複雑で、ソースコードが読みづらいプログラミング言語です。習得には時間がかかり、エラーの原因の特定にもスキルが求められます。これらの特徴から、プロのエンジニアとしてC++に関わるには一定の経験が必要です。

 

プログラミング初心者がいきなりC++を習得することは難しく、C言語やコンピューターの仕組みなどから学ぶ必要があります。さらに、オブジェクト指向についての学習も必要なため、習得には他の言語より長い時間が必要です。

 

5.構造上の安全性が低い

C++では、想定以上の数値や文字列が入力されたとき、他の数値や文字列を上書きしてしまう「バッファオーバーフロー」が起こります。この問題をそのままにしておくと、敢えて問題を引き起こす文字列を仕込んだ悪意あるプログラムに攻撃される「バッファオーバーフロー攻撃」の標的にされる可能性があります。

 

バッファオーバーフローは、文字数の指定を組み込んだプログラムにすることで対策ができます。それ自体は難しいものではありませんが、C++ではバッファ管理がエンジニアに委ねられているため、脆弱性を生まないよう実装に気をつける必要があります。

 

それでも「C++」が使われる理由

 

ここまで説明したように、C++にはさまざまな癖があり、明確な弱点もあります。しかし、現在もさまざまな分野で用いられているのには、どのような理由があるのでしょうか?

 

1つめは、すでに多くのソフトやシステムに利用されているからです。C言語が約50年、C++が約40年の歴史があり、C言語やC++で動いているソフトウェアやシステムの改修やアップデートには、C++がよく用いられます。その需要は膨大です。

 

2つめは、C++が性能重視のソフトウェア開発において欠かせない言語となっているためです。CPUを直接コントロールできる「機械語(マシン語)」に近いソースコードは、実行速度やメモリー効率の点で利があり、コストはかかるものの、コストをかけた分だけソフトウェアの性能向上に貢献することも確かです。

 

3つめは、C++がハードウェアを制御することを目的に開発された言語だからです。コンピューターを制御するOSの開発や、組込みシステムのプログラム、ロボットやIoTシステム、自動運転車の開発などに強みを発揮しています。

 

C++」が使われている代表的な分野

先述のとおり、C++は現在も多くの分野で積極的に用いられています。ここではその一例を紹介します。

 

OSPCソフト開発

C++は、OSやPCソフトの開発に用いられます。例えば、Windows10はC言語とC++で開発されており、MacOSの開発にもC++が使われています。

 

さらに、「Google Chrome」や「Microsoft Office」、「Adobe Photoshop」「Adobe Illustrator」などの開発にもC++が用いられています。

 

また最近では、AppleがMac、iOS、Apple Watchなどで動作するアプリ開発のためにつくったプログラミング言語「Swift」の開発もC++で行われました。

 

業務システム開発

企業の業務用システムの開発にもC++が用いられます。これは、実行速度や安定性の点でC++は大規模システムの構築に適しているためです。

 

また、はじめからC++で開発されるシステムだけでなく、C言語で開発され長く利用されているシステムの改修にC++が用いられるケースも多くなっています。

 

ロボット技術開発

近年、注目されているAI(人工知能)やディープラーニングなどの分野にもC++が用いられています。

 

特に、ロボットの制御技術でC++が多く用いられています。これは、C++が機械の制御を得意としており、他の言語に比べて複雑なプログラミングの指令でも実行速度を確保できるためです。

 

IoT技術開発

IoTとは「Internet of Things」の略で、「モノのインターネット化」ともいわれます。IoT機器の具体例としては、スマート家電や自動運転車、産業用ロボットなどがありますが、これらにはモノをインターネットと結ぶためのセンサーがあり、それらの処理にC++が用いられます。

 

組み込みシステムの開発

組込みシステムとは、電子レンジなどの家電や心電図などの医療機器、テレビやDVDプレーヤーなどのAV機器、自動車やパチンコ台など、ハードウェアに組み込まれて動作するソフトウェアのことをいいます。

 

こうした、特定の用途のために設計されたハードウェアを制御することをC++は得意としており、多くの機器の制御ソフトの開発に用いられています。

 

エンジニアが今から「C++」を学習する価値とは?

 

C++は40年以上前に発表された古い言語です。エンジニアがこれからC++を学習する価値はあるのでしょうか。

 

プログラミングの基礎を理解しやすくなる

C言語とC++は、非常に歴史の長いプログラミング言語です。そのため、それ以降に登場した多くのプログラミング言語に影響を与えてきました。

 

たとえば、JavaやPython、Perl、PHP、RubyなどはC言語やC++の影響を強く受けているため、それらの礎となったC言語やC++を学ぶことで、プログラミングへの理解が深まり、他の言語のことを理解しやすくなると考えられます。

 

オブジェクト指向が理解しやすくなる

C++はC言語にオブジェクト指向を加えた言語です。そのため、まずC言語を学び、その後C++の学習に移行することで、オブジェクト指向がどのようなものなのか、どういったメリットがあるのかが理解しやすくなります。

 

オブジェクト指向言語には、JavaやPython、Swiftなどがあります。PythonはAIの分野で高いシェアがあり、SwiftはApple製品に関わるアプリの開発で使われる現役の言語です。オブジェクト指向を理解すれば、これらの言語も理解しやすくなります。

 

ハードウェアを意識したシステム開発には現在もC++は必須

ロボット技術や自動運転技術など、ハードウェアを意識したシステムの開発には、現在もC++が広く活用されています。たとえば、最先端を行くテスラの自動運転システムにもC言語とC++が用いられています。こうした自動運転技術や、ロボット、IoT技術の開発に携わりたいエンジニアにとって、C++の学習は必須といえます。

 

まとめ

C++は、その複雑さや構造的な弱点から、習得に時間がかかります。実際の開発においても一定の経験と高度な技術が求められるため、C++に苦手意識があるエンジニアは少なくありません。

 

しかし、そうしたネガティブな要素がある反面、特にハードウェアを制御するための言語としては優秀で、実行速度も高速です。OSやソフトウェア、大規模業務システム、ロボット開発など、すでに需要が多いソフトウェアや、今後さらに重要度を増していくであろうシステムの開発に多く用いられていることが、C++の優秀さを物語っています。

 

C++は、今後ますますIT化やDXが進んでいく現代において欠かせない存在になるでしょう。また、C++を学ぶことで、後継言語と目されるCarbonはもちろん、他のさまざまな言語の学習もしやすくなると考えられます。

 

もし、C++を使った開発に興味があるなら、学習に取り組んで損はないと言えそうです。

関連する記事