[[📒Productivityを上げるために大切な100のこと]] No96. 🥈
----
何か情報を調べるとき、[[📗一次情報を確認する]]ことの大切さは以前に紹介した。
<div class="link-card">
<div class="link-card-header">
<img src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/favicon-64.png" class="link-card-site-icon"/>
<span class="link-card-site-name">minerva.mamansoft.net</span>
</div>
<div class="link-card-body">
<div class="link-card-content">
<div>
<p class="link-card-title">📗一次情報を確認する</p>
</div>
<div class="link-card-description">
Google検索をしてヒットした一番上の記事。個人や会社のブログだったり、QiitaやZennだったりすることも多いだろう。
</div>
</div>
<img src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/minerva-image.webp" class="link-card-image" />
</div>
<a
class="internal-link"
data-href="📗一次情報を確認する"
></a>
</div>
しかし、いかなるときも一次情報を確認すべきかと言われたら、個人的にはNoと答える。たとえば、==一次情報を書き集めて加工されたNote== などは、一次情報をまとめる手間を省いてくれる
## キャッシュの概念
ソフトウェアを設計・実装したり、コンピュータを使用する上で避けることのできない概念、キャッシュだ。大まかにいうと、キャッシュのふるまいには以下2つのパターンがある。
- 一定時間内であれば前回の結果を利用する
- 一次情報の更新時間に変更がなければ前回の結果を利用する
今回の内容に関係するのは前者の方だ。
## 最終更新日を記録する
まずは最終更新日を記録するクセをつけよう。==ファイルの最終変更日ではなく、コンテンツとしての意味合いが変わった最後の日==だ。システムが記録する最終変更日は、ファイルシステムの都合や予期せぬ修正でいとも簡単に変わってしまうからだ。我々が知りたいのは、**コンテンツの内容が更新された日**なのである。
## キャッシュ戦略を決める
戦略は各々に委ねられるが、概ね以下のようになると思う。
- **一定期間以内の情報にアクセスしたときは、一次情報にアクセスしない**
- ただし、==正確性が重視される場合==は除く
- **一定期間以上古い情報にアクセスした場合は必ず一次情報を確認し、変化があれば更新する**
- たとえば3ヶ月以上古いものは見直すなど
一定期間というのは決めだ。ドキュメントのシステムが対応していれば、一定期間より古い情報を表示するときは警告を出すのもいいだろう。[[Qiita]]がやっているように。
## キャッシュの難しさと奥深さ
説明するとシンプルだが、キャッシュのハンドリングは非常に難しい問題だ。[[👤Phil Karlton]]の残した名言として以下のようなものがある。
> There are only two hard things in Computer Science, cache invalidation and naming things. (コンピューターサイエンスでで本当に難しいことは2つだけ。キャッシュの無効化とネーミングだ。)
これはコンピューターサイエンスにおける至上命題でもあるのだ。[[📗開発のようにドキュメンテーション設計をする]] でも紹介した通り、ドキュメンテーションは言語の違うプログラミングに他ならない。だからこそ、キャッシュ戦略は重要であり、生涯付きまとう至上命題なのだ。