2014年6月30日月曜日

その7 - 「Javaプログラミングレッスン 下」の進め方

photo credit: Marwa Morgan via photopin cc



進め方

この書籍の進め方は今までと同じ流れでかまいません。
まずは新たに出てくる概念であるクラスや継承、インタフェース、ポリモフィズムなどのオブジェクト指向部分や例外の基本をしっかり押さえてください。
スレッドやファイルはJavaの資格試験では範囲外になっていると思いますが、そこも含めてひと通り終えてしまいましょう。

プログラムを作る

スレッドやファイルなど資格試験範囲外の部分もひと通り終えると記載しましたが、その理由がまさに「プログラムを作る」為になります。
書籍に記載されているスレッドやファイル操作を参考にできますし、その際にデータを保存する変数にコレクションを使用してみたりそこからファイルに保存してみたり。
書籍には記載されてないですが、HTTP通信を作成して任意のサイトから画像をダウンロードして保存(通信とファイル操作)、そしてそれを複数スレッドで行う(マルチスレッド)など思いつくままに作ってみるのです。

作る際に注意したい事

1から作る

ポイントは1から自分で作る、という事です。
書籍を丸写ししていると結局自分はどこが弱いのか、が分からないままになってしまいますので、ぜひ1から書いてみてください。
分からなくなった時やシグニチャを忘れた時などはもちろん書籍を参照したり、リファレンスを参照したりしてください。
そういう進め方で作成していればどんどん何も見ずにプログラムを書けるようになるはずです。 

パーツ単位で作る

最初はパーツ単位でいいと思います。
まずは通信するプログラムを作る。
次にデータ(通信で取得したデータ形式)を保存するプログラムを作る。
最後にそれを合体させる。
それぞれにmain()メソッドが存在する独立したプログラムとして作成したものを後から合体させる事で、キャパを超えた設計で悩む時間を減らす事ができ、単体ごとに繰り返しトライアンドエラーを繰り返す事でエラー発生箇所の見極めを容易にし、品質向上にも繋がり易くなります。 

タイミング

書籍に記載されているコードを実際に入力して動かすことは都度行ったほうがいいですが、プログラムを作成してみるタイミングはどこでも構いません。
継承を終えた段階で継承を使用したプログラムの作成もいいですし、スレッドが終わった段階で継承とスレッドを使用したプログラムの作成でもかまいません。
ぜひ複数の要素を取り入れたプログラムの作成をしてみてください。
そうやってプログラムを作成していくにつれ、あやふやな記憶が繰り返し思い出され使用されることで確固たる記憶に変化し、記憶していた知識への本当の理解が進むことになると思います。

予告

次回は下巻のまとめにしたいと思います。

2014年6月29日日曜日

オブジェクト指向のこころ

中古で高値で買ってしまったんですけど…

人気書籍で中古市場で値が高騰していた「オブジェクト指向のこころ」が3月より再販されています。

歯がギリギリ言うくらい悔しいですが確かにいい書籍だったので紹介したいと思います。

概要

本書はまずなぜオブジェクト指向プログラミングが必要なのかを説明してくれます。
システムには変更が発生する → だから凝集度を高く、結合度を低くしておく
凝集度、結合度はクラス設計を行う際に必要な概念で、これを理解しているかしていないかでクラス設計時に「このフィールドをどこに追加するべきか…」「このメソッドを…」という判断がつけやすくなります。
このようにオブジェクト指向の必要性をまずはざっと再確認します。
次にクラス図の記載に使用するUMLの再確認。
そして問題のあるシステムの紹介。
オブジェクト指向を適用してその問題を解決する方法など。
そして本題のデザインパターンです。
紹介されているパターンは12程度ですが、Facade, Adapter, Strategy などの重要パターンを厳選して紹介しており、そのパターン採用に関する考察や適したシステムの紹介なども記載されています。
デザインパターンの合間にはオブジェクト指向に対して視野を広げる考え方や、エキスパートがどう設計するかの解説、などなどとても興味深い内容になっています。

