増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編を読了

これもHead First Design Patternsを読んだ動機と同じく、CourseraのAndroidのコースJava並行処理プログラミング ―その「基盤」と「最新API」を究める―が推薦図書に入っていたことから、その前に読む本として勧められているこの本を読んでみました。

僕は記憶力が弱くて、覚えたつもりのことをすぐ忘れてしまうのですが、この本では章の頭にある図と例え話がすごく役に立ちました。
各章の終わりに、関連するパターンとして他の章のパターンがリストされているのですが、名前だけを見ても「どんなパターンだったっけ…?」となることが多いのです。しかし、章の頭にある絵と例え話を読み直すことで、「ああ、あのパターンか」と思い出すことができました。Producer-Consumerパターンだったら「ケーキを作るコックとお客のやつね」といった具合です。

説明が丁寧で、解りやすい本なのですが、欠点を挙げるとすれば、java.util.concurrentについては補足でおまけ程度にしか取り上げられていないことでしょうか。もう少し掘り下げて書いて欲しかったかなと思います。僕の理解力が足りないのかもしれないですが、Executorの使い方とか未だによく解っていないです。

あと感想として、並行処理のデバッグはすごく大変そうという匂いが、写経しているだけでもぷんぷんしました。これを実務でやるとなると相当な経験が要求されそうな感じがします。この本に書かれているように、synchronizedなどを使う時にそれが何を守っているかといったことを、きちんと把握してコードを書くことが求められるのだろうなと思いました。

Head First Design Patterns読了

Head First Design Patternsを読み終わりました。この本も去年の11月頃に手をつけたのにしばらく放置しており、読み終わるのに長くかかってしまいました。もう少し本を読んでいくペースを上げていきたいところです。

概要

GoFの23のパターンのうち、核となる14のパターンを取り上げています。残りの9つについては、付録で2ページずつ割いて紹介されているだけで、全てのGoFパターンを網羅している増補改訂版Java言語で学ぶデザインパターン入門と比べると劣ってしまう部分かもしれません。GoF以外のパターンとして、MVCについてもCompound Patternの章で取り上げられています。

コードはJavaで書かれており、Head First Javaを読み終わった読者を想定している部分もあるため、先にそちらを読んでおくといいと思います。

Head Firstシリーズ恒例ですが、擬人化インタビューや対談が途中に入り、面白おかしく学ぶことができます。特に類似点のあるデザインパターンを対談させて、違いを洗い出させる対談は読み応えがあります。

各章の流れ

各章は概ね、順番が前後したりしますが、パターンが必要になる場面を取り上げる→まずはパターンを使わずに実装→パターンを使って書き直し→パターンの説明と定義→最後にコードで実装という流れになっています。
場面としては、Strategyパターンではアヒルゲームで各種アヒルにfly()やquack()というメソッドを持たせる時、Decoratorパターンではコーヒーショップでトッピングを加えていく時などがあります。こういう時に使えばいいのかということや、パターンを使うことでいかに改善されるかが解りやすいです。

感想

Big Nerd RanchのAndroid本でSingletonが出てきたことや、CourseraのAndroid SpecializationのコースGoF本が推薦本に入っていることもあり読んでみたのですが、色々なパターンがあり、よく考えられているなと思いました。
ただ、1回通して読んだだけでは、もうどういうパターンだったか忘れてしまったパターンもけっこう出てしまっているので、余裕があれば結城さんの方の本も読んでみたいと思います。

この本の最後の方で、デザインパターンは"Big gun"であり、あくまでツールの一つなので、使う必要がない場合は使わないということが書かれています。適切な場面で適切な設計ができ、適切なコードを書けるのが理想でしょうが、そこを目指して勉強していきたいです。

Head Firstデザインパターン ―頭とからだで覚えるデザインパターンの基本

Head Firstデザインパターン ―頭とからだで覚えるデザインパターンの基本

Android Programming: The Big Nerd Ranch Guide読了

途中で挫折したりして間を空けながらでしたが、やっとAndroid Programming: The Big Nerd Ranch Guideを読み終わりました。記録を見ると、読み始めたのは去年の10月末からのようです。洋書ということもあってけっこう時間がかかってしまいましたが、なかなかいい本でした。

内容

クイズアプリ、オフィス犯罪アプリ (これがメイン) 、フォトギャラリーアプリ、位置情報追跡アプリなどを作りながらAndroidについて学んでいく本です。対象読者はある程度Javaの基本を学んだ人です。

本の進め方

本の進め方としては、打ち込むコードが細切れになっていて、それぞれきちんと説明があるので解りやすいです。また、一気に作り上げるのではなく、まずはLogを吐くだけにしておいて、進めていくうちに本当の機能を追加していくという段階を踏んで作っていくので、実際の開発手法に近い形で進めていくことができます。ただ単に目指す機能が動くものが出来ればいいというだけでなく、グッドプラクティスに沿ってアプリを作っていく感覚があるのがいい感じです。

