C ++は第一言語として適していますか?[閉まっている]


26

地元の大学は、プログラミング経験のない初年度の大学生(16歳)にC ++を教えています。

最初のプログラミング言語として、C ++は適していますか?


56
任意の言語を第一言語にすることができます。本当に問題ではありません。
アダムリア

8
これは、あなたが興味かもしれない- joelonsoftware.com/articles/ThePerilsofJavaSchools.html
Craigeに

19
@Anna Lear:もちろん、どの言語でも第一言語になり得ますが、それはC ++を優れた第一言語として認定しません。あなたの答えが実際の答えであった場合、私はそれを役に立たないものとして投票します。
エドジェームズ

6
@Doug:私は生計のためにC ++をプログラミングしています...あなたのポイントは何ですか?
マチューM.

9
@Dough-今日のコンピューティングプロジェクトの70%は、組み込みシステムとマイクロデバイス用のソフトウェアの作成に関係しています。それらのプロジェクトにどの言語が使用されていると思いますか?エントリーレベルのポジションに最適な装備は誰でしょうか?確かにJavaや.NETのワントリックポニーではありません。耳障りに聞こえますが、学校はCS卒業生のすべての世代に、彼らがプログラミングの仕事市場の30%だけを訓練することで多大な損害を与えています。アプリセクターのプログラマーが過剰に存在し(30%)、システムセクターが不足しています(70%)。これらの数字はどこにも行きません。将来のキャリアの機会?そうだね。
luis.espinal

回答:


61

強調はありません

あなたが学生のために考えている目標については、別の言語または言語のシーケンスがより速く、より良いでしょう。例。

「学生は低レベルの概念を理解する必要があります。」

「低レベル」コーディングはnew、オブジェクトをから取得したり、にフィードバックしたりdelete、場合によってはそうでない場所を指すポインターを持つことではありません。関数、クラス、およびテンプレートは低レベルではありません。RAII、使用するための12個の方法conststd::ostream::operator<<protectedおよび new低レベルの概念ではありません。これらのことは低レベルの意味を持ち、あなたはそれらを数ヶ月間、または将来のクラスまでスキップし、代わりにC ++セマンティクスの山を教えています。

私は、MIPSやMMIXのような優れた環境と教材を備えたアセンブラをお勧めします。お急ぎの場合は、少なくともアセンブラの出力を見て回り道でCを教えてください。これにより、C ++が行うすべての低レベルの理解が得られ、一部はより高速になります。

「学生はオブジェクト指向を理解する必要があります。」

C ++に組み込まれたオブジェクト指向は、OOの概念、または他のほぼすべての高レベルの概念を教えるには複雑すぎます。潜在的な理由の素晴らしい、長いリストについては、C ++ FAQを参照してください。そのすべてをヒットする必要がありますが、新しいプログラマーにとっては非常に長い時間がかかります。さもなければ、多くのことを飛ばして、新しいプログラマーを暗闇の中に残しておく必要があります-事実上、実際にはC ++を知らないのです!

C ++をまったく教える必要がある場合は、最初にオブジェクト(Python、Ruby、Squeak、Common Lisp、Racket)を使用して、よりシンプルで高レベルの言語を学習することをお勧めします。それを超えて、関数型言語にアクセスして、オブジェクト指向とは別の概念として多態性を学びます。

「学生はテンプレートとテンプレートのメタプログラミングを理解する必要があります。」

誰も本当にこれを尋ねませんが、私は彼らがそうすることを望みます。C ++には素晴らしいテンプレートがあり、STLはクールですが、C ++を最初に教えるのに十分な優先順位であってはなりません。とにかく、OCamlまたはHaskellの型システムを教えてから、それらの概念を改良する方が速いかもしれません。

「生徒は問題解決を学ぶ必要があります。」

ええ、これはどの言語でも入手できます。手荷物が少ないため、C ++以外のほぼすべての言語で入手できます。繰り返しますが、問題解決スキルの代わりに学生が学習するすべてのことのリストについては、C ++ FAQを参照してください。

「上記のすべて。1つの言語のみを使用する必要があります。」または「雇用主はそれを望んでいます。」または「Cスタイルの言語が必要です。」または...

複数の言語を教える。

