オブジェクト指向プログラミング Object-oriented programming (OOP) と呼ばれる手法がある。Smalltalk や Swift、C++ や Java と呼ばれる言語が、その代表例だろうか。
GTD の言葉を借りて「えいや」と説明すると、あるひとつのプロジェクトを実行するプログラムを書くとき、まずそのプロジェクトを(できるだけ必要最小限の)タスクに分解する。オブジェクトは、各タスクを実行するユニットである。つまり、オブジェクト指向の言語で書かれたプログラムひとつは、オブジェクトの集まりであり、階層構造をもつ。
プロジェクトをタスクに分解し、タスクごとにプログラミングすると、そのコードがとても書きやすくなる。ひとつひとつのオブジェクトが担うタスクにフォーカスし、そのタスクを実行するコード書きに専念すればよいからだ。
そのオブジェクトが想定通りのタスクをこなすかどうかも、テストしやすい。オブジェクトにある入力をし、予想通りの出力ができるようになったら、そのオブジェクトは完成。
その繰り返しで、プロジェクトを構成するオブジェクト群が完成する。そのオブジェクト群を最初に想定したタスクの流れに沿って配置し、当初想定していた入力に応じた出力が得られれば、プログラムが完成する。
この手法の大きな長所として、他人にもわかりやすいコードが書けること、みんながよく使うタスクをこなすオブジェクトを公開すれば(たとえば、N 個の数字を大きい順に高速で並び変える)、そのオブジェクトの中身を完全に理解できない人も自分のプロジェクト実行のための部品として、そのオブジェクトを利用できることなどが、よく挙げられる。
(個人的な経緯を話すと、C++ を学んでいるときに同じやり方を文章書きやタスク管理に生かせるのではと思いつき、アウトライナー探しが始まった。もう20年くらい前のはなし)
生態学の分野でよく使うシミュレーションに、エージェントベースモデリング Agent-based modeling (ABM) という手法がある。
これは、オブジェクト指向プログラミングでエージェント(ひとりの人、1羽の鳥、あるいは1匹の虫などが、ひとつのエージェント)をたくさん仮想空間につくり、そのエージェントを使って、いろんな実験をする。どんな条件で、どんなふるまいをするエージェントが有利なのかを計算したり、その結果、どんなふるまいがエージェントの学習や進化をとおして広がるのかを調べることに使う。
ここでは、オブジェクトがひとつのタスクではなく、ひとつのエージェントになる。
このモデリングの特徴は、それぞれのエージェントが意思決定すること。そして、それぞれのエージェントは、あまり賢くなく、あまり有能ではなく、基本的に自分勝手であること。つまり、狭い範囲の環境やそばにいるエージェントの情報しかもたず、移動に時間がかかったりし、その限られた情報と能力のもとで自分が一番得をするよう意思決定する。
だから、他のエージェントが何をするか予測できず、まちがった判断をして、大損したりすることも多い(でも、システム全体は賢く振舞まったり、その中に美しい秩序が生まれたりすることもある..)。
計算に時間がかかるのが欠点だが、たとえば人の社会や経済、動物の集団や生態系など、複雑なシステムのふるまいを理解する上で、とても強力な方法だと、ぼくは思っている(とくにぼくのように、数学があまり得意ではない人にとっては、大切な外部思考装置になる)。
以前、エージェントベースモデルをつくっては、いろんな仮想実験をやっていた。おもには動物の行動の進化の謎ときをするために、早起きしてはプログラミングと仮想実験を、ドキドキしながらやっていた時期があった。野外調査や実験はもちろんとても大切だけど、こういった仮想実験だからこそ見えてくるものがある。
そして、以下の記事と本を読んだ。
最初におもしろいと思ったのは、あるひとつのエージェントさえも、時間がちがえば別のエージェントとして捉えられるという視点である(たとえば、職場にいた昼の私と家族と一緒にいる夜の私は、別の私)。この時間によってちがう私を、平野さんは「分人 dividual」と名づけている。魅力的な名前だ。そして平野さんは、私という存在が、中心になる特別な分人などない平等な分人たちの構成するネットワークだと考える。そして、私というひとつのネットワークを構成するさまざまな分人の割合を意識し、私が好きな分人をバランスよく育てる大切さを、説いている。
佐々木さんは、私をつくる分人に中心がないのなら、それぞれの時間を生きる私が分人たちを俯瞰し、その構成割合のバランスをとる道具として、日記やライフログなどの機能を捉え直すことができるのでは、と提案する。倉本さんは、「先送り」という多くの人に見られる賢くない行動にしぼり、その行動が生まれるメカニズムを分人という自分観から見直してみようと説く。
(平野さんの本は、「私は何?」という大きな課題に対してオリジナリティの高い本質的な答えを、根拠を示しながら誠意ある形で提案している。とくに、私という存在が、その時間時間に私のそばにいる人や他の存在との相互作用までひっくるめた存在である、という見方がすばらしい。この自分観をもとにすれば、仕事なかまと一緒にいた私が、今、家族といる私とちがうのは当然であり、どちらも本当の私だと理解できる。変わる私に悩みすぎる必要はなく、その変化を受け入れながら、その先へ進むことができる。この自分観については、また場所をあらためて書くつもり..)
これを読んで、これまでエージェントベースモデルでわかってきたことを、GTD に役立てることができるかも知れない、と思い始めた。
たとえば、先送りというふるまいが、「未来の自分」という他人への迷惑を気にしない今の自分の勝手な意思決定の結果であるとすれば、エージェントどうしの協力が生まれる条件を調べたこれまでの成果をもとに、「未来の自分」への思いやりが自然にできる仕組みが見えてくるかも知れない。その仕組みを使うことで、先送りを減らすことができるかも知れない。
そしてたとえば、その思いやりを育てる仕組みとして、「過去の自分」や「未来の自分」という他人と、どのような情報をどの程度どんな形で共有すればよいか、つまり分人ネットワークを俯瞰するのに適したノートやログの取り方、そのレヴューの仕方、リマインダシステムなどが分かるかも知れない。
そのために、まずは協力や利他行動、賢い判断をするための程よいネットワーク構造などに取り組んだ、エージェントベースモデルを使った他人の仕事や自分でやったことを見直すのも大切なことでは、と思い始めている。
(そしてこの記事も、今の私が過去の私を俯瞰しながら、未来の私に残した情報である)