CがわからなくてもC ++が得意であれば大丈夫ですか?[閉まっている]


23

ここで最もよく答えられると思う質問があります。

私はC++言語に満足しているので、Accelerated C++ほとんどすべての演習を読んで実行したので、私はかなり上手です。

しかし、私には大きな問題があります。学ぶ必要がありますCか?C私の人生でこれまでやったことがありません。私はちょうどを始めC++、私がプログラミングを始めたとき。おそらく誰もがなぜこの言語をそれほど複雑と呼ぶのかを知りたいと思っていたからです。今、私はその質問への答えを知っていますが;)

私はC今日の世界で知らなくても生き残ることができるかどうかを知ることに特に興味があります。会社で面接をする場合、私に知らないことを伝える場合C-彼らはそれをOKと見なしますか?私が得意とする2つの言語は、PythonとC ++です。企業がインタビューでデータ構造を尋ねると聞いたことがあるので、私はこの原因を尋ねています。だから、彼らが私にそれを実装するように頼んだら、そして私がC ++でそれをするなら、それは受け入れられますか?

また、「C ++のときにCを知らない」と言う人は、返信しないでください:)違反はありませんが、なぜCを学ぶことが必須なのか理解できません。



1
DumbCoderが引用した記事は、組み込みプログラミングにおけるCの人気についてです。
ChrisW

2
@ChrisW-ええ、しかし、Cの習得はそれほど簡単ではなく、C ++の習得も簡単ではないことを示しています。
DumbCoder

@DumbCoder:ああ、組み込みプログラミング。デスクトップと比較して埋め込まれているジョブの数は?
DeadMG

@DeadMG-言語の習得は、その言語で使用可能なジョブの数とは関係ありません。そして、Cは組み込みプログラミングでのみ使用されるという考えをどこで得ましたか?
DumbCoder

回答:


36

C ++を知っていれば、それのためだけにCを学ぶことはないでしょう。あなたがそれを必要とするかどうか、そしていつ必要とするかを学ぶのはそれほど難しくないと思います。

私は、C / C ++を知っていると主張する人よりも、C ++ではなくC ++を知っていると主張する人に会いたい。


そうそう。C ++都市神話に関するSO質問の最初の項目リストです

4
+1。C ++を知っているなら、最初はCを学ぶのは大変ですが、2番目に重要なことではありません。
DeadMG

6
@DeadMG C ++のどの部分を除外するかを知っているだけなので、構文を学ぶのは簡単かもしれませんが、一般的なイディオムを学ぶことは難しく、おそらく最も重要な部分です。しかし、必要でない限り、Cを学習しません。
KeithB

6
@chubsdad「履歴書に「Java / Javascriptを知っています」を置くべきではないということですか?
シークレット

@ user257493:Java / Javascriptのようなものはありません
John Dibling

23

マルチパートの回答。私の意見のみ。

  1. 私の経験(大学卒業後25年)では、C ++はますます一般的ではありませんが、近い将来、興味深いシステムにとって不可欠なものになり続けるでしょう。だから、私はそれを私の専門分野の主な分野として固執しています。仕事は大変で、興味深く、重要です。

  2. C ++プログラマーは、マネージド言語で成長していないため、一般的に貴重です。したがって、裏で何が起こっているかを理解する可能性が高くなります。エントリのバーが高いため、C ++からC#/ Javaへの移行はその逆よりも簡単です。

  3. したがって、私の見解では、C ++で有能にプログラミングするためにCを理解することは必須ではありませんが、CのコンテキストにC ++が存在する理由-その限界と長所、C ++での対処方法またはそうでない方法-の理解を深めることは時間の経過とともにあなたにとってかけがえのないものになります。

幸運を祈ります。


C ++がますます一般的ではなくなったと言うのはなぜですか?あなたの経験では、何を置き換えていますか?
プラクセオリック


13

ここで Bjarneが言いたいことです:

Cを知ることは、C ++を学習するための前提条件ですよね?

違う。CおよびC ++の一般的なサブセットは、Cよりも簡単に学習できます。手動でキャッチする型エラーが少なく(C ++型システムはより厳密で表現力豊かです)、学習するトリックが少なくなります(C ++では、迂回せずに多くのことを表現できます) 、およびより良いライブラリが利用可能です。学習するのに最適なC ++の初期サブセットは、「Cのすべて」ではありません。


4