1つの言語のみを教えたり学習したりすることで時間やエネルギーを節約できるという考えは、まったくばかげています。これは、特定の言語の学習には正確にXヶ月(HINT!HINT!)を要するという考えに基づいています。ここで、Xは単一の数字または言語ごとに1つの数字です。これは、すべての「要件」と「テスト」ガベージをスキップすることで時間とお金を節約できるという考えとほぼ同じです。

複数の構文については、他の言語に対して過度に偏らせることにより、すべての言語でC構文を期待するように教えると、生徒を危険にさらすことになります。

ほとんどすべてのパスは、C ++で開始するよりも高速で優れています。単純な高レベル言語を学習してからC ++を学習する方が速くなります。アセンブラを学習してからC ++を学習する方が高速です。C ++以外のものは、学生をそこに早く連れて行き、彼らはより多くの起動方法を知っているでしょう。最初にC ++を教えないでください。


4
素晴らしい答えです!実際、多くのC ++機能は、低レベルのプログラミングとはまったく関係がありません。
マルコムスタピック

7
+1、優れた答え。時々、C ++の気まぐれが誤って「低レベル」と同一視されることは事実です。あなたは、C ++のFAQにリンクされているが、私はまた、人々が見て取る推薦するC ++ FQA(または「よく質問さ解答」:Pを)
アンドレスF.

2
ワオ。ことを思い出すことのJava IAQ ...
ジェシーミリカン

完全に同意します。Malbolgeでさえ初心者にとってはC ++よりも優れているでしょう。
右折

2
私の唯一の予約-ライブラリを開発している人にしか関係のない詳細に触れることなく、多くを教えることができます。基本的なC ++のみを実行していることを明確にしている限り...しかし、とにかく誰かに何を教えましたか?
Steve314

54

いいえ、C ++は経験豊富なC ++開発者にとっても難しい言語です。最も単純なアルゴリズムであっても、言語の微妙な点の多くを説明する必要があります。Hello Worldの例を考えてみましょう。

#include <iostream>

int main()
{
  std::cout << "Hello World!" << std::endl;
}

その#includeコマンドは何ですか?何std::cout。なぜ::?なに<<?ああ、それはオーバーロードされたオペレーターです!オーバーロードされた演算子とは何ですか?Sooo、のためにints、それはビットシフトstd::coutを行いますが、それが何であれ、それはものをコンソールに出力します。ああ、std::coutストリームであり、ストリームには<<and >>演算子がオーバーロードされています。

Pythonで同じサンプルを見てみましょう:

print("Hello World!")

それだけです、いくつかのアルゴリズムをコーディングしましょう。


15
Pythonは7年生に適しています。大学生はもっと多くを把握できます。
グルシャン

13
確かに、しかし私たちは第一言語について話している。C ++は、他の言語と比較して、習得や習得が難しいことで知られています。なぜプログラミングを教えるのにそれを使用するのですか?学生は、プログラミングの基本を知っていれば、後でC ++を学ぶことができます。
マルコムスタピック

8
引数依存のルックアップについても言及していませんでした<< :)
MetricSystem

6
言語を始めるためにすべてを完全に知る必要はありません。cout <<何でも; 「正常に動作します」ので、後でオペレータのオーバーロードなどをカバーするまで、詳細を詳しく説明する必要はありません。
コーレン

6
私は、入門言語として、曜日を問わずC ++でPythonを使用します。
-jprete

21

おそらく、良い第一言語ではありません。複雑な構文、多くのルール、古い言語、エラーが発生しやすいメモリ管理です。Smalltalkのようなオブジェクト指向の何かを生徒に教えるのが良いでしょう。PythonのようなプログラムやHaskellのような機能的なプログラムのほうが良いです。

彼らは、より良い言語を学んだ後、C ++を後の人生で学習することができます(助けられない場合)。


5
第一言語としてのHaskellは興味深い実験になるでしょう。
ラリーコールマン

ケンブリッジ大学のCSコースである@Larryは、SMLを第一言語として教えています。
ピーターテイラー

1
関数型プログラミングは頭をひねります-MITはかなり早い段階でSchemeを開始することを知っていますが、学校で2年間のハイブリッド手続き型/オブジェクト指向スタイルが終わるまで関数型プログラミングを始められなかったことをうれしく思います。
-justkt

