なぜ多くの機関でJavaが共通語なのですか?[閉まっている]


22

編集:この質問は、最初はJavaをバッシングしているように見えますが、この時点では少し推測されます。しかし、私がやろうとしているより大きなポイントは、すべての問題に対するすべての解決策として単一の言語が選択される理由です。Javaはたまたま使用されているものなので、ここで勝つ必要がありましたが、Javaを意図的に新しいものに引き裂いているわけではありません:)

私はほとんどのアカデミックな環境でJavaが好きではありません。言語自体が悪いと言っているわけではありません。いくつかの非常に望ましい側面があり、最も重要なことは、ほとんどのプラットフォームで再コンパイルせずに実行できることです。Your Next App ^ TMの言語の使用に問題はありません。(私が個人的にすることではありませんが、それはデザインが貧弱であるというよりも、経験が少ないためです)

Javaを言語として使用して高レベルのCSコースを教えるのは無駄だと思います。私の同級生の多くは、ゴミ収集されていない世界で働く方法を知らないので、気にする価値のあるプログラムを作成できません。彼らはプログラミングの対象となるマシンを基本的に理解していません。誰かがガベージコレクトされた世界の外で働くことができるとき、彼らはその内部で働くことができますが、その逆はできません。GCは松葉杖ではなくツールです。しかし、コンピュータサイエンスの学生に教えるために使用される方法は、松葉杖のようなものです。

コンピューターサイエンスは、単一の言語に合わせた一連のコース全体を教えるべきではありません。学生は、すべての優れたデザインは慣用的なJavaデザインであり、オブジェクト指向デザインは物事を成し遂げる唯一の方法であるという考えを持ち帰ります。卒業生に機械の理解を深めるために、少なくとも1つはガベージコレクション言語ではない他の言語を教育に使用する必要があります。

尊敬されている機関のCSのPHDを持つ人が、紙袋から抜け出す方法をプログラムできないのは恥ずかしいことです。

さらに悪いことに、実際に物事がどのように機能するかを理解しているCS教授と話をすると、彼らはこのような感情を共有し、Javaですべてを行うことによって生徒に害を与えているということです。(他の言語に置き換えた場合、上記は同じになることに注意してください。一般的に、Java自体ではなく単一の言語を使用することが問題です)

全体として、私はもはやどのような学位も尊重することはできないと感じています-私の周りの人々がフィズバズの問題から抜け出す方法をプログラムできるのを見ることができないとき。

なぜ/どのようにしてこのようになったのですか?


9
心配しないで。オラクルに半分のチャンスを与えると、彼らは状況を改善します:) AndroidとApacheに対する彼らの訴訟は、開発者を追い払うことの始まりに過ぎません。私は、将来の市場を見越して、上記をPythonの教育を開始する手がかりとしてとらえた機関で教えています。
サムグッド

3
あなたはどの学問的な環境に言及していますか?私は、CSciの学生が1つの言語のみを学習することを期待されている場所を知らない。(私が最後に学校にいたとき、CとSchemeでうまくいくことができたと思います。専攻とクラスを注意深く選んだなら、少なくとも2つの異なる言語を使用していると思います。)
David Thornley

16
L1キャッシュの仕組みを説明できますか?ALUを設計できますか?マックスウェルの方程式を説明できますか?マザーボードの熱力学的特性はどうですか?USBドライブを構築できますか?あなたのコンピューターの仕組みを本当に知っていますか?それとも、あなたの興味に合った抽象化のレベルを選んでそこから行きましたか?
MetricSystem

5
「プログラミング対象のマシンを基本的に理解する」ためにメモリ管理を理解する必要があると判断するのは、完全にarbitrary意的なレベルです。興味のある問題を理解する必要がない場合は、興味のあることを勉強するのに時間を費やすことがよくあります(すべてを学ぶのに十分な時間がないため)。そして、Javaプログラマーがメモリ管理を学ぶ必要がある理由についてあなたが提示した議論は、誰もが原子物理学を知り、何かを「理解」するまで無限に拡張できます。
MetricSystem

7
さらに、だれかがここでストローマンの議論を持っているのなら、それはあなたです。Javaをプログラミング言語としてのみ提示する単一のCSプログラムを聞いたことがないのです。
MetricSystem