感想

Javaでオブジェクト指向に初めて手を出した状態でデザインパターンどころかUMLすらふんわり程度しか知らない状態だったので、導入部分(1,2章)から正にジャストフィットな内容でした。
まずこの書籍の特筆すべき点は、「デザインパターンを事実に則した流れで解説している」というところです。
  1. 最初にとあるシステムの問題を定義します
  2. その解決策を考察します
  3. こういう形に作れば(直せば)解決すると判断します
  4. そして答えがでます
「その形ならあるじゃないかこのパターンが!
という一般的なデザインパターンの解説書の逆をいく流れです。
デザインパターンの書籍で多いのは、
「このパターンはこういう形だからこういう時に使う」
というまずはパターンありきの解説ですよね。
実際の仕事ではまずシステムの大枠や流れを考えるので当然この書籍のようなアプローチになりますから、 流れを逆にして考えなくていい、というのはとても大きい事だと思います。
自分が考える際の思考回路と同じ流れで読み進められますから。

とはいえ、デザインパターンの紹介部分ではこういう時に使う、という説明もちゃんとなされています。
上記のように仕事の流れに添って解説している部分は実際のシステムの問題を解決していくくだりで採用されている手法です。

そしてそれだけではなく、著者がシステムをいくつも作成する上で得た、
  • こういう時はこう考える
というようなノウハウも記載されています。
つまりまるで経験豊富な先輩から(事実著者はそうだと思いますが)実例を交えてオブジェクト指向や設計、デザインパターンに関しての考察やノウハウ、重要性や注意事項を順を追って教えて貰っているような気持ちになります
全編に渡ってコード例が記載されている類の書籍ではなく、あくまで「なぜこうなのか」「なぜこうするのか」「なぜこれが必要なのか」という概念を理解するという立ち位置の書籍です。
とはいえ、必要箇所ではコード例もありますし、クラス図も記載されていますのであまりに情報が不十分で何が書かれているか分からない…という事にはなりませんでした。
ただ実際業務でのシステム例が出てきたりしますので、開発者経験のある方じゃないと少し難しいかも知れないですね。
個人的にはオブジェクト指向を説明する時に車クラスだなんだと変な喩えをされる方が分かりにくいので、実際の例に基づいたこの書籍はかなり理解が進んだと思います。

その6 - 「Javaプログラミングレッスン 下」のポイント

photo credit: martinak15 via photopin cc



「Javaプログラミングレッスン 下」のポイント

下巻で特にしっかり押さえるポイントについて書きたいと思います。

目次


上巻からの続きなので11章からのスタートです。
第11章 : クラスとインスタンス
  • オブジェクト指向の中心的な概念であるクラスとインスタンスについて学びましょう
第12章 : スーパークラスとサブクラス
  • クラスを拡張する方法や、「継承」について学びます
第13章 : 例外
  • Java言語のエラー処理である「例外」について学びます
第14章 : インタフェース
  • Java言語に疑似的な「多重継承」を行わせるインタフェースと、クラス間の関係について学びます
第15章 : ガーベッジコレクション
  • メモリの管理の詳細について、また使われなくなったメモリの回収・冷静処理であるガーベッジコレクションについて学びます
第16章 : スレッド
  • 複数のスレッドを動かす「マルチスレッドプログラミング」の基礎を学びます
第17章 : パッケージ
  • クラスを分類し、名前空間を分ける「パッケージ」の使い方と作り方を学びます
第18章 : ファイル操作と入出力、クラスの調べ方
  • クラスライブラリの使い方の例として、ファイルを読み書きしたり、削除したりするプログラミングを練習します
第19章 : コレクション
  • 多くのインスタンスを管理するコレクションについて学びます
