懸案のiPhoneアプリの制作は、プログラム部分は8割ほど完成しつつもコンテンツとデザイン周りの整備がだいぶ残っててその作業はまだ骨が折れそう。ていうかAppStoreに登録する手続きがまた大変だとかなんだとか。いずれにしろSDK3.0ベースだからリリースできるのは6月以降なのでまぁぼちぼち進めてるんだけど、そうこうしているうちにGWはすっかり何の予定もなく、いくつかお誘いがありつつも、どうしようかなぁと・・・。ていうか孤高のソロハイカー(笑)のつもりだったんですけど今年はパーティー志向に転向かもしれない。
お休みに遊びにいくためにも、どうすれば効率的にソフトウェアを作れるのかが今の最大の関心事。ていうか基本の骨組み部分は本来は一夜のうちに作ってしまいたい。
そもそもプログラミングがソフトウェアの品質にとって重要になるのは、パフォーマンスチューニングしたり独自のアルゴリズムを実装したりとかしなければいけないときだけで、そうでなければあまりプログラミング自体に手間をかけずサクッと作れることが理想なんだよなぁと。むしろインターフェースや導線の設計、ユーザビリティ、コンテンツの精査なんかのほうがよっぽど重要でそっちに力を入れたい。ていうかプログラミングの腕ではそもそも勝負できないからそういうものは作らないし。
以下、いくつか疑問点。
–
・ウォーターフォールか?プロトタイピングか?
頭のなかで実現したい方向性は見えていて、でも細かい仕様は漠然としてるんだけど、だいたいのイメージを持ってから作りはじめる。で、大抵は何度も一から作り直すはめになるorz。実際に画面に表示して操作してみるとやっぱりこうすればいいじゃんとか、ここは不自然だなとか、いろいろ出てくる。データモデルもテストデータの段階で想定していたものから違ってくることも多いし、技術上のハードルなんかも想定していなかったものがボロボロ出てきたり、そうこうしているうちにコードが荒れてきて全面的に土台部分から設計見直しを余儀なくされると。
じゃあ最初からかっちり仕様を固めて、細部の画面設計まで落としてから作り始めるか?というとそんなヒマがあったらコードを書いてプロトタイプ動かしながらあれこれ悩んだ方が早いわというか、どうせ一人なんだしとかって思ってしまう。
じゃあ仕様の不確実性を見越して、最初からかなり抽象度の高い設計にしておけばいいんじゃね?とかやってると、コードが複雑になって可読性も悪くなり、扱うファイルもどんどん増えていって手に負えなくなる。ひとりデスマーチなんかしゃれにならんわけで。
–
・抽象化か?ハードコーディングか?
あらゆるものはオブジェクトであるとかなんとかいってクラス作りまくってサブクラスのサブクラスとかどんどん増えていくクラスバブルに陥るのは愚行だとして、じゃあ一つの汎用的なクラスでif文で分岐させてグリグリとハードコーディングしていくべきなのかというとそれも醜いわけで。どこで抽象化の断を下すのか、それもある程度進んでみないとわからない。やはり最初は手っ取り早くハードコーディングしてまずはモノを動かしつつ、ある程度仕様が固まってきた段階で全面的にリファクタリングをかけてデザインパターンを整備していくんだけど、なんだかムダというか面倒だというか、最初からDRYなコードを書ければ手間も減るんじゃないかとか。
イメージが漠然とした段階から一発で最適なクラス設計ができればいいんだけど、とはいえそうすると最初から設計が構造化されてコードが分散してプロトタイプを初動するまでのコーディング量が増えるからいきなり連結テスト?みたいなことになって崩壊してしまうんじゃないかと。モジュールごとに単体テストしながらとかできればいいんだけどGUI型のイベント駆動のアプリケーションってそういうのどうやるの?ていうかテスト駆動でモジュールごとにちまちま作っていくのが苛立たしいというか性に合わないというか、画面にバーンと表示してくれないとモチベーションが上がらないというか、やはりエンジニアじゃないので、バラバラのモジュールからボトムアップしていく思考体系というよりかは最終的なのUIから発想していく作り方にならざるをえないんだよなぁと。で、一足飛びにUIに到達するにはハードコーディングせざるをえないというジレンマ。
–
・マイライブラリをどこまで作る?
言語やフレームワークの仕様に絶望して、マイライブラリなんかで拡張整備しはじめると泥沼にハマっていくというか。しかも自分で作ったライブラリの仕様は翌日には忘れてるわけで二度と再利用されなかったり、ドキュメントなんかも残さないし。でもとはいえObjective-Cはあんまりだというか、配列扱うのにfor文を何度も何度もぐりぐり書かないといけないのは耐えられないので、NSArrayにRubyで言うところのfind、map、select、reverse、uniqなんかのメソッドは追加してみたりして、これでループは8割方削減されたのは良しとして、これに味をしめてライブラリ作りに精を出しはじめたりするともう二度と戻って来れなくなるアワワ恐ろしや。。。
–
・言語とフレームワークの仕様はどこまで把握すべきか?
これを全て把握しておけば早くはなると思うけど、それはどだいムリというもの。そんなものに分けてやる脳内スペースはない!もうここに関してはいかに素早く調査するかという能力が重要というか。でもとはいえある程度は知っておけば有用だとか言って、ポインタのポインタとは何ぞやとか、関数型マクロがどうとか、C言語教書を読みふけりはじめると本来の目的を忘れて心神喪失への道をまっしぐらなわけで。
–
・名付けの問題
クラスやメソッドに最適な名前をつけるのが本当に難しい。Javaあたりでよく見かけるような冗長な名前付けは本当にカンベンして欲しくて、なるべく手短かで的確かつ整合性のとれた名前をつけたい。そしていったん名付けてしまうと、そのクラスのあり方やふるまいは名前に支配されてしまうようになる。むしろ的確な名前がつけられればコードを付け足すのは雑作もないこと、とか。なんかもう、かなりの思考が名前を考える事に費やされてるような気がする。自動名付けツールみたいなものってないかしら?
–
プログラミングの素人が一夜にして素晴らしいソフトウェアを書ける画期的な開発手法について知っている方がいればぜし教えてくださいm(_ _)m。
アジャイルはしょせんアジャイルでしかないというか、もっとすごい銀の弾丸をよこせと。
結局はRailsのような完全無欠のフレームワークを待ち望むしかないのかとか、環境構築まで含めて15分でWebアプリを作れるという。
あ、InterfaceBuilder使えばいいんじゃね?とか今思いついた。


