私は初心者です。C ++ 11の学習を直接開始できますか?または私は古いC ++を学ぶ必要がありますか?[閉まっている]


36

私は初心者であり、プログラミングの知識はほとんどありません。

新しいC ++ 11を扱っている本からC ++を直接学んだり、古い最高のC ++の本を勉強したりするのは良いことでしょうか?

C ++ 11を学習する前に、C ++についての知識がほとんどないはずですか?またはそこから直接開始できますか?

C ++ 11から直接起動すると問題が発生しますか?いいえの場合は、C ++ 11に関する本をいくつか提案してください。


18
なぜこれらの否定的なポイントですか?この質問はすでに回答されていますか?初心者は質問できませんか?esは、この問題で誰かが研究していますか?最良の方法の1つは、より多くの経験を持つ人に尋ねることだと思います。+1、初心者もガイドを受けるに値するため、
アドサイグアス

12
@Simonこれは、ソフトウェア開発に関する概念的な質問として私に聞こえます:どこから始めるのですか?そして、彼がプロのプログラマーではないことをどうやって知っていますか?;)
アドサイグアス

4
@MSalters本について話す; Accelerated C ++は、少し簡素化されていますが、素晴らしい本です。バーバラ・E・ムーは素晴らしい作家であり、本に対する彼女の影響は容易に注目されます。しかし、問題の本は確か「古い」ものです。しかし、すべての希望が失われるわけではありません-LippmanLajoieBarbara E. MooによるC ++ Primerと呼ばれる高評価の本があります第5版は今月(2012年8月)発行され、コピー、これはC ++ 11をカバーする素晴らしい本です。再び、Mooの影響があります。彼女はテクニカルライティングに関しては女神です。
zxcdw

2
@Simon Programmers — Stack Exchange is a site for professional programmers...その場合、初心者プログラマーのサイトに私を案内してくれませんか?私はまた、コーディングの初心者だと私はかなりいくつかの基本的な疑問を持っているつもりです...
Jeyekomon

2
この質問は、よくある質問のために明らかにトピックから外れていると思います(最初に尋ねられた時点ではなかったかもしれません)。「次にどの言語(バージョン)を取り上げるべきか」を尋ね、教育のアドバイスについてであり、標準外のリソース-3つの標準的な終了理由を求めます。
Doc Brown 14

回答:


38

C ++ 11を初心者、特に他の言語でこれらの機能を使用した経験のある人が理解しやすいように、使いやすさを向上させています。C ++ 11のその他の変更は上級ユーザーのみが関心を持っているので、ほとんどの違いを教えるように設計された本を手に入れると圧倒される可能性があります。入手する本はすべて、C ++の初心者向けに設計されていることを確認してください。

そうは言っても、既存のコードがたくさんあるため、おそらく最終的には古い方法を学習する必要があります。プログラマーが選択した場合、新しいC ++ 11コードにも古い方法が含まれます。私は生計のためにC ++を書いていますが、私の会社はまだC ++ 11互換のコンパイラを評価することすらしていません。実稼働環境で使用することは言うまでもありません。


C ++入門書第4版から学ぶ。で始まる良い本??
ダナンジェイ

1
それは良いレビューを得て、適切なレベルにあるように見えますが、私は長い間初心者レベルのC ++の本を見ていないので、私は尋ねるのに最適な人ではありません。ただし、C ++ 11をカバーする場合は、第5版が必要になると思います。
カールビーレフェルト

その大丈夫と私は第5版がC ++ 11をカバーすることを知っています。
ダナンジェイ

10

C ++ 11の使用を開始するために古いC ++を使用する必要はありません。C++ 11には新しい機能がありますが、使用はオプションです。C ++ 11の機能の使用方法を知っていることは利点ですが、古いバージョンの特異性を知っていれば、レガシー(11より前の)コードベースで作業する場合、それは確かに不利ではありません。

Learn C ++は学習を開始するのに適した場所です。付録Bでは、基本を学習した後、C ++ 11の機能について説明します。

