プログラミング等(2021/4/11):pythonプログラミングとかをやっていた
1.創作上、特に描きたい訳ではない、しかし作中で要請される描写
今まで何度か書いてきたような気がしますが(どういう口火の切り方だよ)
私はライフワークの「推しが最高に光り輝く活劇小説」を書きたいのでした。
で、そのためにもいろいろ書いてきたんですけど、そうこうしているうちに、流石に分かってくることがありました。
何かというと、「物語を書いていると、特に描きたい訳ではない、しかし作中で要請される描写は、やはりある程度は避けられない」ということです。
で、ここを蔑ろにすると、その物語はそれだけ粗が目立ち、物語への没入をガリガリ損なうんですよね。
これでは、推しの光り輝き方に対して与えられてしかるべき評価を、他ならぬ作者の私が、ガリガリ損なっていることになる。
そいつはとてつもなく困るんだ。
2.グッと興味を惹き、スッと分かってもらうようになるまで、描写を丁寧にせねばならない
私の場合、魔法めいたプログラミングと、それがもたらす物理的な破壊力がたくさん出て来るはずなので(後者はともかく、前者はいったいどういう小説だ)、ここらで手を抜いたら話になりません。
そんなものには説得力は備わらない。
少なくとも、「興味を惹かないし、よく分からない」という層は、全員そっぽを向くだろう。
***
ほとんどの読者は、そもそも最初は、見知らぬ作品に対し、「興味がないし、何の知識も持たない」。
ちゃんとその層に対して、「興味を惹かせる、分かってもらう」程度の努力はすべきであろう。
じゃあ、グッと興味を惹き、スッと分かってもらうようになるまで、描写を丁寧に裏漉しせねばならないということだ。
***
書いている方が興味に乏しいところは、どうしたって描写するのは退屈になりがちだ。
だが、そんな根性で書かれた描写は、読んでいる方も、退屈になるものだ。
書いている方が興味を持たなくても、読んでいる方が「あれ? 急に話のクオリティが下がったな」と白けるような描写にならないようにしなければならない。さっき書いた通りだ。
3.高校の図書室で"Newton"誌はわくわくしながら読んでいたが、高校物理のテストは0点
上のような描写を丁寧に行うためには、もちろん物理学とプログラミングの知識が要る。
私はたまたま、貧弱ながら、プログラミングの知識は持ってるし、自分でも組める。ここは希少価値だ。
だが、物理学は、見ている分には好きだが、理解しているとは到底言い難い。
高校の図書室で"Newton"誌はわくわくしながら読んでいたが、高校物理のテストは0点。そんなやつだった。(だから理系進学は最初から選択肢になかった)
これは今もそうだ。物理学への理解の乏しさが、今ですらあちこちで(創作上ですら)足を引っ張っている。無茶苦茶腹立たしい。
***
小説を読んでいる方としては、物理学の勉強なんかを、わざわざしたいわけではない。
ふつう、勉強に飽きて小説を読みたい層がいたときに、彼らとしては小説で勉強なんかしたくないもんだ。
こんなことされたら、そりゃあ舌打ちもするだろうし、キレもしよう。これは当たり前だ。考えるまでもない。
***
だが、ほんの少しでも知識がある人が、「そうはならんやろ」となるような小説があったとしたら、そういうものは、平たく言って、雑なんですよ。
読者は、ちょっとした気力と時間を、ちょこっと割いて、読んで下さっている。
なのに、肝心の作者が、読者を白けさせる小説をお出ししてどうする?
そんなやつの小説、読まれると思うか?
そんな小説が長広舌を振るう、物語やキャラの何らかの魅力とやらが、読者の脳に、果たして損なわれずに通ると思うか?
私はここはだいぶ怪しいと思う。
***
「ウナギにドジョウを一匹混ぜる者あり。ならばウナギにはかえって手を抜くべからず」
嘘をつく時はディテールをちゃんとしろ。
平安時代の哲人剣士、ミヤモト・マサシの残した格言である。(そんな人はいません)(嘘を嘘と分かるようにすることも、創作上で要請される、おもてなし精神のうちです)
4.数学を吸う時が来た。たのちい! (マジかよコイツ)
さて。
物理学をやるには、どうしたって数学が要る。
プログラミングをやるにも、数学はともかく、どうしたって論理学が要る。
ふつう、論理学は広義の数学の一種だ。
つまり、もし物理学とプログラミングの二つを丁寧に描写するなら、幅広く、論理学を含む数学を、吸って行かねばならない。という覚悟が要る。
***
これは、もちろん、面倒だ。最初は、私も、そうだった。
だが、やらないと、描写のディテールはデタラメになる。
やらねばならない。という精神で、やっていた。
***
で、なんか途中からちょっと変わって来ていて、
「ああ、全体像、こうなっていたのか。これを高校時代までに把握していたら、とてつもなく入りやすかっただろうな」
くらいには、うっすらと興味を持つようになっていた。
平たく言えば、人生において、だいぶ遅いが、数学を吸う時が来た。たのちい! (マジかよコイツ)
***
ちなみに、姿勢としては、知識として集めているだけだ。証明は未だにまともに出来ない。
「そんな姿勢では数学をやっているとは言えない」
と数学徒に吐き捨てられたら、返す言葉がない。(既に何度も吐き捨てられて来た)
***
が、小説を読んでいる方としては、数学の証明なんて、わざわざ読みたいわけではない。
そこは、書いている方の私も、百も承知でなければならないし、トチ狂っちゃあいけないところだ。
5.とりあえず彌永昌吉・彌永健一『集合と位相』IIまで
数学を吸う過程で、ここ3年間挑戦してきたものがあります。
彌永昌吉の著作『数の体系』上&下と、彌永昌吉・彌永健一親子の著作『集合と位相』I&IIです(下のAmazonのリンクでは分冊されてないが、私の買ったやつは分冊版でした)。
『数の体系』上&下と、『集合と位相』Iは、読み終えた。後は、『集合と位相』IIを、8割程度、残すのみとなった。
もちろん、読み終えますよ。最初からそのつもりです。
***
数学において、数というのは、ふつうどこでも出て来るものだし、とても大事なものです。
とはいえ、我々(特大主語)は、数について、ほとんど何も知らない。
***
よく見たら、数とは、初歩的なものとしては、まず連番であり、つまりは順序のあるものの一種であり。
もうちょっと高度なものだと、ある程度は四則演算等の出来るものの一種であり(引き算次第ではマイナスになったり、割り算次第では分数になったり、ルート次第では無理数になったりする)。
かなり高度なものだと、ある種の空間の一種でもある(分数と無理数は、定規の目盛りと線上の点くらい、細かさのレベルが違う。無理数のレベルの細かさは、実はある種の空間能力によってもたらされたものである)。
***
数の持つ、これらの側面(順序的構造、代数的構造、位相的構造)を噛み砕いて呑み込んでいくと、そこを媒介として、数学に対し、猛烈に理解が進む。
そういうとば口としては、これら4冊は、メチャクチャいい本です。
最初のうちは噛んで含めるようにして説明してあり、そのうち内容はどんどんステーキくらい分厚くなってくるが、気が付くと他ならぬこの自分自身が、いつの間にかステーキをモリモリ食えるようになっている。
目の前にはだだっ広い山の中腹が広がっているが、地図を頼りに、頑張って散策して、いつかは山の頂を目指す。そういう気になっていく。
***
彌永本4冊ですが、とりあえずは、文系にはよく分からん人も多いであろう複素数と、まあ見覚えのある方程式や多項式の間の、奇妙な関係、「代数学の基本定理」というやつが、目標だと考えて下さい。
「何モンだそれは」と言いたくなるかも知れませんが、実はこれもちょびっと見覚えのある特殊な式、判別式を定義するのに使います。(おそらく我々が一番触れる判別式は、二次方程式f(x)=ax^2+bx+cに、実数解が何個あるかを判定するのに使われる、判別式Δ=b^2-4abですね)
判別式をやっていると、分岐という概念に触れることになり、そこから代数幾何学における不分岐に、不分岐射に、エタール射に、そして解析学(特に微分積分学)の領分である微分可能関数に、可微分多様体につながっていきます。可微分多様体は、ちょびっとは見覚えのある積分につながっていきます。
(多様体とはある種の図形のことです。我々は積分を、直線に対する曲線や、曲線に対する曲線に囲まれた面の領域という、図形を介した覚え方をすることが多いはずです。そういうところに効いて来るのです。
そして積分には様々な使い道があるので、理解を深めると捗るところも大きいでしょう)
そうかあ。こんなことになっていたのか。今まで誰も何も教えてくれなかったんだな。何て広くて味わい深いんだろう。
(数学で味わい深くなっているワナビー、世間的には理解を得られない愉しみ方だ)
6.資料精読のためのGraphviz作業
さて、こうして、本を読んで要約したりしている訳です。
読書するときは、出て来るキーワード同士には関係があったりするので、キーワードを抽出するのに加えて、それらの間に矢印を引かねばならない。
そういうことをすると、本に書いてあることの整理という意味では絶大な効果があるし、ものの見え方は極端にクリアになる。
***
さて、さっきちょろっと書いたんですけど、私はプログラミングスキルが、ほんのわずかだけあるんです。細かい説明は避けますが、前職がへっぽこプログラマだったからです。
で、「こういうのをするとき用に、何かツールとかないんですか」と、当然思う訳です。
世の中にはおあつらえ向きに、「キーワード同士に矢印を引いて有向グラフにして可視化してパッと見に分かりやすくする」ツールというのがあります。
パソコン用の、GraphVizというフリーウェアです。
7.Graphviz作業支援pythonプログラミング(本当に何やってんだコイツ…?)
で、これで作業をしていて、たいへん捗っていたのですが、そのうちいろいろと悩むことも多くなって。
私の場合、有向グラフを作る時の素材となるデータファイルから、
・点と矢印がグルグルするループや、
・出発点と終着点の間に複数矢印がある重複や、
・A→B→Cのとき、A→Cに直接矢印があるショートカット
をなくしたかった訳です。
これがあると有向グラフを作る時に明らかに視覚的に邪魔になるからです。
***
特に、ループがあると、どのキーワードが「始まり」なのか、曖昧になってしまう。
「AからBが出来て、BからCが出来て、CからAが出来る。そういう再帰的な永久機関めいたウロボロスの存在は、認めねばならない」
という話は、それは認めるんですよ。現にそういうループ構造のシステムはたくさんある。生き物だって、クエン酸回路とか、食物網とか、そういうあれだしな。
でも、
「その要素となる個々のものは、そもそもはループではなかった。
ループでない個々の要素から、ループである上位システムが出来た。
ループである上位システムは最初からあった訳ではない」
ことも、まず疑いえないんだよな。
「ループは、最初から、ただ、あった」
みたいな神話めいた寝言には興味がない。
それは何ら解明ではない。
そして、解りたい俺に、「そんなところで納得しろ」と言われても、困る。
俺は、個々の要素と、それらの依存関係に興味があるのであって、そこを曖昧にするものは全部取っ外して考えたくなる。
少なくとも、読書要約のときは、それは、やりゃあ出来ることであろう。
***
まあ、そんな訳で、最近は非常に広く使われているpythonという言語を用いたプログラミングで、GraphViz用の有向グラフのデータファイルから邪魔な記述を無くすプログラムを書いていました。
そういうコードを、自分で作りたかったし、ひょっとしたら作れるんじゃないかと思ったからです。
クソ忙しさの極みの3月~4月の間、足掛け2か月。
バカじゃなかろうか。
複数のテストデータを読ませて、おそらく、誤作動はない。めでたし!
***
「初期設定ファイルを読ませて、いちいちフォルダやファイル名を入力しないでもよくする」
「データファイルの書き方がおかしくないか構文解析する」
「データファイルを2次元配列にする。
各行は"A"から"B"へという構造だから、2要素配列に出来そうだ。
複数行あった場合、この2要素配列をさらに配列に突っ込んだ2次元配列が作れるはずである」
「ループは特に有害なのでさっさと外す。
2要素配列を繋げると長い列を作れるはずだ。
が、その過程でループとなる列も発生しうるので、そういうのが出たらループ列を新たな2次元配列に入れておけばよい。
『これらのループ列一式を手動で見て、おかしいところを自力で直せ』
と警告を出すことも出来るはずである。
もしそれらが解決したら、ループのない長い列一式を配列に入れておいて、後々のために使おう。
そういう長い列は明らかに便利だしな」
「重複も取ると綺麗ですね」
「ショートカットも取りたい。実はさっきの長い列一式が、こういうときに便利なのではないだろうか」
「こうして、綺麗な配列だけが残る。これを新しいデータファイルとして出力したい」
「創った全プログラムを手際よく行う主処理プログラムを作る」
「実行ファイルをpyからexeにする」
こんなことを果てしなくやっていました。
ホント、よくもまあ、懲りもせず、作ったよなコイツ…
(俺は諦めの悪さと見極め&逃げ足の速さで生き残って来た人なので、諦めの悪さで粘っただけです)
***
そんな訳で、夢の「ダブルクリック一つでGraphVizのデータファイルが綺麗になる」プログラムの完成です。
読書要約作業におけるGraphVizで有向グラフを書く工程が、今後からは圧倒的に楽になる予定です。
もちろん、せっかく作ったプログラムも、ちゃんとそうした実作業で問題なく役に立ってこそだ。後で実際に試してみましょう。
テスト用ダミーデータはいくつか用意して、その通りに動いたが、
「あんなに執拗に作ったテスト用ダミーデータの網羅をもってしてでも、実作業本番では常に例外はありうる」
という覚悟は決めておかねばならない。
スーパープログラマならそんなことはないのかもしれないが、俺はスーパープログラマなどではない。
自分の弱さくらい弁えておくべきだし、弱くても勝たねばならない。
「勝つ」とは、「意図通りの目標を達成する」ということだ。
実作業本番でも、ちゃんと「勝てて」いような。
***
この世界は、どんな役割であろうと、自分の頭と手を動かすことは避けられない。
そんなこんなで、最初に作る、みっともないpythonプログラム。
しかし、これを忘れないようにしたい。消さないようにもしたい。
「ここ」が、始まりだ。「これ」が、創造行為だ。
俺は、「ここ」に行き、「これ」を、創ったのだ!
8.未来へ…
Graphviz作業支援pythonプログラミングは、資料精読のためのGraphviz作業のために。
資料精読のためのGraphviz作業は、資料精読(特に『集合と位相』II)のために。
資料精読は、基礎知識の習得(特に数学)のために。
基礎知識の習得は、描写に必要なジャンルの理解(特にプログラミングと物理学)のために。
描写に必要なジャンルの理解は、白けない程度にはデタラメでない、丁寧な描写のために。
白けない程度にはデタラメでない、丁寧な描写は、物語への没入を損なわず、推しの光り輝き方を描き切るために。
***
そういう迂遠な心意気で、地道にやってます(迂遠すぎる…)
成果を上げるための地道な努力と、効率を上げるための地道な努力には、途方もない価値がある。
多分これをやらないで今後もやっていたら、喉の奥に刺さるようなひりつくようなコレジャナイ感が残っていたことだろう。
それが解決したし、効率も大幅に上がることだろう。
これから、頑張るぞ!