ninjinkun's diary

ninjinkunの日記

4月にDroidKaigiで発表してから、しばらくアウトプットを減らしてのんびりしていた。充電期間というと聞こえは良いけれど、実態としてはぼうっとしていただけである。

自分はこういう意識が高いとき、低いときを一年の中でサイクルとして繰り返している気がする。

意識が高いときは

  • 勉強会で発表する
  • GitHubでモジュールを作る
  • ブログを書く
  • 定期的にランニングをする
  • 週末は食事を作り置きする

など、もろもろの活動ができる。

今回のように意識が低いときは

  • 何もしない、ぼうっとする
  • 漫画を大量に買う
  • ゲームの時間が増える
    • 今回は丁度スプラトゥーンが出たのでな…
  • 飲酒が増える
  • 太る

など、あんまり生産的とは言えない、でも楽しい生活になる。

常に意識が高いモードは疲れるので、一年の半分くらいは意識が低いモードで暮らしている。体重が増えて鏡を見るのが辛くなってくると、またランニングを始めるなどしてモードが切り替わっていく。

そろそろまた勉強会等にも顔を出して行こうと思います。

誰のためのデザイン?増補・改訂版を読んだ

誰のためのデザイン? 増補・改訂版 ―認知科学者のデザイン原論

自分が最初に元の誰のためのデザイン?―認知科学者のデザイン原論 (新曜社認知科学選書)(初版はPOETと呼ばれている*1 )を読んだのは十数年前でした。4月に出たこの改訂版を読み返してみて、改めて感銘を受けました(そして内容をほとんど忘れていたのに気づきました)。

内容としては、エモーショナル・デザイン―微笑を誘うモノたちのために複雑さと共に暮らす―デザインの挑戦など後の書籍で検討された内容が盛り込まれて、ノーマン著作の集大成になっています。

自分がこの改訂版で注目しているのは、「6章デザイン思考」の追加です。

6章デザイン思考

正しい問題を発見するのがデザインである として、そのための手段としてデザイン思考が解説されます。

具体的にフレームワークとして取り上げられている人間中心デザインプロセスを見てみると、

観察→アイデア創出→プロトタイピング→テスト→観察…

というサイクルになっており、他のデザイン思考関連書籍でもお馴染みのものです。

今こういったデザイン思考のためのフレームワークは、Web業界やアプリ業界でもリーン・スタートアップ関連やDesignSprintなどを通じて広まりつつあると感じています(手前味噌ですが、自分が所属しているFablicもデザイン思考が企業文化になっている会社です)。

おそらくこうした業界への浸透の背景もあって、入門書である本書にもデザイン思考の章が追加されたのだと思います*2*3(個人的にはIDEOの本よりこっちの方が読みやすい…)。この章の追加により、POET版の「いい話だったけど、どう活かしたら良いんだろう?」という読後感が払拭されており、より実践的な本になっていると感じます。

最後の参考図書にはAbout Faceなどの書籍等が多数上げられており、デザイン思考へのポインタとしても有用です。

おわりに

改訂を機会に読み返した本書ですが、POET版の良い部分は残しつつ、デザイン思考や企業での実践に言及することでさらに進化していました。

POETを読んだときの自分は学生だったので、「テクノロジーが使いにくいのは人間のせいではなく、デザインが悪いのだ」という発想そのものに感銘を覚えました。

そして今、プログラマーとして社会に出た自分には「テクノロジーに関わる人間全員がデザインを実践することでものは確実に良くなる。そしてそれは楽しい仕事だ」というメッセージがストレートに刺さってきて、そうした自分の変化も再読の面白さの一つでした。

自分はこの本をこの先何度も読み返すと思います。今回25年ぶりの改訂で、また次の25年間も耐えられるようになったとのことなので、次に読むときはどんな風に読めるのか楽しみです。