11
@justkt:すべての言語があなたの脳をひねります。それはあなたがそれをどのようにひねりたいかという問題です。
デビッドソーンリー

+1。ただし、C ++以外の言語を必ずしも「より良い」と分類的に分類することはしません。
-greyfade

18

短い答え:はい!

私はと言うでしょう任意の言語は、適切な開始が、特にC ++(またはequivivalent)です。最近ではC#とJavaが使用されている主要な言語であり、これらを使用してAPIやIDEに頼ることをすぐに学べますが、C ++を使用すると、パフォーマンスの最適化など、プログラミングを一から学ぶ機会が得られます。

.Sort();で構築された言語に盲目的に頼る前に、プログラミング、ループ、ソートの基本を学ぶことは決して悪い考えではありません。


11
ループとソート、はい。どの言語でも可能です。しかし、それを避けることができるのに、なぜポインターと奇妙な構文で作業を始めるのですか?プログラミングの経験が豊富になったら、後でこれらすべてを学ぶことができます。
マルコムスタピック

4
@Marco:Stroustrupの入門書「プログラミング:C ++を使用した原則と実践」では、本のほぼ中央にポインターを紹介しています。ポインターを導入することなく、C ++で多くのことを実行できます。
デビッド・ソーンリー

4
「それは基本を学ぶための悪い考え決してません...前に...」あなたが持っている任意のこの主張をバックアップするための研究を?多くの賢い人は、「ボトムアップ」が唯一の真の教授法であるという常識としてそれを宣伝していることを知っていますが、これは非常に物議を醸す点であり、私が知っている唯一の(明らかに非常に限られた)教訓的研究は反対の結論を指します。
コンラッドルドルフ

1
@David:問題は、ポインターなしで「C ++で多くのことをする」ことはさらに悪いことです。ポインターがなければ、すべてのオブジェクトはスタック上で宣言されます。これは史上最悪のプログラミングアイデアの1つです。値の型と継承/ポリモーフィズムは混ざり合いません。それらを混同しようとすると、より優れた設計の言語には存在しないエラーのカテゴリ全体につながります。
メイソンウィーラー

9
なんてことだ!なぜC ++の不必要な特異性に限られた脳サイクルの供給を燃やすのですか?プログラミングの基本概念を学ぶことが目的である場合、メモリ管理などの無関係な低レベルのものに焦点を当てるのはなぜですか?なぜ深い端に飛び込むのか?!
マグロブ

14

実際、私はおそらく非常に実用的な理由で第一言語としてそれが良い選択であると信じています:C ++を学んだ後、あなたが遭遇する他の言語は学ぶのが簡単に思えます。


10
ダイクストラの功績により、C ++の経験が豊富な学生に優れたプログラミングを教えることは事実上不可能です。潜在的なプログラマとして、彼らは再生の希望を超えて精神的に切断されています。;)
メイソンウィーラー

3
彼らはC ++から多くの悪い習慣を学ばなければなりません。別の例を使用する場合、アセンブラーを知っていると、より優れたJavaプログラマーになるでしょうか?私はそうではないと言うでしょう。
アンドレスF.

16
@AndrésF .:それに同意しないといけない。アセンブラを知っていると、何を書いていても優れたプログラマになります。実際に何が起こっているのかを理解できるからです。
メイソンウィーラー

2
@Andres:私はあまりにも多くのJava / C#プログラマーが他の言語に来て、すべてをオブジェクトに詰め込んでいるのを見てきました...彼らは幅広い経験を欠いています。
マチューM.

3
@Andres F.-私がJavaをやっていた12年間で、リソースの割り当て、RAII、gcに優しいアプリケーションのプログラミング方法がわからないなどの問題にまったくさらされていないことを本当に嫌いなJavaプログラマーに出会いました。アセンブリを理解し、自動ガベージサポートなしでOO以外のパラダイム(C、C ++、Ada、またはAlgolファミリーのほぼすべてのコンパイル済み言語)をサポートするコンパイル済み言語を知ることにより、効率的で大規模なシステムをJavaで記述する方法を学習できます。 C#、Python、名前を付けます。さらに、C ++のオブジェクトモデルはJavaに似ていません。
luis.espinal