回答:


30

これはJavaの問題ではなく、教育の問題です。プログラミング方法がわからないことは言語の問題ではなく、学生の問題です。同じことが、すべての問題、GC、基本的な機械の知識、いわば「内部」での動作についても言えます。

ガベージコレクションについてのあなたの大きな不満は私を少し投げます。CまたはC ++のガベージコレクションを実行している場合を除き、通常は問題なく非常に優れています。あなたはむしろ彼ら全員が集会を学びますか?厳格な高レベル言語は教育に非常に役立ちます。必要に応じて、ライブラリ、パッケージ、その他の優れた柔軟性を提供します。他のほとんどの高レベル言語(PHP、Ruby、Python、Perl)に存在する混乱した言語「砂糖」はありません。


5
高レベルの言語を教えるべきではないと言っているのではありません。しかし、CまたはFortranまたは他のシステムプログラミング言語のオーダーの下位レベルも教えられるべきだと言っています。(Cよりも低くなると、そのレベル以下で学習したものが単一のマシンアーキテクチャに固有になるため、あまり有用ではありません)。私はすべてのCS卒業生が素晴らしい低レベルのプログラマーであるべきだと言っているのではありません。しかし、低レベルの問題に直面した場合、私の周りのすべての学生がそうであるように、彼らは飛び散って死んではいけないと言っています。
ビリーONeal

3
@ビリー:最初の学習レベルより低くなるのは難しいです。私はC ++ / Cコードを見て、頭を包むのに少し楽しい時間を過ごしています。奇跡を期待しないでください、しかし天使も期待しないでください。プログラマは、問題のレベルに関係なくすべての人が非常に迅速に「スパッタして死ぬ」ことを欠いているため、ドライブが必要です。
ジョシュK

5
@ジョシュ:結構ですが、少なくとも 1つの他のプログラミング環境へのIMHOの正式な露出は、CS学位を取得するために必要なはずです。学位は、「Javaを理解している」とは言わず、「CSを理解している」と言っています。この2つは同じではなく、Java(または、そのためには、任意の言語)だけを使用してCSを完全に理解することはできません。(BTW、+ 1)
ビリーONeal

2
@JoshK:低レベルでデバッグできず、作成したコードの意味について適切に推論する能力が大幅に低下します。
メイソンウィーラー

1
Javaを学んだだけで、ポインターを使用する必要があるためC ++またはCに怖がっているプログラマーを知っています。ポインターでプログラムできない人が本当のプログラマーと見なされるかどうかはわかりません:結局のところ、すべての最新のコンピューターとランタイムは、レジスター、メインメモリ、スタック、ヒープを含む基本的なアーキテクチャに基づいています。ですから、私はC ++よりもJavaでプログラミングすることを好みます(メモリ管理について気にする必要がない場合は、間違いなく作業を完了させる方が簡単です)。
ジョルジオ

12

大学は本当にこれを行っていますか?または、これは、悪い就職面接の候補者を得るときに人々が得る単なる認識ですか?

私は4年前にCSの学位を取得しましたが、イントロクラスでJavaが使用されていましたが、その後は特に強調されませんでした。私の頭から離れて、コア必須のコースでは、Java、C、C ++、SML(関数型プログラミング言語)、アセンブリ、MATLAB、CAST(回路記述言語)を学ぶ必要がありました。これは、数学と理論のすべてのCSコースを考慮しているわけではありません。もちろん、さらに多くの選択肢にさらされている半ダースの選択的CSコースも考慮していません。多くの異なる大学で友人と話をすることから、彼らがやっていることは大きく異なるとは思えませんでした。

Javaのみを教えている大学がある場合、それは実際に悲劇です。Javaが悪いからではなく、Javaがプログラマが利用できる多くのツールの1つにすぎないからです。Javaのみを知っている開発者は、ハンマーの使用方法のみを知っている大工と同等です。しかし、少なくとも尊敬されている大学にとっては、そうだとは信じられません。これは、候補者自身の意欲/動機/好奇心/プロ意識などが欠如しているのではなく、悪い候補を見つけて、候補者の無能さを学校に責めているという認識に過ぎないと思う。