一部の人々がJava / CSharpなどをより簡単な代替言語として提案している理由はわかりますが、CSharpに移る前にC ++を少し学んだので、プログラミングスキルは言語よりもはるかに深くなります。構文/機能、C ++の強固な基盤により、他の命令型OOP言語を簡単に習得できます。


8

言うのが難しい。

古いC ++は地雷原のようなものであり、そのような獣を操縦する方法を学ぶのは素晴らしいことです。また、物事がどのように行われるのか、さまざまな構成要素の意味するところを理解することもできます。

繰り返しになりますが、古いC ++は、コードを書くときに必要なものではありません。

しかし、それでもなお、古いC ++は、多くの業界がさらに20年にわたって動揺しているものです。

私はC ++ 11が大好きですが、現時点ではスタートアップでしか使用できません。大規模なレガシーコードベースではありません。また、C ++ 11に直接ジャンプすると、厄介なC ++パーツの未熟なスキルが残る場合があります。いくつかの高度なC ++ 11がリークしたり、構文的には正しいが論理的に間違った方法で使用されているためにクラッシュしたりすると、逆効果になります。


業界の主要部分が、ニッチな組み込みシステム分野以外にコンパイラーをアップデートしないのはなぜですか?リスク(単体テストでも)?保守主義?
TheLQ

1
@TheLQ:推測しますが…私が上司だったらどうするかと思うと、同じことをする可能性が高いです。移行コストと比較して顕著なコスト削減がない限り。
コーダー

1
@TheLQ:コードベースを新しいバージョンのコンパイラに移行するには、一年かかります。プロジェクトが新しいコンパイラのバージョンを意地悪に適応することはまれです。新しいプロジェクトは、古いコンパイラと相互作用しない限り、新しいコンパイラを使用する可能性が高くなります。
マーティンヨーク

1
@Coder:C ++ 11とC ++ 03の違いは、学習してもC ++ 03に直接変換されないことです。物事を簡単に記述できる新しい機能がいくつかありますが、これらの地雷原に足を踏み入れることを妨げるものはありません。
マーティンヨーク

1
@TheLQ:はい、基本的にはプロセスですが、統合テストを忘れました(最も複雑な部分。すべてのアプリケーションがスタンドアロンではありません(実際、これは少数派だと思います))。すべてのコードが正しく機能し、正しく機能することを確認する必要があります(コードだけでなく、顧客コードとも)。これは、テストと検証が行われない限り、数か月のプロセスです。一部の顧客がC ++ 11に移行していない場合は、一部のシステムで両方のバージョンを維持する必要がある場合があります(幸いなことに、gccは下位互換性に優れていますが、すべてのC ++コンパイラベンダーがそうではありません)。
マーティンヨーク

8

の多くの改善にもかかわらずC++11C++まだ簡単な言語ではありません。Javaは、一部の人が考えるほど簡単ではありませんが、非常に優れたパフォーマンス(多くの場合ほぼ同じ速度C++)を備えた簡単な言語であり、より優れたIDEVisual C++現在のJava IDEと同じくらい良いが、ここではLinuxで運がありません)を提供しますより包括的な標準ライブラリ(JDK)、より多くのライブラリ(HibernateSpringJEELuceneなど)およびメモリリークなし(まあ、ほとんどなし-Javaでメモリリークを構築することはできますが、そうするのは難しいです)よりC++)。公平を期すために、modern C++11では、メモリリークを回避する方がはるかに簡単です。

C ++ 11には、ラムダ、自動キーワード、移動セマンティクスなど、多くの優れた機能があります。それは間違いなく以前よりもはるかに優れた言語ですC++98。「C++11モダンC++スタイルの要素」の新機能については、Herb Sutterによるこの概要を参照してください。

要約すると、誰もが少なくともいくつかを学ぶべきだと思いますC++。あなたがプログラミングされている場合はJavaScalaRubyまたはPython最後の十年のために、決してが触れたCC++、今と、C++11私はそれを学ぶ時間だと思うC++11し、そうしながら、自分のプログラミングのスキルを向上させます。

私はおそらく今後C++数年間は仕事であまり使いませんしJava、私よりも強力な言語が必要なときは、おそらくScalaに行きC++11ますが、新しい機能、特に新しい機能を詳しく見て学び、理解しようとしますマルチスレッドと並行性に関するもの。

