Programming and Writing

Salvatore Sanfilippo

プログラミングと執筆

原文は Salvatore Sanfilippo により に公開されました。 このブログを購読する

一年前、私はプログラマーとしての生活を一旦休止し、小説を書き始めた。新たな営みはそれまでの仕事とは根本的に異なるのだという錯覚を抱きながら。膨大な言葉の奔流を綴り、書き、そして何度となく書き直した末に、今ではむしろ逆のことを確信している。大規模なシステムをプログラミングすることと小説を書くことには多くの共通点があり、プロセスもよく似ているのだ、と。

二つの活動の最も明白な共通点は、どちらも何かを「書く」ということだ。コードは自然言語で書かれた散文ではないが、それでも決まった規則(文法)があり、多くのプログラマーが自然だと感じる形式もあれば、形式的には正しくても理解しづらいと感じられる形式もある。

しかし、二つの活動にはもっと深い繋がりがある。優れたプログラムも優れた小説も、うまく機能する局所的な要素と大局的な要素の総和なのだ。良いコードは一つひとつの文がよく書かれ読みやすくなければならないが、同時にプログラムの各部分は互いに直交し、一貫した設計のもと、クリーンに相互作用しなければならない。良い小説もまた、ミクロとマクロという同じ二つのスケールで成功を収めなければならない。一つひとつの文章がよく書けていなければならないが、全体の構造や各部分の関係性もまた極めて重要なのだ。

プログラミングと執筆の、もう少し構造的ではない共通点は、どちらに取り組む際にも求められる推進力にある。成功するには前進し続けなければならず、前進するには継続しなければならない。プログラムも小説も、ひとりでに書かれるわけではないという点では誰もが同意するだろう。二十年にわたるコーディングの経験は、この点で私を大いに助けてくれた。毎日座って書き続けてはじめて物事は進むのだと知っていたからだ。ある日は百語、別の日は二千語と量に波はあっても、ページに言葉を載せない日は稀だ。そして、大きなシステムの単なる「穴埋め」ではなく、自分自身の創作物としてコードを書いたことがある人なら、プログラミングにもスランプがあることを知っているはずだ。唯一の違いは、多くの人にとってあなたはエンジニアであり、だから仕事が進まなければ、それは単に怠けているのだと見なされることだ。同じ怠惰も、相手がアーティストであれば、創造的プロセスの魅惑的な一部という様相を帯びるのだ。

相違点。

執筆とプログラミングの最も鋭い違いは、小説は一度書かれ、編集され、完成すれば、基本的に不変のままであるということだと私は考えている。数年を経て自作に戻り、バグを修正した版を出版する作家の例もいくつかあるが、それは稀であり、仮にあったとしても一度きりのプロセスだ。一方、コードは時とともに進化し、しばしば複数の人々によって行われる、終わりのない変更の波にさらされ続ける。この単純な事実が、二つのプロセスに深い影響を及ぼしている。プログラマーはしばしば、システムの最初のバージョンはかなり不完全でも構わないと考える。どうせ後で改善する時間があるのだから、と。一方で作家は、小説ごとに与えられた弾は一発だけだということを知っている。だからこそ散文を書くという行為は、ほとんど書き直すことと同義になる。文章を、章全体を、不自然に響く対話を、時には二度、三度、あるいは十度にわたって書き直すのだ。

この点において、プログラミングは執筆から学べることがあると私は考えている。新しいシステムの最初の中核を書くとき、まだ生みの親が一人で孤立し、何でもできる状態にあるとき、彼女はこの最初の中核こそが自分に与えられた唯一の一発なのだと見なすべきだ。システムの創生期に、この原始的なカーネルを何度も何度も書き直し、可能な限り最良の設計を探求すべきなのだ。私の仮説は、この初期の設計がその後の展開を大きく規定するということだ。優れた初期構造を持つものを有機的に成長させれば、たとえ最初の創作から何年も経ち、たとえ当初の中核がシステムがやがて持つことになる巨大な塊のごく一部に過ぎなかったとしても、より良いシステムが生まれることになる。

興味のある方のために、私のSF小説について近況を少しお伝えしたい。何度もセルフレビューを重ねた後、原稿を編集者のジュリオ・モッツィに送った。数週間以内に彼から修正案が届く予定だ。彼の指摘をもとに新たな推敲のプロセスに入り、うまくいけば一、二か月で小説を完成させたいと考えている。その後、ようやくイタリア語版を出版する準備が整う。完成した小説は同時にアメリカ在住の翻訳者に送られ、彼女の翻訳が終わり次第、英語版も出版される予定だ。長い旅路だが、心から楽しみながら歩んできた道のりだ。

この記事は「muse-spark-1.2-contributor」を使用して翻訳されました。

コメント