2
同意した。数年前に卒業したばかりで、ほとんどのクラスはJavaを使って教えられていましたが、CまたはC ++を使って教えられたクラスを受講せずに卒業することは困難でした。また、Haskellの使用を強調するプログラミング言語コースもありました。
ミパディ

私の学位では、最初にPascalを実行し、次にOO言語としてJavaを実行しました。しかし、過去2年目には、教授の90%があなたが使用した言語を気にしませんでした。私たちの中にはc / c ++ / ruby​​ / C#/ python / even haskellを使用した人もいましたが、ほとんどの人は自分の知っているJavaに固執していました。assembly / c / c ++を使用して必要なコースはほんの一握り、つまりopenglの3Dグラフィック(オプション)コースのc / c ++がかなり強化されています。そして明らかに、基本的なシステムコースは、SPARCアセンブリを強制しました(意図的に作業し、低レベルだったためです)。しかし、彼らは1年目でpython / c ++に移行したと聞きました
。...-アレン

11

これが多くの学校の状況であることに本当に驚いています。CSの学位を取得したとき、一連の言語コースがあり、その間に人気のあるすべての言語(ほぼ40年前)が含まれています:アセンブラー(Univac 1108およびMIX)、FORTRAN IV、SNOBOL4、COBOL、Lisp 、およびAlgol68。1つの言語だけが教えられているとは想像できません。または、アセンブラープログラムを何も作成せずにコンパイラーが何をしなければならないかをどのように評価できるか。

ほとんどのデータおよびアルゴリズムコースでAlgolおよびFORTRANを使用しました。Lispでもっと時間を過ごしたいと思っていましたが、代わりに紹介だけをして、いくつかの概念を再学習しようとしています。パーサーの記述にはSNOBOL4を使用しました。バックトラッキングとのパターンマッチングは、多くの現代言語に含まれる正規表現ライブラリを後の作業に使用するための優れた基盤を構築しました。

半ダースの言語へのこの紹介は、それ以来ずっと続いている私の興味を引き起こしました。


8

本当の理由を知るには、それらの機関を運営している人々に尋ねる必要があります(それでも彼らはあなたに話さないかもしれません)。

考えられるいくつかの理由(そして私はここで誰かを擁護したり非難したりしていない、ただ推測している):

Javaで物事を成し遂げることができます

Javaは汎用言語であるため、多くの問題を解決するために使用できます。

多くの教師がJavaを理解しています

理解できない言語を教えるのは難しい

Javaは人気があります

つまり、書籍、活発なコミュニティ、コードライブラリなど、Javaリソースがたくさんあるということです。

Javaは簡単です

Javaを行うために、多くの低レベルのものや理論を理解する必要はありません。あなたはそれをうまくやらないかもしれませんが、少なくともあなたは物事を成し遂げることができます。

Javaは普及しています

多かれ少なかれ何でも実行できます。

Javaプログラマー向けの仕事があります

Javaを必要とする多くの仕事があります-教師は学生を現実の世界に準備することになっています。

時間が限られています

多くのコースでは、複数の言語、理論、低レベルの概念などを教える時間はありません。

それは学生が望むものです

多くの学生がすでにJavaのことを聞いています(そしてJavaを使用しさえしています)。慣れているから好きです。


6

それが業界が求めたものです。Java開発者が不足していたため、学校はJava開発者を作成し始めました。企業は、ドアを通り抜けるとすぐに作業を開始できる開発者を獲得しました。

とにかく、言語は重要ではありません。彼らは非GC言語を教えることができ、それでも悪いプログラマーを生み出します。学校が使用する語学は実装の詳細です。学校は概念を教えるべきです。これが当てはまらない場合、問題となっているのは学校であり、彼らが教える言語ではありません。誰かがポインターが何であるかを知らないからといって、彼らが効果的なプログラマーになれないというわけではありません。

とにかくGCは未来への道です。


4
ポインタが何であるかを知る必要はありません。ただし、概念を比較的迅速に理解できる必要があります。ポインター、またはポインターに類似した概念を理解しないことは、コンピューターサイエンス全体の理解不足を示しています。すべてのCS卒業生が素晴らしい低レベルのプログラマーである必要があるとは言っていませんが、少なくとも4年制大学の学位を取得したときに何が起こっているかを概念的に理解する必要があると言っています。
ビリーONeal

