計画言語を計画中でちょっと止まっておりますが(裏側で xUnit で頭を使っていたからというのもあり)、別件のサイトを作成中です。
いつものパターンならば、Excel で ToDo リストを出していくところなのですが、どうせならばと計画言語を使ってタスクを抽出してみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | 本番環境へリリース << データ投入 << Excel から insert 文へ変換スクリプト << 画像ファイルアップロード << 本番環境での動作確認 << oreoreMVC のコピー << PHP4 の文字コード確認 << PHP4+MySQL の動作確認 v << 画像のネーミングを決定 -> slug で << 画像のフォルダ構成を決定 << 本番 view を作成 << 簡易 view を作成 << controller 作成 v << 医院詳細表示 << 医院名で検索 << 医院名で探す << 「あ」をクリックしたときの地図 << エリアで検索 << エリアで探す画面 << エリアを選択した後の地図 << 駅名で検索 << 駅名で探す画面 << 駅名を選択した後の地図 << お口の健診検索 << すこやかちゃん検索 << 口腔がん検診検索 v << 単一テーブルに対する model を作成 |
言語っぽいところは、
・「<<」で、前の WBS をブレークダウン
・インデント(ひとつの空白)でツリーを表現)
しているだけです。コンパイル可能にするためには Task[“…”] なりをつけないと駄目なんですが、これだとメモ帳などでコーディングが可能です…と言いますか、これ、iPad のメモで書きました。
通勤中にぽちぽちと計画が立てられるので便利です。
そこで思い出したのが、その昔 IBM の workpad で擬似プログラミングをしていたんですよね。やっぱりメモ帳を使って、簡略化した記号を使って書いていました。
さて、この plan langauge の要素を取り出してみると、
1.インデントで親子の WBS を表現する。
2.前後の行で時系列(逆時間)を表現する。先頭がトップ/完成すべき WBS です。
3.完了は「v」で表現する。
4.WBS の内容は、「<<」に続いて記述する。
という具合です。
作って&使ってみて気づいたのですが、実は 2 が重要です。単純なツリー構造の場合には、兄弟 WBS の前後関係は現れません。勿論、DOM のようにデータ構造として保持されますが、ブレークダウンする過程で兄弟 WBS の関連は失われてしまうのです。
なので、このテキスト版の plan language は、行の前後関係が情報として重要になります。時系列として下から上に作業をする、ということですね。
これらの情報を明確にしてデータ構造を作ると、次のように書けます。
1 2 3 4 5 6 7 8 | class WBS { public WBS parent ; public List<WBS> childWBS ; public List<WBS> beforeWBS ; public List<WBS> nextWBS; public string task ; public bool completed; } |
こんな感じで、前後の wbs を識別します。beforeWBS と nextWBS が list になっているのは、PERT 図のように前後のタスクが複数になったときのためです。
まぁ、こうやってタスクを出してから、粛々とコーディングをする、というわけで。
ええ、もちろん、コーディングをする間も先のタスクは増えたり減ったりします。
通勤途中に思いついたのだけど、インデント数(先頭の空白数)に「意味」を持たせるプログラム言語も可能なんですよね。python や F# はインデントに意味がコンパイル時に意味があるけれども、プログラムからは利用不可能なんですよね。つまり、プログラム内で、「先頭の空白がいくつか?」ってのを扱えない。
これを扱えるようにすると、書き方を制御したプログラム言語ができるかと。