オブジェクト指向、例外の部分が上巻になかった言語として新たに出てきた箇所です。
その他はスレッドやファイル操作とJavaAPIを使用してのプログラミングに関してになります。
ちなみにスレッドやファイル操作はプログラマとして必須だと思いますが、Javaの試験(Oracle Certified Java Programmer Silver SE 7)では範囲外となっていて、Goldの方で出てきます。

下巻のポイント

上巻と同じくひと通り理解して身に付けないといけないですが、特に気をつけるポイントを。
  • オブジェクト指向
  • 例外
  • Java SE 7 で追加された機能
以降それぞれを解説します。


オブジェクト指向

11, 12, 14章の部分です。
継承、インタフェース、is a と has a の違い、ポリモフィズムなどなど、オブジェクト指向部分の基礎をしっかりと押さえる事が大事です。
ここを乗り切るとJavaコードを読むのがかなり楽になるのではないでしょうか。
コードを書いてみたり、他人のコードやJavaAPIのコードを読んだりしてオブジェクト指向のコードに慣れ親しんでください。

例外

Javaのエラー処理の部分です。
例外処理の文法やその動き以外の部分も押さえておきます。
メソッドが例外を投げる時そのメソッドをオーバーライドしたメソッドではどう記載するか(throws宣言する例外は元と同じかそのサブクラス、RuntimeExceptionやそのサブクラスは元がthrows宣言してようがしていまいがthrows宣言できる、元がthrows宣言をしていてもオーバーライドした方はthrows宣言しなくてもいい、など)や、
チェックされる例外とチェックされない例外の意味とその実際のクラス(FileNotFoundException, ArrayIndexOutOfBoundsException, などの例外やエラー系のクラス)を例外のクラス階層を踏まえた上で確認したりになります。

Java SE 7 で追加された機能

本書P.371から「Project Coin」としてまとめられていますのでひと通り把握しておく必要があります。

予告

次回は本書を使用しての勉強の進め方を記載したいと思います。

2014年6月27日金曜日

その5 - 「Javaプログラミングレッスン 上」のまとめ


上巻まとめ

下巻に移る前に上巻でのポイントをまとめておきます。

期間

上巻は2週間くらいでざっとこなしてしまいましょう。
プログラム自体が初めての方はもっと時間をかけてもいいと思います。

ただ、プログラミングの基本部分が多いだけに暗記箇所が多く、暗記の危険なところは飽きて嫌になってしまうところです。そうならないようになるべく短期間で仕上げるのがコツです。

そして飽きを防止する為にも書籍をなぞってコードを書くだけでなく、各所で何か作ってみてください。
しっかりコードを書きながら進めたのなら一巡するだけでいいと思います。
何か忘れてしまった時は都度参照してあやふやなまま放置しなければ大丈夫です。

理解

先にも書きましたが、上巻はプログラミングの基本部分が大半です。つまり他のプログラム言語でも応用の効く基本知識が多いので、万が一Javaが合わなくても他言語で使い回しが効きやすい知識になると思います。

ですので丸暗記するだけでなく「なぜこれが必要なのか」「なぜこういう手順なのか」などしっかり理解しておくといいと思います。

使いこなす

理解するだけでなく使いこなすのが重要です。
そして慣れ親しむことです。
上巻の知識だけでも色々な種類のプログラムが作れると思います。
小さくて構わないので、そらでプログラムが書けるようになるくらいJavaに慣れて使いこなしましょう。

予告

次回は「Javaプログラミングレッスン 下」に進みたいと思います。

2014年6月26日木曜日

CentOS5.1に古いJavaをインストールする


photo credit: BobMical via photopin cc




古いJavaの環境を作成する

古いJavaの環境が欲しくなったので、CentOS5.1にJava1.3を入れます。
CentOS5.1くらいならJavaも1.3だったかな?というゆるい理由でバージョンを選んでみました。色々と問題が出たら手間なのでしっかり合わせたい方はJavaの必要バージョンが乗っていた頃のOSバージョンを、どうしても最新OSが!という方は最新バージョンを使用されるのもいいと思います。
テンポラリな環境なので、VirtualBoxを使用して作成します。

