Javaは学界でよく見られます。その背後にある理由は何ですか?
Javaは学界でよく見られます。その背後にある理由は何ですか?
回答:
いくつかの大学は十分に多くの(そうでない場合はほとんどの)決定は、たとえばなどその人の好き、嫌い、意見、味、ちょうどを中心に展開することが知られています誰かが、テキサスA&Mは、スタッフにビャーネ・ストロヴストルップを持っている持っています。おそらく、カリキュラムがC ++を重視する傾向があることは、誰にとっても驚くことではありません。
しかし、ほとんどの大学は少し異なります。第一に、多くの場合、決定は学生よりも教員の利益のために行われます。多くの場合、単一の最大の基準は「どの言語が私たちの側で最も労力を必要としませんか?」です。彼らのほとんどは怠にも注意を払っています-高度な概念を最も少ない言語で習得するだけでなく、(たとえば)革新、更新、または新しいものを受け入れるのが最も遅い言語も求めています。
第二に、ほとんどの決定は委員会によって行われます。これは、最終決定が誰も実際に望んでいたことはめったにないことを意味します-委員会の最も少数のメンバー(特に最も影響力のあるメンバー)が特に好ましくないと判断したものです。アイスクリームの味を選ぶようなものです。一つは本当にイチゴが好きですが、もう一つはイチゴにアレルギーがあります。別の人はチョコレートが大好きですが、他の人はそれを我慢できません。さらに別の人は、ラムレーズンは素晴らしいと考えていますが、「ラム」に言及する他の2つの心配は、アルコール乱用を助長するものと解釈されるため、バニラになります。
最後に、通常は前の2つの基準が単独で生成するもののほとんどとは正反対に実行されますが、通常は業界のニーズに対応していると見なされる必要があります。
Javaは、次の3つの共通部分です。
私が実際に言っているのではないことに注意してください(たとえば)、Javaについて知っておくべきことは、OOPとは何かという最も基本的な概念以外にありません-それだけが、それを教えるのに受け入れられる仕事に合格するために必要なことです。
私はJavaが登場する直前の90年代前半にコンピューターサイエンスを学びました。教授が従ったアプローチは次のとおりです。
初年度:Pascalのプログラミングとアルゴリズムに関する入門コース。パスカルを選ぶ理由 それは、ハッキングの設備なしでプログラミングの概念を教えるために設計されたクリーンな言語だからです。もちろん、当時の最も人気のある言語はCであり、人気が高まっている新しい言語であるC ++があることを学生は知っていました。そのため、私たちは常にこれらの言語を読んで議論し、自分たちでそれらを使用して小さなプロジェクトを行っていました。そのため、授業ではクラスで真剣な理論(Pascal)を行い、自宅ではハッキングの方法を学びます(C)。:-)
2年目には、オペレーティングシステムコースを開催しました。このコースでは、Cおよびアセンブリの演習を行うように依頼されました。教授は、Cの完全なコース(ほんの数回のレッスン)を提供しませんでした。これは、(1)初年度にプログラミングのコースをすでに受講しており、(2)プログラミングの概念を知っているすべてのコンピューター科学者は、本を読んで、新しいプログラミング言語を学ぶことができます。コースは非常にスムーズに進み、Cとアセンブリは自分で学習したり、廊下で他の学生と話し合ったりする実用的なトピックであるが、コースを作成する価値はないことがわかった。
3年目にはプログラミング言語のコースがあり、プログラミング言語のさまざまなパラダイム(命令型、機能型、論理型、オブジェクト指向)を研究し、一般的な概念と実装技術を学び、主要なプログラミング言語を修正しました(パスカル、 C、Modula2、Simula、Lisp、C ++、Prolog)。コースの始めに私たちの教授が私たちに言ったことは、コースの終わりに知っているプログラミング言語の数ではなく、あなたが学んだすべての一般的な概念、その方法について考えることによってこのコースを評価すべきではないということでした互いに関連し、それらが何のためにあるのか、どの言語でどのように使用されるのか。次に、特定の言語を学ぶことは、本を読んだり、既存のコードを調べたり、特定のプロジェクトでそれを使用しようとしたりするだけです。
このアプローチは非常に適切かつ効果的であることがわかりました。大学は優秀なプログラマーを養成することを目指すべきではなく、むしろプログラミングとプログラミング言語を理解することを可能にする良い知識を与えることを目指していると思います。優れたプログラマーになることは、その副作用として生じるだけです。Adaで本格的なプログラミングをしたことがないのに、Adaが必要な仕事に応募することを考えています。
Javaを教えるという問題に戻ります。Javaは十分に中立であり、業界の世界にも近い言語を使用してプログラミングの原理を説明できるため、Javaは教育によく使用されると思います。
個人的には、Java /オブジェクト指向言語で緊密に統合されている制御構造とデータ構造を区別できるため、最初のコースではまだPascalまたは同様の言語を使用します。したがって、私の意見では、Pascalはプログラミングの基本概念をより緩やかに紹介できるようになるでしょう。
また、コンピューター科学者(および優れたプログラマー)は、スタック、ヒープ、パラメーターの受け渡し、メモリ割り当て、ポインターなどの基本的なメカニズム/ランタイム構造、または組み込み機能を使用せずに抽象データ型を実装する方法について知っておく必要があります言語(リスト、セットなど)。Javaはこのことの多くをプログラマーから取り去ります(もちろんそれは良いことですが)が、初心者はこれらのことについて学ぶ必要があります。おそらく、Javaでの最初のプログラミングコースの後、プログラミング言語の概念に関するより一般的なコースを受講する必要があります。
これは私の経験と意見です。
Javaが登場したとき、私は学校にいました。そして、私の大学は一晩でほとんど変わりました。学界では、人々はジャバで正気を失っていた。私はそれが発表されたとき、私はジュニアでした、そして、私のシニア年までに、ほとんどすべての学界は彼らのカリキュラムを変えるためにすぐに動いていました。私の大学だけでなく、どこでも。本当に速かった。2つ目のイントロコースはPascalで、1年も経たないうちにすぐにJavaに変換されました。なぜ彼らはそんなに速く変換したのですか?2つの大きな理由。
ある学者は、理論とアルゴリズムを教えたいと思っています。操作に多くの経験を必要としないこれらのアルゴリズムの学習を容易にする言語は、Scheme、Python、Java、Smalltalkなどが最適です。当時、スクリプト言語は、安価または迅速で汚いという雇用主から眉をひそめられた二流市民でした。学者は彼らをより模写猫と見ていましたが、雇用主が望むものは学者にも影響を与えました。
それが次の理由につながります。雇用主は特定の言語経験を望んでおり、当時はC / C ++でした。しかし、C / C ++は学ぶために多くの経験を必要とし、多くのコーナーケースと、気を散らすものがあるかどうかを調べます。私たちはC / C ++でコースを学びましたが、下位レベルでは学びませんでした。当時、学生はC / C ++の第一人者として出てこなかったため、雇用主はCSプログラムに怒っていました。
Javaは、学界とほぼ同じ速さで業界を席巻していました。ついに学界は彼らが望むものを手に入れていました。習得しやすく、雇用主が望んでいた高水準言語。完璧すぎる。私が退学してから3年後に友人に学界に戻ってもらい、彼はあなたがすべてのCS科目でJavaの本を見つけることができると言った。これが、Javaが学界を引き継ぐ速さです。
個人的には、JavaがCSを馬鹿にしていないと思います。学生はCSを勉強し、オープンソースに参加し、学校にいながら仕事を見つけることができるので、実際に良いことだと思います。私はまだCSの学生として多くの言語を勉強すべきだと信じています。それはJavaだけではありません。しかし、彼らがすべてpythonを使用している場合、Joelもpythonを嫌います。
以下のようないくつかの理由があります。
同じ理由の多くでC#を教える多くの学校があることに注意してください。さらに多くの理由があり、それらのいくつかは個々の学校に特有のものです。本質的に、Javaは、昨年のオブジェクト指向の「BASIC」になりました。
*
構文がない場合がありますが、ポインターの基本的な理解なしに使用するのは非常に困難です。
私はジョエル・スポルスキーの「ジャワの学校の危険」と題された投稿が好きです。Berin Loristchは、それがカリキュラムを単純化し、実世界にも適用できることについて正しいと思います。
「コンピューターサイエンスの学位はプログラミングを学ぶ学位ではなく、理論を学ぶことです」と何度も言われたことがあります。理論が学習されている限り、言語は必ずしも重要である必要はありません(邪魔することはありませんが)。Javaは比較的使いやすい言語であり、すべての背後にある理論の学習により多くの時間を費やすことができます。これが、MITがSchemeを使用する理由の1つです(だから聞いたことがあります)。
上記の回答の多くは良いものですが、何かを省いています。
Javaはマルチプラットフォーム言語です。1人の学生は自分のMac、もう1人は彼女のPC、もう1人は彼女の学生Unixアカウントを使用できます。同じコードで同じことができます。教師と学校のIT部門の両方がサポートするのがどれほど簡単かを考えてください。
これは、Javaが登場したときのJavaの真の重要性でした。ジョークは「一度コーディングすれば、どこでもデバッグできる」というものでしたが、実際にはハードウェアとオペレーティングシステムを式から外します。
少しの背景
私たちの学校で提供されている唯一のJavaクラスを受講しました。これは90年代後半から2000年初頭でした。Javaは成長していましたが、ほとんど離陸していませんでした。Cでの多くの開発から来て、Javaを起動して実行するために必要なすべての定型コードに少しイライラしていました。私は自分の仕事に集中できませんでした。「open」でファイルを開くことができませんでした。クラスを定義してから、インポートなどを定義する必要がありました。
私はコンピューターエンジニアリングだったので、最初にアセンブリプログラミング、次にC、次にC ++、Scheme、そしてその1つのJavaコースを受講しました。ほとんどはC指向の学校プログラムでした。アルゴリズムクラスはCを使用して教えられました。
業界に入ったとき、Javaが明らかに支配的なプレーヤーでした。バックエンドCOBOLシステムからJava Webビジネスアプリケーションへの変換中の唯一のプレーヤーだったのかもしれません。Javaは、2000年初頭にビジネスの世界で大きな進歩を遂げました。
同時に、私はすべてのJavaフレームワークを知っていませんでしたが、Java環境にコーディングして適応させる方法を知っていました。優れたJavaコーディング標準に関するトレーニングコースを受講した場合、おそらく、より良いJavaスタイルまたはJavaエコシステムの知識から始めることができたでしょう。
振り返ってみると、それは重要ではないと思います。
あなたの質問に答えるために:なぜ大学でJavaを勉強するのですか?
Javaは教えられるべきですが、すべてのコースで使用されるべきではありません。
コンピューターサイエンスを学んでいるなら、大学のある時点でJavaを学ぶべきです。ビジネスの世界で人気があります。JavaとC#を学ぶ必要があります。Javaをプログラミング入門コースとして絶対に教えません。また、Javaはすべてのコースで使用される主要な言語であってはなりません。
Java批判について:
Javaは多くの批判を受けており、常にそうです。私は、Javaについて疑問符の付いた「Javaはエンタープライズに対応していますか?」というJava雑誌を読んでいます。Javaプラットフォームは依然として広く使用されているプラットフォームです。ただし、ほとんどの一般的なプログラミングタスクでは、Javaは正常に機能します。また、Javaの使用に大きな問題はありません。スキルセットを傷つけることはありません。その下で何が起こるのかを学習せずに、Javaライブラリーだけに依存している場合があります。しかし、Javaはいかなる種類の脳損傷も引き起こしません(一部の開発者は実際にこれを真実だと信じています)。
さらに、開発者がCまたはC ++を攻撃しないのはなぜですか?または、少なくともC ++。命令型プログラミングのパラダイムは非常に似ています。そして、私はC ++でwebappを書くことを決して考えませんが、Javaを使うかもしれません。
カリキュラムの設定方法は次のとおりです。
カリキュラムにリストした言語はかなり一般的です。多くの学校が問題なく複数の言語を教えています。業界では、多くの異なるプログラミング言語を使用します。聞いたこともない言語を使用します。
学校でのJavaのトピックは、Javaから完全に保護したい場合や、Javaのみを教えたい場合を除き、問題ではありません。どちらの場合も、学校は不当です。
(申し訳ありませんが、Ruby言語)
申し訳ありませんが、退屈な答えのみ:
(1)もしかして:
「なぜ最初のプログラミング言語として大学でJavaを勉強するのですか?」
(2)または、どういう意味ですか:
「とにかく、Javaの前に他のプログラミング言語を学んだとしても、大学でJavaを勉強するのはなぜですか?」
あなたは本当に両方の質問を意味しているように聞こえます。
(1)の場合:
Java(または.NET C#とVisual Basic)を最初のプログラミング言語として教えるべきではないと思います。古くて時代遅れに聞こえても、Structured&Modular Pascalが最初になります。
多くの人々は、「誇大広告」または「トレンド」という理由だけで、オブジェクト指向プログラミングまたは関数型プログラミングを人々に教えるべきだと考えています。
Structured Pascalは、類似したものとしてではなく、「オブジェクト指向プログラミング」の小さなバージョンとして学びます。構造化プログラムは、単一の小さなオブジェクトと見なされます。
その後、関数型言語とObject Pascalを継続することをお勧めします。
その後、C、C ++、C#、VB.Net、Java。
JavaやC#が最初のプログラミング言語として好きではない主な理由は、「ポインター」、「オブジェクトへのポインター」、「オブジェクト」自体(「参照」)の概念が混在していることです。
学生は、これらの概念の違いと類似点に留意する必要があると思います。JavaでのStringsオブジェクトの比較は、その奇妙な好例です。
String A = "Mars";
String A = "Venus";
// pointer comparison or object comparison ???
if (A == B)
{
DoSomething();
}
(2)の場合:
JavaまたはC#は、いくつかの更新された優れた機能を備えており、同時に実際に使用されるため、学校で教えるべきだと思います。
コンピューターサイエンスを学んでいるなら、大学のある時点でJavaを学ぶべきです。ビジネスの世界で人気があります。JavaとC#を学ぶ必要があります。Javaをプログラミング入門コースとして絶対に教えません。また、Javaはすべてのコースで使用される主要な言語であってはなりません。
私はこれ以上異議を唱えることはできません。Javaは私の大学の言語であり、私の学校のCS&Eプログラムに参加するために必要な言語でした。Javaは非常に簡単に教えることができます。なぜなら、「プログラマではない人」が学べる特定の概念に自分自身を制限できるからです。
また、Javaを入門的なプログラミングコースとして絶対に教えるかどうかもわかりません。あなたは基本的に絶対に教えてはいけないと言った?
単純な理由はすでに説明されています。Javaにはライセンス料はありません。基本的なテストエディターを使用して教えることができます。確かに間違った理由で使用されます。
私は以前の答えに反対します。Javaは学生にそれを「間抜け」にさせず、C ++の配列やリストのような現実的に単純な概念に問題があるとき、それは本当に示されます。
CからJavaへの切り替えは、間違った時に起こりました。
2000年頃。私は大学の最後のCクラスにいました。
C ++の機能は多すぎて、初心者を混乱させません。(そして、まだあります。そして、いくつか追加する予定です。)
.NETは十分に成熟しておらず、今日よりもさらに高価でした。
Objective Cは古く、Appleの使用法はレーダーの下を飛んでいました(iPhoneがありませんでした)
これらの答えが実際に私の視点をカバーしていないので、ここに答えを追加する必要があります。
私は趣味のプログラマーです。「コンピューター」と「プログラミング」に関しては、私は時代を先取りしていました。私は学部卒業-学士-2007年、修士2年後-2009年に修了しました。アセンブリ、QuickBASIC、C、C ++、Java、PHP、Perl、Python、BASHスクリプト、Javascript、COBOLなどの多数の言語を扱ってきました。 。
プログラミングを学生に教えるために使用される言語である私見は、私たちが現在住んでいる時間の指標です。たとえば、1980年代には、アセンブリは低レベル言語でしたが、Cは高レベル言語と見なされていました。
1990年代に、C ++、Java、Perlおよびそのような言語は、主にCよりもレベルが高く、迅速な開発原則を具体化したため、重要性を獲得しました。そのため、CSの学生にアセンブリを教えるのをやめ、アルゴリズムを表現する方法としてCを教えました。Cが低レベルの言語であると見なされ、アルゴリズムの本質を効果的かつ「システム」のノウハウをあまり多く取り入れることができないと考えられている過去10年間でゆっくりと変化しました。これは実際には非常に重要です。CSカリキュラムの焦点は実用的というよりも「理論的」である必要があり、誰かがアルゴリズムを書きたいと思うたびに、メモリ割り当てとポインタ演算で行き詰まってしまうと、どこでも。
マスターズCSプログラムに参加している場合でも、学生がシステムレベルのアプリケーションをプログラムできるようにする必要のある特定の「システム」要件(米国では少なくともこれは米国の大学と大差ないはずです)を完了する必要があります。特定のケースでは、カーネルレベルのハッキングと同じくらい深く、実際に要件を満たします。だから、Cはあるもののません学校で教えられている事実上の言語で、SystemsやHigh Performance Computingまたはそのようなニッチに特化したいのであれば適切です。
また、別の点について言及したいのですが、Javaのような言語はそのような制約について少しリラックスしている一方で、Cは物事を正しくするために多くの規律を必要とします。これにより、RA / TAがGDBを起動して学生のプログラムをデバッグする必要なく、コースを実施しやすくなります。
それの大部分は、それが業界で使用されていることだと思います。
私のCSプログラムには、地元のハイテク企業や航空宇宙企業の上級スタッフで構成される産業諮問委員会があり、カリキュラムに多くの情報を提供していました。イントロCSクラスは、私が始めた年(1986年)にCを支持してPascalを落としました。同様に、地元の航空宇宙企業がDoD作業にAdaを使用しなければならなかったため、いくつかの高レベルのコースでAdaを教えるようにプッシュされました。
Javaは現在、特にAndroidデバイスが離陸しつつある今、かなり遍在しています。それは教訓的な観点からは嫌ですが、Cもそうでした。
彼らはより少ない学生がコースを失敗することを望んでいるので、それはそれ自体が失敗です、私見。少なくともここで大学の学位を真剣に受け止めている人がほとんどいない理由の一つかもしれません。
Javaは単純すぎる言語であり、PCに限られたリソースパラダイムがあることを教えません。同時に、「抽象化の別のレイヤーで解決できないものは何もない」という考え方を強制します。
はい、OOPの概念とおもちゃの問題には適していますが、間違った角度から問題にアプローチすることを教えています。ここにきちんとした構造を使用し、残りをねじ込みます。
しかし、学界はAI、OWL、その他の玩具技術について夢を見ていることで知られています。彼らがそのようなことを研究し続けている間に、誰かがそこに驚くべき何かを発明することもありますが、良い開発者になりたいのなら、それを独立して学ばなければなりません。