私個人の意見:C ++を知っていれば、Cで書くことができます。ある程度の経験はあればいいのですが、これは問題ではありません。その反対は正しくありません。Cの知識では、追加の学習なしではC ++で記述できません。私はCを学んだことがなく、必要なときに問題なく使用します。


3
@Alex Farber-「C ++を知っていれば、Cで書くことができます」。私はそれを非常に疑います:)
DumbCoder

4
同意しない。IME、C ++を最初に学ぶプログラマーは、CにないC ++の機能を理解しない傾向があります。Cを最初に学習するプログラマーは、C ++で簡単に書くことができますが、非定型ではありません。
dan04

1
これは私の個人的な経験に基づいています。私はC ++を学び、ほとんどの作業をC ++で行いました。ただし、必要な場合は問題なくCを使用します。

特に、すべてのかわいいクラスライブラリがCで使用できるわけではないことを考えると、C ++やJavaなどの言語の勝利はライブラリであり、本来の言語機能そのものではありません。

8
Cを介してハックしようとするC ++プログラマーは、C ++を介してハックしようとするCプログラマーが不良コードを作成するのと同じ理由で、不良コードを作成します。Cの人はC ++を「クラスのあるC」として使用し、C ++の人はCを「クラスのないC ++」として使用します。
ジョンダイブリング

4

さて、まず最初に-いいえ、Cを知っていることはC ++を学ぶための前提条件ではありません。確かに、それは障害になる可能性があります。

第二に、これは完全に状況的です。Cを知る必要があるかどうかは、ジョブがそれを必要とするかどうかに完全に依存します。あなたが組み込みシステムの男になりたいなら、はい、Cを学ぶことは助けになります。それ以外の場合、ほとんどのジョブはそれを必要としません。ジョブにCが必要な場合は、そう言う必要があります。そう言わなければ、おそらくそれを必要としません。データ構造に関しては、やはり企業次第です。通常、会社は「これらの言語でプログラムを作成し、このデータ構造を記述します。上のリストから選択した言語を使用します」と言います。彼らがあなたにCでそれを書くように頼むなら、あなたは単に「私はCを知らない-私がCを知っているという私の履歴書で、この仕事は私のためではない」と言う。


Cを知ることがC ++の学習の妨げになるのはなぜですか?必ずしもそうではないと言っているわけではありませんが、これは大胆な発言です。
ケーシーパットン

3

会社でインタビューをする場合、Cがわからないことを伝えた場合、彼らはそれをOKと見なしますか?

Cが必要かどうかを尋ねます(そして、Cを習得するかどうかを尋ねます)。

だから、彼らが私にそれを実装するように頼み、そして私がC ++でそれをするなら、それは受け入れられますか?

もし彼らがあなたにC ++で仕事をするためのインタビューや雇用をしているなら、そう思うでしょう。

「データ構造」の質問の場合、STLコンテナを使用してデモンストレーションを行うか、または(インタビューのため)データ構造をゼロから実装するかどうかを尋ねます。


2

Cは、C ++のほぼ適切なサブセットです。Cを知らない場合、C ++の大きくて重要なサブセットを知りません。このサブセットを学ぶ必要がありますか?いいえ。C++は途方もなく大きな言語であり、ほとんどの人はそれを使用してサブセットとプログラムを選択します。Cのサブセットを知っている必要はありません。特に、C標準ライブラリを知ることはそれほど重要ではありません。ただし、ポインター、配列、ビット調整などのCのコア概念を理解していない人には、非常に疑わしい目を向けます。


2

Cを学ぶ必要がありますか?

いいえ、必要はありません。期間。

しかし、新しいプログラミング言語を学ぶことは長期的には有益です。さまざまなプログラミングパラダイムに基づいて言語を学習することはさらに有益です。OOP言語(SmalltalkまたはC ++)、動的言語(Lisp、Clojure、Python)、機能(Lisp、Haskell、Erlang)、コンカレント(Erlang、Go、Algol 68、Smalltalk)、またはその他(Fortran 03、 Perl、Forth)他の新しい絡み合ったパラダイムはあなたの空想を打ちます。さまざまな言語を学習することで、それぞれが手近なタスクに取り組むための長所と短所を持つ複数の考え方に触れることができます。

Fortranは数値計算で依然として支配的であり、COBOLは大規模な保険会社の主力であり、Unix、BSD、およびLinuxは依然として主にCに基づいています。時間が経つと交換する必要がある機械装置のように。したがって、古い言語は、雇用可能性と新しい言語のクールな要素の点で価値があります。