1
CSはプログラミングに関するものではありません。
ハビエル

1
@Javier:CS プログラミングではないのですか?確かに、CSのブランチである「理論的コンピューターサイエンス」は、プログラミングに関するものではありませんが、大部分プログラミングに関するものです。
ビリーONeal

1
@Billy ONeal:ウィキペディアの定義は少し長いですが、プログラミングに最も近い部分は「それらの実装のための実用的なテクニックの研究」です。それはそれは、実装(プログラミング)についてではありません、ですが、実装技術(アルゴリズム、構造、言語、など)勉強
ハビエル

1
@Javier:「プログラミングの研究」と「プログラミングの行動」は同じものだと思います。結局、コードは書かれているよりもずっと頻繁に読み取られます。しかし、それはポイントです-あなたがCS学位を取得したとき、あなたがやろうとしていることはプログラミングです。
ビリーONeal

4

怠azineと利益の動機。Javaを使用すると、ほとんどの人は80%、20%の労力を費やします。ただし、これにより、何が起こっているのかを深く理解しておらず、高レベルのツールよりも深く掘り下げることができない「monkey see monkey do」ブードゥーコーダーが作成されることがよくあります。

C / C ++を適切に教えることは困難です。うまくできたとしても、ポインターのような低レベルの概念を完全に理解していない人はかなりいます(これに関する研究があります)。さらに、雇用市場にすぐに関連するようには見えません。


2
しかし、yuoがポインターを理解していれば、参照をはるかに簡単に理解できます。
マイケルK

3

私はほとんど同意しますが、ある程度です。

データ構造またはアルゴリズムに焦点を当てたCSコースを教える場合。不要なもののほとんどを邪魔にならないようにすることは良いことです。高レベルの概念を学習するときに、低レベルのスタッフに対処するために学生を無駄にしないでください。

一方、低レベルのものも教えられるべきです。そのため、より万能なプログラマーを獲得しています。


私は単一のコースについて話しているのではありません。単一のコースでは、それで問題ありません。カリキュラム全体ではそうではありません。
ビリーONeal

3

いつものように、を教えたいの、どれだけ時間をかけなければならないのという問題です。

Javaで処理を行うと、浮遊ポインターとfree / mallocを扱う必要がなくなります。これは、見つけにくいバグがかなり少ないことを意味します。

これは、基礎となるマシンについて学ぶべきではないことを意味するものではありません-それはあなたが取引に優れている必要があります-しかし、おそらくあなたは仕事に適したツールを選択する必要があるということです。高レベルのアルゴリズムは、おそらくアセンブラーコースに最適なトピックではありません。


プログラミング入門コースまたはデータ構造コースの場合、Javaで十分です。ただし、4年間のカリキュラム全体ではありません。
ビリーONeal

@ビリー。同意した。Javaを使用することで、心配する必要のないものを購入できることをお伝えしました。Javaを使用しない他のコースで基本を学ぶ必要があります。

2

コンピュータが実際にどのように機能するかについて彼らに何かを教えてもらうように頼むのは多すぎるのでしょうか?CSコースのアウトラインにオペレーティングシステムやコンピューターアーキテクチャのようなものが含まれていないことは、私には意味がありません。封筒の裏にあるコンピューターを設計できるはずだと言っているわけではありませんが、一般的な概要ではすべての言語を適切に扱います。つまり、Javaは仮想マシンで実行されます!


1
ですが良いコンピュータサイエンスプログラムしていない OSのコースとコンピュータの編成コースがありますか?
ミパディ

私は確かにそうではないことを願っています!
マイケルK

0

正直に言って、私はあなたがすべての学位に対する敬意を失うべきだとは思いません。特に、CSではなく、教えられる言語はJavaだけです。

まともなコンプ。サイの学生は、自分のCS学位は単なる紙に過ぎず、実際の知識は個人的なプロジェクトや個人的な学習から得られることを理解しています。優秀な学生は、Cを知り、Linux / Unixで物事を成し遂げる方法を学び、現代の言語で手を握らないようにする方法を学ぶ必要があることを知っていると思います。


-1

