Java を学ぶと、みんな簡単だと言います。
ウィスコンシン大学マディソン校のコンピューター サイエンス学部を卒業したばかりの大学生として、私はいくつかのプログラミング コースを通じて Java を使用する多くの友人に会いました。多くの学校は現在、他のプログラミング言語 (主に C++) から Java の教育に切り替えています。2014 年 7 月に実施された調査によると、調査時点で、米国の上位 39 の CS プログラムのうち 22 がすでに入門として Java を使用していました。コース。
それでは、Java が多くの教育言語の中で際立っている理由は何でしょうか?あらゆる面から見て、いくつかのヒントが見つかりました:
構文は比較的単純で (C 言語や C++ と比較して)、難しい問題はほとんどありません (C 言語や C++ と比較して)。構文が単純であればあるほど、初心者が習得する必要があるルールが少なくなります。これは初心者にとって間違いなく利点です。
C や C++ などの一部の従来の教育オプションと比較して、Java は多くの操作が自動的にチェックされるため、エラーが発生しにくくなります。アクセスしたい配列がその境界を超えた場合、または null オブジェクトを使用して例外がスローされた場合、プログラムは、何が問題で、どこで問題が発生したかを、優れたスタック トレースで通知します (問題の原因を直接絞り込みます)。ファイル)。対照的に、C 言語と C++ では、null ポインターにアクセスすると、プログラムは警告なしに爆弾のように爆発し、有用なプロンプト情報がまったく得られなくなります (デバッガーで実行している場合を除く)。念のためデバッガーを使用してください)。そして、C 言語と C++ の配列が境界を越えると、多くの場合、メモリ内の配列要素の値が不可解にも上書きされる可能性があるため、さらに悲劇的になります。そうなると、あなたは呆然とし、このクラッシュするプログラムに対処することがまったくできなくなります。これは間違いなくプログラマーを毎分夢中にさせるリズムです。
ガベージ コレクターがあるということは、メモリを自分で管理する必要がないことを意味します。 new キーワードを使用してオブジェクトが作成されると、そのオブジェクトは (どこかで参照されている限り) メモリ内に永久に残ります。このオブジェクトを使用した後、ガベージ コレクターがこのオブジェクトをクリーンアップします。
Java は産業界で広く使用されているため、理論上、学校で学んだことは実際の仕事に直接応用できます。 TIOBE プログラミング インデックスでは、2 番目によく使用されているプログラミング言語としてランク付けされています。 TIOBE の正確な分析に同意するかどうかは別として、Java が広く使用されている現状には同意する必要があります。
Java はオブジェクト指向です。データを含むオブジェクトを作成し、そのデータに作用する動作を記述するメソッドを作成します。
上記はとても美しいですね!しかし、それは完全ではありません。
迂回戦略
ほぼすべてのプログラマーが言語で作成する最初のプログラムは「Hello World」です。実行するのは、何らかのメッセージ (伝統的には「Hello World」が選択されています) を表示して終了するだけで、非常に簡単です。以下は、Java で書かれた Hello World プログラムです:
public class Hello { public static void main(String[] args) { System.out.println("hello, world"); } }
プログラミングにまったく慣れていない人の中には疑問を持つ人もいるでしょう。そして、あなたが教師であれば、ふふふ、問題が起きるでしょう。生徒に一度にすべてを説明しようとすると、らくだの腰を折る藁になる可能性があるため、より回りくどいアプローチをとるほうがよいでしょう。
「すみません、パブリックとはどういう意味ですか?」 - これについては今考える必要はありません。後ほど詳しく説明します。
「クラスとは何ですか?」 - これについては今考える必要はありません。後で詳しく説明します。
「静的とはどういう意味ですか?」 - これについては今考える必要はありません。後ほど詳しく説明します。
…待てよ、それは言えるよ。
しかし、どのような内容を教えても、消化しやすく理解しやすいコンポーネントに分割する必要があることは言及する価値があります。カプセル化 (パブリック キーワード)、オブジェクト指向プログラミング (クラスと静的)、配列 (String[])、コマンド ライン パラメーター (args) などの重要な知識を学生にタイムリーに説明する必要があります。もちろん、まだプログラミングの啓蒙段階にある新入生にとって、一口で大太りになれると考えるのは突飛すぎる。私は他の分野で間違いなくリーダーである友人をたくさん知っていますが、彼らはプログラミングの概念の問題に遭遇すると、すぐに圧倒されてしまいます。これは代数学に突然導入されたようなものです:
これらの記号の意味がわかれば、理解することはそれほど難しくないようです。しかし、この分野に携わり始めたばかりの新入生にとって、これは言葉のないバイブルに他なりません。また、迂回戦略は生徒を勇気づけ、すぐに挫折しないようにするものの、見方を変えると、その原理を分析・説明することなく、表面的に「魔法のような」効果を示すだけである。しかし、あなたが本当の教師として成長したいのであれば、このアプローチはあなたの哲学に完全に反するべきだと私は言います。たとえば、Hello World、
Java は厳密にオブジェクト指向であり、すべての関数 (Java 用語では「メソッド」) をクラスに配置する必要があります。優れた記事『名詞の王国における処刑』をまだ読んでいない場合は、ぜひ読むことをお勧めします。その主な内容は、「オブジェクト指向プログラミングを提唱することは、ゲストのために服を仕立てることに似ている」と要約できます。 if ステートメントや for ループなどの概念にまだ混乱している新入生にオブジェクト指向の設計原則を説明するのは間違った判断です。作業を関数として記述できる小さな部分に分割することに集中してから、OOP とは何かに戻ります。
Java では、すべてのオブジェクトがヒープの形式で割り当てられることが規定されているため、すべてのオブジェクト変数はポインターになります。ここで説明する必要があるのは、値と参照の違いです。たとえば、代入や比較時に int、boolean、float が文字列と異なる動作をする理由などです。このような派生的な質問は、プログラマーにとって必須の、物事がどのように機能するかを説明する一貫したメンタル モデルを形成しますが、そのプロセスは非常に困難です。
Java は (サイズに関係なく) プログラムを開発するのに非常に優れたプログラミング言語かもしれませんが、初心者にとっては決してフレンドリーではありません。
それでは、どの言語を教えるべきでしょうか?
この場合、最初にいくつかの簡単な概念を学び、それを基に Java を深く学べば十分ではないのではないかと疑問に思う人もいるかもしれません。 !でも、ごめんなさい、Java はそれはできないと言ったんです!
それで、私たちは何をすべきでしょうか?プログラミングを始めるための次の 2 つの合理的な方法は、悟りを開く感覚を与えるかもしれません:
低いレベルから始めて、段階的に難易度を上げてください。 C 言語で直接いくつかの簡単なプログラムを作成できるように、コンピューターの使い方を教えます。そしてこれに基づいて、より高次のコンピュータサイエンス構造システムが構築されます。
高いレベルから始めて、段階的に難易度を下げてください。たとえば、フロントローディング Java Influence を必要としない Python は、ここでは、コンピューター サイエンスの理論と、実装が非常に簡単なプログラミング言語を教えることから始めます。次に、コンピューターがこれらの理論をどのように実装するかを段階的に説明します。
現在、2 番目の方法がますます人気になってきています。これは、この記事の冒頭で述べた調査結果からわかります。Python が Java を超えて、最も広く使用されている入門用プログラミング言語になったという事実です。
どの方法を選択するにしても、重要なのは生徒の興味を維持することです。低レベルの開始点アプローチを選択した場合は、Arduino またはロボット工学キットを使用して、学生が物理世界で記述したコードを確認できるようにします。言い換えれば、ロボット工学チームのために C 言語でコードを書き始めるとすぐに、私はこのファンタジーの世界に深く魅了されました。自分が書いたコードによって 120 ポンドの鋼管と回転するモーターが動くのを見て、あの感覚が生まれました。本当に魔法的で信じられないほどです。高レベルの開始点アプローチを選択した場合は、ライブラリ内のリソースを使用してビデオ ゲームやその他のグラフィックス プログラムを作成することをお勧めします。
プログラミングは素晴らしいです。あなたの想像力と自分を表現する能力以外に、あなたを制限するものは何もありません。生徒の興味の入り口を見つけ、簡単なものから難しいものまで、楽しみながら段階的に教え、道具の使い方を教え、釣りを教えるのではなく釣りを教え、のびのびと夢中で成長させます。プログラミングの世界。