多くの場合、C ++が大学で最初の言語として教えられるのはなぜですか?[閉まっている]


12

私の学校は、C ++プログラミングコースでコンピューターサイエンスのカリキュラムを開始しています。つまり、これは多くの学生が学ぶ最初の言語です。

私は、多くの人がC ++を嫌うのを見てきました。その理由はさまざまです。C ++はあまり良い言語ではないというのが、一般的な意見のようです。StackExchangeに関するいくつかの質問と次のような投稿に基づいて、あまり好かれていない印象を受けます:
http ://damienkatz.net/2004/08/why-c-sucks.html
http://blogs.kde.org/ node / 2298
http://blogs.cio.com/esther_schindler/linus_torvalds_why_c_sucks
http://www.dacris.com/blog/2010/02/16/why-c-sucks-part-2/
など

(注:C ++が悪い言語であるというのは私の意見ではありません。実際、C ++は私が使用する主要言語です。しかし、インターネットや一部の教授は、C ++はあまり好きではないという印象を与えています。 、私の教授の一人は常にC ++に耳を傾けていますが、それでも私の大学ではまだ最初の言語です!)

それを念頭に置いて、なぜこれが多くの学校で最初の言語が教えられているのですか?C ++でプログラミングカリキュラムを開始する理由は何ですか?

注:この質問は「C ++は第一言語として適していますか」と似ていますが、それが適しているかどうかには興味がありませんが、なぜ選ばれたのかは少し異なります。


6
どの学校とどこですか?私の近くにいるすべての人(町に3人、車で数時間以内に数人)は、Javaを第一言語として教えています。C ++は、過去1〜2年で導入されます(受講者が受講するコースによって異なります)。少なくとも過去10年間は​​そうでした。
FrustratedWithFormsDesigner

7
教授は、適度に合理的な好き嫌いがあるだけで、他のプログラマーと似ています。同時に、彼らは経験不足の学生のようです。
マイクダンラベイ

@Caseyここでは、C ++が嫌いであると主張するだけで、正当化する理由はないため、ここで他のユーザーとの摩擦に遭遇するでしょう。大学でC ++が選ばれた理由を見つけることだけに焦点を合わせている場合、それがあなたの実際の質問とはほとんど関係ないので、好きか嫌いかの参考文献を編集することを強くお勧めします。
アダムリア

4
初年度は、小麦をch殻から分離することがすべてです。
スティーブンエバーズ

2
です /大学が彼らの入門コースのために何の言語を使用してどのように多くの大学に関するいくつかの統計情報を持っていることは興味深いです。
ジェリーコフィン

回答:


25

すべての言語には、恋人と憎しみのカルト的支持者がいます。これは、C ++、Java、C#、Haskell、Objective-Cなどすべてに当てはまります。

言語を好きまたは嫌う多くの正当な理由があります。

最後に、C ++が主に大学で教えられている理由はいくつかあります。

  • Cの上に構築されます。したがって、CからC ++への移行はそれほど苦痛ではありません。かなりの数の大学がC ++の前にCを教えています(IMOにはかなりの意味があります)。

  • 業界で最も人気のある言語の1つです(Java、モバイル開発、Web開発などで変化し始めていますが、まだそこにあります)

  • アカデミック(研究)目的のためにアカデミックによって書かれた言語です。そのため、多くの教授が日常的に使用しており、それに精通しているため、コースの内容を明確に選択できます。

それを「悪い」言語として却下するのを急ぐな。それに飛び込み、実際に学び、それを使用して中規模から大規模のプロジェクトを構築することをお勧めします。次に、他の言語でも同じことを行います。その時点で、「X、Y、Zが原因でC ++が悪いと思う」または「JavaにはないA、B、Cが原因でC ++が良いと思う」という十分な経験と洞察が得られます。

あなたはまだ学ぶべきことがたくさんあります、若いバッタ。


2
「悪いのは主観的」という哲学に昇格する場合、「悪い」言語ではないかもしれませんが、技術的な懸念のほぼすべての組み合わせに対して、より生産的で安全な言語があります。私の意見では、C ++が教えられる理由は、それが人々が使用するものであり、それが人々が知っていることであり、大学が教えるものだから人々が知っているからです。人気は別として、C ++には目に見える実質的なメリットはなく、プロとしてプログラミングしています。
weberc2

13

簡単に言えば、それはあなたの手を握らないので非常に良い教育言語です。手動変速機で運転することを学ぶ人は、自動で初めて問題を起こすことはほとんどありませんが、その逆は当てはまりません。学ぶのに時間がかかりますが、大学では何か役に立つものを作らなければならない前に、4年間練習するおもちゃプログラムがあります。


9
私は、この誤った例えが非常に多くの賛成票を集めているという事実に心配しています。これは学習の仕組みではありません。教授法に関する多くの誤解の1つ。
コンラッドルドルフ

12
C++ isn't that bad. 

学校で教えられていることは、通常、教授が知っていること、および業界で使用されていて当時人気があったことによって決まります。

学校を過去のタイムカプセルと考えてください。:)

