こんにちは、ナナです。
C++を学び始める前に、注意すべきことがあります。
あなたはC言語をマスターしていますか?
この質問に「Yes」と答えられる人だけが、C++の門をくぐることが許されます。
プログラミングを始めたばかりの方は「C言語」と「C++」という言語の違いをそもそも理解していない方もいることでしょう。
そのような方が「C++」という言語を最初に学ぼうとするのを、私は全力で止めなければなりません。
その理由を解説していきましょう。
「C言語」と「C++」の関係性と違いから知る学ぶ順番
師匠!「C++」には「C」の文字が含まれていますが、C言語と関係性があるのですか?ただの偶然ですか?
偶然ではありませんよ。「++」とはC言語で「インクリメント」を示す演算子ですね。C++とは、C言語を次の世代へとインクリメントして進化した言語なのです。
「C言語」と「C++」は、親子関係とも言える間柄です。C言語を元に新たな機能を持った「C++」という言語が生み出されたのです。
C++は「C言語」を完全内包しているということ
C言語を進化させたC++は、基本的にC言語の機能をそのまま引き継いでいます。そのため、C++開発環境においてC言語のプログラムをそのまま動かすことが可能です。
このことは、C言語の技術はそのまま「C++」の技術として活かすことができることを意味しています。
C言語の知識は100%「C++」の学習に引き継ぐことができるのです。一切無駄にはなりませんよ。
「C++」はオブジェクト指向言語であるということ
「C++」という言語の特徴を言うならば、それは「オブジェクト指向言語」であるということです。
このオブジェクト指向というキーワードは、現在の主要言語の中心となるものであり、今どきのエンジニアは必ずどこかで立ち向かう必要があります。
しかし、オブジェクト指向とは最初に挑む相手ではないのです。
オブジェクト指向言語よりも、手続き型言語であるC言語を先に攻略しましょう。『C言語こそ最初に学べ【未経験者にオススメする3つの理由】』にその理由が解説してあります。
オブジェクト指向言語は、第2言語以降で攻略する言語です。安易に挑まない方が得策です。
「C++」は言語の仕様が巨大化している
C言語を拡張した言語である「C++」は、言語としての仕様がかなり巨大化しています。
C++の言語仕様とは、基本的な分岐・反復・関数といった機能の他に「オブジェクト指向」の言語仕様が含まれます。
このオブジェクト指向は非常に奥が深く、やすやすと手に入れられる技術ではないのです。
C++の習得難易度は、C言語の比ではありません。「C言語」という中ボスを倒さずに「C++」という大ボスを攻略することはできないのです。
「最初からC++を学べば、C言語の知識も得られるのだからそっちの方が近道だよね」なんて考えてはいけません。C++学習の道にショートカットはないのです。
C言語とC++はゲームで言えば「中ボス」と「裏ラスボス」くらいの差があると思ってください。
ゲームが始まっていきなり裏ラスボスは倒せませんよね。まずは中ボスの「C言語」を倒せる実力を身に付けましょう。「急がば回れ」なんです。
C++を最初の言語で学ぼうとした苦い思い出
忍術を学ぶのにも順序があるように、C++を学ぶ前にはC言語が必要なのですね。それを知らずにC++を学ばなくてよかったです。
そうだね。そんなことをちゃんと指導してくれる人が周りにいるとありがたいですね。私にはいませんでしたが。
実をいうと、私が一番最初に勉強したプログラミング言語は「C++」でした。
20年くらい前のことですが、不思議なことにその当時はなんとなく理解できていたと感じていたのです。しかし、実際は違っていました。
もしも今の自分が当時の自分にアドバイスをするとすれば、
君はなんとなくC++を理解できている気になっているだけで、実は全く理解できていないんだよ。まずは、C言語を徹底的に学びなさい!
という言葉を贈ります。
そうなんです。C言語すら理解していない当時の自分は、C++を理解できていないことを認識できていないのです。
しかし、当時の自分にはそのことを指摘してもらえる人もおらず、気づくこともできませんでした。無駄な時間を過ごしたことでしょう。
だからこそ、今の自分からプログラミング初学者の皆さんにちゃんと伝えなければなりません。
最初にC++を学ぼうとしているならやめなさい。挑む前にC言語を攻略しなさい!
本サイトには、『C言語を基礎から学べるカリキュラム』が用意してあります。C++を学びたい人は、絶対にそちらから始めてください。
C言語をマスターしているという方は、C++のカリキュラムを進めましょう!