はじめてのAndroidプログラミング

私にとってモバイルや通信は全くの専門外ですが、勉強も兼ねてボランティアで日本語学習者を対象とした Android OS 向けの辞書アプリを作成しています。その際に利用した最初かつ唯一の入門書が本書になります。


超初心者でも大丈夫! はじめてのAndroidプログラミング Android Studio 2対応

取り敢えずのJavaの基礎さえあれば、これ一冊で導入から短期間でアプリケーションの開発ができてしまうのですから驚きという他にありません。

もちろん、私自身は全くの初心者という訳ではなく、学部生の時分にはアルバイトで分散リアルタイム解析を行っていたぐらいのJavaの知識はあります。

冒頭の写真にある参考書の内容ぐらいは把握していますので、その程度の知識と経験を持った上での感想である事をご了承ください。



本書の構成は章ごとに独立したアプリケーションの作成を通して新しい内容を学ぶ事に一貫されており、まずは開発環境のAndroid Studioの導入と設定に始まり、画面の作成、画面の遷移、ダイアログ表示やカレンダー、センサーの利用と進み、最終的に OR Mapper や外部の Web API を用いたアプリケーション開発までの範囲を網羅しています。

これだけ幅広い内容を取り扱いながら、文字コードの設定 (日本語入力に必須) やエディタの行数表示などの細かい部分にまで気が配られている事に好感を覚えます。

『はじめに』に記述されている「プログラミングの初心者でもつまづかないよう」にとの配慮でしょうが、それだけにエラーメッセージについての項目がなく「ツールウィンドウがある」という表記に留まっているのが少し気に掛かりました。

詳しくは後述しますが、プログラミングでつまづいた際に解決する手掛かりとなるのがエラーメッセージなので、ググり方を知らない本当の初心者だけでなく「ある程度の経験がある」読者のためにもあっても良いのではないかと思われました (私は最初の頃はエラーで苦労しました)。

それというのも本書のコードを見ながらメソッドを穴埋めしていくとビルドに失敗したり、クラッシュしたりする事が何度かあったのです。

そこでエラーメッセージを見直してみると次のような警告がなされていたりします。

このエラーが出る原因は android.app.DialogFragment を読み込むべきところに自動インポートで android.support.v4.app.DialogFragment を読み込んでいる事にあります。

本文の説明やサンプルコードには android.app.DialogFragment をインポートするとしっかり書いてありますが、(自動インポートだけに) コード解説部分では省略されているので気が付かないと何処が間違っているのか分からずに立ち往生します (インポート部分だけはサンプルコードからコピー&ペーストした方が確実です)。



さらに困った事には、現行の Android Studio 2.2.2 でボタンの OnClick 動作を行うとプログラムが落ちてしまう事があります。

これは Android Studio のバグかもしれません が、Android入門者には何が起こっているのか見当もつきません。

Javaの開発経験で養った勘を活かして次のようなエラーメッセージを確認する事で、初めて何が起こっているのかを把握する事ができます。

これを見るとメソッドを見つける事ができない事が原因となっているので、activity_main.xml を編集して手動でメソッド名を追加してしまえば何とかなるのではないかと対処方法を考える事ができるようになります※。

換言すれば、若干、不足気味と感じられたのは問題発生時の対処程度であり、入門書で扱う範囲については過不足なくまとめられている良書であると思われました。

さすがにGradleによるビルド等には触れられていませんが、この一冊だけでAndroidアプリケーションの構成からGUIとイベント処理、ミドルウェアの取り扱いについて不安がなくなった事は事実です。

章ごとに独立したプロジェクトを立ち上げるのでアプリケーションが乱立気味にはなりますが、その分、繰り返す事により後半に進むに連れて展開が予想できる程にAndroid開発に慣れてきます。

この章ごとに独立した構成から最初の4章までを除いて、以降は興味のある内容を扱った章のみを摘み食いしても差し支える事はおそらくありません。

総評すると最初の一冊としての選択として間違いのない内容であったと思われました。




※ この問題については Layout の編集において”Text”タブをクリックし、