Javaの使用に問題はありません。あなたが言ったように、最大​​の問題は、大学がすべての問題を解決するための最良かつ唯一の方法として命令型プログラミングを教えることです。これは真実とはかけ離れています。たとえば、3つの異なるコースで3つの命令型言語(または最悪の場合は同じ言語)を使用する代わりに、3つの異なるプログラミングパラダイムを使用する必要があります。例は、Java(命令型)、Prolog(宣言型)、およびHaskell(関数型)です。

これが起こる理由については、(1)政治-議長は心を開いておらず、個人的な利益/スポンサーを持っているわけではありません。


-1

グランドラピッズミのカルバン大学。入門的なプログラミングクラスのためにJavaからPythonに切り替えた後、不信感の教授は、学期の終わり近くに私たちのグループに、「彼らの多くは実際にプログラムできます。すごいです」と言いました。彼の驚きは、以前のJavaの経験とは対照的でした。これはJavaを悪い言語にせず、一から手に入れるのが難しいだけです。私は、C、C ++、またはメモリ割り当てスキームまたはタイプの詳細な知識を必要とする言語についても同じことを主張します。


1
うーん、Pythonには、あなたが言及した他の言語と同じように、型に関する親密な知識が必要です。
ビリーONeal

生徒はコンパイルごとにコンパイルするのではなく、ステートメントごとにフィードバックステートメントを取得できるため、インタープリターを使用した言語ははるかに簡単に学習できると思います。
ケビンクライン

@BillyONealあなたは私を読み違えました、コンテキストは私の最後の文のメモリ割り当てでした。str()またはdict()またはtuple()またはlist()またはset()の要素のサイズや数についてはまだ心配していません...それらを単に「使用」しています。
ベンデモット

@kevinclineありがとうケビン-これは私が理解しようとしていたことでした。私は私のコミュニケーションスキルを仕事に必要downvotesから判断;)
ベン・デモット

-2

コンピューターシステムエンジニアリングの学位を取得したので、アセンブリ、マイクロプロセッサ、VHDL、論理ゲートとは何か、それらからフリップフロップを作成する方法、電気回路、オペアンプ、ローパスフィルター、振幅を研究しましたモジュレーションは、電話のキーパッドのように聞こえるラボに回路を構築し、ロジックアナライザを台無しにして、いくつかの物理学のクラスを取りました。Linux側では、以前にカーネルを再コンパイルし、小さなデバイスドライバーと宿題ファイルシステムを作成しました。

しかし、その後、私はより多くの高レベルのものがより好きであることに気づきました。CよりPythonが好きです。C#が好きで、ガベージコレクターが大好きです。私は数学とアルゴリズムとデータ構造が好きですが、私はポインターの特定のファンではありません-それらを台無しにすることができます。私はただしたくない。

ですから、大学はより多くのC言語を教え、Javaを教えるべきではないと思います。他の誰かが、Schemeですべてを教えるべきだと考えています。Spolskyは両方を使用します。

はい、大学の学位は単なる一枚の紙ですが、「学校教育があなたの教育の妨げにならないようにする」ことは事実です。ウィキペディア、スタックオーバーフロー、Coursera.orgなどが常に存在します。従来の大学はそれほど重要ではなくなるようです。

もし私がすべての学部で学べるなら、別の学校に行っていたでしょう。電気工学は勉強していませんでしたが、物理学とフランス語の数学、CS +マイナーを勉強していました。フランス語のスクラッチ; スイスに留学して、5つの自然言語を学んでいたはずです。私はまた戻って、大学で経済学のクラスのイントロを実際の世界で生き残り、ミルトン・フリードマンの本のコレクションで頭を打つために絶対に必要だと確信した人を見つけます私が読んだ経済学のテーマに関する本は吸わない)。また、Freakonomics 1という本やPerl言語に関する本にお金を払うつもりはありません。

後から考えると、私は多くのことを違うやり方でやっていただろう。私が今できること、そしてこれをお勧めすることは、あなた自身の冒険を選ぶことです:http : //www.codinghorror.com/blog/2008/03/choosing-your-own-adventure.html

後知恵さえあれば、今では株式市場で1,000億ドルを稼いでいて、それを癌研究に投資して、科学者を雇って世界のプラスチック廃棄物をなくしたでしょう。中東での戦争が3年以上前になるように、ロンポールキャンペーンに十分な現金を寄付していたでしょう。

