サポンテ 勉強ノート

サポンテの勉強ノート・読書メモなどを晒します。

PHPer が Java に入門してみた 〜自分のレベルにあった参考書の探し方〜

はじめに

サポンテは PHPer でした。

正確に言うとこれは「業務で最も長い時間触れていたのが PHP」ということになります。

よく初学者の方が「どの言語を学ぶべきか」や「言語の良し悪し」ということに心を囚われることがあるのですが、実際の仕事では一つの言語だけで用が足りることはありません。プロジェクトによって変化したり、会社の方針だったり、チームの技術レベルの制約だったり、いくつかの技術を組み合わせる必要があったりなどの理由で、一つの言語に留まることは希です。

そのような訳でサポンテも様々の言語を業務で使用してきましたが、不思議と Java とは縁がありませんでした。

今回、やっと Java の仕事ができることになり、急ぎ、猛勉強をしています。

入門書を探す

大きい図書館に行き、入門書を探しました。事前に Amazon で調べて、評価の高いものを中心に、何冊か一緒に借ります。

どういう訳なのか Java 本はどれも分厚く、重かったです...。

重い分、収穫はありました。様々の入門書を見比べることができ、自分に合ったものを見つけることができました。

自分のレベルにあった参考書

実は、プログラミング言語の入門書を探すのはとても大変です。

読者の側には「プログラミング自体が初心者」なのか「その言語の初心者」なのか、またそのレベルの違いがあるためです。本の造りが前者に合わせたものであると後者に該当する読み手は退屈しますし、後者に合わせた本であると前者に該当する読み手がついていけないことになります。

従って多くの入門書は、間口の大きい前者にあわせたものになっています。そして多くの人が仕方なくそれを選んで、しばらく退屈な記述につきあっているのではないかと思います。

用語の違い

これも初学者の方が誤解しやすい点ですが、プログラミング言語の違いによって同じ用語でも微妙に異なる概念を指していることがあります。

既になじんでいる概念でも、もう一度学び直す必要がある場合とない場合があります。既に知っているからと、読み飛ばしてしまうと誤解したまま業務を続けてしまうリスクも生じます。

これもやはり、退屈に感じる記述にしばらくはつきあわなければならない理由になります。

役に立った本

そのようなわけで、サポンテが自分の立場から「役に立った」し「オススメ」できると感じた本を紹介します。

新わかりやすいJava オブジェクト指向徹底解説

Amazon ではレビュー数が少なく、人気がないのかなと思ってしまいますが、これが一番良いのではないかと感じました。本当に解りやすく、また紹介している範囲については最も深く掘り下げている印象があります。

この本はシリーズになっていて他に、より初心者向けの本が二冊出ています。そちらは読んでいないのですが、プログラミング自体が初めてで、初めての言語に Java を選んだ方は良いのではないでしょうか。

ただ、そちらは読んでいないのと、読んだとしてもサポンテは既に初心者ではないので正確な判断はできません。

スッキリわかる Java入門 実践編 第2版 (スッキリシリーズ)

Amazon で最もレビュー数が多く、人気が伺えるこのシリーズ。悪くはありませんでしたが、上の本に比べると「広く浅く」の印象がのこりました。

こちらも一つ手前の基本編や、続編的なサーブレット&JSP編があります。

プログラミング言語 Java 第4版

最も基本で、もちろん最も深く掘り下げているのですが、いかんせん翻訳がひどく、はっきり申し上げて日本語になっていません。読めないレベルです。

内容がすでに古いこともありますし、参照することはないでしょう。

Effective Java 第3版

これは初心者向けでは全くないのですが、読んでおいた方が良いかと思います。上の本に比べれば翻訳はまだマシで、なんとか読めるレベル。Java の先人達の良質な Tips が詰まっています。

学習のレベルに応じて読める・読めないがあるかもしれませんが、Java の業務になれた一年後くらいに一通り読んでおくと良いのではないかと思います(自分を含めて)。

はじめて学ぶには不適切な言語

今回サポンテは、面倒でも退屈でも初めから丁寧に Java の学習をしてみました。その結果、この人気のある言語は、はじめて学ぶプログラミング言語としては不適当であると感じました。異論はあると思いますが、サポンテがそう感じた理由は以下の通りです。

  • オマジナイが多すぎる。
  • 概念の理解がオブジェクト指向に引きずられて回り道を強いられる。

オマジナイが多すぎる

オマジナイとは、最低限のプログラムを動かすために必要な、しかし初学者には意味がよくわからない呪いのような文のことを指します。

これが Java は多いのです。

Java を理解していればそれらの呪文がそれぞれ何を指しているのか得心がいくのですが、そこにいたるまでの道が長すぎです。

こちらに同じ処理を様々の言語で書いたコードがありますが__もうすこし短く書けると思われるものもありますが__最も短く書ける言語と比較すると、やはり Java は長めに感じます。

概念の理解に回り道を強いられる

プログラミングには、知っておくべき「概念」が数多くあります。

文、式、命令、変数、型、制御、ループ、関数、オブジェクト、ポインタ、トレイト、クロージャ...。

いくつかの概念は Java で「実装するのにずいぶんひねったな」と感じます。

サポンテは幸い他の言語でそれらを理解していたため「なるほどこういう実装か」と理解できたところがあります。初めての方は「概念(何を実現しようとしているか)」と「Java の制約に引きずられた実装」の二つを同時に理解しなければならず、それは惜しいと感じました。

Java を学ぶべきかどうか

「はじめて学ぶには」という観点で上に不適当であると書きましたが、学ぶべきではないかと言うと、そんなことはありません。また Java に良いところがないと言う意味でもありません。

現時点で世界中に Java で作られたものがたくさんありますし、今後も増え続けていくでしょう。技術者の需要もかなり高いです。

最近では「ホットな話題」が他の言語に移りつつあるのは確かですが、それは Java がある程度安定してきたことを意味していると言えます。Java の地位はしばらくは揺るがないでしょう。

もし初めて学ぶのが Java で、現在学習中という方は、他の言語も並行して学ぶと良いかもしれません。ゲンナリしましたか?冒頭に書きましたが、一つの言語だけで仕事をするわけではありません。エンジニアの理想としては1年に1つ新しい言語を学ぶべきとも言われています。他の言語を学ぶことで、Java 自体もより理解が深まることもあるでしょう。重荷や回り道ではないと考えます。