自然な(人間の)言語で多言語になるために勉強することで間違いなく自分を表現する能力が向上するように、コンピューター言語にも同じようなボーナスがあります。

したがって、私は(時間とともに)複数の言語に堪能になることを学ぶことが重要だと思いますが、複数のプログラミングパラダイムに堪能であることはより重要です。

私は言語に慣れているので、C ++にはかなり長けています。AcceleratedC ++を読んで、ほぼすべての演習を行っています。

バックアップして、C ++が豊かで複雑な言語であると言います。豊富な(またはい)繊細さのすべてに本当に流fluentになるには、何年もの露出と絶え間ない練習が必要です。

時間をかけて、学習を続けることが、私があなたに与えることができる最も重要なアドバイスです。他の人がそれについて考えている場合は、Peter NorvigのTeach Yourself Programming in 10 Yearsを読むことをお勧めします。


1

あなたの質問に対する非常に短い答えは、あなたのニーズに大きく依存します。一部の企業は主にCに依存しており、時にはCが遺物として使用されています(Cが既に何年も使用されていた場合)。他の企業はCとは何の関係もない私は、プログラムの構造と編成が異なっていることを意味し、さらに微妙な側面を考慮する必要があります。一般的に、そのイディオムを学ぶことは、いわば単純に心を広げることにも有益です。しかし、再び、企業が気にするかどうかは彼らのニーズに依存します。言語の選択を可能にするもの、Javaを必要とするもの、C ++、まだCなどがあります。生き残ることはできますか?はい今日' 世界にはプログラミングのさまざまな分野があり、Cコードを渡すことすらできないかもしれません。Cを学ぶべきですか?私は言うだろう-はい、後の使用に関係なく。


1

一部の人々は、C ++を知っている間はCでの快適なプログラミングを感じないかもしれません。

C ++には、構造だけでなくプログラムのアルゴリズムの駆動にも寄与する「保護」構造があります。たとえば、STL構造とアルゴリズムの助け、明白なオブジェクト指向プログラミングアプローチ、con / destructor、テンプレートから追加された抽象レイヤー...

Cはより単純ですが、プログラマーは問題のモデル化に構造とアルゴリズムを自分で挿入する必要があります。これにより、プログラミングの自由度が大幅に向上します。
しかし、一部の人々はより強い構造を必要とし、大きくなるにつれて維持するのが指数関数的に難しくなる傾向にあるため、コストがかかります。私は、問題は言語(C)ではなく、それで何をするのかとよく言います。

これは、リクルーターとして、強いC ++スキルを持つ人にインタビューしたいのですが、彼女がCプロジェクト全体を開発するのに十分な言語の自律性を持っているなら、さらに熱心になるでしょう。

また、優れたCプログラムは、効率的な実行可能ファイルを構築するために言語が(通常)システムコンポーネントの公正な理解を必要とするため、優れた開発者システムスキルを意味します。


プログラマの自由度が上がるとは言いません。いつでも独自の構造とアルゴリズムをC ++で書くことができます。
DeadMG

0

C ++に慣れていれば、Cの学習について心配する必要はありません。C++にはCに比べて多くの改善があります(コンストラクター/デストラクター、ベースラインコンテナー、ストリーム、および文字列でRAIIをサポートする機能は大きいです)。

ただしprintfscanf一連の関数を学習して、それらを使用するコードを読むことができるようにすることをお勧めします。これらはC ++で非常に人気があるため、それらの使用方法を知ることは役立ちます。非常に具体的な理由がない限り、独自のコードでそれらを使用することはお勧めしません。


0

あなただけの時間を必要とするあなたは、Cコードを生成すると予想している場合はCを知っているです。そうでない場合、問題はありません。

私は過去6年間ほどCを専門的に書いていません。JavaやC#、Pythonなど、他の言語(少なくともパフォーマンスではなくても生産性の観点から)がより適切に対応するアプリケーションドメインがたくさんあります。Cに触れることなく、ソフトウェア開発者として生き残ることができます。

あなた自身の虐待のためにCを学びたいなら、それは大丈夫です。C ++の学習方法とC ++固有の機能(テンプレート、参照型、STL、オーバーロード)に対する依存度に応じて、プログラミングを許容できるようにしたツールの90%が使用できなくなったことに気付くと、少し不安になります。Cのメモリ管理のようなものは、C ++やJavaと比較して非常に労働集約的で退屈です。また、CとC ++の間にはいくつかの非互換性があり、新しい言語バージョンごとにギャップが拡大します。

