Udacity: Developing Android Apps ファーストインプレッション

昨日から公開されている、UdacityGoogleが提携して作ったコース、How To Develop Android Appsを、Lesson 4aを終えたところまで進めました。内容的には、Sunshineという天気アプリを作りながらAndroidについて学んでいく、プログラミング経験者向けのある程度上級者向けコースとなっています。

ここまで進めてみての印象を箇条書きで書いてみます。

良い点

  • Googlerが講師なので安心。
  • 使うIDEAndroid Studio
  • Udacityのコース全般に言えることなのだけど、理論と実践のバランスが良い。

悪い点

  • コードを伴うクイズのほとんどは、指示されたことができたかどうかの確認だけ。他のコースのようにブラウザ上のIDEに直接打ち込んで正解かどうか判定するものが少ない。
  • これを書いている時点で字幕がついてないので辛い。

Web APIの使い方やJSONの扱い方の他、テストについても触れており、随所にTipsも盛り込まれていて、実践的に作りながら学べていい感じです。

他にUXにフォーカスしたUX Design for Mobile Developersも開講しているので、こちらも受講してみようと思います。

Smashing Android UIを読了

iOSアプリ開発に手を出してみて感じたのは、やはりAndroidと比べてどちらが難しいとか簡単とかいうところは無く、どちらも細部までいじろうとすると難しいということでした。特にデータベースの扱いや並行処理なんかは共通して面倒が多い部分に感じました。これは何もモバイルアプリ開発に限ったことではないと思いますが。とにかく、どちらが楽ってことは無いということが分かっただけでもiOSを触ってみてよかったと思います。

というわけで結局Androidアプリ開発に舞い戻ってきました。まずは途中まで読んでいたSmashing Android UIを最後まで読むことにしました。

この本はAndroid UI Patternsを運営しているJuhani Lehtimäki氏によるもので、第1部がユーザーゴールやペルソナといったUXを高めるための手法やコーディングを始める前のツールや考え方、第2部がAndroidプラットフォームの機能とUIコンポーネント、第3部がAndroidでのスケーラブルなデザイン、第4部がアンチパターンも含めたAndroidのUIデザインパターンという構成になっています。

ポップアップは原則として使わないといった、ユーザー視点から見ることの重要さが繰り返し強調されています。
よくiOSのデザインをAndroidにそのまま持ち込んじゃいけないと言われますが、その理由として、ユーザーが複数のスマートフォンを所有していることは滅多にないからと書かれていてなるほどと納得しました。

各章ごとにちょうどいい長さでよくまとまっていて、Google公式のDesignガイドを読む前にこれを読んでおくと全体像が見えていいんじゃないかと思います。

Smashing Android UI レスポンシブUIとデザインパターン

Smashing Android UI レスポンシブUIとデザインパターン

Objective-C Programming: The Big Nerd Ranch Guide (2nd Edition)を読了

Objective-C Programming: The Big Nerd Ranch Guide (2nd Edition)を読み終わりました。
まえがきに、「概念を学び、すぐに実践することがプログラミングを学ぶ最良の方法」と書いてある通り、他のBNR本と同じく、コードをたくさん書いていく、かなり実践的な内容の本でした。

まずはCのコマンドラインツールを作りながら、3章から12章まで、変数や関数、条件分岐やループといった、プログラミングの基礎を学んでいきます。このへんは他の言語でプログラミングの基礎は学んでいて、Objective-Cだけ学びたいという人には少し退屈かもしれません。ただ、関数の章で、フレームやスタックといった概念まで説明しているのは入門書としては丁寧だなと思いました。少しですが再帰まで登場します。

13章からいよいよObjective-Cについての内容になり、Foundationタイプのコマンドラインツールを作りながら、クラスやオブジェクト、Objective-C固有のNSStringやNSArray、プロパティ、コレクションなどについて学習していきます。このあたりでもメモリの管理などについても触れられています。

コールバックについて学習したあとで、31章ではiOS、32章ではCocoaで、簡単なto-doアプリを作る章が続きます。iOSでは一切Storyboardsを使わずコードで書く方法を取っていて、こういうやり方もできるのかと勉強になりました。反対にCocoaではxibを使ったやり方をしています。そのあとはObjective-CとCの高度なトピックの章のあと、最後にObjective-Cのランタイムについての付録で終わりとなっています。

最初に書いたように、実際に手を動かしながら学んでいくスタイルの本なので、とても楽しく、一気に読み終えることができました。Challengeという章末問題用のアプリも含めると、42個ものアプリが出来上がっていました。多くのコードを書くことで、Objective-Cの独特の記法にも慣れることができたように思います。

これでObjective-Cの初歩はつかめたので、次は同じBig Nerd RanchのiOS本に移ろうと思います。

Objective-C Programming: The Big Nerd Ranch Guide (2nd Edition) (Big Nerd Ranch Guides)

Objective-C Programming: The Big Nerd Ranch Guide (2nd Edition) (Big Nerd Ranch Guides)

iOSアプリ開発に手を出してみてる

Android開発を始めたばかりの僕が読みたかった本 - RejasupoemAndroid開発を始める上でおすすめの4冊を参考にして、Effective Javaを読んでいたのですが、あまりの難しさに挫折してしまいました。全然初心者の域を脱していないんだなということを痛感しました。そこで、なにか気分転換をするかと思い、せっかくMacもあるんだしということで、iOSアプリ開発に手を出してみました。

まずはRebuild.fm 39でも少し話題になっていた、アップル公式のチュートリアルであるStart Developing iOS Apps Todayをやってみました。必要になる知識の説明をしたあと、Tutorialで実際にXcodeを使ってStoryboardsやコードを弄っていくという流れで、ToDoアプリを作りながら学べるチュートリアルです。よく出来ていて、iOSアプリ開発がどんなものかつかむことができました。やはり手を動かしながら学ぶスタイルが自分には合っていると思いました。

次はAndroidでもお世話になったBig Nerd Ranchの2冊を買ってみようかと思います。

Objective-C Programming: The Big Nerd Ranch Guide (2nd Edition) (Big Nerd Ranch Guides)

Objective-C Programming: The Big Nerd Ranch Guide (2nd Edition) (Big Nerd Ranch Guides)

iOS Programming: The Big Nerd Ranch Guide (4th Edition) (Big Nerd Ranch Guides)

iOS Programming: The Big Nerd Ranch Guide (4th Edition) (Big Nerd Ranch Guides)

増補改訂版 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)