スッキリわかるJava入門 実践編

「アジャイルや設計原則まで自然に学ぶことになる」Java入門書、作ってみました

拙筆Java入門書の続編が本日発売です!!

前作『スッキリわかるJava入門』の発売から約1年が経ちます。Java入門書は既にたくさんありますので不安でしたが、お蔭様でご愛顧いただけていますこと、ありがたい限りです。

そして本日、無事続編の発売を迎えることができました。

『スッキリわかるJava入門 実践編』

 

この本は、Javaの基本文法やオブジェクト指向をひととおり学んだという方が次に読んで戴くための本なのですが、ありがちな「Java入門書の続編」とはちょっと違う新しい試みにチャレンジしてみました。

 

目次でみる「実践編」

今回の『実践編』の最大の特長は、Javaという言語自体の解説だけでなく「Javaを使うために必要な各種周辺知識」も網羅したことにあります。実際に、目次は以下のようになっています。

第1章 文字列の操作

各種操作メソッド / 正規表現

第2章 コレクション

ArrayList / HashMap / 他

第3章 さまざまな種類のクラス

型安全 / ジェネリクス / 列挙型

第4章 その他の基本機能

equals / hashCode / compareTo / clone

第5章 非標準ライブラリの活用

クラスパス / commons / OSSとライセンス

第6章 ファイルの操作

読み書き / ストリーム概念 / フィルタ

第7章 さまざまなファイル形式

CSV / プロパティ / XML / 直列化

第8章 ネットワーク通信

URL / Socket / ServerSocket

第9章 データベースアクセス

JDBC / トランザクション処理

第10章 基本的な開発ツール

Javadoc / Jar / JVMとGC / IDE

第11章 単体テストとアサーション

JUnit / アサーション / 契約による設計

第12章 メトリクスとリファクタリング

カバレッジ / 循環的複雑度 / checkstyle

第13章 コードとタスクの共有

VCS(Subversionほか) / チケット(Redmineほか)

第14章 アジャイルな開発

開発の流れ / ペアプロ / TDD / CI

第15章 設計の原則とパターン

DRY / SOLID原則 / ADP / SDP / GoFパターン

第16章 スレッドによる並列処理

スレッド / 調停 / Concurency Utilities

詳しい目次はこちら

背景が灰色の章は、一般的な「入門書の続編」にありがちな各種APIの解説ですが、緑色の背景で示した章は、通常の入門書では軽く触れる程度であることが多い内容を深掘りしてみた章です。また、赤色の背景で示した章については、Java自体の入門書というよりもJavaを用いた開発プロジェクトの入門書に近い内容となっています。

 

よくある入門書や新人研修に感じていた違和感...

『スッキリわかるJava入門』 及び 『実践編』は入門書ですから、初心者の方や入門者の方が読むための本です。そのような層をターゲットにした従来の書籍や研修は、オブジェクト指向や各種APIなどの解説のような「Java言語自体のお勉強」までで完結するものがほとんどのように思います。

しかし私は、開発現場にいても、技術者育成現場にいても、常々この「言語自体までの勉強で入門学習が一区切りと感じてしまう書籍や研修の構成」自体に少し違和感を感じていました。

実際にJavaを用いた開発プロジェクトで開発に従事しようとしても、Javaの言語自体の知識だけではほとんど仕事はできません。プロジェクトのこと、開発手順のこと、JUnitのこと、バージョン管理システムのこと、チケットのこと、「良い設計」の原則、デザインパターン、などなど...

それら各技術要素は、決して深く知る必要はないのですが、ある程度は知っておかないとチームの中で開発することもままなりません。つまり、それらは入門者にとって「オプション」ではなく、「必須」な学習項目ではないかと思うのです。

 

実際に開発現場で遭遇した例

もう随分昔の話ですが、私は仕事柄、「火が噴いている(噴きそうな)開発プロジェクト」を担当することがほとんどでした。往々にして納期が押しているので「手軽に確保できる外注エンジニアの追加投入」という話がよく出て、酷いときは「この間、Javaの研修を卒業したばかりの新人をつれてこよう」なんていう話もよくありました。

しかし、これが上手くいきません。

