「Java覚書」
Javaを指導するための学習手順
Javaの指導で困っている先生方が多いと思います。自信を持って指導できるための道程を記します。
VBやCOBOLで全商2級~1級をすでに指導したことがある先生対象です。
- Java入門書(「わかりやすいJava入門編」など)でJava全般を学ぶ。
Javaに限ったことではないが、VBやCOBOL指導時には意識しなかったこと(変数のスコープやキャスト、命名規則など)も学ぶ。【2~3ヶ月】 - 全商2級が解けるようになっているので全商2級を解く、模擬試験問題集を解く
- 並行してオブジェクト指向の入門書(「Javaのオブジェクト指向がゼッタイにわかる本」や「オブジェクト指向でなぜつくるのか」など)で オブジェクト指向の特徴を学ぶ。カプセル化やコンストラクタ、ポリモーフィズムなど。【1ヶ月】
- 少し詳しいJavaの本(「わかりやすいJavaオブジェクト指向編」など)で学んだり、実際にプログラムを組んだりする。【1~2ヶ月】
- 全商1級が解けるようになっているので全商1級を解く、模擬試験問題集を解く
****************************** ここまでが全商検定指導の最低条件 ****************************** - 全商1級を自信を持って指導するため資格を取る。(「JavaプログラマBronze」や「サーティファイJava検定3級・2級」)
Javaやオブジェクト指向に関する理解が深まる。【2~3ヶ月】
************************* 全商の範囲を超えた一歩進んだ詳しい教員になる ************************* - オブジェクト指向設計やUMLを学ぶ。(「なぜあなたはJavaでオブジェクト開発ができないのか」など)【2~3ヶ月】
****************** オブジェクト指向を踏まえたテスト問題がある程度作成できるようになる ****************** - 自分の興味関心に応じて専門性を深める。
- ソフトを実際に作成したい ・・・ AndroidアプリやJSP&サーブレット
- オブジェクト指向を極めたい ・・・ 「オブジェクト指向分析設計」や「デザインパターン」
- 他の言語を学びたい ・・・ お好きな言語をお好きなだけ・・・
なお、勉強の過程でわからない点やつまづいた点がありましたら、お気軽にご連絡下さい。
メール、電話、手紙、Facebook、訪問等、何でも結構です。
私のわかる範囲でJavaの学習をされている先生方のお手伝いをさせていただきます。本当に気軽に連絡いただいて結構です。
(先生方の疑問が解決され、それが生徒に還元され、商業教育全体の底上げができるのであれば本望です。)
生徒が疑問に思うであろうポイント
初心を忘れないために記しておきます。各々の回答が知りたい方はご連絡下さい。
- 演算子の前後になぜ半角スペースが必要なのか、なくても動作するではないか
- 問題によってはclassにpublicが付いていたり付いていなかったりしているのはなぜか
- Scannerを使う際の変数名はscでなければならないのか
- 変数に1プラスするときは、i++と書く方が良いのか、i = i + 1でも良いのか
- forでは、使用する変数を絶対カッコの中で定義しなければならないのか 例:for(int i = 0;・・・)
- なぜ文字列の比較は == ではできないのか、数値と何が違うのか
- インスタンス化する際の new と、配列を作る際の new は同じか
- オブジェクト指向で作るとプログラムが長くなるし難しくなるし、何が嬉しいのか
- セッターメソッドで結局privateな変数にアクセスできるので、privateの意味は無いのではないか
- コンストラクタやインスタンスメソッドで使う変数名は、なぜ同じ変数名にするのか
- publicとstaticの違いは何なのか
- 10 / 3 と 10 / 3.0 の計算結果が違うのはなぜか、3も3.0も同じではないか
- 変数の名前はなぜ所々大文字なのか 例:totalMonthSales
- finalが付くと、なぜ変数名は全て大文字なのか、小文字でも良いではないか
- なぜforでは変数として i を使うのか、 a ではだめなのか
- args とは何か、そもそも何と読めばよいのか
Javaプログラマ Bronze SE7
オラクル社のベンダー資格に「Javaプログラマ Bronze SE7」がある(参考「オラクルの解説ページ」)。全商情報処理検定以外の資格関係の勉強を模索する中で、私自身勉強し上記資格を取得した。以下にその感想を記す。
試験料はオンライン試験(いつでも受験できる)の場合は税込14,280円である。全商検定と形式が全く異なるので難易度の単純比較はできないが、全商検定より深い理解が必要となる。
全商1級を取得した後、プラスアルファで1~2ヵ月程度細かい学習をすると取得可能である。
具体的には「継承を行った際にコンストラクタはどうなるか」や「クラスやフィールドにはどのようなアクセス修飾子をつければよいか」などを学ぶ必要がある。
指導者としては全商検定を教える際にも役に立つことが多いので取得しておいて損はない。
私自身は下記の翔泳社の2冊を購入し学習した。文法やオブジェクト指向の基本的な事項が分かっている段階から、約1カ月の学習で取得することができた。
全商1級程度の基本的なJavaがわかっているのであれば、左の紫色の本(通称、紫本)だけで十分合格できる。右の問題集は、解説に不親切な内容が多い。通常は紫本1冊で対応可能であろう。
Javaを学ぶ意義はどこにあるか
- 今後専門的にプログラミングを学ぶため、汎用性の高いJavaを学んでおく、Javaに親しんでおく、という意義。
- サーバーサイドスクリプトではJavaがスタンダードなのでJavaを学ぶ。(サーブレット&JSPにつながる)
- Androidアプリ作成はJavaなので、そのために学ぶ。
- オブジェクト指向言語を学ぶ、という目的でJavaを学ぶ。(ただし、教科書の内容だけでは不十分)
- スタンドアロンのJavaGUI(Swingなど)やJavaアプレットは現在ほとんど使用されていないので意義は薄い。
Google App Engine
サーバーサイドJava(=サーブレット&JSP)の実行環境はPHPやRubyの様にレンタルサーバでの構築は難しい。できたとしても金額的に通常のレンタルサーバの数倍の値段になる。
そこでGoogleの提供しているGoogle App Engineというサービスを使用すると良い。以下、GAEの覚書。
- JREとJDKのバージョンを合わせないとEclipseでうまく動作しない。Eclipseのコンパイラ準拠などを合わせる必要もあるが、私の場合はいずれもJava1.7にすることにより動いた。また、環境変数もJava1.7で通しておく。Java1.6は削除した。
- EclipseのPleiades Java用を入れると、TomcatやJDKも付いてくるので、これらを重複してダウンロードしないように自分でローカルドライブ上をよく見ておく必要がある。
- GAEが使えるとしても毎回デプロイするのは面倒なので、ローカル上でTomcatを動かして学習するのがよい。
- GAEのSDKを入れる際、Android関係のファイルも同時に入れるとエラーが出るので必要最低限のGAE SDKを入れるよう注意が必要。
Java言語に関する個人的な意見
当サイトには個人的な意見は極力排除するようにしていますが、Javaに関する資料が多いですので立場を明確にしておきます。
私自身がJava言語を学んでいる理由は2つあります。
1つは、自分自身のプログラミング言語に対する好奇心です。オブジェクト指向であり、世界的にも多く使用されている言語としてのJavaに興味があるので勉強しています。
もう1つは、私たちの上部(文科省や全商)がJava言語普及を打ち出しており、Java言語ができる教員がいなければわからないことを聞くことができずに困るので、自分自身が困ったときの相談役になれるように勉強しています。
以上の理由によりJavaを学んでいる訳で、私自身がJava言語普及を行おうとしているかどうかということとは無関係です。
むしろ逆に、私自身は商業を学ぶ生徒に対して積極的にJavaを指導しようとしているかというと、そうではありません。
「論理的な思考を身につけさせる」とか「来るべき知識基盤社会云々・・・」とかもあるとは思いますが、私自身が考えるプログラミング教育で大切なことは、純粋に「プログラミングって面白い!」と生徒に伝えることだと考えています。
なぜなら、将来プログラミングを仕事で使うこととなった場合、言語は選べないからです。職場が.NETを使っていたら.NET、クライアントがRubyを指定してきたらRuby、言語を指定してこなかったら企業内に蓄積されている生産性の高い言語・・・。
つまりどの言語を学ぶかは、さほど重要なことではないと思います。
コンピュータ関係の企業に勤めている方にお話を伺っても、「プログラミングの楽しさを教えて欲しい。その後は入社してからこっちで鍛えるから。」という意見が多いように思いますし、私もそれが正しいと思います。
そう考えると、生徒に楽しさを伝えるにはGUIが適しています。「動いて楽しい」、「動かない・・・なぜだろう?」という、ものづくりの楽しさを伝えることができます。JavaでGUIは週に2~3時間の授業では本質的には理解できないと考えます。ましてやスタンドアロンのJavaGUIは現場での案件も少なく、生徒の「なんのために学ぶのか」という疑問に対して答えるのに苦労することとなります。
かといってJavaの指導を否定している訳ではありません。Javaでプログラミングの楽しさが教えられるのであれば、それが一番良いことです。それができないのは、私自身がまだその域に達していないからです。
オブジェクト指向をわかりやすく伝え、それを活かしたGUIプログラムや、コマンドベースでもそれを楽しく伝えられるのであれば言うことはありません。
ただ、勉強が足りていないのか、Javaではそれがそもそも難しいのか、高校生には難しいのか・・・理由はわかりませんが、今の私にはそれをすることができません。
まだまだ今後もJavaを勉強し続けようと考えています。
いずれにしても、検定に採用されている言語が何か、自分が教えられる言語は何か、という視点ではなく、勤めている現場と目の前にいる生徒に合った言語を採用し、自分自身が考えるプログラミング教育の意味を明確にして指導したいと思います。