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 回目 ]

アバター
usao
記事: 1889
登録日時: 12年前

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

投稿記事 by usao » 10年前

>C++を学習する前に、C言語を学習

この言葉(というか言い回し)を
>他の言語から学習
と捉えているみたいですが,ほんとにそんな意味でこれを言う人がいるんでしょうか?

「C++をやりたいんですが」っていう場合に
C++に含まれる多数の要素のうち,最初にどこから学んでいきましょうかね?っていうのが,単に
C++ と C の共通(互換?)範囲なところから先にやっていくのが{やりやすい/入りやすい/etc} 程度の話では?
最後に編集したユーザー usao on 2015年4月29日(水) 10:51 [ 編集 1 回目 ]

アバター
amehirune
記事: 181
登録日時: 11年前

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

投稿記事 by amehirune » 10年前

私は、「C++を学習する前にC言語を学習」というのは、
「積分を勉強する前に微分を勉強する」と言っているのと同じような感じだと思います。

別に積分から勉強してもいいし、というかできないことはない。
でも、理解しやすいのは微分を勉強してから。
微分と積分は全く別物でも、どこかに通った箇所があるから、
あらかじめ微分を勉強しておけば、積分を勉強する際にイメージとしてとらえやすくなる…
って感じだと考えています。
違うかもしれませんがね^^;

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

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

投稿記事 by constexpr » 10年前

usao さんが書きました: 「C++をやりたいんですが」っていう場合に
C++に含まれる多数の要素のうち,最初にどこから学んでいきましょうかね?っていうのが,単に
C++ と C の共通(互換?)範囲なところから先にやっていくのが{やりやすい/入りやすい/etc} 程度の話では?
不自然な表現すぎると思いますがね。ならそのように「C言語的な部分から」などと述べるべきでしょう。そのようなニュアンスの表現は一切聞いたことありませんね。
そもそもその"共通範囲"とやらがほとんどないのですが?記事内で取り上げたように、メモリ一つとってもC++とC言語ではかけ離れた内容になりますが。条件分岐などの本当にCから引き継いだ構文の部分を指しているのなら、尚更わざわざC言語を先にと表現する必要があるでしょうか?

C言語とC++がまるで「他の言語から学習」ではないように受け止められているのが甚だ不思議でならないと言っているのです。
本当に言ってる人が居るんですかね?との事ですが、居ないから嘆いているのです。
最後に編集したユーザー constexpr on 2015年4月29日(水) 12:15 [ 編集 1 回目 ]

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

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

投稿記事 by constexpr » 10年前

amehirune さんが書きました:私は、「C++を学習する前にC言語を学習」というのは、
「積分を勉強する前に微分を勉強する」と言っているのと同じような感じだと思います。

別に積分から勉強してもいいし、というかできないことはない。
でも、理解しやすいのは微分を勉強してから。
微分と積分は全く別物でも、どこかに通った箇所があるから、
あらかじめ微分を勉強しておけば、積分を勉強する際にイメージとしてとらえやすくなる…
って感じだと考えています。
違うかもしれませんがね^^;
微分と積分ほどのような、密接な関係がC言語とC++にはないと言っているのですよ。関係ないものだと言っているのです。
カレーライスの作り方を学ぶためにまずピザの焼き方を学ぶ、くらい意味不明にしか聞こえないという趣旨の記事です。わかりづらかったら申し訳ないです。

アバター
MoNoQLoREATOR
記事: 284
登録日時: 14年前

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

投稿記事 by MoNoQLoREATOR » 10年前

全くもってconstexprさんの考えに同意ですね。
C++とCは別言語だと考えた方が良…というか事実 別言語です。
むしろ、C言語を先に勉強してしまうと、C++理解する際に足かせになってしまうのではないかとさえ思います。
一度C言語を学習してしまうと、洗脳され、思考がマシンライクなものに切り替わってしまうような気がするのです。
C++の方が人間にとって理解しやすいですからそちらの方を先に学習して、次によりマニアックなC言語を学習し、よりマシンに近い深い部分まで理解を進める。という方が理にかなっているし簡単だと思います。
「C言語は環境に依存しないアセンブリ言語だ」とさえ言われているほど、C言語はマシンライクなのです。

そもそも、C言語とC++言語では重要視している点が全く違います。

