大学のCSコース用のJavaまたはC ++?


11

私は、CSの学位を取得するために学校に入学するのが苦手です。私が見ている学校は、入門的なソフトウェア開発コース(オブジェクト指向プログラミング、設計パターン、そのようなこと)のためにJavaベースとC ++ベースの両方を実際に提供しています。追跡するトラックは学生が選択しますが、追跡する時間はあります。

あなたが今知っていることを知っていて、あなたに選択があったなら、あなたはJavaまたはC ++でCSカリキュラムの基礎を築くでしょうか?

私の現在の議論は現在次のようになっています。

良い友人(AIの博士号を持っている)は、後で仕事の機会を広げるためだけに、私が何をするかに関係なくJavaをより良い選択肢として売り込んでいますが、彼の仕事はすべてJavaすき)。私は米国マサチューセッツ州ボストンに住んでいますが、JavaとCの仕事量は同じです。

反対に、終了した時点で学位をどうするかについてはまだ完全には決着していませんが、私の好みはMac向けに開発することです。そのため、C ++にはすでにある程度の露出がありますが、Javaを使用していないため、私の仕事で自分のプロジェクトを見ていると、すぐにそれを使用する必要がありません。少なくとも2年。

私はおそらく20年後に学校に戻る大人であることに注意する必要があります(私は現在、どんな種類学位も持っていません)ので、できる限り最大限の機会と時間を費やすことを目指しています。私はC ++に傾いていますが、私はまだあいまいであり、外部の客観的なアドバイスがここで役立ちます。

または、私はそれについて考えすぎているかもしれません。

更新:言語の選択は、当初考えていたほど明確ではなかったことがわかりました。いくつかのコアコースはJavaに焦点を当てていますが、他のコアコースのいくつかは主にCとJavaで動作しますが、他のいくつかは適切な方法でスローされます。実際、私の学期の残りは、JavaとJavascriptで時間を過ごした後、Objective-Cになります。前学期は、C、Javascript、およびPHPに加えて、割り当てが必要になったために投げ込まれた他のいくつかの学期でした。全体がほぼ真ん中に分かれていて、これに対する答えがまだ得られているので、現在、学位の要件をすべて満たすようにカリキュラムを作成しようとしていますが、合理的に処理できる限り多くの言語を吸収しています。これまでのところ、私の成績はこれをしようとして苦しんでいません。


1
アカデミックな研究環境の誰もが今ジャバを称賛しています。また、言語に関係なく、大学から新しい言語を学ぶ方法を学ぶ必要があります。C ++はjavaと同様に存在しますが、5年後にはそうなるという主張はありません。新しい言語/テクノロジーは常に登場しているため、それらを拾い上げ、すぐに慣れる準備をする必要があります。
クリス

1
@Chris:だからこそ、現在人気のあるものではなく、さらなる学習を促進するものを学ぶことが私の推奨事項です。JavaではなくC ++またはPythonをお勧めします(明らかにさまざまな理由から)。
デヴィッドソーンリー

重要なのはその言語ではありません。それは抽象的な概念です。概念を正しく理解して、生徒が後の人生で簡単に何かを学べるようにします。
J-16 SDiZ

1
私は(不気味な)同様の状況にあります。学校から20年離れた後、CSのために学校に戻ることです。私の学校にはJava / C ++スプリットトラックもあります。ここですべてを読み、トップアンサーに+1を与えた後でも、Javaを使用します。あなたに役立つ場合は、ここに理由があります。Web開発(Javascript、PHP、Python)から来ています、したがって、Javaライブラリのサポートはプラスです。また、OOPの原則を実際に把握するために時間をかけると仮定すると、C ++への移行(必要な場合)はそれほど難しくないと思います。Javaは、スクリプトとコンパイルの中間です。
ホレンベックも

2
私はすべての答えに反対すると思います。本当に問題ではありません。あなたは両方の言語で同様の概念を学び、あなたが研究とキャリアを通じて選択しなかった他の言語と他の言語を学びます。
マツマン

回答:


51

Javaの一部が内部でどのように機能するかについての洞察が得られるので、個人的にはC ++を使用します(ポインターなど)。C ++からJavaに移行するのは非常に簡単ですが、逆に移動することはほぼ間違いなく困難です。

Javaエコシステムで本当に難しいのは、膨大な数のフレームワーク、ライブラリなどです。大学ですべてをカバーすることはまずありません。

結局のところ、原則を学ぶ限り、どの言語を選択するかそれほど重要はありません。

私のJUGは、C ++を支持したことで私を殺します;-)


1
Javaエコシステムのサイズと移行の説明に関する優れた点については+1。
ヤコ