10

15〜16歳のときにC ++を独学しました。

魔法を他の人に任せて、物事の内なる働きを自分で学ぶほうがよい。


簡単に言えば、エントリーレベルのC ++構文とセマンティクスを理解できない場合、コンピューターはそれほど得意ではありません。そんなに難しくありません。「C with Classes」を避ける正当な理由はありません。

学生がテンプレートメタプログラミングの作業を開始し、多態性の呼び出しを推測し、複数の継承階層のもつれを解くことを期待している場合、どのような種類の言語のエントリレベルクラスにとってもばかげています。

学生にとってプログラミングの複雑さを隠したいという非常に悪い傾向があります。それはうまくいきません(SpolskyのJava Schoolsのエッセイを参照)。それらの人々は、頭をまっすぐにしないと、DailyWTFになります。抽象化がリークし、抽象化がリークする場合(そうでない場合)、それは対処するよりも悪いです。私は入門レベルのC ++学生のTAとして働いてきました。物事をすべて隠しておくか、調べるために光の中に持っていく必要があります。魔法は学習者の敵です。

マシンコードにコンパイルされた開始言語を推奨する必要がある場合は、おそらくPascalバリアントが最適なアプローチでしょう。私が思い出すところから、それはCファミリーよりも規則的で構造化されたアプローチを持っています。


1
@エド:そうでもない。QBASICでIfとGotoを習得しましたが、それはそれに関するものでした。ポインター、配列、関数、クラスなどはすべて私のC ++の将来のものでした。再帰も理解できませんでした。
ポールネイサン

5
待ってください。C++を最初に理解することなく、C ++を使用してプロジェクトに取り組むことを期待する人はいません。それは確かにTheDailyWTFにふさわしいコードにつながるでしょう。しかし、あなたの主張に反して、C ++を学ぶこと簡単ではありません(また、「クラスを持つC」でもありません)。C ++には、巨大で複雑で、時には無意味な構文と文法、そして無限のキーワードとルールがあります。最初は恐ろしい言語です。教育言語としては、C ++の欠陥はプログラミングの世界では自然で避けられないと考えるように学生を条件付けるため、ひどいです。
アンドレスF.

1
Andr:あなたは間違った二分法を主張しています: "〜C ++ or All C ++"。それは間違っています。
ポールネイサン

1
@ポール:結構です。しかし、これを考慮してください:単純化されたC ++の構文と文法でさえ、完全な言語のすべての機能をサポートする必要があるため、複雑です。そのため、たとえより単純な形式で教える場合でも、い言語の使用についてはすでに妥協しています。シンタックスシュガー(別名「C with classes」)を使用してCでコーディングしているだけではないことを前提としています。
アンドレスF.

2
@Andr:そうでもない。C ++は、C89よりも構文を大幅に簡素化します。さらに、エントリー・レベルの目的のために、物事は...すべて私は考えることができる例のために非常に簡単です
ポールネイサン

8

私は「いいえ」と言うだろう-私はプログラミングを学びたいという熱意と欲求を持っていて、すぐにC ++を使って大学の入門年度に入りました。C ++を別の言語であるかのように教えていた教師(言語または現実世界のアプリケーションの概念ではなく、彼らにとって意味のある概念)、および毎週私たちに投げられたプロジェクトと相まって、私はクラッシュして燃えましたクラスの半分。教えられたことを消化し、実験し、適用することさえできるようになるまでに、テストを兼ねたプロジェクトの宿題に苦労しました。私はそれが100よりも200レベルのコースだったと主張します。

本当に頑張りました。私は同情を求めませんでした、それが挑戦になることは知っていましたが、先生は私を助けさえしませんでした。私がやっていたように、教科書を読みに行くように言われました。

私は、RubyまたはPythonが誰かをプログラミングの世界に引き込むためのはるかに優れた言語であると主張します(そして、一部は反対します)。簡潔で読みやすく、明確な構文。


8
ひどく教えられれば、どんな言語も悪い第一言語です。
デビッドソーンリー

3
@David Thornley:ただし、正しく教えられたとしても、一部の言語は第一言語としては適切ではありません。たとえば、Cobol。
アンドレスF.

