中級者の方に「実践編」がお役に立つ方法

いつも、ありがとうございます

いつも拙著『スッキリわかるJava入門』及び『スッキリわかるJava入門 実践編』をあたたかく見守っていただきありがとうございます。昨日、丸善 日本橋店にいったら、入門編と実践編で計6冊在庫いただいていました。


また、twitterなどで取り上げて戴けて、恐悦至極(!)です。しかも、取り上げていただいている方が、どうみても中級者or上級者の方と思われるため、嬉しいやら恥ずかしいやら...。

「あっ・・・あっ・・・、でもこの子、入門者向けですから...///」

って、あせってしまう自分もいたりします。


というのも、入門者向けに技術を「広く薄く」取り上げているので、個々の内容の深さで言えば専門書には絶対にかないません。固有の製品にあまり深く入り込むような解説は極力避けましたし、普段からアジャイルかつオブジェクト指向でUXとビッグデータ関するクラウドな開発*1をバリバリしまくってる方にはちょっと物足りなく感じるかもしれません。

でも、

「うぉ、オレ上級者なのにamazonでポチっちゃったぢゃねぇか!
どうしてくれるんだゴルァ(・∀・)」

という方にもご安心いただくために、実践編には「2つの使い方がある」ことをご案内しておきたいと思います。

使い方その1:入門者の方が、広く薄く知識を身につけるために使う

最初の使い方はそのものズバリ、「入門者の方の学習にお役立て戴く」という方法です。ここでいう入門者の方とは

  • 新入社員の方*2 〜 2,3年目の方
  • 新入社員ではないけどJavaの開発がはじめての方
  • Javaで開発はやってきたけどアジャイルや設計理論をこれまであまり使う機会がなかった方
  • 「すぐに現場に出られる実践力あります」と就職時にアピールしたい学生さん*3

などを指しています。

使い方その2:中上級者の方が、「後輩への説明をラクにするため」に使う

二番目の使い方は、中上級者の方が自分で読むわけではなく、「とりあえず、これ読んでおいて」と渡すという使い方です。具体的には、

  • 新人さんや後輩が自分の下に付いたが、開発の基礎知識から解説せねばならず大変という方
  • プロジェクトのメンバーの出入りが比較的多く、新たに参加した人へのさまざまなツールや手法の解説が頻繁に発生するという方

などが考えられます。

この本を渡しただけで全ては解決しないと思いますが、自ら説明しなければならない量が大幅に減ると思います。

中上級者の「後輩支援コスト」はバカにならない*4

実はこの「使い方その2」による効果は、私自身が現場で切実にその必要性を感じていたものです。


私の場合、周囲に私なんかよりすごいエンジニアがたくさんいた*5ので大したことはありませんでしたが、「アジャイルやツールなどに詳しい技術者はごく一部。そのわずかな中上級者が他の技術者を支援しながら開発を進め、チーム全体が成長してベロシティが上がっていく」というような構図のプロジェクトも少なくないのではないでしょうか。


必然的に、『コア部分の開発にもっとも力を注がなければならない中上級者に、開発以外の負荷も集中する』ということが起こります。


プロジェクトが火を噴きはじめると、さらに状況は悪化。大量に人員投入を行うことにより、「ただでさえ技術的鎮火で忙しい中上級者が、新しいメンバーや入門者の支援もしなければならなくなってしまう」という非常に厳しい状況になります。*6


先日の記事で紹介した会話シーンも、私的には「Subversionとか、ちんたら説明している場合ではない」というプロジェクト状況でした。

もし「CVS」でも良いから知っていたら...

そのとき私が何を思ったかというと、

 「あぁ、この方がCVSでいいから知っていてくれたら...」

でした。もし相手にCVSの知識があれば、Subversionの解説は一瞬で終わるのです。

CVSと似てるけど、もうちょっとナウでヤングなかんじ*7
細かいところは違うけど、競合とか注意が必要なのはCVSと同じだから。
あとはSubversionに関するサイトをちょっと見てみて。」

でも、CVSの知識(というか、バージョン管理というものの概念)自体がない場合、それはもう大変です。

  • レポジトリとは何か
  • ローカルコピーとは何か(レポジトリ上のものは直接書き換えない)
  • コミット、アップデート、チェックアウトなどの意味
  • 競合とはなぜおこるか。どうすれば回避できるか。
  • 競合がおこったらどうすればよいか

このあたりから切々と説明をしなければなりません。


このとき、強く思ったのが次のことでした。

相手に最低限の概念・知識があれば、類似した製品や手法についての解説は大幅にラクになる。
詳しく知っていてくれる必要はない、少し知っているだけで嬉しい。それだけで、知識ゼロとは大違い。

だから「開発に関係する各分野の知識」を広くまとめておきたいと思いました

そういう想いもあって、『スッキリわかるJava入門 実践編』には、各分野の内容をなるべく広く薄く盛りこむようにしました。詳しい解説をバッサリ捨てたところもあります。


またコラムでは、Javaを用いた開発で見聞きすることになるかもしれない多彩な内容を紹介するようにしました。

  • 静的型付け/動的型付け
  • クリエイティブコモンズ
  • 日本でよく用いられる文字コード体系 *8
  • JVM上で動作するJava以外の言語(Scala, Groovyなど)
  • JSONなどのデータフォーマット
  • 電文フォーマットによる分業インタフェース化
  • 同値分割/境界値分析
  • Maven
  • 名前大事
  • 黄金の回転ッ!
  • etc...


入門書としてのメインコンテンツであるJavaの文法事項などに比べれば、上記のコラムのような補足的内容が開発現場ですぐに役に立つ可能性は低いでしょう。


しかし、いつか開発現場でこれらの用語がでてきたり、これらの技術を使うことになった場合に、「どんなものかぐらいは聞いたことがある」だけで、本人と周囲(先輩)の負荷が大きく緩和すると思うのです。


プロジェクトルームに1冊おいといたら、何か面倒な質問をされたときに「まずここの部分読んで。で、そのあとちょっと補足するから」で済んだ!*9 ・・・なんてことがあったら、嬉しいです。

まとめ

読み終わってもマーケットプレイスに出さず寝かせておくと、
年月に伴い熟成して、いい味でてきます。

*1:なにそれ

*2:気分は新入社員の方を含む

*3:気分は学生さんを含む

*4:火事場であるほど

*5:TDDBC岡山でお会いしたみなさんは、ご存じですね^^

*6:♪このみちーはー いつかきたみーちー(棒)

*7:クズであるとLinus先生はいうてるけどね、というトリビアも添えて

*8:SJIS,JIS,EUCJP,UTF-8及びその別名(MS932, Windows-31Jなど)。ハマるけど根が深い割に、あまり入門書では解説されない

*9:しかも身長も伸びて彼女もできました!