C++が難しいと言われる理由は、C++の公式仕様がコンピュータ言語界でもトップクラスに巨大だからです。
C++は現在でも世界で6位 (Github Octverse 2024) の巨大なシェアを誇る言語で、ユーザーの大半は大企業です。
例えば 最近Rustに乗り換えを宣言して話題になったMicrosoftは黎明期から長年C++と共に歩んできた企業 で、過去数十年にわたりほぼ全てのソフトウェアをC++で開発してきました。WindowsやOfficeなどのソフトウェア製品だけでなく、Microsoft製の言語C#の実行環境.NETもC++で書かれています。実行環境系ではJavaScriptのV8やJavaのJVMなんかもC++製ですね。
他にも、現代のゲームに欠かせないUnityやUnrealEngineなどの最新ゲームエンジン、Bitcoinなどの暗号通貨、駅の自動改札機、空港の電光掲示板、エレベーターやエスカレーター、速度違反自動取締装置(オービス)、大型の医療機器、銀行ATM、コンビニレジなど、街中で見かける社会インフラ系のシステムはほぼ全てC++で開発されています。 C++はWeb以外では圧倒的というかほぼ独占レベルのシェアを持つ言語です。
日本でも学校ではC++の基礎であるCを教えてエスカレーター式に企業に送り込む流れが長年続いています。上記のような大規模システムは長期的にも需要が極めて高いからですね。
まぁ、単に大規模システム開発向けの万能言語なので、長い間に仕様が巨大になってしまった というだけの話です。ユーザーが大企業ばかりなので、ただでさえ巨大なシステムをもっと素早く便利に開発したいという強い圧力があり、C++は40年以上ずっと成長してきました。2011年の大幅なバージョンアップ以降は特に爆速で成長しています。
しかしC++は特に「難解な言語」ではありません。C++はあくまで「直接Cを書かずに済む便利なフレームワーク」として設計されているからです。 土台であるCの上に機能をどんどん建て増ししているだけで、巨大ではあるもののかなりシンプルな構造をしています。
ですからもしC++を学ぶつもりなら、Cそのものを自在に使いこなす必要もありません。むしろC++による開発ではCのコードを書いてはいけないと思う方が良いでしょう。ポインタや参照、構造体などCによるメモリ管理の仕組みを理解していれば良い話で、実際のコードはC++の構文で書くほうがはるかに楽に安全なコードが書けます。
またC++の機能が膨大だからといって、全部覚えなければプログラムが書けないわけではありません。勉強すればするほど便利になるだけです。 熟練したC++プログラマーでも全ての機能を知らないことがよくありますし、そもそも全ての機能を使ったことがあるプログラマーすらほぼいないからです。
例えば、C++を長年使用している猛者の中にはC++ですら速度が足りないからとコード内にアセンブリを書き始める人もいたりしますが、正直滅多に書く必要はありません。(Node.jsやChromeで使用されるJavaScriptエンジン「V8」はC++製ですが、中身は半分くらいアセンブリです)むしろCすら書かない方がいいのにアセンブリ書くなんて論外なので、相当ちゃんとした理由がない限り書いちゃダメです。V8くらい爆速にしないと怒られますよ。
またC++はJava、Swift、Rust、TypeScriptなど現代のほぼ全ての人気言語の母親的存在でもあります。 C++は自分から派生したあらゆる言語の便利機能を貪欲に逆輸入してきたため、他の言語で有名な便利機能は大体既にパクり済みです。(どーん
ですから「あの言語のあれみたいな機能はないかな?」とSTD/STLの機能リストを探してincludeして使うのに慣れてしまえば、別に機能をあらかじめ全部学んでおく必要はありません。今はネットやAIで簡単に探せますしね。
ちなみに、私が独学でC++を学ぶために色々な本を教えてもらった中で、一番わかりやすく理解しやすかったのは 高橋麻奈さんの「やさしいC++」 でした。
20年以上改訂版が出続けているバケモノみたいなロングセラーですので、ひとまず最初はこれで挑戦してみると良いと思います。私が買ったのはこれよりかなり前の版ですが、自分用のコーディング環境がなかったので半年くらいかけて読み通しました。通学中の電車で読んで紙のノートにプログラムを書いておき、学校で共用PCに打ち込んで実行する感じですね。最終的には学び始めて1年弱でDirectXを使用したゲームのプロトタイプを完成させました。最初から手元に環境があればもう少し早かったかもしれません。
個人的に、自分が最初に学んだ言語がC++だったのはお得だったと思います。C++は巨大な代わりに他のほとんどの言語と同等の機能を既に持っているので、そこそこC++を使いこなしていると応用が効くというか、他の言語が何となく読めるようになるんですよ。 勉強頑張ってくださいね。応援しています。