上の部分を次のように書き換えると無事に参照できるようになります。専門外なので原因は分かりません。


余談

プログラミング初心者の方の為に追記しますが、第2章のレイアウトXML編集 (レイアウトエディタ) では本書で紹介されている LargeText が存在しない為、自己判断で Plain Text で代用しました。

変数の参照さえ合っていれば、部品は何を使っていてもプログラムとしては問題ありません。

同じく第4章では、ボタンクリック後の遷移先の画面に空の (画像を指定しない) ImageViewを作成できなかったので Drawable の中の適当な画像を選択して my_hand_image を作成しています。

プログラムの構造上、この変数は遷移前の画面で指定された画像に置き換わる事は自明なので、本書と同じように空の ImageView が作成できないという理由で立ち止まらず、変数だけ作成してしまって先に進んだ方が賢明です。

関連記事:

これから Linux を始めるなら

好むと好まざるとに関わらず、これから初めて Linux に触れようとする人には『新しいLinuxの教科書』がオススメです。

この書籍の凄いところは、記載内容に無駄なところが一つもない点で、書かれている内容は Linux を使用していく上で実際に役に立つものばかりです。

本書の内容を 100% 理解していれば、今後の Linux を使用した研究、開発、システム運用などがスムーズに行えるようになることは容易に想像できます。


新しいLinuxの教科書

もっと早いうちから、この本に出会いたかったなというのが正直な感想です。

特に大学の学部4年、大学院の修士1年ぐらいの時に読了していれば、その後の研究生活は随分と楽になっただろうなと思えます。

私と Linux との出会いは、ちょうど2000年代の終わり、2010年代の始まり頃で、大学の研究室に入ったら、いきなり CentOS を使用することになりました。

私の研究室は学部レベルでは電気電子に所属していたので、新入生はほぼ全員が初めて Linux に触れる素人ばかりでした。

当然、研究生活に必要な知識を身につけるための勉強会が毎日のようにあったのですが、その内容がまさに本書の内容とほとんど同じだったので驚きました。

相違点があるとすれば、グリッド・コンピューティングや独自ライブラリの使い方、ドキュメントの書き方も勉強会には含まれていたことぐらいです。

それぐらい実践的で、直ぐにでも役に立つ内容ばかりです。




日本で広く使われている CentOS を対象としている点も実用的で好感が持てます。

いくら Ubuntu の方がハードウェア認識率が高くても、Gentoo の方がシンプルで使いやすくても、研究組織や企業で最も使われていることを考えると、日本語環境から自由にならない限りは CentOS との付き合いは避けては通れません。

これだけ実用的な本書ですが、 (残念ながら) もちろん一冊で必要なことが全て学べる訳ではありません。

本書中にもある Vi(m) エディタの使い方やシェルスクリプトの書き方、頻繁に使うコマンドラインツール、 バージョン管理システム (Git) の使い方などは本書の断片的な情報に留まらず、別の書籍も用いて網羅的に学んだほうが良いです。

また、そのタイトルに反してカーネルやデバイスドライバについて書かれた書籍ではないので、Linux や OS について詳しく学ぼうとする用途には適していません。

実のところ、私はハードウェアに近い低レイヤの理解を深めたくて本書を手に取ったので、その点ではあまり役に立たなかったとも言えるのですが、勘違いという一面もあるので仕方ありません。

いまやネットワークサーバだけでなく、Android 端末やドローンや組み込みシステムに普遍的に用いられている Linux への理解を深めることは無駄にはなりません。

そのための第一歩として本書は間違いのない教科書です。

ただし、Linux を実際に使うのであれば、他にも読んでおくべき本はたくさんあるので、本書だけに留まらず、実現したい目的に応じて周辺知識も同時に学んでいくことが重要です。

以下は読んでおくべき本の一例


Advanced Programming in the UNIX Environment (3rd Edition) (Addison-Wesley Professional Computing Series)


Computer Networks: Pearson New International Edition


An Introduction to Database Systems

表計算ソフトを常用する人に勧めたい『10年戦えるデータ分析入門』

10年戦えるデータ分析入門』という本を読みました。