私は同意します。優れた教師、他の人と関わることに気を配り、電光石火の速さで教材を学習するだけでなく、結果は異なるかもしれないと感じています。私には速すぎました。
ケビン

@AndrésF .:私はそれに反対していません。ただし、Kevinのアカウントは悪い教師に関するものであり、悪い教師はPythonまたはSchemeを第一言語として台無しにすることができます(良い第二言語として私の2人の候補者)。
デビッドソーン

2
@クリス:私はCobolでプログラムを作成しました:)
Andres F.

8

いや

教授言語として、C ++はCに比べてわずかに優れていますが、Cは周りの最悪の教授言語の1つです。前もって多くの複雑さをもたらし、言語の一部は非常に直感的ではなく、ほとんどの場合、プログラミング全般よりもC ++について多くを学んでいます。

それは、C ++(またはC)が悪い言語である、または学習する価値がないと言っているわけではありません。Pythonなどの優れた教育言語が利用できるというだけです。


1
Cは教えるのが難しい言語ですが、間違いなく最悪です。COBOLとJavaは、Cに比べて最悪であり、Cよりはるかに悪いものであると考えています。Cの良い点は、(アセンブラーを掘り下げることなく)事前に内部の金属に対処する必要があることです。人々はCを主要言語として成功裏に教えられてきました。もちろん、PythonやRuby(またはマルチパラダイムであり、最も単純なタスクでもOOを不必要に前面に押し出すことのない任意の言語)など、他のよりエレガントなオプションがあります。Cは最悪の教育の1つではありませんロングショットではなく、選択肢。
luis.espinal

1
わずかに良い?どのように考えますか?C ++は、Cの悪い点すべてを取り入れて構築します
メイソンウィーラー

1
@MasonWheeler:主にC ++が正直ツー神提供しているためstringのようなオーバーロード演算子というデータ型+=およびは、==学生が多かれ少なかれ期待して、文字列したがって、「わずかに」C.で行われる必要があるの処理方法に比べてという事を行うには。教育言語としてもお勧めしません。
ジョンボード

7

中等後教育には、大学と専門学校の2つの必須タイプがあります。違いは、卒業後に何を準備するかです。自動車の分野では、メカニックになるか機械エンジニアになるかが重要です。

とはいえ、C ++は、エンジニアになりたい場合は素晴らしい第一言語であり、メカニックに相当するプログラミングになりたい場合はお粗末な言語です。

C ++のイントロクラスは、データ型、定義、宣言、ポインター、メモリ割り当てなどについて多くの時間を費やします。いくつかの学期を費やして有用なことをできるようにしたいが、そこに着いたらどんな複雑さにも対処できる基盤があることを知りたい場合、これらは素晴らしい基盤です。

一方、何か便利なことをより迅速に行えるようにしたいが、ドメインと複雑さが制限されているかどうかを気にしない場合、それらの低レベルの概念に前もってすべての時間を費やすことは無駄になります。優れたhtmlフォームバリデータを作成できるプログラマーはたくさんいますが、デバイスドライバーの設計方法を知る手掛かりがありません。


5

確かに。私の最初の言語はCでしたが、それは本当にクラスをC ++に簡単にするためでした。大学に着いたら、Javaの処理がずっと簡単になりました。C ++の学習曲線はやや急ですが、適切に教えられていれば問題ありません。


4

いいえ、C ++は第一言語としては適していません。ここに示すように、多くのプロのプログラマーがこの意見を共有していますが、これはプロの教師が持っている意見でもあります。

ここでは何の報告カーネギーメロン大学の学部長からは新入生のためのプログラミングへの入門コースのためのC ++を使用してについて言いたいことがあります。

CやC ++などの標準言語は、その複雑さと欠陥が非公式の推論手法と機械化された推論手法の両方を妨げるため、このコースには適していません。

CMUでは、必須のコースと機能的なコースの2つの入門コースを提供しています。SMLは関数型プログラミングに選択されました。命令型コースに何が選ばれたかはわかりませんが、レポートではCのサブセットを使用することに言及しています。


2

確かに。初年度の学生が把握しやすいかもしれない他の言語があります。ただし、教師がC ++で概念をゆっくりと紹介する方法があります。