各ダウンロードサイト

以下の各所から必要物をダウンロード。
全部無料です素晴らしい。
VirtualBoxをインストール後、新規作成でCentOSのisoファイルを指定してインストールまで完了させる。

CentOS5.1 に Java1.3 をインストール

ダウンロードしたJava1.3のSDKファイルに実行権限を付けます。
# chmod +x j2sdk-1_3_1_20-linux-i586.rpm.bin

実行。
# ./j2sdk-1_3_1_20-linux-i586.rpm.bin
実行するとLicense Agreementが表示されるので最後までスクロールしてyes。

生成されたrpmパッケージをインストール。
# rpm -ivh jdk-1.3.1_20.i586.rpm

alternativesを使用して設定
# alternatives --install /usr/bin/java java /usr/java/jdk1.3.1_20/bin/java 30

確認します。
$ java -version
ここでインストールしたJavaのバージョンが表示されればOKです。

libstdc++-libc6.1-1.so.2 が無いエラーが出る時

以下のエラーが出る時の対応。
/usr/java/jdk1.3.1_20/bin/i386/native_threads/java: error while loading shared libraries: libstdc++-libc6.1-1.so.2: cannot open shared object file: No such file or directory
無いものは入れます。
# yum -y install compat-libstdc++-296

バージョンが上がってしまっているので、シンボリックリンクを作成。
# ln -s /usr/lib/libstdc++-libc6.2-2.so.3 /usr/lib/libstdc++-libc6.1-1.so.2
 

最後に

Javaのコンパイラ(javac)の方のバージョンも合わせる時は上記alternativesの部分でjavacの分も設定します。
これで環境作成は終了です。

2014年6月25日水曜日

その4 - 「Java言語プログラミングレッスン 上」の進め方

photo credit: Alejandro (Lì Delfos) via photopin cc



進め方

前回この書籍に関して勉強法を記載しましたが、これといって勉強法にこだわりがなければ書籍に従ってコードを書きながら著者の解説を読み込み、実行結果を確認し、ページを進めていくという王道で問題ありません。
その際もきっちり記憶に残るように前日の思い出しや重要箇所の書き出しなどは必ず行うようにしておくのがいいと思いますが、この時点では細かい部分まで完璧を目指すのではなく、とにかく書籍をひと通りやり遂げる事を第一の目的にしてください。
では実際の書籍、「Java言語プログラミングレッスン 上」の進め方を記載していきます。

コードを書く

例えばP.17だとList 1-1にサンプルコードがあるのでそのまま自分でも入力し、「コンパイルして実行してみよう」との言葉通りコンパイル、実行します。
P.17 List 1-1
public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello!");
    }
}
続いてコンパイル、実行します
C:\WORK> javac Hello.java
C:\WORK> java Hello
Hello!
以降P.26まで上記のコードの説明と、少し改変してみた結果の解説などが記載されていますのでその部分も上記と同じようにコードを書き、コンパイルし、実行します。

理解を深める

そしてその上でさらに自分なりの改変を加えたり、疑問点を検証したりします。この辺りは今までで学んだ知識上から発生する改変や検証でかまいません。
例えば上記のHelloクラスだとすると…
  • public がないとどうなるの?
  • class がないとどうなるの?
  • ファイル名をそのまま(Hello.java)にクラス名をHelloから他の名前に変えたらどうなるの?
  • System.out.println() メソッドをリファレンスで調べてみる
