😱

[タスク整理]思考回路はショート寸前

2020/12/08に公開1

前置き

とある機能を実装しようと思った時の話。

その機能を実装しようとした場合、それよりもレイヤーの低い機能を複数実装する必要がありました。
これまでは、それらの機能が、例えばA、B、Cとあった場合に、それぞれが独立した機能であったり、タスクであったりしたおかげで、特に実装手順を考えなくてもそれぞれを一つずつ組み上げ、最後にそれらをまとめれば問題なかったんです。

しかし、その下位レイヤーの機能それぞれを実装しようとして、それらが互いに絡み合った場合、一体どこから着手すればいいのか、考え出すと頭が混乱し、思考停止してしまいました。

初学者にありがちな話なのか、単に自分の理解力が悪いのかはわかりませんが、同じような人のヒントになればいいなと思います。

親殺しのパラドックス

有名なパラドックスとして「親殺しのパラドックス」というものがあります。

これは、ある人がタイムマシンで過去に行き、まだ自分が生まれる前の親を殺した場合、どうなるのか?というものです。
仮に、親を殺してしまった場合、そもそも自分は生まれないので、親は自分を生むことができる。
しかし、生まれてきた場合、またタイムマシンに乗って...みたいな無限ループ状態になるというものです。

今日の自分はまさしく、頭の中がパラドックスに囚われてしまったような状態でした。

思考停止と無駄な動きは最大の敵

自分は頭の中で整理が付かなくなると、何も考えられなくなったり、逆に「とにかく何かしなきゃ」と思ってむやみに手を動かし事態を悪化させることがあります。

これはプログラミングに限った話ではなく、日常でもなにか判断が必要だとして、判断するための要因が複雑に絡んでいる場合も同様です。

思考を止めないためには?

困ったときは現状把握。

現状はというと、
Aの実装にはBの実装が完了している必要があり、Bの実装にはAの実装が完了している必要がある。
故にどちらから手を付ければいいのかわからなくなってしまった。
ということです。

よくよく考えてみると、作業の切り方がかなり大雑把で、自分で考えた工程はかなりざっくりしたものでした。
細かい単位にするほど実装手順が明確になり、次第に手順が整理されていきました。

結局は自分の段取りが悪かったという一言に尽きます。情けなや...

今回の教訓

実装の手順を考えるときは、

  1. 必要なタスクを細かく洗い出し、
  2. 相互の関係を見極め、
  3. 具体的に着手する順番を決める

ということです。

ロジカルの道は険しいでござる。。

Discussion

AmetaAmeta

親殺しのパラドックス面白いですね!読んでみて、映画のLOOPERを思い出しました。

Aの実装にはBの実装が完了している必要があり、Bの実装にはAの実装が完了している必要がある。

この時AとBの関係は、論理学で同値命題と呼ばれるそうです。[ (A=>B)∩(B=>A) = A<=>B ]

この命題の特徴は、AとBの両方がTrueもしくはFalseでないと存在し得ないと言うことです。
なのでこの場合、AとBを同時に実装する意外に方法はないと思います。

ただLighterさんの仰られたように、細かい作業単位でこの同値命題の関係が生まれないように実装手順を考えることが効率的な開発の近道なのかなぁと思いました!

またの記事投稿楽しみにしてます!