Cが仕事にふさわしいツールであるアプリケーションドメインがまだあります:小さく、高速で、内部ではあまり魔法ではなく、アセンブリではありません。しかし、一般的なアプリケーション開発(特にGUI駆動型デスクトップアプリケーション)には、はるかに優れたツールが用意されています。


-1

C ++に慣れているなら、Cにも慣れると思います。

両者の主な違いは、C ++はクリーン-オブジェクト指向-Cはそうではないことです:)


1
私はC ++の大ファンですが、きれいだとは言いません。また、C ++はマルチパラダイムです。つまり、優れたC ++コードは必ずしもオブジェクト指向ではありません。
KeithB

-1

Cを知ることで、メモリ管理などについてさらに洞察を得ることができます。それは、どの程度低レベルにしたいのか、そして下位のレベルで物事を理解することがあなたに役立つかどうかに関するすべてです。さらに一歩進んでアセンブリ言語を学習することもできますが、それはどれだけあなたにとって価値があるかによって異なります。

また、Cでプログラムするかどうかによって異なります。:)


-1

うん、大丈夫...

私見、あなたが得意なのでC++、それは確かに十分です...

C ++プログラマーを探している業界があると思います...しかし、いったんそれを理解したら、それはすべてあなたのプロジェクトのニーズに依存します。必要なものは何でも学ぶ必要があります。 ..会社があなたに支払う準備ができているなら、ただそれを学んでください...

あなたがキャリアの初期段階にいる場合、IMEインタビュアーはあなたの態度とあなたが慣れている言語の理解を調べる傾向があります。

Cあなたのために学ぶのではなく、C ++を少し徹底的に学んでください..あなたが得意なことを改善してください..あなたが学ばなければならないことがたくさんあると確信しています... )


-1

Cについて知っておくべき最も重要なことは、CとC ++の違いだと思います。あなたは、おそらくいくつかの時点で、その中にいくつかのCのスタイルを持っているいくつかのコードが表示され、あなたのようなものを見たとき、あなたは混同してはならないmallocfreeprintffopen、またはfclose。また、これらがどのように似ているか、C ++の対応するものとどのように異なっているかも知っている必要があります。

また、<<and >>は左および右シフト演算子であり、挿入演算子ではないことも知っておく必要があります。演算子をオーバーロードできるC ++では、ストリーム挿入などを実行するためにオーバーロードされていますが、整数のシフトには引き続き使用されます。

C ++にはCにはない基本的な機能がすべて揃っていることを確認してください。stackoverflow.comを十分に読めば、言語の違いやそれらの誤解に関する多くの質問を目にするでしょう。

また、Cプリプロセッサに慣れる必要があります。Cプリプロセッサは、C ++プリプロセッサとほとんど同じです(多くの場合、同じプログラムです)。それを使用する方法を知っていると、C ++で役立ちますが、Cではより多くに依存しています。

C ++が持つCでの対処が難しい大きな問題の1つはデストラクタです。これらのことは、リソースの解放を管理しているすべての場所で呼び出すことができますが、Cでは、それらをすべて明示的に行う必要があります。これは、C ++プログラマーが実行することを忘れがちです。

インタビューに関しては、Cで一般的なアルゴリズムのコードを書くように誰かに頼まれて、次のようなことをした場合:

struct foo {
       int a;
       void * b;
};
foo x;  // in C++ this would work, but in C it would fail because struct names aren't in the
        // type name table unless you put them there with typedef

私は彼らがあなたがしなかったのであなたがしていることを知らないことを決定しようとしているとは思わない:

struct foo x;

そして、cout彼らがあなたに見せようとしているのは、一般的なケースではC ++が簡単にする入力と出力を扱う能力であるのでない限り、あなたが使用したかどうかは本当に気にするべきではありません。

Cを必要とする仕事で面接を受ける立場にあることがわかった場合は、C ++との重複以外のCの知識の欠如について前もって知っておく必要があります。彼らは、優秀なプログラマーがC ++からCへの移行をかなり迅速に行えるはずであることを理解するでしょう。

とはいえ、Cはそれほど大きな言語ではありません。標準ライブラリはC ++よりもはるかに小さく、最も一般的な部分に慣れるのはそれほど大したことではないので、学習するのは本当に害にはなりません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.