統合失調症とプログラミング

私は、1998年に統合失調症を発病しました。最近の薬は本当に効果が高く、発病前と大差ない生活が送れるようにまで回復しました。残念ながら失ったものは戻ってはきませんが、これから積み重ねていくものを大切にしようと思っています。

そこで、私が生業としていたプログラミングの話をします。

統合失調は、患者から記憶力を決定的に奪います。健常者であっても、「一ヶ月前の自分は他人と思え」という表現があるように、自分の書いたコードの内容を忘れることはあります。しかし、患者は一分前に書いたコードを忘れるのです。数行上にあるコードの動作を常に再度読みほどかなければ先に進めない、そういう体ですので、同じ関数を一日に数十個も書くことになります。

それではやっていけないので、対策を考えました。いまさらながら考えるに至ったのは、ここ数年の薬効が関係しているように思います。

健常者の方々にも少しは役に立つ話ができればいいのですが、その目的を主にして書いてはいません。どうもセンシティブすぎていかん、と感じるならば、それは健常である証拠です。引き続きプログラミングを楽しんでください。

記憶力がなくなると…

まず、生きる目的を覚えていられません。次に、死ぬ理由さえ覚えられません。そして、あらゆる恐怖や心配事、不安を忘れてしまいます。病気で苦しいのかと思われがちですが、非常にラクなのです。自分の進む将来も忘れていますから。

物事はほぼすべてにおいて、一度寝て朝起きるとまったく忘れているので、メモをしておくことにしています。このページも、その一環です。書かなければ忘れるし、このページを書いたことも忘れて、また先頭から読むことになるでしょう。もう読まないかもしれません。

この瞬間はこのページが必要だと思って書いていますが、後になって必要性を忘れて消してしまう可能性があります。そうならないように願うばかりですが、自分の行動の指針を忘れてしまうので、何が正しいのかの判断も時と場合で変わります。と、ここまで気が変わらずに書けているのは薬の効果でしょうか。

判断力がなくなると…

判断それ自体は正常に行えます。繰り返しになりますが、指針を忘れてしまうのです。プログラムでいえば、まずシンプルさを求めてコードを書いたとしましょう。それが完成すると、今書いたコードを消して完全な堅牢性を実現しなければならないと判断するのです。それを完成させると、今書いたコードを消して速度を求めたコードを書きはじめます。それが完成…これを16年間ただの一日も明示的な休息を入れずに繰り返してきました。そんな暇はないからです。

ちょっと待て:書き起こすとこれはあきらかに正常ではないですね?そして薬を飲んでいるのです。判断力は戻っていませんが、薬を飲まなければコードを書くことができないのです。

今前段まで読み返してみて、たぶん明示的な休息を入れたことはあるのかもしれませんが、記憶にはありません。ここの記述は面白いので書き直さずに残しておきます。休息のことなんか書いた覚えはありません。そういう感じです。

構成力…

今書いているコードがなんのためのものだったか、思い出せません。さっき書いたコードを何に使おうとしたのか、忘れています。そもそも今コード書いてましたっけ?という部分、文章を書いているのでしたね?VimでなくDreamweaverを開いているので文章を書いていたのでしょう。文章を書きはじめる前に書いていたコード、書いていたかも定かではありません。構成力を失うとはこういうことです。

コードは理解できます。ここでこのページを読み返して、メモとしてコーディングルールを書いておくべきだと判断したので、以下細則を記述します。最初の目的は忘れています。

辿りついたコーディングルール:C++

ごく単純です。覚えていられないので、破ることもあったかと思います。

変数名、ローカルは短すぎグローバルは長々と

ローカル変数は i 一文字とか c 一文字だけで伝わるようにしています。i はループカウンタ、c はカウンタ、n は個数…のようにプログラムと関係のない意味づけをすることで再読み下しの手間を抑えています。二文字だと長くて覚えられないのです。

対して、グローバル変数はごく説明的に命名します。frame_hwnd とか registry_string_* のように、記憶の必要を極力避けます。

関数名は動詞+名詞+修飾子

昔のアドベンチャーゲームと同じです。open_door、polish_pillar、場合によっては修飾子が必要になるので attach_cross_coffin とでもするのでしょうか、その場の思いつきで命名するので、言いかえるとさっき命名した名前は覚えていないので、できるだけ単純にしないと無駄に書く関数が爆発的に増えてしまうのです。

関数一つで仕事は一つ

関数名以外のことはしません。記憶力が必要になる局面を皆無に近くするためです。

横80文字

よく端末の都合でという話になりますが、私の場合は横、つまり右に追いかけていると左に何が書いてあったか忘れてしまいます。目に入る限界の幅としては80文字が、歴史上の意味も含んで、妥当だと思っています。

横80文字を超えることは*絶対に*ありません。一般的には折り返しという概念があります。これを一歩進めて、自由に書けるのだから自由に書いていく、そのように定義を拡張しています。

ルールがないのがルール

あとは覚えていません。その場で考えています。上記ルール群も、いま作りました。数学の公式は覚えるものではなくその場で作るものだという言説と似ているかもしれません。

統合失調から見たプログラミング

この病気にかかると、組めないものはないという感覚になります。かかる時間、つまりは寿命を忘れるのです。何か基本的なことを忘れている気がするのですが、思い出せません。

これから書く関数を以前書いたかどうか思い出せないので、検索をかける習慣をつけようとするのですが、忘れて同じ関数を書いてしまいます。同じ関数を消すとき、今まで書いた全てのコードを消してしまいます。それが正しいからです。

統合失調とは、雨が降ってできた水たまりに釣り糸を垂らしている患者に対して「釣れますか?」と声をかけた主治医に「釣れるわけねえだろバカか」と返事をする、そういう病気です。一般の人は、水たまりで魚を釣る気だと見るのですが、患者は、何も釣れないとわかっているのです。なぜ釣り糸を垂らすのか、そこに健常と罹患の埋められない差があります。

私は、16年間釣り糸を垂らし続けています。何も釣れないとわかっているのです。


© 2014 高崎 伸裕 (Nobuhiro Takasaki)