web-dev-qa-db-ja.com

C、C ++、C#の学習

皆さんはこの質問にうんざりしていると思いますが、同様の投稿や質問が何時間も続いた後、私は実際に私の特定の懸念をまったく進展させていません。

私が行動方針を決定する前に、皆さんが私が持っているいくつかの質問にいくつかの光を当てることができることを望んでいました。

背景:ある種のプログラムに登録して、プログラミング言語を学び、フィールドで働くための証明書や学位を取得したいと考えています。私はいつも興味があり、高校に戻って本を買いましたVB戻って手を出しました。今、私は巨大な中断の後で真剣になりたいです。

質問1:悪い習慣を身につけているので、最初にCを学び、次にC++またはC#を学ぶことは逆効果です。私が見てきた多くの大学のコースでは、C/C++を学ぶことは進歩するために必須です。 Cを覚える必要はありますか?関連するノートでは、CとC++の違い、またはC#には.NETが組み込まれていること以外は本当に理解していません(これは、プログラミングを容易かつ高速にするツールとライブラリのコンパイルです)。

質問2:皆さんはどこでプログラミングを学びましたか?どこをお勧めしますか?独学で就職活動を上陸させることは可能ですか?私の最高のチャンスはITT技術者ですか、それとも正規の大学ですか?私はJCに登録してそこから行きますが、どうすればよいか判断できません。

最後の質問:) C++が.NETに「移植」されていると聞きました。ほんと?そして、もしそうなら、これはC++を学習するための堅実な需要のある言語にするでしょうか?

見てくれてありがとう。 :)

5
Zac

それは本当にあなたがあなたのキャリアの進歩をどのように見ているかに依存します。 Officeのようなシュリンクラップされたソフトウェア、またはオペレーティングシステムのような低レベルのソフトウェアで作業したいと思うなら、はい、必ず、まずCとC++を学んでください。ただし、基幹業務ソフトウェアを作成する仕事を探している場合、これはおそらくほとんどのエントリレベルの仕事が利用できる場所であり、C#のようなものがはるかに価値があります。

C/C++とC#の間には何千もの重要な違いがあります。しかし、これまでに心配しているのは、3つの大きな問題です。

(1)C#には、.NETランタイム(およびそのさまざまなSilverlight/WP7兄弟)の形式で、クリーンで使いやすいオブジェクトモデルが付属しています。 CおよびC++は、プラットフォームおよびフレームワークに依存しません。ほんの一例を挙げれば、これは文字列処理を行うための定義された方法がないことを意味し、その結果、長年にわたるプログラマーは約1000の方法でこれを行う方法を考えてきましたが、どれも他のものと実際に互換性はありません。対照的に、C#で文字列が必要な場合は、組み込みのMicrosoft "String"クラスを使用するだけで完了です。はい、制限は約1%増えますが、約100倍便利です。

(2)C#は、通常、メモリ管理の詳細については考えさせません。オブジェクトを作成する場合、通常、オブジェクトを削除して、使用しているメモリを解放することを心配する必要はありません。対照的に、CまたはC++では、適切なタイミングで適切な順序でオブジェクトを削除するために、かなりの時間を費やします。そして、ほんのわずかな間違いを犯した場合、厄介なランタイムクラッシュでそれらの間違いの代償を払うことになります。

(3)MS C#コンパイラは、かなり良いエラーメッセージを表示します。典型的なCおよびC++コンパイラは、驚くほどひどいエラーメッセージを表示します。 C#でコード行をねじ込むと、コンパイラーはほとんどの場合、「これはねじ込んだコード行です」という単一のエラーを表示します。 CまたはC++で同様のことを行うと、コンパイラーは非常に頻繁に1000種類のエラーを表示しますが、どれも実際に失敗したコード行を指しています。どの環境が平均的なプログラマーにとってより生産的であるかについて、独自の結論を引き出すことができます:-)。

最終的な結果として、C#はCまたはC++よりもわずかに遅く、特定のタスク(ビデオコーデックなど)にはそれほど適していませんが、CまたはC++の場合よりも約10倍生産性が高くなります。あなたが考えることができるすべてのビジネスレベルのアプリケーション。

プログラミングがたくさんあることを除けば、プログラミングを学ぶ方法が1つあることはわかりません。私が知っている最悪のプログラマーには、コンピューターサイエンスの博士号を取得している人もいれば、高校を卒業したことがない最高のプログラマーもいます。それを行う単一の方法はありません。他の人々が示唆しているように、始めるための合理的な方法は、2、3冊の本を購入し、実装したいペットプロジェクトを見つけ(ウェブサイトは良いスタートです)、ハッキングを開始することです。あなたは千の間違いを犯しますが、許されない唯一の間違いは、あなたが最初に行ったのと同じ方法で2番目のウェブサイトを構築することです。そして、そこから先に進みます。