私は本当にそれが逆であったことを望みます。


非常に賢明なポイント!私は大学でスマートポインターやRTTIまたはRAIIの演習を行いませんでした。WTF!
チャニ

12

英語は非常に悪い、ハッキングされた、一貫性のない言語とも言われていますが、ここの周りの多くの人がそれを知っているので、私の両親と教師は私にそれを教えるのは良い考えだと決めました。

C ++でも同じだと思います。それは多くの人が知っている言語なので、基本的な流encyさを得る価値があります。

また、ハードウェアレベルで何が行われているかを実際に感じられるように低レベルであるという利点もあります。

最後に、他の一部の言語(Java-Oracleや.NET-MSなど)が抱える「商業的な」問題はありません。多くの大学が、ある特定の企業の製品を別の企業の製品よりも教えることで非難されたくないことを知っています。


1
C ++が商用言語ではない場合は+1。政治やビジネスの戦術を心配せずに言語を学ぶのは良いことです。<LinuxにJava7をインストールする例>
Chani

5

C ++が非常に悪い場合、日常生活で使用するほとんどのソフトウェア製品がC ++で書かれていることをどのように説明しますか?

1年目から大学でC ++を学ぶ理由はいくつかあります。

  • 主に使用されます。既存のコードベースは巨大で、Ruby、Python、C#などの言語が存在する今でも、Webサイト用など、アプリケーションをゼロから作成する場合でもC ++が多く使用されています。この場合、C ++の学習が適切な選択です。少なくとも、宇宙船用のアプリケーションを開発しない限り、Adaを学ぶのに2年間を費やすよりも良いもの、つまり、あなたが人生で決して使用しないものです。

  • 抽象的ではありません。たとえば、C#またはJavaのみを学習した場合、ポインターとは何かを生徒にどのように説明できますか?

  • これは、たとえばPHPと比較して十分に困難です。それは、プログラミングのために作られていない学生がすぐに去ることを意味し、それほど悪くはなく、学生がソフトウェア開発が彼のためではないことを理解する前に2、3年無駄にすることを避けます。

これにより、C ++はAda、Java、PHPよりも適切になります。


1
Cは2番目の2つのポイントの方が良いようです。エイダを教える学校はありますか?私は間違いなくそれをC ++に引き継ぐでしょうが、それからまた変です!
ジェッティ

C ++は、技術的な懸念のためではなく、より多くの人々が知っているものであるため、商用製品に選択されています。C ++は、多くの現代言語に比べて安全ではなく、使いにくい言語です。言語はそのメリットで選択されるのではなく、人気があるためです。
weberc2

さらに、AdaがC ++よりも悪いことはあまり考えられません。C++よりもずっと使いたいです(とにかく私のコードはよりシンプルで安全です)。また、生徒にポインターについて教えるために、常にAda、Go、またはいくつかの正気な言語のいずれかがあります。最後の点に関して、C ++は不必要に難しいです。C ++プログラマーが直面する問題の多くは、プログラミングとは関係ありませんが、C ++の克服とは関係ありません。あらゆるレベルでのプログラミングは、正気の言語ではかなり簡単です。
weberc2

5

一般的に、C ++を習得してマスターできれば、他のほとんどの言語を習得してマスターできます。それが嫌いな理由は、それを熟知し、リリース時間を短縮するためには、言語とその標準ライブラリに精通している必要があるからです。

ただし、Javaなどの言語では、言語/標準ライブラリの入出力についての高度な知識のみで、展開にかかる時間を短縮できます。地獄、私はJavaの標準ライブラリから5つのことだけを心から知っています(もちろんコレクションのような基本的なものから)。

とはいえ、C ++は、速度とオブジェクト指向の方法論の優れた組み合わせにより、依然として広く使用されている言語です。多くの人が完全なOOPではないと信じていますが、完全な狂信者になることを強いることなく、OOPの柔軟性の大部分をあなたに与えると信じています。ほとんどのコンパイラでは、純粋なCを作成することもできます。

選択肢があれば、いつでもJavaでC ++を使用することになりますが、それはただの私です。一般的に言って、Javaは、Javaインタプリタが組み込まれているほとんどすべてのアーキテクチャで実行されるため、便利です。そのため、複数のプラットフォームでサポートする必要があるクライアントアプリケーションの場合、それは仕事に最適なツールと見なされ、ほとんどの新しいアプリケーションはWebベースです。


オブジェクトコードには当てはまらないかもしれませんが、当時のC ++を含むC言語の約束は、ほぼすべてのプラットフォームにコンパイラーがあるため、同じソースコードを使用してさまざまなプラットフォームのアプリケーションをコンパイルできることでした。
JohnFx

それは事実です。ほとんどの* NIXプラットフォームにはコンパイラが組み込まれており、「確かに、そのコンパイラをダウンロードできますが、これは私のOSに付属しているので、間違いなく最高です」という形で、ほとんどの人に心理的な影響を与える傾向があります。

Java以外の言語も試してみてください。両方の長所を生かす代替手段があります。たとえば、Goは速度、移植性、およびシンプルさを提供し、同時実行を簡単します。
weberc2