などなど、(以降も書籍を読み進めれば解消するでしょうが)たくさんの疑問が発生します。そういう時はcontentsページや最後の索引ページで書籍内 (上巻内)に情報が記載されているかどうか確認し、あれば読んでみる、そしてコードを書いて検証してみる、という事を繰り返してください。
部分的に先のページを読むことになりますが、その事自体は問題ありませんしむしろ目に馴染んでいいです。ただあまりに今の知識からだと負荷が高い先まで進むとなると、読むのも少し辛くなってくると思います。そういう時はその時点で途中になっている章内を全て終えてしまってから参照してみてください。気付かなかっただけで章内で追記されている事もありますし、他から理解が進んでついでに疑問が解消する事もあります。
そうでなかった場合は疑問点をメモしておき、知識を積み上げつつ適切なタイミングで調査、検証、理解、となると思います。
重要な事は疑問をもつ事です。疑問を持つと強く記憶に残り、調査・検証などで理解が定着しやすくなります。ただあまりに時間がかかる場合はスルーして次にとりかかった方がよいです。軽めの疑問で5分、重目で15分、という感じで調査・検証にかける時間を区切ってしまい、解決できない場合現状の知識量不足、と切り捨てて次に進みます。
ただその場合も上に記載した通り、疑問点はメモで残しておくなどしておくと理解漏れが発生しにくいです。

リファレンスを参照する

書籍の解説だけでなく、JavaのAPIリファレンスを参照しAPIに関する理解を深めると同時にチラっとで構わないのでなんとなく類似のクラスやメソッドに目を通したりもします。
今はまだボンヤリ程度で構わないので、とにかく書籍にJavaのクラスやメソッドが出てくる度に参照するようにしてください。

プログラムを作ってみる

自分で何かを作成したくなったタイミングで作りたいプログラムを作ってみてください。
例えば6章を終えた段階だと変数やループ文が使えるようになっていると思いますので、その段階でコマンドライン(or ターミナル)で動く簡単なゲームなどを作成してみるのです。
すると書籍を見ながらだと記述できていたmain()メソッドのシグニチャが意外とそらで書けなかったり、変数の初期化で詰まったり、プログラムの設計で悩んだりと、理解したつもりでもふんわりとしか分かっていなかった部分や、まだ作成したことのない規模のプログラム設計に関して試行錯誤する事になると思いま す。
そしてそうする事でより知識を明確にし、広げることができます。
何かプログラムを作ってみたい!と思ったらその気持を我慢せずに情熱をコードにぶつけてみてください。

最後に - 捨てる事の重要性

捨てると書きましたが「今は」捨ててください。全然OKです。
しばらく記載したような勉強法で進めていくと、「この疑問はちょっと深すぎるのかも…」とか「細かすぎて自分が嫌になる…」という感じで疑問の深度が感覚的につかめるようになると思います。
そう感じたら速やかに投げ捨てて次に進みましょう。
それはこのパターンが以下の2つどちらかだからです。
  • 細かすぎる部分まで詰めようとしている(Javaの範囲を超え始めている)
  • 書籍やネットには記載されていない深度に届き始めた
前者は投げ捨てて忘れて問題ない範囲です。続きをやりたいならJavaをある程度極めてからでOK。
後者はありがちです。書籍でそこまで記載するととんでもないページ数になってしまい読むのが嫌になるからです。書籍では基本を、しっかりした枠さえ作る事ができれば問題ありません。読み込んでコードを書いて検証しても残るような疑問は、この上下巻が終わった後の資格の本で解消される事になるので安心してください。
ネットで個人が発信している情報は「そのサイトを作成している個人の環境で」「そのサイトを作成している個人の興味の範囲で」「そのサイトを作成している個人の嗜好や趣味が反映されたスタイルで」記載されています。情報を拾えなければそうそうに諦めて次に進みましょう。

予告

次回は下巻の勉強法について記載したいと思います。

2014年6月24日火曜日

その3 - 「Java言語プログラミングレッスン 上」のポイント

photo credit: aphotoshooter via photopin cc
 

「Java言語プログラミングレッスン 上」のポイント

以前紹介した「Java言語プログラミングレッスン 上/下」から、まずは上巻で特にしっかり押さえるポイントについて書きたいと思います。

目次


まずは書籍のcontentsページを見てみます。