2

間違いなくC ++が最初の言語になります。しかし、それはどれだけうまく教えられているかについてです。

誰もが、第一言語は非常に理解しやすいものだと言います。しかし、私のポイントは、ほとんどの人が学部レベルでプログラミングを始めます。ですから、彼らが把握できる何かを教えることができます。また、C ++では、低レベルから高レベルのプログラミングに移行できます。


しかし、より高いレベルのプログラミングから始めてみませんか?これは、ほとんどの問題を解決するレベルです(もちろん、特定のドメイン固有の問題を除きます)。その後、金属に近づく必要がある場合、C ++、アセンブラーなどを学ぶことができます。
Andres F.

私は同意します、それがどれほどうまく教えられているかについてです!
ゲイリーウィロビー

2

いいえ、まったく違います。

私のやり方があったら、ほとんどすべての学問的環境での使用を許可しません。すでに作成されたものとは反対の理由ではなく、C ++(またはそのバリエーション)がほぼすべての問題の答えであると考える人が多すぎるため、ほぼすべての状況で使用できるためです。プログラミングのドライバーです。

一部の人々は、仕事のために完全に合理的なツールであるネジを締めるためにそれを使用します。他の人はそれをプリバーのように使用しますが、多くの場合効果的ですが、父親はあなたが何を言っても、ドライバーはプリバーではなく、シャンクの構成が意図的に構築されていないため、誤用により壊滅的に失敗する可能性があるため、本当に理想的ではありませんプリバーが遭遇するような種類の力のために。さらに他の人はそれをパンチまたはノミとして使用しようとしますが、ドライバーのハンドルはパンチまたはノミが耐えるように設計されているような著しい虐待のために構築されていないため、ほとんど常に問題が発生します。

私の意見では、プログラマーの仕事は一般に、実際の問題をある程度の効率化(タスクへのリソースのコミットメントの減少)、速度(タスクの実行時間の減少)、予測可能性(再現性の向上)を提供する自動化に変換することですタスク)、または組織(タスク間の関係の認識を高めます)。

プログラムを実行するすべての人が、コンピューターの低レベルの操作、特にデバイスIOとメモリ割り当てに関する一般的な知識を持っている必要があることは理解できますが、それを活用することはもちろんのこと、その知識をかなりの程度まで実際に使用しなければならないことは間違いなく珍しいことです大半のタスク。問題のより広い文脈を理解せずにそうしようとすると、努力に不必要なリスクが挿入されます。

Cとその派生物が解決する問題のクラスは、現在および将来の問題の任意の大きな割合に適切ではないため、最初のプログラミング言語はC / C ++または類似のバリアントである必要があります(救助する必要がある場合を除く)以前は、ドライバーを使用したプログラム)、実際には、今後発生する問題のごくわずかなセットです。ほとんどのプログラマーは、相互接続された小型のモバイルデバイスがますます普及しているにもかかわらず、コアOS機能や直接的なデバイスインターフェイスの開発に近づくことはありません。ほとんどが私たちと同じように機能し、生きます。2世代以上前のコードを修正して段階的に廃止し、既に年齢を示しているテクノロジーに実装するか、killer(x + 1)アプリのテクノロジーの周辺で作業します。

最初の言語として、軽量でありながら機能が豊富なLabViewのバリアントであるLego NXTを検討します。Lego NXTは商業ベンチャーでは広く使用されていませんが、「センサーリッチ」な方法でプログラムすることの基本的な性質を示します。JavascriptやTCL / TKのようなプラットフォームに中立なスクリプト言語と組み合わせることもあります。どちらも、非常に基本的かつ効果的なタスクを実行するために発見しなければならないことに関しては比較的影響が少なく、フィードバックループと高いレベルの問題の複雑さを導入および解決する柔軟性の観点から高いリターンがあります。さらに、学生が缶詰環境で提供されるものを超える可能性を探求するための良い機会を提供します:暗闇、湿気、

4シリンダーを自動運転することを学んだ後、大きなv8手動ホットロッドにステップアップします(興味があり、やる気がある場合)。ジョエルが足元の石の下にロックスタープログラマーを見つけられない場合、彼はどこか他の場所を探し続けるか、ツールボックスにたくさんのドライバーが必要な理由を考え直さなければならないかもしれません。