他の言語については、JavaはC#によく似ており、他の言語を習得した後の習得はかなり迅速になるはずです。最近では、少なくとも1つの「動的」言語も習得する必要があります。 、Python、JavaScript、Rubyなど(動的言語は、大まかに言ってC#にとってはC#と同じです。非常に表現力が高く、はるかに高い抽象化レベルで機能し、実装の詳細についてはあまり考えませんが、遅くなる可能性があり、おそらくより悪い習慣を奨励します。)おそらく何らかの形でWeb開発を行って生計を立てることになり、これら3つすべてがこの分野で重要な言語となっています。ある時点でJavaScriptを学ぶためですが、それはほぼ完全にフロントエンド言語です。バックエンドのものを書くためにJavaScriptを使用する人はほとんどいません。

11
Ken Smith

私はあなたのリストのanyを第一言語としてお勧めしません。 PythonRuby 、および JavaScript -で始まります。すべて、一度にすべてです。それらは、スキルが相互に引き継がれるほど十分に似ていますが、違いを研究することにより、一般的なプログラミング言語がどのように機能するかについて貴重なことを学ぶことができるほど十分に異なります。

それらがダウンしたら、Cに進む必要があります。Cは、最低レベルでのコンピューターの動作を教えます。これは、any言語でのプログラミングに役立ちます。 (しかし、「ループとは何ですか?」の上にあることを一度に学習することは多すぎるため、高レベルのプログラミングを学習した後でこれを実行します。)

プロジェクトで必要になるまで、他のCファミリ言語を学ぼうとはしません。それらの問題は、それらが巨大であり、すべてのプロジェクトが異なるサブセットを選択することです。つまり、C++がテンプレートと標準コンテナーを意味するプロジェクトでは素晴らしいのですが、深くネストされた継承階層を意味する別のプロジェクトでは完全に海上にあります。およびCOM。

4
zwol

まず、何をしたいかを知る必要があります。オペレーティングシステム上でのソフトウェア開発に興味がありますか、それともハードウェアをプログラミングしますか?ハードウェアのプログラミングを検討している場合は、純粋なCおよびアセンブリ言語を知っている必要があるでしょう。ただし、プラットフォームソフトウェアの開発を検討している場合、C++はかなり普遍的な言語です。 C#自体も優れていますが、私はこれを開始点としてはお勧めしません(おそらくC++よりも簡単ですが、C#を使用すると、C#がバックグラウンドで実行する傾向があることを理解できます)。

また、言語(C、C++、C#、Javaなど)は簡単に習得できず、スキルであるため、時間をかけて開発する必要があります。学校の有無にかかわらず、上手になるには時間がかかります。

大学に入るまで、私は完全に独学でした(約7年間のプログラミング経験と約3年間の専門的経験)。私が学ぶプログラミングの量は非常に限られています。プログラミング言語を教えるために、どの学校にも依存してはなりません(特定の「プログラミング」専攻のために学校に通っている場合を除いて、私はそれらのプログラムについてはわかりません)。おそらく、それらは特定の実用的な方法であなたを助けるでしょうが、開発者としてそれを学ぶのは主にあなた次第です(Webには多くの優れたガイドがあり、教授はあなたを助けの正しい方向に導くことができます)。とにかく、コンピュータサイエンスでは、システムの動作などについて多くのことを学ぶことができます。プログラミングに適用すると、コードの効率を確実に向上させることができます。

それを念頭に置いて、それは素敵な小さな卒業証書があなたがグーグルで望んでいるその仕事を得るチャンスを助けないという意味ではありません(私は確かにそうするでしょう)。ただし、業界における適性は、純粋に「本の虫」であるよりも、企業にとってはるかに価値があります。学校で必要なことはすべて学ぶことができますが、できることは、一連の条件を備えた宿題のプログラミングの問題を解決することだけである場合、現実の世界にぶつかると困ります。自分のバグ/エラーなどを予測して見つける必要があります。

最後に、私は.NETフレームワークを頻繁に使用しないため、この主張を確認または否定することはできません。ただし、C++は非常に堅固で学習に役立つ言語です。

よろしく、
デニスM.

3
RageD

1)はい。CやC++を最初に学習することは逆効果になる場合があります。これらは非常に複雑な言語であり、奇妙な点がたくさんあるためです。より良い最初の言語は、C#またはJavaです。これらはよりクリーンでより良い構文を備えていますが、多くのC++を思い出させます。