ですが、開発経験の少ない僕にはクラスの分割など、なぜそのように分けるのかといったことが完全に理解できず、まだまだ真似できる気がしません。この辺は実際に実践しながら覚えるしかなさそうです。

Fragmentを全てのアプリで使用

最大の特徴としては最初のアプリを除く全てのアプリで1ペインのものでもFragmentを使用しているということでしょうか。FragmentはモダンなAndroid開発に欠かせなくなっているという印象があるのでこの辺はいいところだと思います。2013年4月発売と比較的新しい本ならではというところです。

ただ、Activityだけを使ったシンプルなものに比べると当然ながら複雑化してしまうので、少し取っ付きにくさは増してしまいます。実際に2ペインな画面を作るのはけっこうあとの方になってからというのも、Fragmentを使う利点を実感しにくくしているかもしれません。

アプリは章を複数またぐ

一つ難点を挙げるとすれば、章をまたいでアプリを作っていくので、特定のトピックだけを拾って習得したいという人には不向きかもしれないということでしょうか。

これから

とりあえず基本はこの本やCourseraの講座で抑えることができたので、いよいよ開発に取り組んでいこうと思います。まずは簡単なものから作っていこうと考えています。

Android Programming: The Big Nerd Ranch Guide (Big Nerd Ranch Guides)

Android Programming: The Big Nerd Ranch Guide (Big Nerd Ranch Guides)

Oracle Certified Java Programmer, Silver SE 7に合格しました

初めてのベンダー資格試験、Java Programmer Iを受けてきました。帰りのバスで結果を確認したところ (結果出るの早い!) 無事合格していました。前日にやったスピードマスター問題集の模試の正解率がよくなかったので不安でしたが、正解率93%とある程度余裕を持って合格できました。

後ろ向きな考えなんですが、3万円近い受験料をドブに捨てるのは嫌すぎたので嬉しいです。

使った教材

日本では下の2冊しか対策本は出ていませんが、Javaの基本が解っていれば、両方を何周か回すことで十分合格ラインに達することができるはずです。僕の場合Studyplusの記録によると35時間弱を費やしたようです。もう少しかける時間を少なくできたと思うのですが、合格ラインが高いので慎重を期しました。

試験には全く同じ問題もいくつか出てきました。あとは、あくまで僕の感覚ですが、本番はコードの無い知識問題がこれらの本の模試よりも多かったように思います。

オラクル認定資格教科書 Javaプログラマ Silver SE 7

オラクル認定資格教科書 Javaプログラマ Silver SE 7

オラクル認定資格教科書 Javaプログラマ Silver SE7 スピードマスター問題集 (EXAMPRESS)

オラクル認定資格教科書 Javaプログラマ Silver SE7 スピードマスター問題集 (EXAMPRESS)

受験チケットを買うならNECラーニング

受験チケットはNECラーニングだと今現在だと10%引きで安く買えるようです。今回は事情があって利用しませんでしたが、元が高いのでかなりお得だと思います。

日本独自のJava SE 7資格認定パス

ここからの話はオマケなんですが、Java SE 7の資格は2012年春から日本独自の資格認定パスが設定されました。詳しくはOracleのこちらのページに詳しく書いていますが、SilverはOracle Certified Associate, Java SE 7 Programmer (OCJ-A)、GoldはOracle Certified Professional, Java SE 7 Programmer (OCJ-P) から名前を変えただけで、海外では今でも元の名前が使われています。これらに加えて日本ではBronzeという新たな資格が存在します。Silverの範囲をあまり変えずに浅くしたような試験で、おそらく学生を対象としたもののようです。

ただ学生の就職サイトを見ると、保有資格の選択項目にBronzeはなく、サーティファイのJavaプログラミング能力認定試験がある場合が多かったりします。あまり普及していないのでしょうかね。

日本独自の試験時間と合格ライン

もう一つ日本だけ海外と違うところを言うと、試験時間と合格ラインが海外とでかなり違っています。アメリカ、イギリス、インドのサイトを確認してみたところ、どれも150分、63%なのですが、日本だけ140分、77%です。サイトの誤植かと受けてみるまで半信半疑でしたが、実際にそうでした。日本だけなんでこんなに厳しいのか謎です。

あとサンプル問題の解答が問題数と合ってなかったりで微妙です。

Next...

このままGoldを目指すかどうか迷うところです。引っかけや重箱の隅をつつく問題がけっこう多いので、そういった問題に対する知識を増やすのに時間を費やすよりは、もっとコードを書く時間を増やしたいというのが本音です。The Java Tutorialsを継続的に読みつつ、スキルが上がった段階でまた受験を検討したいと思います。