「いきなり機能開発は大変だと思うので、まずはテストのお手伝いをお願いします。ではまず、このクラスのJUnit単体テストケースを作ってカバレッジをあげといてください」
「はい、わかりました。テストケースはどんなExcelシートにまとめればいいですか?」
「あ、いや。Excelには書かないです。JUnitのテストクラスを書いてくれるだけでいいです」
「え?ジェイユニットって何ですか?」
「・・・あ、えっと、なるほどなるほど。ではJUnitの使い方もお伝えしますね(はぁ...火が噴いて時間ないのに、2時間もってかれること確定)。」
「eclipseは使ったことがありますよね? ちなみにSVNのレポジトリの設定はしておきましたので、さっそくソースをチェックアウトしてください。JUnitについて解説します。」
「ごめんなさい、SVNっていったい何ですか?」
「・・・ソースコードの共有サーバーみたいなもんなんですが、使ったことないですか?CVSとかVSSとか?ひょっとしてgitとか使ってたりしました?(んなわけないか...)」
「普通に自分のパソコンで開発していました。」
「 ・・・(もう何から説明すれば・・・) ||| ○| ̄|_ 」

まぁ数年前のことではありますが、未だに業種や会社によっては普通にありうる光景です1

また、書いてもらったコードも「サンプルコードが掲載されているサイトからのコピペをベースとして修正を重ねて完成させた」ようなもので、スパゲティ度が恐ろしかった記憶があります。

 

でも決して本人は悪くないと気付いた

当時の私はまだ相当若かったので、「なんで技術者なのに、自分の商売道具であるそれらの知識を学ぼうとしないんだ!」と内心憤慨したりもしました。『Effective Java』のような良書/名著も既に和訳刊行されていましたし、ネットを検索すればいくらでも情報は手に入るからです。

でもある日、ある年配のSEさんが喫煙所((私は吸いませんが、よく牛乳持参して休憩にいってました))でしみじみ呟いた一言で、考え方が変わりました。

中山君はいいねぇ。若くて元気で、しかもちゃんと勉強してる。

オレなんかさ、新人研修1週間でそのあと現場に放り込まれて、それ以来毎日残業ばっかのプロジェクト。目の前の開発をなんとかコピペで済ませるのに精一杯でさ。で、気付いたらこの歳だろ。

本人は悪くないんです。「言語の文法を最低限習う機会しか得られなかった」という人もたくさんいるんです2

特に最近は景気があまりよろしくないので、腰を据えて学ぶ機会を得られない若手が増えているのではないでしょうか。

「あなたJavaの入門書を一通り読んだでしょ?Javaは書けるはずだよね。さぁ新人さんも学徒動員。そして生きるか死ぬかの戦場での毎日」

そうして一度忙しいプロジェクトに配属になると、なかなか「直近の仕事で使わない技術や方法論」と出会う機会自体が得られにくくなります。「今の自分やチームの仕事を何倍も効率的にしてくれるもの」が世の中には既にあるのに、それに出会うことなく日々も残業が続き、そのせいでまた学ぶ機会を失うという悪循環...エンジニアにとって、こんなに不幸なことはありません。

そんな境遇の方をリアルに目の前にすると、「高価でちょっと難しくても、技術者なら各分野の名著をどんどん読んだほうがいい」とか「寝る間も惜しんで、いまの仕事では使わない技術も率先して勉強すべき」とはどうしても言えないのです。

 

目指したのは、「入門書」と「名著」との橋渡し役

ここまで述べたように、開発現場でJavaを実践するためには、文法知識だけでなくJavaを活用するための各種周辺技術の知識が広く薄く必要です。しかしこれまでは、多くの入門者にとって、この各種周辺技術を学ぶ手軽な手段や環境がなかなか得られにくい状況にあったと思います。

特に、「入門書卒業レベル」と「専門書レベル」の間には、溝(ハードル)があるように感じました。

  • 一般的な入門書・・・文法やAPI紹介までしかカバーしていない。
  • 各分野の専門書・・・名著もあるが、入門書を卒業したばかりの方には少し難しい(洋書翻訳ということもある)。また、分野別に存在するため、広く学ぼうと本を揃えようとすると高価になる

でもやはり、各分野の周辺知識を最低限含めてちゃんと届けないと「入門書としての仕事が完結しない」という思いが強く、出版社に企画を出して執筆したのが今回の『実践編』です。

実践編が目標としたのは、各分野に特化した上級専門書(名著)や自ら腕を磨く意識が確立した中級者用の書籍3ではありません。

Javaをはじめたばかりの方でも手軽に手にとってやさしく読み進めていただけ、そして気付いたら「JavaだけでなくJavaでの開発に必要な周辺知識も学んでた」と感じていただける本です。

書店で見かけた時には、ぜひお気軽に手にとっていただけましたら幸いです。

  1. 「そんなの絶対ありえねぇ。オレの周りではgit使いながらtddが常識」というあなたは、自分の幸せに感謝しなければならない。
  2. 私も勉強していたわけではないんですよね。させてもらっていただけで。
  3. 最近でいうとリーダブルコードなどかな?

-スッキリわかるJava入門 実践編
-