1
大学で大きなエコシステムを学ぶことの問題は、それがあなたの職業キャリアを通して役に立たないということです。学習するライブラリの数を減らし、概念を学習するか、実際の言語機能に慣れる方が良いでしょう。
デヴィッドソーンリー

2
C ++のもう1つの利点は、.NET FrameworkでマネージC ++を実行できることです。これにより、そのランタイムでC#、F#、およびその他の言語を学習することができます。JavaにはJVMやScalaのような言語への優れた導入もありますが、私が知っているJVM C ++はありません。
CodexArcanum

彼がC ++(およびJava)にかなりまともだと思うのが好きな人として、私は現代の入門プログラミングコースがC ++であるべきだとは思いません。単純に難しすぎます。大学がC ++をまったく教えていない場合は、必ず進んでください。しかし、はじめに、Javaのようなよりシンプルできれいなものを使用します。多分それらがすべて悪だとは思わなかったなら、動的に型付けされた言語をお勧めしたかもしれません。
ダケリング

Javaが登場する前の数日間は、この選択肢がなく、全員がC ++を学習したため、まだC ++を最初に学習している人々に問題は見られません。JavaのイントロはTurbo Pascalのイントロよりも優れていると思います。
Bratch

18

ここでJavaを提唱しているほとんどの人々に反対する必要があります。C ++を学習すれば、コンピューターとマイクロプロセッサーのアーキテクチャーを勉強していなくても、コンピュータープログラムの動作と動作の方法に関する非常に多くの貴重な洞察が得られます。