この書籍の趣旨は、データベース操作言語 SQL を使って分析を行いビジネスに役立てようというもの。

なぜSQLを使うのか (どうして Excel や R や C++ ではいけないのか) という根本的な疑問に対して、著者は第1章の冒頭から SQL を使うことが適当である事の明確な根拠を提示します。

第2章でリレーショナルデータベースについての導入が行われ、以後のページの大半を占める第1部は日常業務で便利なデータの探索や集計の具体的な実行方法の解説に費やされます。

普段は意図して触れていませんが私もソフトウェア開発に携わる者なので、これだけであれば本書に内容的な新規性を見出す事はなかったでしょう。

本書が特徴的であるのは、検索したデータを表示する際に「limit節で表示行数を絞る (48p) 」などの具体的なアドバイスや HAVING や GROUP BY などの「select文の節の実行順序 (77p) 」など、自明であると思われている (事が多い) が故に省略されがちな項目についても丁寧に記述されている点です。

先述の SQL (リレーショナルデータベース) を使う事が適当である理由とも合わせて、データ分析よりもむしろデータベースに初めて触れる人に最初に読んでもらいたい本であると思われた事が、本書を購入した実の理由です。

本書では「正規化」と「テーブル作成」という言葉こそ登場しますが、具体的な正規形や論理設計の詳細には触れられていません。まして通読中に物理設計やパフォーマンスを意識する事は基本的にはありません。

こうした割り切った構成で、集計表の作成など日常業務で頻繁に使われるデータの参照方法に特化している点に好感が持てます。

(知らずのうちであったとしても) データベースに触れない日はないほどデータベースが普及している今日では、そこに蓄えられたデータを参照して活用できるようになる事が第一で、新規にデータベースを設計する為の技術は必要になってから学べば良いからです。

そうした意味で第1部を読み終えた後に更にテーマを深化させた内容としてお勧めしたいのが、『達人に学ぶ SQL徹底指南書』です。

CASE式を使った条件分岐から始まり、行列変換、行間比較、集合演算など、SQL だけでここまで表現 (分析) できるのかと感嘆し、長すぎる 学生生活の中で何度も読み直したものですが、データ分析のためのSQL技術書という点で本書の延長上に位置する内容となっています。




一方、SQLを用いた分析システム構築について触れた第2部については、一転して概念の導入的な記述が増えます。一つ一つのテーマについて具体的に触れていると、それだけで分厚い本が何冊も書ける容量と高度な専門性が要求される内容となってしまい本書の趣旨が曖昧になるので、導入に留めて詳細は他の書籍に譲るという割り切りなのかもしれません。

第2部の内容のみでシステム設計ができる訳ではありませんが、重要な項目は一通り押さえられています。対して本書を通して触れられていない項目には、内部スキーマ、サイジング等のパフォーマンスに関連するもの、相関等の統計的な分析手法、分析結果の可視化と評価等があります。

そうした点を加味しても、本書に対する私の印象は通読するだけの価値があったというものでした。表計算ソフトを日頃から常用しており、入力する行数が増えてくるとパソコンの反応が鈍くなって埒が明かないと思う人にとっては、SQLの利用により劇的に作業効率が上昇する事も十分に考えられる為、本書を上梓して下さった著者に賞賛を送りたい気分でさえあります。

本書の参考文献には挙げられていませんが、経営視点からのデータ分析について私は個人的に『14のフレームワークで考えるデータ分析の教科書』をお勧めします。どのようなデータを収集し、何の目的に使用するかを具体的に記述している点が特徴です。

統計学については『統計学入門』と言いたいところですが、読み手を選ぶので『完全独習 統計学入門』あたりをまず一読される事を提案いたします。

機械学習については ベイズの 定番 Pattern Recognition and Machine Learning (Information Science and Statistics) も良いのですが、昨今の日本語書籍の充実ぶりも目覚ましいものがあります。

中でも個人的にお勧めなのが『言語処理のための機械学習入門 』です。

必要な数学的知識 (最適化・確率・情報量) から始まり、深層学習の登場以前の種々の手法について丁寧に解説されています。

Contact Us