1

初心者がC ++で間違いを犯しやすいいくつかのポイントは次のとおりです。

テストしたい場所に割り当てを行う= vs ==

行方不明;

中括弧の読みやすさと、例えばパスカルの開始-終了

そして、混乱するすべてのインクルードファイル、マクロ、メモリ管理などがあります。

ですから、C ++は最初から最適な言語ではないと思いますが、学習したときに非常に役立つことは間違いありません。

他の人も示唆しているように、C#、Java、またはVBを使用し、構文の強調表示やデバッガーなどを備えた優れたIDEを使用して、エラーからの回復を容易にします。


1

私が大学にいたとき、C ++は大学1年を通して教えられた基礎言語でした。理論としては、複雑なプログラミングの概念がいくつか含まれていたため、それをマスターできれば、他の言語を習得できます。良い基盤として私に役立った。

そうは言っても、私は4年生の間、コア言語をJavaに切り替えるかどうかを決定する委員会に参加しました。いくつかの著名な雇用主や学部の卒業生と話をした後、Javaに切り替えることが学生の最大の関心事であると判断されました。私たちが話していた雇用主は、人々が彼らを雇うために彼らが使っていた言語での経験を持つことを望んでいました。10年経った今でも、彼らはJavaをコア言語として使用していると思います。

同様の注意事項として、私たちは本当に優れたC ++スキルを持つ最近の大学卒業生を数人雇うことを検討しています。見つけることができませんでした。


1

はいと言うでしょう。しかし、どの言語も本当に第一言語になり得ます。C ++は優れていると思います。なぜなら、C ++は複雑で時には難しいことですが、実際に何ができるかを示しているからです(制限は少ない)。また、他の言語を使用する準備を整えるのに役立つオブジェクト指向の設計もあります。

C ++は私の最初の言語であり、嬉しかったです。早い段階でOOPの考え方を考えるようになり、そのことに感謝しています。しかし、最終的に、それは本当にあなたがやりたいことになります。ある言語でうまくいくことができれば、別の言語を拾うのに何の問題も起こらない可能性があるため、言語はそれほど重要ではありません。何をしたいですか?ゲームを作る?携帯電話向けプログラム?それぞれに適したツールと言語があります。


1

C ++は初心者向けの言語ではなく、エキスパート言語です... Java、C#、Pythonではなく、最初にCと言います...なぜですか?Cは、記憶や、すべての言語で「隠されている」ポインタなど、いくつかのトリッキーな概念に注意することを教えていますが、どこにでも存在しています。メモリを時々解放する理由さえ理解していない若い開発者がたくさんいるのを見てきましたが、ガベージコレクターはすべてのコーディングクラップスをきれいにする小さなドワーフではないと考えています。 RAM ...しかし、ガベージコレクターが単にすべてを魔法のようにクリーニングしない理由を理解していません!そして、私はこの種の開発者がC ++でコーディングしているのを見たことがあります(そしてCorbaではさらにクレイジーです)、それは虐殺でした!!!!!!!!!! ですから、Cでコーディングを学び、Python / Java / C#にアクセスしてオブジェクトの概念とすべてのシュガーを学ぶことをお勧めします。それからすべてを理解したら、C ++に行き、C ++の力を感じますが、C ++のすべての危険性と、なぜそれを誰にも使用してはならないのかを発見します;)


1

いや C ++には非常に多くのものがあり、初心者には理解しにくいものです。「すべてのプログラミング言語は同等です」と誤解しないでください。

BasicまたはPascalで開始し(「廃止予定」のものは無視してください)、後でC / C ++ / Java / C#/ Perlで開始します。または、チャンスがある場合は、最初にLogo&Karel、次にBasicまたはPascalを使用します。

PDいくつかの大学と大学にはプログラミング言語の使用法と比較のクラスがあり、たまたまそのクラスを教えていたのです;-)


0