Javaを学ぶべきではないことを主張していません(まだC#)。これらは現代の迅速なアプリケーション開発言語であり、巨大なフレームワークが構築されているため、多くの「無料」機能にアクセスできます。抽象化されたファイルアクセスなど。ただし、真のソフトウェアエンジニアは、少なくとも一部のC ++、C、または少なくともアセンブラーを知っている必要があります。

C ++にかなり習熟し、メモリ管理とSTLに自信があれば、Java / C#を簡単に習得できます。


同意します。すでにC ++に習熟している場合のJavaの学習は、すでにJavaに習熟している場合のC ++の学習よりもはるかに簡単になると確信しています。
カーソン63000年

「C ++を十分に使いこなせるようになる」ことの問題は、何年もかかり、OOPのごく一部しか学習しないことです。
ヘンリー

Javaは、迅速なアプリケーション開発言語ではありません。C ++よりも少し高いレベルかもしれませんが、Python、Ruby、Perl、またはVisual Basicの抽象化レベルに近いところはありません。
エヴァンクロスケ

@Evan-はい、Javaは巨大なライブラリ(作業中にJava APIのドキュメントを開いていると一般に言われています)のほかに、手動のメモリ管理を行う必要がない場合、「迅速な」開発言語です。そして、Javaを設計した男は、C ++を使用してどこにも行かなかったために設計しました。さらに、今日展開されているJavaアプリケーションの数が非常に多い(エントリーバリアが低い)ことは、「迅速性」のもう1つの議論です。
Jas

9

Javaを最初の選択肢として提唱する学校や学者は、頭を調べる必要があります(または、単に実際の仕事に就く必要があります)。これは、過去12年間Javaでアプリケーションとシステム開発の両方を行った人として言っています。Javaは教育のための凶悪な言語です。

その理由は次のとおりです。才能がなければ、ほとんどの学生はモジュラープログラミングを理解せずにオブジェクトの方向を把握できます(ほとんどの場合、決してそうしません)。また、手続き型言語の構造化プログラミングを最初に理解しないと、モジュール型プログラミングを理解できません。簡潔でシンプル。このことの証拠は(とりわけ)、OOを3〜40年にわたって知っていたにもかかわらず、人々は実際にハイパースパゲッティを書いているということです。

さらに、gcベースの言語(Javaまたは.NET)のみに依存している人は、実際にはハードウェアに近づくことができません。あなたの全体的な目標が動的なWebページを作成することでない限り、何を推測しますか?あなたは言語に親しむことに慣れる必要があります。

あなたは、CSスクールに行き、バランスのとれたコンピューター科学者およびプログラマーになります(多くのプログラミング言語での実践的なプログラミング実践のかなりのクレジット時間で)。Java(または.NETまたはCまたはPythonはなんでも)あなたは「Javaプログラマー」です(Javaで作業できるプログラマーではなく、「Javaプログラマー」)。そして、それはあなたが「ハンマー大工」または「フィリップスクリュードライバーメカニック」であると言うのと同じくらい理にかなっています。

良い学校では、C(またはPascalやAdaのような他の手続き言語)、C ++、およびアセンブリにさらされ、あなたが3年生または3年生でプロジェクトのキャップストーンコースを追求しながら、自分でJavaを学ぶことができます。また、計算ブロックを引数として渡す概念、副作用のない計算、位置の透過性など(Web上でも実際の実用的なアプリケーションがある)を理解できるように、関数型言語に触れることができます。

セグメンテーション違反とは何かを知る必要があります。ページング、仮想メモリ、そのすべての意味を知る必要があります。モジュール内の問題を分解する方法を知る必要があります(手続き型およびオブジェクト指向ベース)。OOシステムが実際にどのように内部で実装されているかを知る必要があります(そのため、コストを知ることができます)。OO抽象化がどこで壊れているかを知る必要があります。

大規模および小規模の両方で、商業または公共部門のいずれかのために、企業またはシステムレベルのスタッフを実装する非常に低いレベルのいずれかで作業できるバランスのとれたコンピューター科学者になるために、それらすべてを知る必要があります規模。

Javaを唯一の言語として統治するためにJavaを推し進めてきた学者は、業界が本当に必要としていることに関して完全に無知です。無知。許せない無知。それは、遠く離れた業界を見ている象牙の塔で働いているときに起こることです。

彼らは、コンピューターサイエンス部門を、1つのプログラミング言語トリックポニーをかき回す高価な4年制の職業学校に変えました。そして、少なくとも学生に基本的なビジネス/企業/組織のスキルを教えることができればそれは許される可能性があります(つまり、CSファサードを放棄してMISカリキュラムを採用します)。しかし、彼らはそれさえしません。産業、経済、そして最終的には学生に。

「Java Schools」に関するJoel Spolskyの記事を読むことをお勧めします。

http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html

要約すると、手続き型プログラミング言語(CやAdaのような工業用の言語でも、Pascalのような教育に十分な言語)を教えていない場合、C ++(運が良ければ)またはJava / C# (あなたが不運なら)、私は別の学校を探します。現実の世界でかなり長い間Javaを使用している人からの単純明快です。


Java、C、C ++をよく知っていて、あまり昔に卒業しなかった人からは、私は反対しなければなりません。C(またはC ++)VS Java-Javaはずっと簡単です。多分私がC ++で始めたなら(私はかなり素晴らしい(しかし簡単ではない)btw)((Delphi(eww)+)Javaの代わりに) (ただし、たぶん悪いC ++教師がいただけです)。しかし、はい、Javaの内部を理解するためにC ++を学ぶことは非常に貴重です。そして、最近のプログラマーの約95%が「実際にハードウェアに近づかない」と思います。
ダケリング

" C(またはC ++)VS Java-Javaは「より簡単」な方法です。 "-それはよく知られています。しかし、それが私の投稿とどう関係するのか分かりません(?????)
luis.espinal

理解しやすく、教えやすく、習得しやすいため、「Javaは教えるための凶悪な言語」であり、最初にCを習得する必要があることに同意しません(より簡単な手続き型言語でいいかもしれません)。また、CまたはC ++は知っておくのが良いと言っていますが、最初からではありません。この場合、最もハードコアなプログラマー以外はすべて怖がる可能性が高いからです。 C ++を介したプログラミング。筋金入りのプログラマーの世界を気にするわけではありませんが、他の人はそうするかもしれません。はい、あなたバランス取れていると言っています、私はJavaまたは類似のリードを言います。
ダケリング

理解しやすく教えることは、必ずしも教育目的のための適切な言語であるとは限りません。Javaで12年間働いた後、私はこれを確信しています。CやC ++よりも簡単なはるかに優れた教育言語は、たとえばPythonです。または、すべてのメソッドをクラスに強制しない言語、つまり、真にマルチパラダイムである言語です。すべてが「おそらく」オブジェクトであるJava。クラスやパッケージなどを超えてスコープを設定するための優れた代替手段がないなど。適切なモデリングを教える能力が制限されます。
luis.espinal

Javaは、名詞指向のすべてオブジェクトとしてのモードでプログラミングを習得させることにより、実際の世界のモデリングにより適した他のパラダイムの貧弱なモデリングメタフォアを提供します。トレンチのプロの開発者は、その制限を回避できます。学生はそうではなく、私を許しますが、その区別を知るための経験のある大学教授はほとんどいません。C / C ++がハードコアすぎる場合は、JavaではなくPythonまたはRuby(または実際にはLispまたはBASIC)を選択します。
luis.espinal

4

多くはあなたの性格に依存すると思います。少なくとも私の観点からすると、JavaとC ++は根本的に異なる指向を持ち、実質的に異なる種類の人々にアピールします。

簡単に言うと、Javaは実際にはほとんどが大きなクラスライブラリであり、オブジェクトをインスタンス化してそのライブラリからメソッドを呼び出すのに十分な言語を備えています。「Javaの学習」は、ライブラリの内容とその編成方法を記憶する(または少なくとも意識する)ことで構成されるため、必要なときに必要なものを見つけることができます。

C ++は、事前に記述されたコードを提供することをあまり重視しません。ライブラリ(STL 1)が含まれていますが、そのライブラリは、スタイルと一連の原則に関するものよりも、含まれているコードに関するものではありません。「STL」コードとして明確かつ容易に認識できるコードを作成することは、事前に作成されたコードをほとんどまたはまったく使用しなくても、完全に可能です。

言語の使用方法にもかなり大きな違いがあります。Javaは、言語をシンプルに保つことに重点を置いています。これにより、さまざまな方法でJavaコードを操作するツール(リファクタリングなど)を簡単に構築できます。また、リファクタリングには多くの場合、大量のコードの大幅な変更が含まれるため、必要なツールが必要になる傾向があります。

C ++は、多くの C ++ソースコードを操作するためのツールを構築することであることを(とりわけ)手段、より複雑な言語、途方もなく Java用よりも難しいです。そのバランスは、必要性がはるかに低いことです。Javaの数十のファイルに対する数百の変更を伴うリファクタリングジョブは、C ++で単一のテンプレートパラメータを変更することで実現できます。

Javaは、学習しやすいことをより重視しています。C ++は、使いやすさにずっと重点を置いていますが、(残念ながら)自分が何をしているかを本当に知っている場合のみです。

どちらかを支持するつもりはありません。言語についての私の意見は、それぞれに何を期待するかについてのあなたの考えを持っているよりもはるかに関連性が低く、自分に正直に見て、どちらがあなたに適している可能性が高いかを判断します。

1はい、正確ではないことは知っていますが、これが本にならないようにしています...


3

人々がC ++を第一言語として提唱しているとは信じられません!ボイラープレートの作成と、プログラミングの方法を実際に学習するよりも、言語の制限や釣り針を回避しようとすることにほとんどの時間を費やします。

Javaははるかに単純な言語であり、学習の邪魔になりません。

C ++を学習する必要がある場合は、Javaで概念を学習してから、C ++に移動します。Macソフトウェアを作成する場合は、OBJ-Cに移動します。JavaとOBJ-Cはあまり似ていません。

参考までに、私は商用C ++開発者として10年間を過ごしました。


これは私の第一言語ではありません。私は実際に学位を取得するために学校に戻っているプログラマーです。C ++とJavaの経験は限られていますが、CとObjective-Cの経験はあります。しかし、答えてくれてありがとう。
フィリップリーガン

3
Java 学習の邪魔になります。言語に依存しない概念についての完全な非真実を教えます。
DeadMG

2

C ++をお勧めします。Javaのクラスと大学のC ++のクラスがあり、C ++で学んだ言語固有のスキルは、後で追加の言語を学ぶときに役立ちました。さらに、C ++の求人よりも多くのJavaが表示されますが、ほとんどは次のような完全なJavaスタックを探しています。

  • EJB 1.x / 2.0、JNDI、JMS、JTA / JTS、RMI、JDBC、サーブレット、JSP、SAX / DOM、Webサービス、SOAP、WSDL、UDDI、JAXB、JavaMail、WAP、WML、HTML
  • Tomcat、Apache Xalan、Apache Xerces、Jserv、JRun、JBuilder、TogetherJ、Web Logic 5.x / 6.x、Websphere 3.5 / 4

そして、可能性としては、Javaベースのカリキュラムでは、C ++ベースのカリキュラムがそのようなリストに比べてはるかに優れた準備ができません。


1
(少なくとも私の地域では)C ++ジョブはJavaジョブよりもかなり良い(客観的)であり、一般的にはより興味深い(主観的)と付け加えます。
セルセリラ

2

Javaは間違いなく習得しやすいため、困難です。Javaの方が早くなります。

C ++は、使用するのがはるかに難しい言語です。ポインタとメモリ管理は、概念的にも実際的にも扱いにくいものです。C ++はセーフティネットを提供しません。

長期的には、C ++が教えるすべてのことを理解することは有益です。また、C ++からJavaへの移行は、他の方向よりもはるかに簡単です。

しかし、C ++で何かを動作させるために必要な余分なオーバーヘッドとデバッグが、開始時および多くの学位プロジェクト中に実際にプロジェクトを難しくし、納期を満たすのが難しくなり、人生がはるかにイライラするのではないかと思います。C ++とJavaで同じことを実現するために、ほとんどすべての場合、Javaでジョブをより速く処理し、煩わしい問題をより少なくすることができます。あなたが学期の終わりにいて、同じ日にコースの終わりのプロジェクトを必要とする5つのコースがあるとき、それは本当に大したことかもしれません。

その反対は、これらのトライアルが完全にタオルを投げさせない場合、C ++をマスターしていれば、より良いプログラマーになるということです。そして、あなたのキャリアがC#、Java、またはpythonであり、あなたが人生で別のポインターに触れる必要がないなら、あなたはそれをもっともっと感謝するでしょう...


2

C ++はより柔軟性があり、より深い理解を提供します。間違いなく、JavaよりもC ++の方が多く得られます。C ++はより複雑です。

ただし、C ++ジョブはJavaジョブほど一般的ではありません。

Javaとその子孫であるC#は、エンタープライズ/企業のビッグアイアンコーディングスペースの標準ソリューションです。2年目の2つのうちの1つを学び、学位を取得するまでにその1つに非常に慣れることを強くお勧めします。それはあなたがはるかに簡単に仕事を得ることができます。だからといって、それらの仕事が平均して大きな知的関心を持っていると思うわけではありません。私は最近、ロッキー山脈でクレイグリストソフトウェアの仕事を試しましたが、ほとんどの仕事はC#/ Javaであり、「CRUD」ソフトウェアと呼ばれるものに関連していました。とても退屈なIMO。


1

大学レベルでC ++とJavaの両方を教えたので、Javaを強くお勧めします

Javaは学習プロセスを支援し、優れたプログラミング動作を促進します。Javaの組み込みライブラリは便利で、インストールするたびに簡単に利用できます。すべてのJavaインストールで利用可能な組み込みライブラリを使用して、学生がGoogle検索で見つけたすべてのチュートリアルに一致するGUIアプリを1つの文で作成できることは、学生が言語を超えてプログラミングの概念を理解するのを助けるために重要です。

JavaのIDEは、初級と継続の両方の学生をサポートします。強力なリファクタリングツールを早期に会話に取り入れることで(たとえば、OOPについて話し合いながら)、学生は保守可能なコードを書くことを学ぶことができます。

C ++は知っておくと便利な言語ですが、C ++で学習した追加の概念は、言語全体の余分な努力に値するものではありません。後で導入することができる多くの追加の「落とし穴」を教えておく必要があります(メモリ管理の問題とバッファオーバーフローはいくつか挙げます)。アルゴリズムの複雑さや継承などの概念に進む前にこれらを理解することを生徒に要求すると速度が低下します。運転する前にドライバーがタイヤの空気圧を理解する必要があるため、ドライバーズエドが遅くなります。確かに、あなたはそれを知る必要があります。しかし、あなたは、より大きな概念の構成要素としてではなく、いつか間違いを起こすものとしてそれを知る必要があるだけです。


2
バッファオーバーフローとメモリ管理で深刻な問題が発生した場合、C ++を間違って教えていることになります。バッファのようにオーバーフローできる標準コンテナはどれですか?
デビッドソーンリー

配列?実際、私はC ++を間違って教えているかもしれません。これは10年以上も前のことです。
アレックスファインマン

0

自問すべき大きな質問は、優れたプログラマーになりたいのか、コンピューターサイエンスに集中したいのか、ということです。CSが目標であり、PHDルートを利用したい場合は、おそらくJavaが最適です。Javaは、多くの事前作成されたデータ構造とアルゴリズムを持つJavaコレクションクラスを提供します。これの利点は2つあります。1つ目は、データ構造とアルゴリズムをいじって、それらがどのように構築されるかを心配する前に、それらが何をするかを見ることができることです。第二に、これにより教授は、核心を心配することなく、データ構造を使用するCSの原則を教える機会が増えます。後で戻って、生徒に最初から構造を作成させることができます。

一方、C ++は低レベルの言語です。ポインターとガベージコレクションを検討する必要があります。学習曲線は少し急ですが、最終的に外部フレームワークを使用したプログラミングの道を見つけると、隠された魔法に頼っているような気分になりません。さらに、多くの大企業はまだC ++を使用しています。JavaからC ++への移行は、C ++からJavaへの移行よりも困難です。


現在、私の目標はソフトウェア開発に専念することなので、より良いプログラマーになります。この時点での広範囲にわたる学術的追求にはあまり興味がありません。
フィリップリーガン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.