時間を取り戻せないことを今すぐ認識し、賢明に過ごすようにしてください。


Downvoters、詳しく説明してください。
仕事

-2

数年前、私はどこかで、英国ではより多くの学生をプログラミングに誘うというJavaの決定が下されたことを読みました。どうやら、厄介なポインターやメモリ管理などが不足しているため、脳にとっては簡単だったようです。これが、Pythonが新しい「学習ツール」として急速に採用されている理由だと思います。私は、あなたの典型的なユニコースはあなたをプログラマーにするつもりはないと考えています。目的は、ある程度の知識を身につけ、プログラミングの準備を整えることだけです。プログラマーと自称できる日は、一般的にuniの後にかなりの時間が来ます。その時が来たら、ポインター、ガベージコレクション、OOP以外のプログラミングパラダイムは問題になりません。


-2

Javaが使用される理由

3つの理由:

  1. JavaはCスタイルの構文を使用します。多くのプログラマーはこれに精通しているため、学習曲線を短縮します。

  2. Javaをクールでモダンなものとして売り込むためにお金が費やされました。しかし、lispと比較すると、javaは石器時代に生きています。

  3. JVM。JVMは、マーケティングの誇大広告だけでなく、正当なJavaの優れた点の1つです。JVMはプログラムを実行するためのプラットフォームとして賞賛されるべきですが、それ自体はJava言語の存在に値しません。JVM用に多くの異なる言語を理論的および実用的にコンパイルできます。


1
ようこそ。Stack Exchange Programmersへの最初の投稿かもしれません。評判に関する質問、質問の回答、回答については、faqページProgrammers.stackexchange.com/faqをご覧ください。重要な点は、答えは挑発的なものではなく、有益なものでなければならないということです。Javaが石器時代であり、Lispが現代的であるという主張をした場合、その理由を説明してください。多くの読者は、Lispが1958年に指定され、FORTRANよりもわずかに若いことを知っているかもしれません。FORTRANまたはAlgolと共有されているJavaについて何かがその設計を推進し、それを制限していると言いたいなら、それを記述してください。
DeveloperDon

-3

あなたの質問は、Javaは非常にクールであるが科学計算には十分ではないという論文を書いた別の人の発見を支持しています。彼は、Big Decimalをそのすべての精密な精度、NANなどで使用し、それに取り組むべきだと思います。

自動ゴミ収集の世界にのみ住みたい。より健康的で、よりきれいで、よりきれいで、美的で、医療費に浪費されるお金を防ぎます-望ましくないものとしてタグ付けする必要はありません-単にそれを参照解除するか、nullに設定するか、範囲外に移動すると自動的に取得されますガベージコレクション用にタグ付け

わかりました、今私はJavaだけについて話していますが、これが実際のゴミのシナリオでも機能するなら、それは最も役に立ちます。Javaは一度実行すればどこでも実行でき、学校で言語として使用するのに十分です。メモリリークがなく、使用するすべてのオブジェクトのタグ付けに時間を費やしたくないプログラマーに好かれることは、Javaを代表する優れたロジックです。

Javaにはポインターがあります-それを参照と呼びます。String s1 = "Hello"; 文字列s2 = "Hello"; 文字列s3 = new String( "Hello");

s1とs2は同じ文字列オブジェクトを指します-これは参照によりs1 == s2、s1.equals(s3)ですが、s3は新しい参照オブジェクトであるためs1 == s3はfalseです-これは参照とIのjava算術ですこれをすべて理解して申し訳ありませんが、CまたはC ++からのポインター演算の複雑さを理解していない人としてラベル付けされたくありません。


2
参照はポインターではありません。それらを算術的に使用することはできません。また、それらが指すメモリの一部を再解釈するために使用することもできません。そしてもちろん、あなたがどれだけゴミ収集の世界に住みたいとしても、問題の事実は世界がゴミ収集の世界ではないということです。Javaが悪い言語だとか、人々がjavaを使うべきではないと言っているのではありません。あなたがそれを好めば、それを使用して、それについて素晴らしいものがあります。新しいプログラマーが理解するのに不可欠なものを隠すため、初心者言語としては不適切だと思います。
ビリーONeal
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.