(0). Java言語の見晴らし台
  • Java言語で実際にプログラムを作る前に目を通しておくべき内容をお話します。
  1. Javaでこんにちは
    • あいさつを表示する簡単なプログラムをJava言語で実際に書いてみましょう。
  2. 計算をやってみよう
    • Java言語で計算をする方法や式の書き方、演算子の優先順位についてお話します。
  3. 変数と型
    • 情報を貯えておく箱である「変数」と、情報の種類を表す「型」について学びます。
  4. if文
    • プログラムで条件の判断を行うための方法について学びます。
  5. switch文
    • いくつもの選択肢から1つを選んで実行する方法について学びます。
  6. for文
    • 似た処理を繰り返して実行する方法について学びます。
  7. while文とString型
    • for文とは違った形式の繰り返しについて、また文字列(String)の扱い方について学びます。
  8. メソッド
    • まとまった処理に名前をつけてまとめる方法について学びます。
  9. 配列
    • 変数を並べて番号を付けた仕組み「配列」について学びます。
  10. オブジェクト指向へ向けて
  • オブジェクト指向の準備として「クラス」について簡単に学びましょう。
contentsにざっと目を通すと、さすが上巻だけあって言語の基礎が書かれている事がわかります。

上巻のポイント

もちろん書籍はひと通り理解して身に付けないといけないですが、特に上巻で気をつけるポイントはこんな感じです。
  • 開発環境の作成
  • Javaが各環境でどうやって動くのかを理解する
  • 型の種類、意味とサイズ- 各型の変数の宣言と初期化、使用法
必ずコードを書きながら勉強しますので、開発環境の作成は必須です。とはいえ、今どきのパソコンであればJavaは最初からインストールされている気がします。本書に従ってJDKがインストールされているかどうか見極めつつ手順を確認して環境構築してください。
その際にJDKの意味、JVMとは、Javaでソースを書いてコンパイルして実行という流れ、などをしっかり理解しイメージできるようになる事が大事です。
その為にもEclipseなどのIDEは使用せず、この書籍に記載されている通りjavac, javaコマンドを使用して手動でコンパイル、実行を繰り返すスタイルで勧めればOKです。
次に型に関して。これは特に他言語経験がある方は読み飛ばしてしまいそうな箇所ですが、種類、サイズ、意味、宣言と初期化、使用方法は特にしっかり押さえておいてください。
種類に関してはmutable/immutableという観点からも押さえておくとより深い理解に繋がりますし、下巻の理解を助けます。
そして配列は二次元辺りまでわりとよく使用すると思いますが、本書に記載のない三次元配列の宣言と初期化、使用法まで押さえておくと確実です。

予告

次回は本書を使用しての勉強の進め方を記載したいと思います。

2014年6月23日月曜日

その2 - Javaの勉強法




勉強法

勉強法は色々ありますし、基本的には自分に合うものを選んで構わないと思いますが、ここでは代表的な勉強法を記載しておきます。
  1. 書籍を繰り返し読む方法
  2. 復習をしながら書籍を一巡する方法
ベースとしては「2. 復習をしながら書籍を一巡する方法」を行いながら適所で「1. 書籍を繰り返し読む方法」を取り入れる事になると思います。
以下で各詳細を記載していきますので、取り入れやすい方法を自分なりにカスタマイズして使用してみてください。

1. 書籍を繰り返し読む方法

書籍の繰り返し読みにも細かい方法が幾つか存在します。
ご自分に合う方法で実践してみてください。
まず書籍を丸ごと繰り返し読む方法。
何日かかけて書籍をざーっと最後まで読みます。
読み切るまでにかける日数は短ければ短いほどいいですが、毎日こなせる量にしてください。
書籍が10章構成だったとすると、
  • 初日は1〜4章
  • 二日目は5〜8
  • 三日目は9,10,1,2章