要確認:本番環境で使用する予定がない場合でも、新しいプログラミング言語を学ぶことは常に役立ちます。


1

深呼吸して、Peter Norvigによるこの記事を読んでください

読んだことがありますか?初心者の方は、小さなステップで始める必要があります。-ここに言語を挿入してください-後で来ることができます、いくつかの初心者のコンピュータ科学の導入コースのためにCourseraまたはUdacityをチェックしてください。

それが完了したら、「C」言語に設定されている場合は、K&RのThe Cプログラミング言語をゆっくりと進めることをお勧めます。

基本に取り組み、残りは間に合うようになります。


10
これが質問に対する答えであることがわかりません。CはC ++と同じ言語ではありません。
バルテック

1
しかし、C ++はCに基づいており、主に後方互換性があります。最新のC構文の大部分は、C ++に直接適用できます。...と、より大きな言語でそう不可解ないぼのいくつかを説明するのに役立ちます- CはC ++のすべてのバージョンよりも簡単なので、Cを学ぶことはまずあなたの基本的なC ++構文と意味での素敵なコヒーレント教育を与える
comingstorm

2
@comingstorm Cプログラマーが最初にすべきことは、Cについて知っているほぼすべてのことを学んでから、C ++を学び始めることです。あなたに噛みつくかもしれない微妙な違いがあります。
BЈовић

1
さらに、慣用的な現代のC ++コードは、構文以外はCからあまり借りません。まだC文字列とmalloc / freeを使用しているわけではありません。言語への完全な初心者として、あなたはより良いC ++などの代わりにC.に焦点を当てたの加速されたC ++入門第5版などの書籍、拾ってオフにしている
bstamour

1

C ++に関する最近の入門書でも、C ++ 11が取り上げられています。私は、Sam's Teach Yourself C ++をスクリプト言語で作業した後、C / C ++ではなく10年近く読みましたが、本当に役立ちました。私はすぐにC ++の中心的なアイデア(多くのSTLを含む)に精通し、C ++ 11では異なる非常に多くの詳細を意識しました。

いくつかの他のポスターが述べたように、C ++ 11には、多くの方法でのようなスクリプトスタイルの追加と古い規格よりも簡単であるautofor(int &i : m_vector){}などだからあなたの「少しの知識は」PythonやMatlabのような言語から来ている場合は、C ++ 11を見つけるだろう以前の標準よりやや「自然」です。

また、C ++ 11のコンパイラ互換性は(ほぼ)完全であるため、「コンパイルするには最新すぎる」コードはもはや問題ではないことも指摘しておきます。

要するに、それをしてください。


-1

私の時代、特にプログラミングの初心者にとって、CはC ++の前提条件と見なされていました。言語が何をするのか、なぜそのように設計されているのかを理解する必要があるからです。Cにはプログラミング言語の素晴らしい十分なアイデアがたくさんありましたが、それは決して時代遅れになることはありません。したがって、これが最良のスタートだと思います。

そして、プログラミングに関する基本的な視点を持った後、次の動きとして何をするかを選択する必要があります。つまり、できる限り深く学習する言語を選択する必要があります。どれだけ深くなったとしても、一般的に他の言語でどれだけ深くできるかを決定できます。つまり、どれだけ多くの言語を学んだとしても、最も深い言語が常にあなたが掘り出した最初の言語になります。私にとっては、Javaの研究を行い、カーネル機能をよりよく理解するために、Javaのモデルを自分で作成しました。

その後、プログラミング言語の技術を完全に理解しているので、あなたが望むものを何でも学ぶことができるかもしれません。私はC#、Go、Python、Scalaを学び始め、楽しみ/仕事のために多くのプロジェクトを行ってきました。個人的な記録は、言語の学習を開始してから開発プロジェクトの1.0の責任者になるまで3か月です。

私の場合、最初のプログラムから15年以上が経過しており、それが何であるかさえ思い出せません。あなたが十分に一生懸命働くならば、あなたは間違いなく私より良くて速くなると信じています。


これは質問が尋ね答えていない
GNAT