私が確実に予想できるのは、人間の心理学の原則は変わらず残るということ、つまり、心理学、人の認知、情動、行為、世界とのインタラクションに基礎をおいた、本書に述べるデザインの原則は変わらずに残ると言うことである

誰のためのデザイン? 増補・改訂版 ―認知科学者のデザイン原論

誰のためのデザイン? 増補・改訂版 ―認知科学者のデザイン原論

*1:書名The Psychorosy of Everyday Thingsの略

*2:IDEOなどデザイン思考を牽引する組織はノーマンの影響を強く受けているらしく、POETでまかれた種がデザイン思考として結実し広まったと解釈することもできそうです

*3:自分はこの章を98年のインビジブルコンピュータ―PCから情報アプライアンスへで提案された企業でのデザイン実践と読み比べて、前著での提案が今ではこうやって企業で実践されるようになったのだなーと勝手に盛り上がっていました

社内でジェスチャーの話をしていて、久しぶりにふるふるブックマークのことを思い出した。端末を方向けるとブックマークのインターフェイスが出る斬新な機能。寝転がりながらはてなダイアリーを見ていると突然これが発動して混乱したりしていた。結局誤爆が多かったので取り外されたけど、一年くらいは本番に出ていたと思う。

今見るとスマートフォン黎明期を感じて面白い。


ふるふるブックマーク - YouTube

水着を持ってきていたので(始めはプールに行こうと思って外出したのだった)、東京体育館の50mプールに行ってみる。マッチョな人ばかりでびびる。皆プロもしくはセミプロのアスリートなのだろうか。
久しぶりの50mプールは思っていたよりしんどい。出口に洗い場付きの湯船があって、至れり尽くせりの施設だった。f:id:ninjinkun:20150508235656j:image

連休にしていたけど特にやることがなかったので、前から乗ってみようと思っていた小田急ロマンスカーに乗ってみることにした。
新宿駅に向かう途中でオンライン予約を試してみると、運良く展望車の最前列が取れたのでそのまま乗車。乗ったのは小田急50000形電車 - Wikipediaという「ロマンスカーの復権」を目指して作られた車両で、展望席や連結台車などが特徴であるらしい(すべてwikipediaの受け売り)。なんにせよ豪勢な車両であることはわかる。車内で生ビールを注文できるのに驚いて、いきおい買ってしまう。
途中から横の人が全員下車してしまい、自分だけの最前列席になった。
f:id:ninjinkun:20150508232641j:image
f:id:ninjinkun:20150508232819j:image
f:id:ninjinkun:20150508232836j:image

双眼鏡

ごくたまにコンサートを見に行くのだけど、毎回安いチケットしか買わないので、遠くからしか見られなかった。もう少し楽器の弾き方とか顔とか見たいと思ったので、Amazonで売ってた一番安い双眼鏡を買ってみたところ、すごく楽しめるようになった。手元も表情も見えるし、自分用のテレビカメラを持っているような気分。たった2000円でここまで楽しみ方が変わるとは思わなかった。おそらく観劇が好きな人とか、その筋の人には常識だと思われる。

スマートフォンアプリでリアクティブプログラミングをしているが、Promiseとデータバインディングとして使っている

このところ、複数の人からリアクティブプログラミング(RP)ってつまり何なんですかと聞かれることがあった。そのたびに非同期データストリームが…みたいな説明をしていたのだが、たいてい双方納得した感じにはならなくて、まあ難しいっすね…という感じで終わってしまっていた。

iOSAndroidでの用途

自分は理論より実践からしか考えられないタイプなので、もっと現場寄りの説明ができないか常々考えていた。そこで自分がiOSAndroidアプリを実装する際に使っているReactiveCocoaとRxJavaの用途を考えてみたところ

  • Promise(の高機能版)
    • 複数APIコールを連鎖させたい場合にコールバックヘルを避けたい
  • データバインディング(の高機能版)
    • Modelの変更とViewの変更を同期したい