C言語はとにかくスピードと効率を重視しています。
C言語では「プログラマは全知全能にして完全無欠である」ということが前提になっているのです。
だからプログラマからの命令は絶対です。プログラマの指示に従ってさえいれば問題は絶対に起こらないのです。
memcpy命令でメモリが破壊されることはないのです。int型をhoge*型にキャストしても問題無いのです。
関数ポインタを加算減算して別の関数のアドレスまで飛んでその関数を実行しても通常運行です。
全てはプログラマの想定内。完璧に計算され尽くされた動作なのだからそれで良い。最も速く、そして最も効率良く処理を実行するためにメモリ内を縦横無尽に駆け巡る!それがC言語なのです。

C++はいかに人間が理解しやすくコードが書けるか?安全か?を重視し、なおかつできるだけ高速に動作するという点に重きを置いているのではないでしょうか。

とりあえずプログラミングを始めるときにC言語から始めるのはあまりにも危険だと思います。



そしてSwiftは神です。
私がC++に求めていた仕様が全て実装されていました。
私はプログラミング言語を自作する理由を失いました。
最後に編集したユーザー MoNoQLoREATOR on 2015年4月30日(木) 01:51 [ 編集 2 回目 ]

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

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

投稿記事 by constexpr » 10年前

>ロリ

微分と積分という例えを見て思ったが、C言語とC++を兄弟か何かと勘違いしているのかもしれない。構文も似てるし、名前も似てるからかな。
実際のところ例えるなら、C言語の資産や良いところをパクるだけパクって踊り狂う他人、くらいの関係だろう。

C言語に似てるのはCが素晴らしいからではなく、Cプログラマが構文に違和感を持たないためとかではなく、単にC言語の莫大な資産が欲しいだけだ。C言語の資産が多かったからC言語との互換を保とうと意識していただけ。
C言語の良いところ、速さの元となる低級操作の提供などは引き継いだが、裏を返せばC++使いが「C言語の悪いところ」と判断した点は極力引き継がれていない。特に目新しい規格では顕著だ。


swiftに感化されてるんじゃないよ。オレオレ言語作るんじゃなかったの。自作する理由など要らないの!そこに理由はなくても価値はあるわ!

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前

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

投稿記事 by softya(ソフト屋) » 10年前

必要ないならC++は学習しなくて良い派です。
私のおすすめは、C++はやらずにC言語で済ませてしまうことです。
オブジェクト指向ならC#かJavaにしましょう。

アバター
MoNoQLoREATOR
記事: 284
登録日時: 14年前

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

投稿記事 by MoNoQLoREATOR » 10年前

あんた、[✺◟(∗❛ัᴗ❛ั∗)◞✺]だったのかw
名前ころころ変えるからもうわからんわ!
最後に編集したユーザー constexpr on 2015年4月30日(木) 17:58 [ 編集 1 回目 ]

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

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

投稿記事 by constexpr » 10年前

softya(ソフト屋) さんが書きました:必要ないならC++は学習しなくて良い派です。
私のおすすめは、C++はやらずにC言語で済ませてしまうことです。
オブジェクト指向ならC#かJavaにしましょう。
私もその点は同意見ですね。C++を学ぶのであれば、という前提で記事を書きましたが、C++である必要性がないならほかの言語、それこそCなどで、良いと思います。

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

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

投稿記事 by GRAM » 10年前

[検閲により一部が削除されました✺◟(∗❛ัᴗ❛ั∗)◞✺]

自分はC++から始めたけど、C++やってからCやるのはむしろ全く問題ない。
CやってからC++やる場合の弊害は全くと言っていいほど発生しない。
マイコンとか計算でしか使わないからぶっちゃけmallocとかつかいかたしらないレベルですけど。

まぁC++とCが全く別の言語であるという点に関しては全面的に同意できますけど、
個人的な意見としては、プログラマに完璧さを求めるという点ではC++も人のことは全く言えねーだろとは思う。
あと全然関係ないけどインタープリターであること(致命的に遅いこと)を除けばpythonが自分のあらゆる需要を完璧に満たしている…
Cのようにも、オブジェクト指向のようにもかけ、見やすく、きれいで、ライブラリーがあほほど充実していて、多言語との連携も簡単で、学習が容易ですぐに結果にたどり着く・・・
最後に編集したユーザー constexpr on 2015年5月02日(土) 05:40 [ 編集 2 回目 ]