ショートカット
ファシリテーター × あり方
コーディングの向こう側
Hello, ANOTHER world!
オブジェクト指向のはなし
プログラミングのはなし
C言語実力診断クイズ
eSkillBooks
オブジェクト指向のはなし

C の知識が邪魔をする?

導入

ときどきこういう質問を受けます。

「ぼくは C も C++ もよく知らないんだけど、プログラミングができるようになりたいんだ。で、どっちを先に勉強したらいいのか教えてくれない?」

正直言って、「そんなこと、知るかっ!」です。

解説

C と C++ のどちらから先に修得すべきかというのは、よくある疑問のようです。それぞれを先に覚えるべき理由は、おおかた次のようなものでしょう。

C が先だという根拠:
「C++ は C の拡張版だから、まず基本である C を修得すべき。それに、ほとんどの API やシステムコールは C スタイルだし(BeOS はそうでもないけど)。」

C++ が先だという根拠:
「C++ は C とは考え方そのものが違う。C のダーティーな手口を一度覚えてしまうと、もっとエレガントな C++ のやり方を学ぶのが苦痛になるよ。」

どちらが正しいと思いますか?私は、どちらが正しいか考えることは無意味だと思います。私自身は C から覚えました。そのころはまだ C++ が今ほど普及していなかったので、当然のことでした。その後、オブジェクト指向に関する本を読みました(題名は忘れてしまいました)。特定の言語に依存した本ではなく、たまに出てくるサンプルコードは smalltalk のものでした。それから、C++ を修得しました。

「もし C++ から先に覚えていたら今よりももっと良かっただろうか」と考えてみてもしかたがありません。ためしに今度は C++ から修得してみて、C から修得した場合とどう違うか比較してみよう、というわけにはいかないですから。

言語以外のもの

よく考えると、C も C++ も言語に過ぎません。そして、これらの文法を覚えただけでは、胸を張って「修得した」とは言えないでしょう。言語以外にどれだけのものを修得すべきかと考えるのがいいかもしれません。

C と一緒に修得すべきもの:

  • リスト・ツリーなどのデータ構造
  • ループ・条件分岐などのアルゴリズム
  • スタックやヒープなどのメモリに関する理解
  • ライブラリについての理解
  • makefile の書き方
  • バグを減らすテクニック
  • などなど・・・

C++ と一緒に修得すべきもの:

  • オブジェクト指向そのもの
  • オブジェクト指向を活用するための言語仕様の理解
  • イテレータや参照カウンタといった C++ での常套手段
  • C で作成した関数を C++ から利用する方法
  • などなど・・・

もしあなたが初心者だとしたら学ぶべきことが山ほどありますが、すべてをいっぺんに覚えなければプログラミングができないというわけではありませんから安心してください。私自身も、まだまだ学ばなければならないことがたくさんあると思っています。

(「オブジェクト指向のはなし」は1999年2月から2000年4月にかけて作成されたコンテンツです。)