Cは、任意の形式のプログラムを作成するために必要な機能を備えた「ベア」言語として説明できます。 C++はより広範で、オブジェクト指向機能を備えています。 C#/ Java(これら2つは非常によく似ています)もオブジェクト指向であり、純粋にC++よりも純粋であり、C++の複雑さの多くを欠いているため、初心者に適しています。ただし、ハードウェアとビット/バイトの仕組み、および2進数と16進数のシステムについて学習する必要があります。

また、VBが存在することを知っていたのを忘れていました。これは、現代のプログラミングでは何の目的もない時代遅れで恐ろしい言語です。

2)DelphiとPascalで趣味のレベルから始め、その後学校でプログラミングを学び、最終的に学位を取得しました。

最後の質問:C++は、Cと同様に、ISO標準組織によって維持されている標準化された言語です。したがって、その権利を所有する会社はありません。 Microsoftには.NETバージョンのC++がありますが、C++はそれ以前からすでに安定していて需要がありました。

3
user16306

質問1については、以下を参照できます: C++は第一言語として適切ですか?

.NETは、簡単に言うと、日常の問題に対する多くの一般的なソリューションを備えた、Microsoftが設計したフレームワークです。これは、どの言語でもコアではなく、モノを使用してC#を実装できます。

質問2:私は学校で少し学びましたが、ほとんどは自分で学びました。本を読んだだけではプログラミングを実際に学ぶことはできませんが、始めるのに役立つかもしれません。あなたがしたいことはたくさんの練習です。そして、あなたは独学で仕事を得ることができますが、学位はおそらく特にあなたが仕事の経験がない場合は、より良い仕事を得るのに役立ちます。

最後の質問:マネージドC++がありますが、実際にそれを学ぶことはありません。 .NETを使用したい場合は、C#を使用してください。しかし、.NETに焦点を当てることは、学習において非常に良い選択だとは思いません。また、ゲームなどの一部の業界では、C++の知識が依然として強く求められています。

2
Santiago V.

先に進んでCを学びますが、OOPおよびRADソフトウェア開発手法を同時に学ぶため、いくつかの基本を学びます。 "習慣。

C#とC++はどちらも、学生を移動できないプログラミング習慣に縛り付けることができます。

そして、金属に近いCを知ることは、いくつかの専門分野であなたを助けることができます。そこでは、小型バッテリー駆動または制約のあるデバイスの開発が重要です(そして、これは、時々、一般的なデスクトップまたはWebアプリケーションよりも高いコンサルティング率を要求する可能性があります)。

2
hotpaw2

プログラマーまたは開発者として仕事をしたい場合で、C、C++、C#のいずれかを選択する場合、私にとってはそれほど簡単なことではありません。そこにはもっと多くのC#の仕事があり、お金はしばしば(特に初心者レベルの方が)よく、競争は率直に低くなります。地元の求人のウェブサイトにアクセスして、何が提供されているかを見てください。そうすれば、私が何を言っているのかすぐにわかります。

C#は、Visual Studioに注がれた取り組みを考えると、習得も容易です。学生としてVisual Studio Expressを無料で入手でき、文字通り数千のチュートリアルとダウンロード可能なプロジェクト/サンプルがオンラインにあります。 C#には、StackOverflowの他のトピックよりも多くの質問と回答があります。

C#がCまたはC++よりも「優れている」と言っているわけではありません。それぞれに長所と短所があり、C#開発者であることにも注意する必要があります。

どうやって習ったの?入学レベルのポジションに入ることができるまで、いくつかの専門的な研究が、ほとんどが独学でした。その後、私は一緒に働いた賢い人々からできる限りの知識を飲み込みました(そしてnotを他の特定の人々から行う方法を学びました)。興味があり、知的で情熱的であれば、問題はありません。

2
Kirk Broadhurst

質問1:Cの学習を気にしません(これは私の意見ですので、気を悪くしないでください)。 C++にはまだ使用方法がありますが、C++ではオブジェクト指向プログラミングなどの多くの改善が行われています。作成したいもの(ゲーム、Webアプリケーションなど)に応じて、学習する言語を決定します。確かに、テクノロジーが変化するにつれて、おそらく複数のことを学ぶことになるでしょう。 C++ではメモリ管理について説明しますが、C#を理解するのははるかに困難です。 Head First C# を読んでC#を学習することをお勧めします。これは、前進するために必要な多くの基本を理解するのに役立ちます。