の2つがメインだった。

この2つはRPライブラリを入れなくても実装できる。JavaScriptならそれぞれに独立した良いライブラリがあり*1、両方ともそこそこ普及している概念だと思う。

クライアントサイドで使うRPについての自分の理解は、この2つの概念と他の用途(イベントと時間、高階関数など)を包括した大統一理論というか、スーパーセットだというものだ。両方を1つのライブラリで実装しようとするとRPの形がしっくりくるし、なるほどストリームって必要だよねというのも感覚では理解できるようになった。

しかしやはり概念として大きすぎる気がするし、実際の仕事では使っていない機能も多い。選択肢がある場合は、小さくて普及しているものを採用した方が、現場の負荷も少なくて良いのではないかと思う。パラダイムの違うもの、怖いし。

プラットフォーム事情

ではなんで自分がRPというスーパーセットお化けを使っているかというと、スマートフォンアプリでPromiseとデータバインディングを実装するために最も完成度が高いライブラリがRPライブラリだったからという消極的な理由である。

iOSではPromiseKitなどのPromise系ライブラリは割とあるし使われていると思う。データバインディングのライブラリもあるのだが、自分の感想ではReactiveCoocaのデータバインディングが一番使いやすかった。

Androidでもライブラリは色々あるが、データバインディングもPromiseも広く使われている実装がないというのが自分の理解。RxJavaがAndroidでも人気なのは、Promiseの良い実装がないからではないかと自分は考えている。

おわりに

RPは大統一理論なので、Promiseとデータバインディングを両方実現できる上に、両方を繋いで!複雑なAPIコールとViewへの反映をObservableで接続!ということもできる。キメると実装者としては大変気持ちが良い。しかしたいていの場合そこまでやる必要は無いし、キマったコードはRPに慣れていない同僚を困らせる。

なので色々できるけど、今のところ自分はPromiseとデータバインディングをやるための便利なライブラリだよという説明を採用しているし、仕事でもその範疇の中で使っている。

RPのパラダイムがもっと普及して、RPで全部を考えるニュータイプが多勢を占めるようになるとこの状況も変わると思うので、それはそれで楽しみである*2

補足

  • サーバーサイドでの用途に言及すると混乱に拍車がかかるし、自分はやっていないので省いた
  • プラットフォームでRxをサポートしている.netの方から見ると事情は全く違うだろうと思う
  • これもよく聞かれるし、自分も前は間違えていたのだけど、React.jsはデータバインディングなどの概念での共通点はあるけど、リアクティブプログラミングの実装ではないという理解
  • 多様なリアクティブプログラミングの世界を覗き見たければReactive Pornがとても参考になる

*1:PromiseはES6で標準になるということだし、データバインディングにはAngular.js, vue.jsなどがある(らしい。使ったことはない)

*2:実のところ周りにもニュータイプは何人か居るのだが…

DroidKaigiの発表を募集しています(2/25締め切り)#droidkaigi

DroidKaigiというAndroidエンジニアのお祭りイベントで、現在発表を募集中です。自分もスタッフとして参加しつつ、会社のアプリのMaterial Design対応についての発表で応募する予定です(つまりまだ応募していない!君も間に合う!)。

自分はずっとスマートフォンアプリエンジニアにもYAPCのような大きなお祭りイベントがあると良いなと思っていました。今年こそDroidKaigiで発表するぞ、今年はDroidKaigiで発表できたので俺がんばった、みたいに思えるイベントになると良いなと思ってます。

今集まっている発表が、割と低レイヤーだったり硬派なものが多いので、もう少しUIやデザインぽい話題や、普段こうやってアプリを作っているみたいな話も欲しいねとスタッフ間では話しております。

DroidKaigiは初開催ですが、自分の経験上こういうイベントは発表者側に回ると倍くらい楽しめます。というわけでDroidKaigiはあなたの発表をお待ちしています