と毎日次の章をどんどん読んでいき、最後まで通したらまた最初に戻ります。
この繰り返しを行う勉強法になります。
次に章を戻りながら読む方法。
  • 初日は1〜4章
  • 二日目は2〜5章
  • 三日目は3〜6章まで
と1章ずつずらしながら読んでいきます。
そして最後に紹介する方法は、いつも最初から読む方法です。
  • 初日は1〜4章
  • 二日目は1〜5章
  • 三日目は1〜6章
と読む章を毎日追加して進めます。当然毎日読む量が増えて時間がかかる!と思いがちですが、一度〜複数回目を通した章はけっこうなスピードで読めるようになる為思ったほどの時間はかかりません。
幾つか読み流す勉強法を記載しましたが、これらの方法で効果的なのは暗記物になると思います。
Javaの勉強というのはプログラムの勉強なので暗記物に適した勉強法は必要ないのでは?と思われるかも知れませんが、用語や仕組みなど基礎知識の多くは暗記になります。
書籍を何周もして丸ごと暗記する必要はありませんが、暗記するべき箇所では使える方法です。
適所でこの方式を取り入れ、知識を確実なレベルに持って行くようにしてみてください。

2. 復習をしながら書籍を一巡する方法

Javaの勉強ではこちらの方法をベースに進めるのがオススメです。
書籍を最初から読みながら、必要な箇所や疑問が湧いた箇所でコードを書いて確認しながら読み進めて行くスタイルです。
その日の勉強をする際に、必ず前日の重要箇所の復習を行います。
  • 前日書いたコードが空で書けるか
  • 前日暗記した重要箇所を忘れていないか
この2点必ず復習するようにしてください。
覚えていなかった部分や、繰り返し目にとめて暗記する必要がある箇所は大きめの付箋に書き出して机上に貼り付けておき、目にする機会を増やして自然と暗記する、というやり方でもいいと思います。

まとめ

記載した勉強法以外にもたくさん勉強法はあると思います。
ぜひご自分に合った勉強法で効率よく進められるよう勉強スタイルを確立してみてください。

予告

次回は「Java言語プログラミングレッスン 上」書籍を使用する上でのポイントを記載したいと思います。

2014年6月22日日曜日

その1 - Javaの勉強準備


Javaの勉強準備

まずは準備からという事で書籍の事から。

書籍を買おう

まずは書籍の購入をオススメします。
今どきネットで「Java 初心者」とかでググったら数えきれないほどのサイトが出てきますが、内容の品質/確度ともに書籍を購入するのが一番効率がいいと思います。
ネットが繋がらないようなタイミングや、少しネットやパソコン、スマホから離れて休憩する時にも書籍だと手にできますし、こなしたページ数、残りページ数が手にとって感覚で分かるのでかなり励みになります。
たまにネットで調べ物をしていてどんどん掘り下げていくと「あれ、何してたんだっけ?」的な状況に陥る事が多々ありますが、どれだけ脱線しても(脱線しすぎて遊び始めたりしてもw)パッと手元の開いたページを見ればすぐに現実に引き戻される戻れるのでお勧めです。
やりきった後にその本を見て、「あーこれやった必死こいてやった…」という達成感に浸れるところも最高です。

書籍選び

そこで書籍選びに重要なのが以下の2点です。
  • 自分に合う書籍を選ぶ
  • 完成度の高い書籍を選ぶ
自分に合っているかどうかは大前提ですが、その際も必ず「完成度」を確認するようにして下さい。
  • Amazonなどでレビューや★の数をしっかり確認して評価が高いもの
  • Java言語自体の解説をメインで書いている
  • 発行日があまり古くない(今回だとJavaなのでSE 7に対応しているとベター)
  • Amazonの中身検索機能で内容を確認
