ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

加工したデータを元に戻すのは、バックアップから復元するのが手早い

現在作成しているプログラムで、
・条件に従ってデータを加工
・加工したデータから、新たな条件となる情報を取得
・加工したデータを、仮のデータとして登録していいのか判定

・条件に従って次のデータを加工
・加工した次のデータから、新たな条件となる情報を取得
・加工した次のデータを、仮のデータとして登録していいのか判定
というように、処理を繰り返すロジックを作成しています。

「仮のデータとして登録していいのか判定」を行って、「登録してよければ」データを登録します。
ここまでは簡単で、よくある話です。

問題は、「登録してよくなければ」関連するデータを含めて一定の時点までデータを元に戻さなければななりません。
元に戻すとなれば、

  • 仮データを確定データを用意して、必要に応じて仮データの参照/更新を行い、確定データの参照を行うようにプログラミングする。確定できて初めて、仮データを確定データに反映する。
  • 確定データと確定コピーデータを用意して、確定データの参照/更新を行い、データを戻さなければならなくなったら、更新した確定データを、確定コピーデータからコピーして元に戻す。

など、どうすればいいのかと考えていました。

プログラミング
unsplash-logoAnnie Spratt

下手にロジックを考えるより、丸ごと戻した方が手早い

処理のロジックを考えつつ、「登録してよくなければ」が発生した場合、どういう方法を選んでも、結構大変だなと思っていました。
そんな中、こちらの記事に書いたように、思いつきを得られました。
ajya.hatenablog.jp

どんな思いつきかというと、データを丸ごとバックアップしておいて、確定データを戻さなければならなくなったら、バックアップから確定データに戻してしまうというものです。
データベースのトランザクション処理で、コミットすればすべてのデータベースに対する挿入/更新/削除が保存されますが、ロールバックすれば全てなかった状態になります。
ja.wikipedia.org
同じように処理すれば、「登録してよくなければ」が発生した場合は、バックアップから確定データに丸ごとコピーして、元の状態を復元できます。

この思いつきがあったおかげで、ロジックを作成する手間が随分減らせました。
最初から思いつければよかったのでしょうが、いろいろ考えたおかげでやっと思いつけたのだと思います。
次に似たような状況になったときは、最初から思いつけるようになるでしょう。

思いつきを得られるタイミングは、状況が変わったとき

仕事でどうすればいいのか悩んでいて、打破するための思いつきを得られるのは、どんなタイミングでしょう。
つい最近の僕の経験は、仕事を終わらせて、乗りたい電車に間に合うように、時間を気にしながら駅に向かって走っている最中でした。

仕事を終わらせる少し前までロジックを考えていて、面倒そうなロジックだし、まだ他を進めた後で改めて考えてもいいので、他のロジックを考えようと思って頭を切り替えたつもりでした。
面倒そうなロジックだというのが引っかかっていて、時間を気にしつつ、頭の中で今日の仕事を振り返ったりしながら走っていたら、「面倒なロジックを面倒ではなくするためには、こうすればいいのでは!」と思いつきました。

「面倒なロジックを面倒ではなくするためには、こうすればいいのでは!」と思いつくと、本当にできるのかの検証もなしに、「できる」前提になります。
少しでも引っかかる部分があると、引っかかりを回避する思いつきも出てきて、「できる」を後押しします。

駅に近づいて電車に間に合うのがわかって歩きながら、思いつきについて改めて考えると、面倒そうという部分をかなり軽減できる内容で、「できる」可能性が高いと判断できました。

インスピレーション
unsplash-logoRiccardo Annandale

状況を変えるのがいいのかも

走っているときもそうですが、歩いているときにも、思いつきが得られる場合があります。
お風呂に入ったときにもあります。

共通していそうなのは、状況が変わったときです。

直前まで悩んでいて、ちょっと気分転換をしたとしても、なかなか思いつきが得られず、延長線上の考えしか浮かんできません。
直前まで悩んで、今回のように移動しながらという制限がある状況になると、思いつきが得られることがよくあります。
やり忘れかけていたことを思い出すときもあります。

状況を変える方法は、全く別の仕事をするというのもあります。
全く別の仕事を始めると、別の仕事に集中するので、なかなか思いつくという経験がありません。

身体を動かして、頭で考えるしかないという状況になって、改めて考えるのが、僕には向いているようです。

プログラミングしていても手が止まる

以前、システムの設計をしていて手が止まると書きました。
ajya.hatenablog.jp

プログラミングしていても手が止まるときがあります。

ほぼ同じ理由で手が止まる

プログラミングしていても手が止まるのは、この方向性であっているのか?、このまま進めて最適なのか?、手戻りが発生するのではないのか?といろいろ考えてしまうからです。

手探り状態でプログラミングをしていると、方向性があっているのか頻繁に気になります。
プログラミングがある程度進むと、これまでのコードがベストなのか?後から読み返すとわかりにくいコードになっていて、大幅に書き直す羽目にならないのか?と気になります。

これまで経験があったりして、ロジックの見通しが立っていると安心してプログラミングできます。
初めての要件で、ロジックの見通しが立っていないと、不安な気持ちを抱えながらのプログラミングです。

プログラミング、コーディング
unsplash-logoNeONBRAND

不安な気持ちを解消するためにある程度紙に手書きする

最近は、不安な気持ちを紙に書いて、具体的にどこが不安なのかをはっきりさせようとしています。
この処理はどうやってロジックに落とし込めばいいのか、この処理でキャンセル機能も持たせないと処理が成立しないのでは?など、様々な不安な要素を書き出します。

不安な要素がプログラミングの手を止めるので、不安な要素はどうすればロジックで解消できるのか、ある程度紙に書き出して、成立しそうと思えるまで書き出していきます。
成立しそうと思えるまで、何度も書き直す羽目になるときもあります。
何度も書き直すのが面倒に思えますが、書き直さなければならないという状況を放置したままでは、不安なままです。
書き直す羽目になっても、書いていって、これならできそうかも!?と思える状態にします。

これならできそうかも!?と思えれば、後はプログラミングをして実証します。
プログラミングの結果、やっぱりこれが足らない等いろいろ思うときでも、新たな学びを得ています。
新たな学びから、それまでとは大幅に変える羽目になっても、今度こそは大丈夫だろうという気持ちになってプログラミングができます。


最初にその機能は難しそうだなと思って、実際のプログラミングでも難しさを実感して、手が止まっていました。
状況を打破するためには、どのような方法でも手を動かさないと前に進めないです。