質問2:あなたは間違いなく独学で仕事を得ることができますが、問題は認識されています。現場の人々を知ることは助けになります。オープンソースプロジェクトに参加することは、人々との出会いを助けるかもしれませんが、経験からこれについて話すことはできません。正式な教育を受ける予定がある場合は、通常の大学の学位を取得してください。私はリンカーン技術研究所に行ったが、それは時間の無駄だった。

1
Carlosfocker

あなたが学びたい特定の言語がある場合、それを学びます。踏み台として、いくつかの点で似ている別の言語を学ぶことは、通常、悪い考えです。あなたはいくつかの概念をより速く拾うかもしれませんが、あなたはより多くを学ぶ必要があります。 CとC++は2つの異なる言語であり、「C/C++」は通常「C++(およびおそらくC)についてあまり知らない」の省略形であることに注意してください。

あなたがプログラマーになるつもりなら、私はいつかCを学ぶことを勧めます。これは、より基本的なレベルで何が起こっているかについての良い感じを与えます。多くの異なる言語を学ぶことをお勧めします。ただし、おそらく最初に何か他のことを上手にすべきです。

C、C++、C#の違いを理解しなくても心配する必要はありません。その理解は、プログラミングについてさらに学ぶまで待つことができます。今のところ、Cは最小限の言語の一部であり、C++は非常に強力で、C#はやや強力ではありませんがよりクリーンです。

キャリアの見通しについては、大学の学位を取得する方法です。学士号を取得していないと、多くの場所で障害となり、仕事から失格になることがあります。明らかに例外はありますが、全体としては良い投資です。 JCの意味が「コミュニティカレッジ」(2年間のカレッジプログラム)の意味である場合、それは1つの出発点ですが、4年間の大学への編入についてはいつか参照してください。

C++自体は実際には.NETと互換性がありませんが、とにかく多くのジョブを利用できる非常に実行可能な言語です。 .NETで動作するC++のバージョンがありますが、それは実際のC++でもC#のような.NETネイティブでもないため、特定の要件(使用したジョブのような)がある場合を除いて、それを処理しません。 C++/CLI)。

1
David Thornley

質問1:
主にMicrosoftアプリケーションまたはWeb開発を行う場合でも、C++を学ぶことは価値があると思います。最近ではC#で行われる可能性が高いです。これは、C#またはJavaのいずれにも適した基本言語です。また、より高いレベルの言語を使用している場合でも、ある日はC/C++ APIに対してプログラミングする必要があります。だから、その世界で何が起こっているのかを知るのは良いことです。

低レベルまたはハードウェアのプログラミングを計画しているのでない限り、Cを気にしないでください。ただし、CとC++の違いについて読んでください。ほとんどの場合、C++はCにクラスを作成する機能を加えたものです。したがって、C++を記述できれば、基本的にCプログラムを記述できます。

C#はC++に似ていますが、主な違いは、より自動化されたメモリ管理システムです(C/C++の問題)。ただし、より簡単な開発/デバッグと引き換えに、ある程度の制御を放棄することを理解してください。ただし、実際には、C++が提供する制御レベルが必要になることはあまりありません。

私は言語Xを学ぶことは悪い習慣を教えることができ、言語yを学ぶことをより難しくすることができるという哲学に同意しません。多くの人がそうしますが、私は個人的にこれらの主張を疑っています。

質問2:
私は多数のソース(高校、大学、独学、独立コース、ピアなど)を介してプログラムすることを学びました。さまざまな場所から学ぶこともわかります。あなたの主な関心が専門的なプログラミング経験のない仕事を得ることである場合、4年制大学が最善の策です。あなたは伝統的な学位がなくても仕事を得ることができますが、学位がないと経験がないため、それは非常に困難になります。

最後の質問:
C++。NETはすでに存在します。 .NETがリリースされてからずっとそうです。私の意見では、それは一種の半魚/半鳥である。 C++。NET開発者の需要はそれほど多くありませんし、増えるとは思っていません。仕事の見込み客に関しては、おそらくC#開発者の方が良いでしょう。

1
JohnFx

場合によります;ある言語が仕事に適している場合は、その仕事にそれを使用する必要があります。

同じことがプラットフォームにも当てはまります。HTML5が問題を解決できるのであれば、Flashや他のプラグインを使用する理由は何ですか。

プログラミング言語は関係ありません。何かを構築するのに役立つツールにすぎません。コンピュータに所定の方法で特別なタスクを実行することを教える!

1
Muaz Khan