すみません。どちらも言いたくありません。最終的に何を学びたいかは関係ありません。プログラミング言語の基礎だけが、この分野を掘り下げることができるかどうかを決定できます。同時に、クイックショットではなく、より多くの時間を費やす必要があります。
ウィンストンウー14年

-2

C ++ 11とすべてが新しいバージョンに似ていますが、CとC ++はあらゆる種類の開発の基本であるため、初心者として最初にC ++の概念を理解する必要があると思います。C ++を学習すると、ほとんどの概念が自動的にクリアされます。


1
プログラマーへようこそ!あなたの答えがこの質問にそれほど多くを追加するかどうかはわかりません。文法的に少し混乱しています。あなたが言おうとしていることを理解するのに苦労しています。あなたの答えを拡大して、C ++ 11の違いがCと以前のバージョンのC ++標準の学習が優れている理由の例を追加してください。
マーティンピーターズ14年

-3

C ++は本当に素晴らしい強力な言語です。ただし、プログラマーにも多くの責任があります。

プログラミングにまったく慣れていない場合は、C#から始めて生活を楽にしてください。構文はC ++に基づいていますが、エラー処理は、物事がうまくいかなくなった場合に支援するのにはるかに初心者向けです。

メソッド、クラス、継承に慣れており、メモリとシステムリソースの管理が生産性よりも重要な環境で開発したい場合は、C ++が適切な選択であり、現在の標準を学ぶことから始めます。C ++では、メモリを理解し、メモリを積極的に管理する必要があることに留意してください。ここで間違いを犯すと、コアダンプされるか、データに意味のないバイトが含まれるだけです。多くの場合、問題を発見するポイントは、原因が実際にある場所とは無関係です。


1
C#で始まる場合、(s)彼は「舞台裏」で実際に何が起こるかを知らずに、高レベル(OOP、自動メモリ管理)でプログラミングに慣れます。その人がC ++に移行すると、(s)C / C ++に関する重要な知識が不足します(主にメモリ管理について考えていますが、他にもあります)。C ++とC#は非常に似た構文を共有しているため、さらに誤解を招くかもしれませんが、実際にコンパイルされるコードはまったく異なります。OPがC ++への関心を明確に述べていることに留意してください。
エティ14年

OPはまた、プログラミングの知識がほとんどないと述べました。最初の言語をC ++として学習することは大きな挑戦です。成功する可能性が非常に高いため、戦闘を選択して一連の小さな戦闘を選択する方がはるかに優れています。
マイケルショー

-6

なぜC ++から始めたいのですか?

私は個人的にC ++を第一言語として推奨します。それはトリッキーで、複雑で、難しい...単に他のほとんどのプログラミング言語よりもはるかに低いレベルで、より「安全ではない」。

C#、Java、Python、またはJavaScriptを選ぶことをお勧めします。これらを使って、より楽しい時間を過ごすことができます。


3
私はそれを一般化としては同意しません。java / C#/ pythonなどの簡単な生活から、より複雑なCおよびC ++の世界への移行はそれほど簡単ではありません。プログラミング言語の学習に本当に慣れている場合、CとC ++の学習は難しいですが、多くの恩恵をもたらします。後でjava、C#、pythonなどでプログラミングしたい場合、それらの変更をCやC ++に変更するよりもはるかに簡単です。要約:C / C ++は最初は難しくなりますが、他のオブジェクト指向言語への変更は簡単になります。
-martiert

2
C ++は開始するのに最適な基盤です。プログラミングは複雑で、最終的にはハードウェアで作業する必要があります。C ++は、誤ったセキュリティ感覚なしにそれを学習し始める素晴らしい方法です。
コーダー

opの質問は、開発の目的に完全に依存しています。
独立

1
私はこれに同意しません。C ++の学習にはいくつかの利点があり、JavaやC#などの他の言語を簡単に習得できます。
アンソニー

2
@Dhananjay:C ++はjavaの何倍も難しい... Javaはベビーバイクのようなもので、C ++の非常に単純化されたバージョンです。後者は、ブレーキのない飾り気のないバイクです。すでにJavaを見つけられない場合、C ++は苦痛になります。私の2セント。
-dagnelies
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.