調べていくつか候補をピックアップしてそのまま購入するもよし、実際の店舗で時間をかけて選ぶのもよし、です。
注意して欲しいのは、レビューや★の数を必ず頭の隅に入れて選んで下さい。レビュー件数があればある程★の数は信頼性が高いです。
「これ評価悪かったけど読みやすいし…」というのは結構地雷だったりします。
資格取得を目指すレベルに見合った内容のしっかりした書籍を選択しましょう。
Javaに関して記載されている範囲、深度なども気を付けましょう。
例えばTips系の書籍は「こういう場合はこう書く」とピンポイントな問答が多い時に便利ですが言語として万遍ないかと言えばそうではありません。言語としての文法や特性などの基礎/応用部分が記載されておらず、あくまでコードの解答例に過ぎないからです。
「Javaで◯◯◯を作る!」系の書籍もTips本と同じような注意が必要で、言語としての解説部分が弱い(狭い)という問題があります。
いきなり資格対策書籍を購入するのも手の一つですが、当たり前ですが資格対策書籍はかなり細かい言語仕様まで試験に出そうな箇所がピンポイントで記載されています。その分勉強が暗記ベースになってしまいがちですし、いきなり深い部分まで万遍なく勉強する、というのはかなり過酷な勉強法になってしまうと思います。
そしてJavaをスラスラ書けるようになるには実際にJavaでプログラムをどれくらい書いたか、が重要です。
最初の一冊目はJavaの概要を6〜7割の深度/広がりで学び、プログラムを書く事に慣れ親しむ為にも「Java言語自体」の書籍を購入するといいでしょう。

オススメ書籍

タイプ別オススメ書籍です。

他言語の経験アリ

Javaは初めてだけれど他言語の経験がある、という方はこちらです。
オススメ書籍は以下の二冊です。
  • Java言語プログラミングレッスン 上 結城浩
  • Java言語プログラミングレッスン 下 結城浩

Javaの資格試験では正答率95%を出せましたが、この二冊を購入する時は資格の事などこれっぽっちも考えておらず、ただ
「Javaを万遍なくしっかり勉強したい」
というスタンスで選んだ訳ですが、今となって考えてみればその気持で選んだこの二冊が大きな石杖となってくれたと感じます。
「Javaでいきなりこんなアプリを作る!」系の書籍とは違い、必要な情報が万遍なく丁寧に記載されているので入門にはピッタリで、この二冊をガッツリやってしまえばJavaの大枠が築けた事になるのではないでしょうか。
その証拠かどうなのかわかりませんが、この二冊を終了させて資格本の一巡目の模擬試験で正答率70%程度を取ることができました。
Javaの資格試験は正答率77%以上で合格という少しシビアな試験なので、受験を考えずに勉強してきたこの時点で70%をとれたのはかなり自信になりました。
Oracle Certified Java Programmer, Silver SE 7は下にBronzeレベルがあるのですが、この時点で受験してもBronzeなら合格するような気がします。

プログラム自体が初めて

Javaだけでなくプログラム自体何もした事がない、という方。
オススメ書籍はズバリこの一冊です。
  • スッキリわかるJava入門 中山 清喬/国本 大悟

こちらは資格取得時には使用せず、後に同僚から借りて目を通しました。 イラストを多用し、興味を持ちやすい「RPGゲーム作成を作る時にこの技術(特にオブジェクト指向)をどう使うか」テーマに解説してあります。
前述した「Javaプログラミングレッスン」系の書籍が味気なく感じてしまったり敷居が高く感じてしまったりする方はこちらの書籍で学ぶ/補うという位置づけの書籍になると思います。
他特色としては、とにかく初学者が躓きやすいポイントをビジュアルで例えでゲームでと手を変え品を変えわかりやすく説明してくれています。
Java言語仕様やオブジェクト指向の基礎をしっかり築きあげるのに最適ではないでしょうか。
注意点としてはJavaの基礎部分に基いているため範囲が少し狭く、スレッドや例外処理、ファイル操作などに関しては記載されていませんので、そちらに関しては著者が1人になって発売されている「実践編」を購入する必要があります。

予告

次は実際に書籍を使用しながらどう勉強したかのポイントと勉強法を書いていきたいと思います。