C言語を先に学習するメリットはあるのだろうか。

constexpr
記事: 5
登録日時: 10年前

C言語を先に学習するメリットはあるのだろうか。

投稿記事 by constexpr » 10年前

C++を学習する前に、C言語を学習することを勧める者は割りといる。果たして本当にそうだろうか。
私は、C++を学習したい場合に事前にC言語の学習をすることが望ましいは思わない。


C++とC言語が切っても離せない関係なのは事実だ。それは歴史的経緯を考えれば明らかではあるが、かといってC++がC言語の延長線上に存在しているわけではない。そもそも、ただのパワーアップならそれはC言語だ。根本の思想が違うから、C言語の良い所を残したまま別の言語として独立し、発展してきたのだ。
C言語をベースにしているから、構文は類似している点が多い。互換性を維持しようとしてきた経緯もあり、些細な労力でCのコードをC++で動かすことができる。だが、それはあくまでC言語の書き方で書かれたコードであり、C++で動くように書き換えられただけのC言語だ。C++ではない。

C言語のコーディングをいくら勉強したところでC++の技術が向上するわけでもないし、ましてやC++の役に立つとも思わない。

ここで、「学習コストの低いC言語でメモリ操作など基礎を学んでから~」という点から斬りこんで来る者がいるが、これも私はそうは思わない。
そもそもC++を学習するために他の言語から学習して、そのあとC++を学習するという2ステップを踏む時点で学習コストが低いも何もあるわけがない。結局C++学ぶならC言語など遠回りするだけで全く意味が無い。メモリ操作なども、なぜC言語で学ぶ必要があるのか。C++で学べばいい話だ。動的なメモリ確保の手段や、規格で定められるメモリ確保に関する保証、マルチスレッドにおけるメモリ安全性など、C言語とC++ではメモリひとつとっただけで学ぶ内容が両者で全く異なる。C++を学びたいのに、わざわざmallocの使い方から覚えるのだろうか。その他の基礎においても同様である。


というか、C言語だって十分学習が大変な部類なのだから、勧めるならもっと高級な言語にしたらどうなのだろうか。メモリ管理など気にすることのない言語でプログラミングの基礎とやらを学ばせたほうがよほど有益に思える。わざわざC言語を選ぶ必要性について、私は納得の行く理由を見たことがない。

C言語とC++の関係について以前は気にしなかったものだが、C++11が策定されたあたりから、両者の溝のようなものがあることに気づいた。私は根っからのC++愛好家故に、C言語の最新機能など見向きもしていなかった。しかしあとあとに話を聞いてみると、C99やC11は「なんだそれは?」と思うようなものだ。話が逸れてしまうので詳しく書きはしないが、私のような型を愛するC++狂信者からすると、最新のC言語は吐き気を催すような機能や構文を持っている。もちろんC言語使いはそれが素晴らしいと思って使っている。

C++はC言語の後方互換をなるべく意識してはいるが、C99やC11の機能の多くは不採用になるか、代わりの手段を提供している。理由は単純、C++使いからしたら無意味なものが多いからだ。C++ならもっと安全で美しく同じことを実現できる場合がほとんどだ。議題に挙がってもあっさり切り捨てられる。
動的配列は一応議論が続いていて、今後組み込みとして提供される可能性があるようだが、sizeofが実行時処理されるとか言うもう意味不明クソ極まりない仕様は排除されるようだ。
もはやC99以降のコードをC++に移植するのは大変困難だと思われる。

新規格の内容を軽く流し見するだけで、「C++とは思想が違うのだ」と深く実感する。宗派の違いと言っても過言ではない。歴史的経緯から友好関係を保ってはいるが、とてもじゃないが相容れない相手だ。
おそらくこの感覚を感じない人は最新規格に興味が無いか仕事上使わない場合、またはC++を使っているがC言語と変わらないようなコードしか書いてない人間だろう。後者ならもうC++やめてC言語を書くことをおすすめする。

C++標準化委員会の人間ですら、「C言語は気持ち悪い」、「C標準化委員会はクソ」と言ってしまうのだから、今後溝は深まる一方だろう(誰なのかは敢えて言わないが、おそらく他の委員でも同じことを考えているものは確実にいる)。
もちろん、逆にC言語使いはC++使いやC++の言語機能を気持ち悪いと内心思っているはずだが。


私はC++を学ぶのにC言語を学ぶ事が役に立つとは思わない。
最後に編集したユーザー constexpr on 2015年4月29日(水) 09:06 [ 編集 3 回目 ]

constexpr
記事: 5
登録日時: 10年前

Re: C言語を先に学習するメリットはあるのだろうか。

投稿記事 by constexpr » 10年前

GRAM さんが書きました: 自分はC++から始めたけど、C++やってからCやるのはむしろ全く問題ない。
CやってからC++やる場合の弊害は全くと言っていいほど発生しない。
マイコンとか計算でしか使わないからぶっちゃけmallocとかつかいかたしらないレベルですけど。
弊害については用途に応じた個人差があると思いますので「Cを先にやると弊害が出る場合がある」という可能性を示唆した上で、「少なくとも役に立つことはない」という点を指摘しています。
GRAM さんが書きました: 個人的な意見としては、プログラマに完璧さを求めるという点ではC++も人のことは全く言えねーだろとは思う。
私はCがプログラマに完璧さを求めているとは述べた記憶が無いです。プログラマの責任に関してはC++は自己責任であるというのが一般的な見解だと思いますし、私もそう思います。
GRAM さんが書きました: あと全然関係ないけどインタープリターであること(致命的に遅いこと)を除けばpythonが自分のあらゆる需要を完璧に満たしている…
Cのようにも、オブジェクト指向のようにもかけ、見やすく、きれいで、ライブラリーがあほほど充実していて、多言語との連携も簡単で、学習が容易ですぐに結果にたどり着く・・・
私もpythonは大好きです。C++使い的にも、インタプリタだからC++のプロジェクトにも組み込みやすいですし。気軽に多くのプラットフォームで動かせるのも個人的には魅力ですかね。
最後に編集したユーザー constexpr on 2015年5月02日(土) 05:52 [ 編集 2 回目 ]

アバター
GRAM
記事: 164
登録日時: 14年前

Re: C言語を先に学習するメリットはあるのだろうか。

投稿記事 by GRAM » 10年前

constexpr さんが書きました:
GRAM さんが書きました:
GRAM さんが書きました: 個人的な意見としては、プログラマに完璧さを求めるという点ではC++も人のことは全く言えねーだろとは思う。
私はCがプログラマに完璧さを求めているとは述べた記憶が無いです。プログラマの責任に関してはC++は自己責任であるというのが一般的な見解だと思いますし、私もそう思います。
いえいえ、僕が言ったのははロリさんの言ったことに対してですよ
てか検閲ひでーw
最後に編集したユーザー GRAM on 2015年5月03日(日) 11:02 [ 編集 2 回目 ]