プログラミングの基礎を学ぶために、任意の言語を選択できます。C / C ++で学習しました。しかし、7年後、私の学校ではツール/言語が変更され、java / C#を好みます。言語は単なるツールです。より良くするために必要なのは基本です。たとえば、MITでは、Pythonを使用してアルゴリズムの基礎を学びます。たとえば、JavaはWebプログラミングに適しています。しかし、C / C ++はサービスや高性能アプリケーションに適しています。それはあなたの状況に依存します。


0

「適切」が「可能」を表す場合、はい。「良い」場合、間違いなくいいえ。

C ++を好きになったり、C ++を愛したりすることも可能ですが、そのためにはいくつかの言語を学び、10年ほど腐ったコードベースで作業し、「実際に機能する重要なソフトウェアの作成」の経験を積んでください。C++には魅力があります。

あなたが処女であるとき、最初ではなく、小さくて単純な(しかしおそらく面白くて楽しい)問題をいじります。

私はpythonから始め、その後にSICP(スキーム)、またはそれに似たものが続きます。リバースまたはインターリーブされる可能性があります。それらを使えば、問題に対処することができます。システムと戦う代わりに、深い泥の中を歩き、あらゆる種類の非論理的な癖とその歴史的理由を学びます。

後で、紙袋から抜け出す方法をすでにプログラムできる場合は、ベアメタルに切り替えます。アセンブリの方法といくつかのアーキテクチャ、さらにはKnuthのMixを学びます。メモリ、レジスタ、ALU、キャッシュ、割り込みを理解し、読み取りレベルに到達するためだけに、オペコードを記憶したり、実際に多くのことをしたりするつもりはありません。

その後、その基盤を使用して、C ++などの他の言語に触れることができます。間に「言語の歴史と進化」を追加することをお勧めします。


0

私は中学校でC ++から始めました。私はこの本のコピーを取りました:C ++ How to Program by Deitel and Deitel。この本はとても良いです。

率直に言って、ここには正解も不正解もありませんが、個人的にはC ++が理解可能であることがわかりました。私はそれをOOPまでずっと学びました(「これ」につまずいたのですが、どうやってそれを手に入れることができなかったかはわかりません)。それを試して、落胆しないでください。行き詰まったら、他の言語を調べて、新しい言語を学び続けてください。考え方は、同じ概念を2〜3の異なる形式で見ると、よりよく理解できるようになるということです。私が言ったように、「this」ポインタの概念は私を混乱させましたが、Pythonで同じこと(selfという名前)を見たとき、C ++で理解できたのですぐに意味がありました。多くの大学がJavaを教えることができれば、Javaを学んでください。Pythonかrubyが言語du jourであり、Clojure(および他のすべてのlisps)、Haskell、Scalaのようなよりニッチ/新しいものを探索できるなら、学びましょう。


-1

いいえ。JavaまたはC#から始めます。C ++を学習したい場合は、クラスとは何か、ループとフォーク(if、thenステートメント)の実行方法などの基本を学習した後、おそらく簡単になります。見方を学習することの方がはるかに重要です。問題や数学の方程式とそれをプログラムして、すべてのメモリを解放したかどうかを判断します。


2
Pythonがさらにシンプルなのに、なぜJavaまたはC#なのですか?
デビッド・ソーンリー

-3

この質問の背後にある仮定は、「C ++は非常に複雑に見えるので、16歳の人はそれを最初の(コンピュータープログラミング)言語として選択できるでしょうか?」

私たちが4才か5才になるまでに、母国語のほとんどの構成要素を取り上げます。すばらしい文章を作成するには一生かかります。

C ++は、たとえばほとんどの人間の言語よりもはるかに複雑/複雑ではありません。16歳の方は必ず手に入れることができます。彼らはそれで素晴らしいコードを書くでしょうか?待って見に行きました。


4
人間の言語は複雑な構文を持つ余裕があります。なぜなら、文法やスペルを取得しても、人々はあなたを理解できるからです。コンピュータ言語ではそうではありません。
dan04

-3

初心者は最初に「プログラミング」に感謝する必要があります。初心者のクラスを訓練した私の経験では、彼らは最初に最も理解していることを高く評価しました。PythonとC#のように、Pythonは非常に高レベルであり、C#のように記号を使用しないため、人間の言語に非常に近い、非常に英語なのでPythonを高く評価しています。ですから、プログラミングを高レベルから低レベルまで学ぶことをお勧めします。

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