今いる会社(組み込み系)では、新入社員に研修としてC言語とC++を学ばせている。
実際の業務で使うのは主にC++のほうだが、「Cの基礎がなければC++に太刀打ちできない」という見解から、C言語も研修に含めている。
というわけで、実際にC++を学ぶためにはC言語の知識が必要か、著名な人や技術系サイトのディスカッションの見解を集めてみた。
Bjarne Stroustrup(C++の創始者)
C++を学習する前にC言語を学ぶ必要があるかどうかという議論は、現在でも続いているが、直接C++に進むのが最良だと、私は確信している。C++のほうが、安全であって表現力が豊かで、しかも、低レベルの技法への集中力が必要となる局面が減る。
( 『プログラミング言語 C++ 第四版』からの抜粋 )
ISO C++ 標準委員会
( 「C++ を学ぶ前に C を学ぶべきでしょうか?」 という意見に対して)
最終的な目標が C++ を学ぶことであり、まだ C を知らない場合、C の本を読んだりコースを受講したりしても時間の無駄になるだけでなく、最終的に軌道に戻って C++ を学ぶときに明らかに忘れなければならない多くのことを学ぶことになります (たとえば、、malloc()ステートメントの不必要な使用printf()、エラー コードの例外処理、マクロの不必要な使用 など)。
~
C++を学びたいなら、C++を学びましょう。Cを学ぶのに時間を費やすのは時間の無駄で、混乱を招くだけです。
https://isocpp.org/wiki/faq/how-to-learn-cpp
StackOverflow上でのコメント(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++を理解するために不可欠です。
「スノーボードとスキー、どちらを先に習うべき?」みたいな感じですね。スノーボードをしたいのか、スキーをしたいのかによって答えは違うと思います。両方やりたいなら、両方習う必要があります。
~
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++ の内部動作をより深く理解できる」というのが主な見解のようだ。
不要派は「C を学ぶとむしろ古いスタイルの癖がつく可能性がある」ということを理由として挙げているものが多い。
個人的には低レベルの動作はC++でも学べると思うので、Cの学習は不要だと思っている。
(※ただ、低レベルの箇所を抽象化せずに使うのはC++ベストプラクティスではないという点には注意が必要。)
※※ちなみに、この話題の議論が白熱してしまうのは、「C++を学ぶ前に」という前提が議論をしているうちにどっかいってしまい、「C++開発者はC言語も学ぶ必要があるか」に置き換わってしまうせいだと思う。