はい、計画です。プランニングとかスケジューリングとか言われるあれです。
プログラマで計画作成が好きな人はそう多くないと思います。私もそうでした。
L2キャッシュに計算をのせるにはどうすればいいか!みたいなミクロな情報は泥水みたいなコーヒーをがぶ飲みして調べたくせに、作業計画は全然ダメで手の込んだ電子ゴミコードを作ったこともありました。力押しでどうにかなるのは、最初から力がある人なんや・・・。
ちなみにプランとスケジュールの違いは以下の通りです。プランを元に作るものがスケジュールですね。(大辞林より)
プラン - ①計画。企画。案。②図面。見取り図。平面図。
スケジュール - 日程。予定。また、日程表。予定表。
さて、計画が必要ではありますが、現場で揉まれて経験を積んで計画力を身につけるだけというのはちょっとしんどいです。
なので私が参考になると思った本を紹介します。自分で壁に頭をぶつけなくても、前を歩いている人がぶつけたのを見ることで、壁にぶつかるのを回避することができることだってあります。
書籍情報
加藤 昭吉 著
「計画力」を強くする あなたの計画はなぜ挫折するか
講談社 BLUE BACKS
出版社サイトページ
本書の中で、計画が失敗する理由について以下のように述べられています。
計画が失敗する9つの理由
本書の中で計画が失敗する理由は9つあると述べられています。
1.計画の目的・目標がはっきりしていない。
2.頭の中だけで組み立てた計画になっている。
3.状況判断を誤って計画している。
4.目先の問題解決を積み上げただけの計画になっている。
5.複数の計画案の中から選び抜かれていない
6.計画通り実行する熱意に欠けている
7.計画実行の勘所を外している
8.”終わり”からの逆算ができていない。
9.計画の適切なフォローアップができていない。
これらについて一つずつ考えてみましょう。
1.計画の目的・目標がはっきりしていない。
これをやれと作業だけを振られることはままあります。仕事じゃなくても家庭でもあることです。
「牛乳買ってきて」「(成分無調整牛乳か調整牛乳かどっちだ...メーカーや価格はどれでもいいのか...)いいよ」
いつも買っている成分調整牛乳を買って帰ったら、実はお菓子作りをしたいので成分無調整牛乳が欲しかった。なんてことはありそうな話です。
目的や目標をはっきりさせる理由は、それがないと判断基準が曖昧になり、とりあえずできることをやってしまうからです。
解けそうな問題から解いていくのは、学校のテストの解き方として教わる方法ですが、それではホットケーキが膨らまないこともあります。
2.頭の中だけで組み立てた計画になっている。
計画を立てるには頭の中で組み立てるしかないじゃないか!
というのは尤もなのですが、これはイメージで計画を立てるなという意味ではなく、イメージとリアルは違うことがよくあるのだから、リアルを見てイメージとのズレを修正して計画を立てなさいという意味です。
私が最初に自炊して作ったのはミネストローネでしたが、食材を切る順番や大きさ、鍋の火力、味付けの順番、それぞれにかかる手間などがレシピ本でイメージしたものと全然違っていたため、4時間かけ闇鍋のようなものを作りだしました。
想像力は必要です。現実の裏打ちはそれ以上に重要です。
闇鍋は責任を持って食べました。
3.状況判断を誤って計画している。
状況は三層構造になっていると筆者は述べています。外側から順に「想像>間接的な情報>体験・五感」です。
内側にあるものは自分自身の状況で、外側にあるものは自分ではないものの状況です。
山登りに慣れた人の登山計画は実現性が高いですが、ネットで山の事を知った(ようなつもりになった)人の登山計画は大変危険です。
猫が大はしゃぎするおもちゃの動画を見ておもちゃを買っても、見向きもされずAmaz○nの段ボール箱で寝ているなんてこともあります。
自分の判断が経験によるものなのか、想像によるものなのか、考えてみると計画が変わるかもしれません。
猫のおもちゃはメ○カリで売れ!
4.目先の問題解決を積み上げただけの計画になっている。
一度はやることを洗い出してTODOリストを作ってみたことがあると思います。GTD1やTrello2とか有名なのがありますね。可視化された課題を見える形で減らしていくのは達成感があります。ですが、ただのTODOを処理しているだけでは達成感と現実の達成が同じではないこともあります。
例えば新人プログラマーAさんが大量にバグを発生させていたとして、一つ一つバグチケットを作ってTODO的に処理させるよりも、ベテランプログラマーBさんとペアプロをすることが本質的な問題解決になることもあります。
でも目の前の簡単なタスクを片づけるのは、エアパッキンのプチプチをひたすら潰すみたいな中毒性があるんだよなあ・・。
5.複数の計画案の中から選び抜かれていない
計画がひとつしかないと、これしかやり方が無いような気がして他のより良いやり方に意識が向かなくなってしまいます。
旅行の計画を立てる時でも、回りたい場所を順番に並べた旅行計画より、プランA、プランB、プランC、プランDと複数作ってみた方が、それぞれのプランの良い所や悪い所が見えてきて、更に良いプランを作る材料になります。旅行中にアクシデントが起きたとしても、ボツになったプランがアクシデントを埋めるいい案に化けることだってあります。
計画を立てる時は複数作って、一番よいものを選びましょう。ボツになった計画も無駄ではなく、状況が変わった時に助けてくれる材料になります。
6.計画通り実行する熱意に欠けている
計画を立てる必要があるときは、わかりきっていることを淡々と処理するような場合ではなく、なにか未知の事柄をうまく行くようにするために立てます。家から学校や職場に行くのは計画が無くても大丈夫ですが、電車と飛行機を乗り継いで海外へ行くときは移動時間や発着時間を考えます。これは自分がやろうとしていることに不確かさが含まれているからです。
慣れていることは見通しがはっきりついているので弱い力でもできますが、不確かなことを突破するには強い力が必要です。このことを「計画通りに実行する熱意」と言っています。
どうすれば熱意が湧いてくるかですか?私は猫の脇腹をモフモフしてスーハーするとなんかやる気になりますね・・・。
7.計画実行の勘所を外している
計画のタスク数と計画完了度は一次関数的ではなく、一部の重要なタスクが計画の大きな部分を占めることが多いです。パレートの法則ともいいますね3。既存のアプリケーションに新機能を追加したをすると、追加変更箇所のテストとリグレッションテストの両方が必要になります。この場合、バグが発生する可能性は追加変更箇所の方がずっと高くなるので、こちらのテストを優先して十分に行う必要があります。やりやすい方から手をつけようとするとリグレッションテストから開始して、テスト後半にバグ発見が集中するということになったりします。
私の兄は煮物の中から的確に肉だけを選び出して食べていました。これは勘所の話ではなく恨み節です。
8.”終わり”からの逆算ができていない。
計画は遵守するものではなく、状況に応じて何度も作り直して目的達成のために使うものです。特に中長期の計画では最初に作った計画が最後までそのままということはあまり多くありません。途中で計画の修正、作業の見直しが必要になります。ではどのタイミングで見直すのか。"終わり"から逆算することで、本当は今どこの地点にいて何をしていなければいけないのかが見えてきます。現在の位置と、逆算の位置でズレが出てきたときが計画修正のタイミングになります。
えっ、今年残り29日?うそー!?(逆算できてない)
9.計画の適切なフォローアップができていない。
計画は一つ一つ積み上げていくことで、その先にするべき事柄に繋がっていきます。実行した計画が最初の予定通りでなければ、それをフォローしないと後の計画を実行する意味が変わる事もあります。
子供がサンタさんにポ○モン剣盾をお願いする手紙を出しました。サンタの末裔であるあなたは、通販でポ○モン剣盾4を注文し、子供に発見されるリスクを考えて23日受け取りを指定しました。ところが、23日になってもポ○モン剣盾が到着しません。そう、ここは試される大地北海道。冬の吹雪で配送が遅れていたのです。あなたは計画を変更して、直ちにヨ○バシカメラへ向かいポ○モン剣盾を確保しなければなりません。クリスマスプレゼントであることこそが重要だからです。
何かを実行したら、行動を起こしたら、その結果を適切にフォローする必要があります。
余ったポ○モン剣盾は私にください。
その他にも
今回は計画の失敗に絞って紹介してみましたが、本書には他にも「目的・目標を扱うポイント」や「計画のステップ」「計画立案のポイント」など様々な内容が書かれています。システム開発にはもちろん、日々の生活にも役立てられると思います。
最後に
多くの計画に失敗はつきものです。ではなぜ計画を立てるのか。
あるゲームデザイナーがこう言ったのを覚えています。
計画は役に立たないが計画を作るシステムは常に有効であった
計画を大事にするんじゃなくて、高度な計画を立てられる自分の頭脳や分析力、広く物事を見る力を大事にしてください
そろそろ来年の計画を立ててみましょうか。上手くいかなくっても、途中でやりなおしても、いいんです。
計画を友として、望むところへ近づけたらいいですね。
-
Getting Things Done。やることを洗い出し、分類し、処理する一連の手法。多量のタスクをやっつけるには着実に進む実感がある。割り込みが多かったり状況が頻繁に変わるような場合はタスク分類の手間が増えて面倒になったり、タスク分類のタイミングまで新しい状況に適応できなかったりするので、使いどころを考える必要はある。 https://ja.wikipedia.org/wiki/Getting_Things_Done ↩
-
おなじみのカンバン方式タスク管理ツール。様々な拡張機能でプロジェクト管理にも使える。https://trello.com/ ↩
-
80:20の法則とも。全体の80%を構成するものは20%のものによっているという法則。カレーの味はカレールウでだいたい決まる。 https://ja.wikipedia.org/wiki/パレートの法則 ↩
-
今作ではニャビーが出ていなくて大ショックを受けています。 ↩