設計するときの私の考え方

自分がプログラムなどを設計するときにどういった思考で物事を考えているかを、改めて書き出してみたいと思います。

重ね合わせの理

私は学生時代は電気科でした。そこでこの「重ね合わせの理」を学んだ時に漠然と「複雑そうに見えても単純化できるってこういうことなんだなー」と思っていました。

この「複雑そうなことを単純化して重ね合わせる」という概念が、設計を行うのに非常に役に立っています。当たり前っちゃ当たり前ですが、今でも、「この仕様は、○○と△△の仕様(要件)が重ね合わさってるな」と考える癖がついています。

プログラムを作る時も、その考えが「機能分割」に繋がっています。自分の考え方を改めて思い返すと、この考えがかなり根底にあるなと思いました。

ドラクエの職業熟練度

私はドラクエが好きで、まだ園児ではないだろうかくらいの時にSFCのDQ5をやっている写真が残ってました。。。

この熟練度ですが、そのまんまです。例えば仕様追加の要求があったとき、その部分について詳しくない場合は、理解できるまで(使いこなせるまで)いじり倒します。コードに限らず、(私は産業機械の組み込み系なので)アクチュエータの動作パターンについても、思いつくままにいじります。「おおよそ理解できたな」と感じるときは、まるで新しい武器が装備できたときのような感覚になります。熟練度で言うと★5で板についてきた感じです。こうなると、コード書きながら、心の中ではめちゃめちゃ気分よく剣振り回してます

逆に、この状態にならずに設計を進めると、へんなところではまることが多い気がします。動作パターンの計算ミスだったり、検討した仕様に不具合があったり…。

まあ結局、納期まで時間がなくて、周りに急かされる場合なんですけどね。

チームメンバーの反応を想像する

何かを検討するときは、自分の中でメンバーとの会話を想像してます。「あの人ならこういうこと言ってくるよな」とか、その人の口癖みたいなのを想像したり。これをするだけでかなり客観的に物事が見れて自分には無い考えがふっと出てきたりします。(想像した内容を実際に指摘されるかは別ですが)

ただ、書いていて思いましたが、あまりチーム間のコミュニケーションが多くないので、特定の人物しか想像してないかもしれません。もう少しいろんな人の考え方とかを想像できるようになると、もっと自分の中で考える幅が広がりそうです。

煮込んでいる間に皿を洗う

私は昔からよく料理をするのですが、なるべく片付けながら料理することを心掛けています。味噌汁、煮物などは、火にかけておく時間があるので、その間にほかの作業をすることができます。

結局のところ、これはマルチタスククリティカルパスの話ですね。人にお願いする作業(検証作業や、図面の確認など)はなるべく早く回し、その間に自分は他の作業をすることで並行して作業が進められます。人を渡る作業を優先することでスループットもよくなりますしね。

最後に

いざ書き出してみたら、一般的なことだなーと思いつつ、「みんなこういう一般的なことを自分なりに解釈しやすいように噛み砕いているんだよね…?」と気になりました。

もしかしたら、私の理解できてない概念とかも、誰かの独自解釈だと理解しやすかったりするかもしれないですね。チーム内でこういう発表会しても面白いかも。