Sublime Textでサクッとシンタックスハイライトを変更する方法

Sublime Textでサクっとシンタックスハイライトをオンにする方法です。ファイルを新規作成したあとなどに使えます。

やり方は簡単で、Command + Shift + P (Macの場合) でCommand Paletteを開いたら、ssと打ったあとにハイライトしたい言語を入力すればOKです。Javaの場合はssjava、HTMLの場合はsshtmlといった感じです。

Stack Overflowに載っていたやり方です。
Sublime Text 2 - key binding to change syntax - Stack Overflow

2014/01 勉強振り返り: Courseraにハマりつつある

今までこのブログは「である」調で書いてきましたが、このエントリーから「です・ます」調に変えていこうと思います。読み手に与える印象もそうですが、書きやすさの面でも、文章を書き慣れていないためか、「である」調は少し書きにくさを感じていたためです。

では1月の勉強を振り返りたいと思います。

Coursera - Creative, Serious and Playful Science of Android Apps

先月に引き続き受けています。イリノイ州地元の女性ミュージシャンと一緒に、その人の曲を使ってMediaPlayerやActivityのライフサイクルなどについて習う回が面白かったです。

5週目までがAndroid Developer Trackで、ここまでで合格点を取っていれば、Statement of Accomplishmentという修了書はもらえるみたいですが、やっていて楽しいので、このまま6週目以降のComputer Science & Programming Trackも受けてみようと思います。今まではほとんどコードを書きませんでしたが、ここからは条件分岐とかJava APIの使用など本格的なプログラミングが入ってくるようです。

Creative, Serious and Playful Science of Android Apps | Coursera

Coursera - Programming Mobile Applications for Android Handheld Systems

上のコースと違ってお堅い雰囲気です。まずはAndroidの構成要素から始まって、Activity、Service、Content Provider、Broadcast Receiverと掘り下げていくようです。ついていけるかどうか少し不安ですが、2週目まで受けたところまでは既に大体知っている内容なので、ついていけています。新しい要素が入ってきた時が頑張りどころになりそうです。

先日CourseraでSpecializationという、複数の関連するコースをひとまとめにしたものが新たにスタートしたのですが、このコースもMobile Cloud Computing with AndroidというSpecializationに入っています。これを取得してみようかと検討中です。
Specializationを取得するには、各コースでSignature Trackという有料のオプションに参加し、証明付き修了書を取得したあと、Capstone projectという最終プロジェクトを完了する必要があります。 それぞれ$49と安い値段ではありませんが、本1冊 + αの値段で一流大学の講義が受けられると考えれば高くはないかなと思います。なによりお金を払っているからには最後までやらなければというモチベーションになるのではないかと思います。実際にSignature Trackに参加している受講者はそうでない受講者に比べて修了率が高いそうです。

まずはこのコースだけでもSignature Trackに参加して、しっかり最後までやり遂げてみようと思います。

Programming Mobile Applications for Android Handheld Systems | Coursera

炎のAndroid開発道場

入門書の次に読む本という触れ込みに惹かれて購入しました。

初めは最初から読み進めていたのですが、パフォーマンスなどは今の自分のレベルだと内容的にまだ早いかなと感じたので、第4章の途中まで読んだところで切り上げて、使えそうなところだけを拾い読みしました。 その中でも第8章のEclipseの使い方は参考になりました。Quick FixやQuick Assistはあまり使っていなかったのですが、これからは積極的に使っていこうと思います。

いくつかアプリを開発してみたあとで、また読み直したいと思います。

炎のAndroid開発道場

炎のAndroid開発道場

オラクル認定資格教科書 Javaプログラマ Silver SE 7

FE -> AP -> SCと取れたので、次の資格は何がいいかと考えた時に、どうせJavaやってるんだし、それだったらオラクルのJavaの資格でも取っておこうかと思い勉強を始めました。
本当は資格の勉強なんかせずに、実際に何かアプリを作ったりと実践的なことに集中したいのですが、学校の関係上なにかしら資格の勉強をしなければいけないことになっているので、渋々やっています。

内容的には基本的なことなのであまり問題はない感じです。巻末の模擬試験でも安全圏の点数を取れたので、近いうちに受けてみようと思います。

オラクル認定資格教科書 Javaプログラマ Silver SE 7

オラクル認定資格教科書 Javaプログラマ Silver SE 7

Courseraで一連のAndroidコースが2014/01/21からスタート

Courseraでメリーランド大学とヴァンダービルト大学による、機関をまたいだ一連のAndroidコースがスタートするみたい。

これら3つのコースに加えて、総仕上げとして、これまでに習ったことを実践する"マスターコース"があるのだとか。
なにやら難しそうな感じだけど、まずは最初のコースだけでも受講してみようと思う。