プログラマぽい何かの独り言

適当に独り言を言います。

現実をゲームと捉える

きっかけ

戦略の要諦という本の序章を読んでいたら、詰まるところ「難しいが最重要箇所であるところ」を見極めてそこに全力投球できるかどうかが重要と書いてあった。(優先順位を決めて、手持ちのリソースで解決可能か判定して、リソースを集中して投入するという3つの能力が必要らしい)

そこでふと「最重要だけど難しい箇所を見つけた際、乗り越える能力が低いと相当苦労するのでは?」と思った。

ここから自身がこの数週間で経験したことから悟ってきた内容をベースに「人生はレベル上げしてボスを倒すゲームとして捉えると楽しい」という考えに至った。

気づきを得たきっかけ

休日、go言語で作るインタプリタという本を題材にペアプロをしていた。

ペアプロ相手はプログラミング言語を自作したい人だった。(この人はこの人で面白い)

この人は僕の2倍以上プログラミングの年数があるが、ペアプロしてもらっているうちにふともらった言葉で非常にためになるものがあった。

「焦りすぎなんだと思います」

この言葉をきっかけにゆっくりと文章とプログラムを読む作業をしたところ、以前よりプログラムを読んだり文章を読んで頭に入ってくるようになった。

この体験は非常に貴重で、その人とのペアプロ後の1週間の間、仕事の後に読む文章をゆっくりと読んでゆっくりと作業してみることにした。

結論、ここ数年で経験したことがないくらい学びが増えた。

ここからわかったことは「焦りすぎてあらゆることを雑に拾っていたため、深い理解を得られなかった。そしてわかればなんてことはない。」ということだった。

そうして1週間経って、またその方にペアプロしていただいたのだが、そこでまた知識が連鎖的につながっていく快感が得られた。

そこでふとわかったことがあった。

知識自体はバラバラだったし、興味本位で雑にのぞいてただけだが、結果的に1つのコンテキストに集約できた。

この快感は凄まじかった。

つまり、雑に覗くだけでも一応効果はあるということだった。

レベル上げの方向性

ふと浮かんだのはレベル上げしてステータスを割り振るという方式との対比だった。

あれは戦って勝利することで得られた経験値をステータスに割り振っている。

現実は経験値という抽象化された概念として取得できない。

特定の方向性でレベル上げしていっただけである。ゲームのステータス上だと筋力だけやたら高いとかそんな感じだと思う。

自分の現実世界に即していうと、「高トラフィックで安定稼動するシステムのアーキテクチャという方向性、kaggleという方向性、プログラミング言語開発という方向性、OSを載せるハードウェアの開発という方向性」などさらに細かく分類できるが様々なレベル上げする方向が存在している。

今回、僕は「goで作るインタプリタ」を通じて「パーサやコンパイラの方向」でレベル上げができたことになる。

そうしたら今まで不可解だった特定の言語で書かれた解説書などについて読めるものが増えた。

一方、今自分はOS自作とかハードウェア自作の方向性に進もうとしているのだが、その過程で「モダンLinux」という本も読んだのだが、副産物として他のLinuxに関する記述にも反応できるようになり、理解する際の苦労が減った。

自分は「自作OSと自作ハードウェア」という方向性でレベル上げができたことになる。

面白いことにこれらに通底しているのは「特定の規則性を見出し、それらを利用して高速で解きたいパズルをとく」という作業がいかに速いかということな気がする。

さて、メモリ効率とか色々考え出すと、利用する道具の仕様は当然のこと、それらを効率的に扱うためのデータ構造の持ち方や作り方にも重要になってくる。

こうなるとますますデータ構造とアルゴリズムが重要に感じられてきた。

ここまでくると大学数学も再入門して幅を広げたくなってきた。

落ち着け

方向性を見極め、最重要箇所に集中することを忘れてはならない。

一方、セレンディピティを意図的に得る時間を毎日30分ご褒美に作っても良いだろう。