4

私の教授の何人かが私に言ったように、下から、または低いレベルから始めて、それからあなたの方法を上に上げる方が簡単です。C ++のような言語は、コンピューター科学者であることの本当の意味についての優れた入門書となります。Java、Python、Rubyなどのような魅力的な言語ではないかもしれませんが、ポインターやメモリ管理などの重要なプログラム機能について中核的な理解を得ることができます。それがあなたがあなたの残りの人生のためにあなたが計画したり、使用したい言語でなくても、あなたがあなたの希望するプログラミング経路を見つけ始めたとき、あなたは何年も後に感謝します。


これは、C ++ではなくAdaの議論のように聞こえます
...-weberc2

3

C ++は、初心者レベルのコンソールプログラムにとって最も単純な言語の1つです。確かに言語は複雑ですが、手続き型サブセットに集中できます。ポインターの存在はかなり長い間無視できます。シンプルなものから始めて、ビルドすることができます。

最初の「hello world」プログラムを起動して実行するための「fluff」構文は、javaまたはC#と比較して少ないです。初心者は、Hello Worldアプリの「静的」という単語を見なければなりませんか?java / C#ではそうです。


3

私がコンピューターサイエンスを学んだとき、Javaが最初に考えられましたが、私の大学は今、計算言語学者に最初のPrologとC ++の2つの言語を教えています。

C ++は(少なくとも)次の理由で教えられます。

  • これは汎用言語であり、任意のオペレーティングシステム用のソフトウェアを作成できます(多くのコンパイラが存在するため)。優れたプロダクション言語になるように設計されており、プログラムパーツの再利用、実際のハードウェアやソフトウェアとの相互運用などが容易になります。

  • 本当に速いです。PythonやScheme、Prologを使用して巨大なデータセットを処理することはできません。数百万のノードを持つグラフアルゴリズムを考えてください。(それが、コンピューターゲームが通常C ++で書かれている理由でもあります。)

  • 学生はコンパイラが何をするかを学ぶことができます。実際、Javaを学んだだけ(高校時代から)、コンパイラの作業は常に魔法のように思えました。Java初心者としては、スタックとヒープ、静的リンクと動的リンクの全体などについては学習しません。C ++はコンピューター全体の神秘を解きます。

  • それができることについては、学習時間に問題はありません(ただし、実際に掘り下げた場合、おそらく最も複雑な言語の1つです)。スムーズな学習曲線を支援する素晴らしいライブラリを提供します。(ただし、それに対するさまざまなアプローチがあります。私の大学では、ライブラリの使用を許可される前に独自の文字列クラスとスマートポインタの作成方法を教えられました。C++の発明者Bjarne Stroustrupは、逆の順序を推奨します。)


これは、たとえばAdaが第一言語として教えられない理由を説明しません。
weberc2

2

C / C ++は、実際には他のほとんどの言語よりも優れた言語です。これは、第一に、誤った安心感を加えないためです。第二に、あなたは自分が何をしているかを知っているからです。

私は実際にこの言語が大好きで、ほとんどの代替言語よりも優れていると思います。

また、他のほとんどの言語と同じくらい生産的であり、自分が何をしているのかを知っていて、ランダムコードをコピーして貼り付ける前に考えれば、「ひどい」ものではありません。

また、よく読んでください-http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html

ただし、例外など、C ++の一部は実際には悪いものであり、場合によっては直感的でないオーバーヘッドが発生します。これが、あなたが引用した投稿でLinusがそれについてとても否定的である理由です。

関連トピックの1つに触れるのに良い読み物-http://blogs.msdn.com/b/oldnewthing/archive/2004/04/22/118161.aspx


3
この答えはまったく間違っています。何よりもまず、「C / C ++」と呼ばれる言語がないためです。
コンラッドルドルフ

1
  1. 教授は新しいコースを準備することを好みません。また、提供できる金額には制限があります。
  2. 言語は行き来するため、最先端に留まることをあきらめました(#1を参照)
  3. 大学であり、専門学校ではありません。職業訓練よりも基礎の提供により重点を置いています。
  4. サーバー、デスクトップ、組み込み、UNIX、Windowsなど、十分な範囲のプログラミングをカバーしています。
  5. 彼らはそれを草取りコースとして使用します。すべての主要な研究分野には少なくとも1つがあります。

1

以前はパスカルがあり、以前はパスカルが似たようなベーシックでした。興味深い部分は-次は何ですか?たぶん何もない。「なぜc ++」なのかがわかります。難しいのですが、同じように難しいことではありません。いいえ、C ++はシステムプログラミングに適した言語であることを本当に理解しています。C++でコード化されたプロジェクトがたくさんあり、学生がそれを使ってすべてを作成できるライブラリがたくさんあることを知っています。しかし、私たちは学生と彼らが論理を作成し、システムを理解する可能性について話している。単純なロジックを作成できず、システムがどのように機能するかを理解できない場合、優れたC ++コーダーにはなれません。それが私の意見の主な理由です。そして、もう1つの単純な理由は、安定したキャリアの開始です。

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