競プロ始めました-kaede2020-

競技プログラミング(AHC)参加記を中心としたブログです

「問題解決のための『アルゴリズム×数学』が基礎からしっかり身につく本」と自分の密接な関わり

0.はじめに

はじめまして、もしくはお久しぶりです。競技プログラミング歴2年のかえでです。

昨年の暮れ、2021年12月25日に1冊の本が発売されました。タイトルは「問題解決のための『アルゴリズム×数学』が基礎からしっかり身につく本」、著者は東京大学の1年生、米田 優峻さんです。米田さんは、Twitterを始め、QiitaやAtCoderなどではE869120さんのお名前で活動されています。私は普段E8(いーはち)さんとお呼びしているので、これ以降は米田さんのことをE8さんと書くことにします。

このブログを書いている2022年3月20日現在、出版された本は、Amazon 開発技法タグ 1 位、第5刷2万部まで重版を重ねていて、驚くほど売れています。

問題解決のための「アルゴリズム×数学」が基礎からしっかり身につく本

私はこの本のレビュワーの一人として参加していました。

今回は、私とE8さんの出会いから本のレビューをすることになった経緯、私から見たE8さんの執筆活動の様子やレビューに関わって感じたことなどを書いてみたいと思います。私が書くE8さんは、実際の人物像とは異なるかもしれません。これから書く内容は私個人の見解であることを最初にお伝えしておきます。

また、この記事を公開しても良いかについては、事前にE8さんに読んでもらって許可を得ていますので、その点はご安心ください。

なぜこの記事を書くことにしたのか。

それが、この記事を書いている間、いちばん悩んでいたことです。何度も自問自答しました。私自身の中ではすでに完結している話なので、特に最初から書こうと思っていたわけではありません。理由の一つは、E8さんがすでに公開されているkiriminさんの記事のようなものを他のレビュワーにも書いてほしいと望んでいたからです。

執筆のレビューに参加した"問題解決のための「アルゴリズム×数学」が基礎からしっかり身につく本"をダイマする|きりみんちゃんノート|note

正直なところ、私自身は、今現在、この本を宣伝することに対する興味をほぼ失っていています。というのはE8さんが思った以上に、ご自身の本の宣伝をがんばっている姿を見ているので、自分が後押しできることはもうなさそうだと感じているからです。

私は依頼されても書きたくないことは書かないのですが、自分が行ったことを形にして残しておくことも悪くないのかもしれないと思いました。

そして、もし書くとしたら、こんな大人もいるということを知ってもらいということかもしれないと思いました。

私にとってE8さんは、私が競技プログラミングを始めるきっかけとなった記事を書いていた、最初に出会った競技プログラミングをする人(競プロer、コンテスタントなど、いろいろな呼ばれ方があるようです)でした。「競技プログラミングを知らない人」と「競技プログラミング」をつなぐ架け橋になれるE8さんは、とても貴重な人だと思っています。だから私は、自分のできる範囲で、できる限りの支援をしたいと思っています。

本題とは直接関係がないのですが少し自分の話をすると、学生のときの自分にとって、家族や教師といった周りにいた大人は、勉強すれば全てうまくいくと私を洗脳しようとする、自分のしたいことを妨げる障害か敵のように感じていました(今思うと、私はクリエイティブな職業に進みたかったのですが、それでは生きていけない、お金にならないから堅実に働く道に進むようにと、大人たちはこぞって自分の進路を変えさせようとしていたのかもしれません)。

「大人は信用できない」。そう思っている人をTwitter上で見かけると、「そうだよ、信用しちゃだめだよ」と思います。その一方で、敵ではない大人もいて、そういう大人をうまく活用して、自分の世界を築いていってもらいたい、とも思うのです。本人が決めた道に進むことを、私のように応援する大人も大勢いると、知ってもらえたらいいなと思いました。世の中はそんなに甘くないという人がいるならば、その一方で、私は甘い世界もあると伝えたいのです。

この記事はE8さんへの私からのはなむけの言葉です。だから、この本のレビューに、私がどれだけ熱い思いを持って参加したかを書いてみようと思います。これを読んだ人に私の思いが伝わればうれしく思います。そして、初めて本を出版したときには、こんなこともあったなあと、E8さんに思い出してもらえる記事になればいいなと思います。

その上で、これまで競技プログラミングに参加したことのない方に自分やE8さんのいる競技プログラミングの世界に興味を持ってもらえたら、他に望むことはありません。

それでは、長くなりますが、どうぞ最後までおつきあいください。

1.reviewerになったきっかけ

去年の2021年7月7日に「40代で競プロができるのかという話」という記事を書きました。この記事は多くの人に読んでもらっていましたが、E8さんにも読んでもらうことができました。そのとき、このようなツイートをしてくれました。

私のことを「自分が尊敬する人のうち1人」と表現してくださっていて、本当に驚きました。自分にいったいどんな価値があるのだろうか?心の内に問いかけました。コンテストに無料で参加し、無料で解説を聞き、無料で便利なツールを使わせてもらっている自分。けれども、学生でもエンジニアでもないので、就職等でAtCoderにご恩返しをすることもできない。実力もないので解説などの役立つ情報を提供することもできない。もらうばかりの自分を申し訳なく思うばかりでした。

だからE8さんのこのツイートを読んで、「本当だろうか」と、とても信じることができませんでした。

その頃のE8さんは、競プロ典型90問のツイートを毎朝行い、惜しみなくみんなに良質な問題とわかりやすい解説を提供してくれていました。その姿を見て、自分も何かお手伝いできることがないだろうか、自分にできることがあれば少しでも協力したい、と思いました。

私は勇気を出してE8さんに一通のDMを送りました。

E869120さん、こんにちは。
今日しか勇気が出ないと思ってDMを送らせていただきました。
レートが低いので、ずっとためらっていたのですが、競プロ典型90問の誤字、脱字のチェックや日本語のわかりやすさなど、書籍化にあたり、何かお手伝いをさせていただけないでしょうか。
競プロ界に何か自分が貢献できることはないかと考えています。
対象レートを下に下げたい(理解してもらえるようにしたい)のであれば、今のままでは難しすぎると自分は考えています。
とても自分が意見できる立場ではありませんが、少しでもお力になれればと思い、図々しくもご連絡させていただきました。
どうぞよろしくお願い申し上げます。

 

すみません。追記させていただきます。難しいと言ったのは、問題のことを指しているのではなく、「表現(言い回し)」のことです。

その日の夜に、E8さんから返事が来ました。

ありがとうございます!!!
書籍執筆にご協力いただけるようで、とても嬉しいです!!!

現在の「競プロ典型 90 問」は解説 1 ページだと灰色・茶色には分かりにくい一方、書籍になった後は蟻本・螺旋本・けんちょん本などと並ぶようなものになると思っています。これから競プロを始めたい人が書籍を取る可能性もあるので、是非お願いしたいです!!!

あと、実は 6 月からもう一つ別の本を書いていて(現在執筆途中・非公開情報)、アルゴリズムに必要な数学的知識と考察をまとめたものです。現在 reviewer を 10 人くらい募集しているので、もし宜しければこちらにもご協力いただけると嬉しいです。

去年の2021年7月13日のことでした。

最後に書かれていた「もう一つ別の本」が、今回出版された「アルゴリズム×数学」の本のことです。驚きましたが、もちろん喜んで参加させていただく旨を返信しました。

そして、2021年8月8日に正式な依頼が来て、私はreviewerの一人として協力することになりました。翌日、本の執筆のために作成されたSlackに招待され、「問題解決のための『アルゴリズム×数学』が基礎からしっかり身につく本」のレビューが始まったのでした。

2.レビューの開始

Slackに参加すると、そこには競プロ界の有名人が揃っていました。

reviewer について

reviewer は、幅広い層の意見を取り入れるため,幅広い実力層(茶色~教授格まで)から 20 名程度を集めています.

(2021年8月9日E869120(著者)の発言より)

ここでひるまない人が果たしているのでしょうか。ドキドキしながら自己紹介をしたことを覚えています。

レビューって何をするのだろうか。レビューって1対1で原稿を読んでやり取りをすると思っていたのだけど違うのだろうか。わからないままに、次の展開を待ちます。

さて、E8さんからの最初の問いかけは書籍の構成案でした。文章は2割程度を書いたところで、このあと約一か月で初稿を書き終えるという、かなりタイトなスケジュールが同時に公開されました。physics0523さんや自分、tsukammoさんが構成案について意見を述べて、各人がE8さんといくつかコメントをやり取りした後、新規の書き込みが無い日が続きました。

他の人はどう考えているのだろう。なぜ全員が意見を書き込まないのだろうか。E8さんはこれで良いと思っているのだろうか。わからないまま始まったSlackでのレビューに、自分のイメージするものとは異なるものを感じ、焦りや苛立ちのような気持ちを抑えるのに苦労しました。ただ時間が経過していくことが、とても、もったいなく感じました。

一週間ほど、何かが変わる日を待ちました。

しかし、何も起こりませんでした。

自分は主役ではない。それはわかっていました。自分に味方がいるわけでもない。何か話しても、賛同を得られるかどうかわからない。

それでも、E8さんが成功することを望んでいました。

私はE8さんに事前に一つの提案をし、意を決してSlackに書き込みをしました。

reviewerのみなさん、こんにちは。
かえでと申します。
こちらのSlackに参加してから、活気がないことが気になっています。
そこでご提案なのですが、E8さんから質問をあげてもらい、それに対して、ロールプレイング的に賛成意見と、反対意見をあげるグループに分かれて意見を出すことにしたらどうでしょうか。
E8さんは両方の意見を参考にすることができます。
これは自分が勝手に推測しているだけなのですが、reviewer全員の前で、「良い」とか「反対だ」とか書くのは皆さん抵抗があるのではないでしょうか。
また、能力のある方たちだと思っていますので、賛成と反対、どちらの立場の意見も言えると思っています。
もしご賛同いただけるのでしたら、こちらのコメントにリアクションをください。
E8さんから質問をもらってきて、メンバーを振り分けさせていただきたいと思います。
意見がいいやすい雰囲気になるまで、例えば一日一問質問を出し、質問ごとにYesNoメンバーをランダムに分けて意見を書いてもらう等したらどうかなと考えています。
(E8さんには事前にご連絡して「いいね(?)」のリアクションをもらっています。)
もしもっと良い方法があるということでしたら、それをご提案くださっても構いません。
初めましての方ばかりで私が何かを言うのは大変勇気のいることなのですが、これだけのメンバーが揃っているのに、発言が少ないのはもったいないと思って、書かせていただきました。
どうぞよろしくお願い申し上げます。

(2021年8月16日)

この書き込みにリアクションがありました。

反応があった!とうれしかったことを覚えています。

早速E8さんに質問をもらおうと連絡しました。17:30までに質問をもらうことで合意した初日の16:54のことでした。E8さんから連絡が来ます。

あ、今日の質問は夜中でいいですか(2.1 節とまとめた方が良いと思うので)

せっかく進みかけた何かが止まってしまうことを私は恐れていました。E8さんから質問をもらおうと必死に返答をします。

できれば何でも良いので今日の分のお題をください。夜中のは明日用ということで。これはチームワークを高めるための練習であり、プレなのです。毎日発信することが必要だと思っています。負担であればお気持ちを伺います。

すぐに返信し、答えを待ちます。17:22にE8さんの投稿がされました。

1 章について
主に議論すべき点は以下の 7 個です:
1. 1.1 節で、「1 + 2 + ... + 100」の例が適切であるか。また、小学校の算数しか知らないレベルの人でも理解できる内容となっているか。
2. 1.2 節で、「アルゴリズムの性能評価」文字式を出すのは適切かどうか。

(中略)
7. その他、数式の誤りや誤字脱字、さらに良い表現など気づいた点

私はほっとしました。

と同時に、今後のためにも一回きちんと直接話し合った良さそうだと考えます。Slackに通話機能があることに気がついていた自分は、E8さんに連絡を取りました。この夜の通話がこの後のレビューを行う上での自分の原点であり、明確なゴールが見えた貴重な時間となりました。

さて、後日談を少しだけ付け加えておきます。この議論すべき点を列挙した形は、論点がはっきりしたことで、レビュワーも返答もしやすく、最後までこの形式の問いかけが続くことになったのでした。

3.E869120さんとの初めて通話をしたときの話

8月17日の通話時間の記録は1時間13分となっていました。

このときいったい何を話していたのか?

自分の8/18の投稿に要約を載せていたので引用します。

reviewerのみなさん、こんにちは。
#generalで行われている投票に関連して、E8さんからお聞きしている話を皆さんと共有させていただきたいと思います。

・Slackを使ってreviewerを一堂に集めたのはどのような理由からですか。
→全員に連絡するのが楽だから。
・reviewerはどのような人選ですか。
→教授等の有識者、執筆経験者、90問関係者、教育に積極的なレッドコーダー、社会人・教育枠、中学生、読めるかどうかを確認してもらう人等。幅広い層を集め、それぞれから意見をもらえるようにしたかった。
・DMで個別にレビューをもらっていますか。
→もらっていない。
人数が多いから自分の意見を言わなくてもいいわけではなく、それぞれの立場からの意見をE8さんは求めています。
DMでも公開でもどちらでも良いので、全員がE8さんに意見を送ってもらいたいと思います。
どうぞよろしくお願い申し上げます。
(追記:気持ちは変わっていませんが、恥ずかしくなったので、一部文章を編集しました。) (8月18日投稿より)

上記引用の「恥ずかしくなったので、一部文章を編集しました」と書いてある部分ですが、編集で何をカットしたかといえば、履歴がなくてあまり覚えていないのですが、確か「これが私のE8さんの応援のしかたです」というような啖呵を切っていたのではないかと思います。

話をしたことで自分の聞きたかったことは明確にできたので、状況の把握もできました。

そして、このとき話した内容で特に重要なことだったのが、すでに発売されている、アルゴリズム本について、一冊一冊の書評をしたことことです。E8さんはどの本についても研究されていて、その本の長所と短所を把握していました。私自身が思っていた、初学者にとっつきにくい点、理解しづらい点についても理解を示していて、今回の本では、多くの人にとって学びやすい本となることを重要視しているということがわかりました。

なかでも意気投合したのが、平易な言葉を使うという点です。専門用語を使って厳密に書くほど正確性は高まりますが、理解できる人が少なくなってしまいます。許せる範囲で、わかりやすさを重視するという点に共感しました。話したことで同じ方向を向いてゴールを目指せるということがわかりました。私やkiriminさんをレビュワーに加えている時点で、最初からこの本が既存の本とは違うものになることが約束されていたのかもしれません。

自分は教育学部出身だというのもあり、学問的には教育にいちばん関心があります。E8さん自身も教育に関心があるようで、かなり自然な形で教育談義をしたので、話が弾むことにE8さんも驚いていたことが印象に残っています。

話をしたことで不安が消えました。と同時に、自分のできることは、E8さんを応援しながら、レビュワーとして並走するだけだと思いました。文章として書いていないだけで、E8さんの頭の中には書くべきことがしっかりと詰まっていました。

4.レビューをする日々

併走してみるとわかるのですが、これはものすごくきついものでした。

平日仕事をして帰宅すると、レビューのために原稿を読む日々が続きました。その後、議題にそって返答を書きます。

睡眠不足と疲労感で、家でも残業をしているような気持ちを味わいました。

しかし見方を変えれば、E8さんにアルゴリズムと数学を教えてもらうという、競プロerとしてはかなりぜいたくな時間を過ごしているとも言えました。

少しだけどのような感じだったかをお見せしたいと思います。

出版物ではP213からP216の「5.3偶奇に着目する」の箇所でのレビューです。

当初は5.4節の予定でしたので、そのまま転記します。

E8さんのレビュートピック、公開した原稿、そしてそれに対する自分の返答です。

f:id:kaede_2020:20220320171114p:plain

議論すべき点(5.3偶奇に着目する)

f:id:kaede_2020:20220403135320p:plain

最初の原稿

f:id:kaede_2020:20220320170410p:plain

レビューの様子(5.3偶奇に着目する)

今回、この記事を書くために、Slackを見直してみて、この箇所のことをよく覚えていたので、取り上げることにしました。E8さんの引き出しがとても多く、こちらの声に反応して、すぐに改善案を考えて修正していくスピードに驚いた覚えがあります。

Slackで行われていた31件の返信について、引用してみることにします。

E869120(著者)  
5.4.1 について:一応確認なのですが,両方奇数の場合の説明が分かりづらかった感じですか?(偶数の場合の構成などは理解できましたか)

E869120(著者)  
問題 5.4.2:512 通り→合っています.証明は,ある選び方と「選んでいないものをすべて選ぶ選び方」が一対一対応し,それらの偶奇が必ず異なることを考えれば分かりやすいです.
例えば {1, 2, 3, 5} と {4, 6, 7, 8, 9, 10} は対応しますが,総和の偶奇が逆になっています.

かえで 
あ、今修正しようと思ったのですが、戻るためには偶数でなければならないですね。マス目の幅が1だと行き止まりになってしまうので。やっぱり理解していなかったようです。今理解しました!

E869120(著者)  
えっと,具体的に文章のどの部分が分かりづらかったか教えて頂けると嬉しいです. 

かえで 
そうですね。言語化するのが難しいので、もう一度文章を読んでから再度返信します。

E869120(著者)  
>全部のマスの数が関係するので、N×Nの正方形のマスといった問題に変えて、1×1、2×2、3×3といった説明にすると簡潔になってよいのではないでしょうか。また、反転の説明は理解できます。
これなんですが,入力を N として
N が偶数の場合 → 構成的に簡単に証明できるよね
N が奇数の場合 → 市松模様で塗って無理なことが分かります
といった流れを想定していますか?(確かにその方がステップ数少なくて分かりやすそうですね.レビュー反映の際に修正します.)

かえで 
読み直してきました。
まず、13行目の下にある、矢印の入った図が3×4から始まっていたことだと思います。また文章中ののWが偶数だという部分を読み飛ばしていたかもしれません。
先に図が目に入るので、そこから理解しようとしていました。
Wが偶数の場合という例であれば、Wを2,4,6,8…のように動かしてもらいたかったです。
3×2,3×4,3×8
4×2,4×4,4×8
といった、「偶数ならどれでも」といったことがわかるような比較をしないと、図では、HとWの両方が変わるので、変化が何に依存しているのかがわかりませんでした。
次に市松模様の図ですが、i+jの値が入っていることに意味があるのかがわかりませんでした。左上をスタートとして、同じように矢印を書いてくれた方がよかったのかもしれません。スタートから移動すると、最後がどのようになるかがピンと来なかったので、自分で書いたりしていました。すると、黒が1枚残るといったことが起きるのかなと思いました。進んだ様子がイメージできないので市松模様の図が生かされていないように感じました。
今いただいた返信についてですが、「反転して考える」といったことに重きを置いていなければ、その方が説明が簡単になると思いました。E8さんの書いてくださった流れで良いと思います。

かえで 
問題5.4.2の証明、ありがとうございます。理解しました!

E869120(著者)  
(前半については,分からない原因は大体 N×N にすれば解決しそうだなあと感じました.2×2 → 4×4 → 6×6 → 8×8 → 10×10 を例に挙げる感じですかね.)
本質の後半パートなんですが,
>同じように矢印を書いてくれた方がよかったのかもしれません。
とはどのようなことでしょうか.(市松模様を導入しない方がわかりやすいということでしょうか.) 

かえで 
市松模様はあった方が良くて、ただ、経路なので 、一例として、やっぱりダメだよね、という図が欲しいといったらわかるでしょうか。
全部のマスを通ると出発地点に戻れない、もしくは出発地点に戻ると1マス通れないといったどちらかのパターンになるといったことを図示して欲しいなと思いました。

E869120(著者)  
つまり、こんな感じの流れを考えていますか.
N×N で N が偶数 → こうやればいけるよね
3×3 の場合 → どう頑張っても行けなさそう…
実際に証明してみよう!

かえで 

考えてはいなかったですが、今流れを見て、わかりやすそうだなと思いました!

E869120(著者)  
>全部のマスを通ると出発地点に戻れない、もしくは出発地点に戻ると1マス通れないといったどちらかのパターンになるといったことを図示して欲しいなと思いました。
今考えていたのは,これを 3×3 でやることを想像していました.あともう一つ質問があって,5.4.2 項で分かりづらいところはありましたか. 

かえで 
はい、良いと思います。ありがとうございます。
5.4.2ですが、まずページの真ん中の大きな樹形図の意味が不明です。(なくても良さそうです)次の図はよく見るとなるほどとわかって、次のページの上にある図はまたよくわからないといった感じでしょうか。
文章に関しては理解できます。

E869120(著者)  
10^100 通りとなることを文章で説明するだけで大丈夫そうでしょうか.

E869120(著者)  
次のページの上にある図はまたよくわからないといった感じでしょうか。
次ページの上の図は N=3, K=7, A=(1, 0, 2) の場合の操作方法を説明しているだけですが,どこが分かりづらいでしょうか.

かえで 
樹形図が計算量が多くなることを表したいだけなのでしたら、文章だけで良いと思います。
次のページの図は、どこが変化しているかが(-1されているかが)わかりづらかったので、-1しているところに-1と指し示したり、変化のある配列の色を変えたりすると良いかなと思いました。

かえで 
すみません。そろそろ寝ます。何かありましたら、続きは明日返答します。

E869120(著者)  
ありがとうございます.樹形図を消したらスペースが空くと思うので,空いたスペースで図を工夫してみます.反映は 9/15 頃になると思います.

E869120(著者)  
>なので、例題1のタイトルは「例題1:マス目を全部通り出発地点に戻る経路」といったタイトルにした方が良いのではないかと思います。
「例題 1:マス目を一周する経路」とかでどうですか.

かえで 
一周という言葉に、「全部のマスを1回ずつ通る」という意味をなかなか感じられないので、「一筆書き」という言葉の方がマッチします。
「全てのマスを一筆書きで通れ」という言葉を今検索してキャッチしてきました。
どうですか?

かえで 
スタート地点に戻るという意味がないですね…

かえで 
あれ、やっぱり、一筆書きに戻ってくるという意味がありそう…

E869120(著者)  
5.4.1 の証明,こんなのはどうでしょうか.理解できますか.
image.png 
image.png

E869120(著者)  
修正版

image.png

f:id:kaede_2020:20220403135802p:plain

書き直された原稿

かえで 
読むのでちょっと待ってください。

かえで 
読みました。
自分的にはめちゃめちゃいいですね!
とても分かりやすいです。
理解できます。

E869120(著者)  
図,作るのに 15 分くらいかけましたが,どうでしたか.

E869120(著者)  
あと,文章的にダメなところがあったら教えてください.

かえで 
あの、こまめにメンションをお願いします。(すぬけさんの解説放送を裏で見ているので)
真ん中の図はすごくよくて言うことなしです。
上の4つの図は、できれば、スタートとゴールの四角枠を太線にするとか、通れなかったマスを太線枠にするなどして、ちょっと違いを目立たせてもらえるとうれしいです。
文章ですか。もう一度読んでみるので再度返信します。

かえで 
2行目「どうしても出発地点にもどれないか」の「どうしても」は「どうしても起こってしまいます。」というように、「起こってしまいます」の直前に移動した方が良いです。(誤読するので)
また、吹き出しのセリフが二重人格っぽいので
「もし一筆書き~なるはずだから、スタートのマスは灰色になるはず。あれ、おかしいなあ…。
ということは、一筆書きは存在しないのか!」
くらいにしてみたらどうでしょうか。
最後下から3行目 「Nが偶数の場合はYes、奇数の場合はNo」←「は」を入れる。
下から2行目 「偶数回目と奇数回目で色などが」←「など」を取る(余計な語句が入ると意味があいまいになります。)
今読んで気づいた点はこれくらいです。

最終的にできあがった原稿はこのようになりました。

f:id:kaede_2020:20220403141633p:plain

5.3偶奇に着目する(P213、P214)

その後(2021年10月以降)はSlackのDM(ダイレクトメッセージ)でのやり取りがメインとなりました。E8さんの問いかけに対する自分の返信数を数えると、300件を超えていました。随分とやり取りをしたものだと自分も驚きました。

DMでのやり取りを見返していて、自分の心がほっこりと温まる文章を見つけたので、ここに転記したいと思います。今この記事を読んでくださっている方にも、私のうれしかった気持ちが伝わりますように。

E869120(著者)  

そういえば,10 分前にレビュー反映が終わりました.かなり分かりやすくなったと思います.

かえで 
仕事が終わったら読みます。
本当に、修正が入るたびに、玉が磨かれていくようですね。
良い本になると思います。早く自分の手元に置ける日が来るといいなと思います。

E869120(著者)
いやもうこれは全部レビュワーのおかげです.ありがとうございます.

かえで
そう言ってもらえると、reviewerの一員として私もとてもうれしいです!
一緒に完成の喜びを分かち合いたいですね。

5.読者層について

E8さんの原稿が5割ほど完成した頃、この本をどんな層に向けて書くかについて投票が行われました。その際、印象に残っているやり取りがありました。E8さんとレビュワーのお一人だったtsukammoさんのやり取りです。

tsukammo 2021年9月2日
投票レビュー「読者層」について
重要ですが難しい問題だと思います。
サービス設計などで良くやられる「ペルソナ」を考えるアプローチがよいかなと思います。
ペルソナを考える上でのポイント
・特定の属性の人物にとって嬉しいことは他の人も嬉しいことが多い、というアプローチである。
・ペルソナと実際の読者は乖離していてよい。
 ※設定したペルソナへの反対の根拠として出がちな「実際に本書を手に取る人は〇〇な人が多い」というのは、ペルソナを見直す理由にならない。
ここは、純粋にE8さんが思い描く理想の読者をまずは聞いてみたいです。
一方で、年齢によるキャッチアップの度合いの違いがあります。
つまり、
・若い人はハマればわからない事があっても離れないし、自分でキャッチアップしてくる。
・成人するにつれ、わからない事があるとすぐ離れてしまったり、キャッチアップもしにくく、熱量が下がってくる。
という傾向です。
この傾向を考えると、ある程度年齢が上の世代にフォーカスをあてて、若い人には頑張って追いついてもらう、
という方針もアリだと思います。

E869120(著者)
返信が遅れてしまい申し訳ございません.
>一方で、年齢によるキャッチアップの度合いの違いがあります。
>つまり、
>・若い人はハマればわからない事があっても離れないし、自分でキャッチアップしてくる。
>・成人するにつれ、わからない事があるとすぐ離れてしまったり、キャッチアップもしにくく、熱量が下がってくる。
>という傾向です。
これ実はまさに 4・5 章の原稿を書いているときに気にしていました.(reviewer さんのうち,かえでさんと kirimin さんがおそらく両方社会人なので,この 2 人が理解できるように調整しました.)
---
続いて,理想的読者のペルソナ(執筆開始時から変更していない)は主に 3 つあって(この 3 つを両立できるように執筆を行ったつもりです),2. より 1. の方がかなり優先度高めです.
なお,単なる競プロ対策記事として書かれた元々の記事「アルゴリズムAtCoder のための数学」は,0. を対象読者として思い描いています.
《読者パターン 0:競プロ対策》
未履修あるいは抜け落ちた数学的知識を確認したうえで,問題解決に大切な数学的考察を整理し,数学パートで強くなりたい競プロer向け.レート層は 100(プログラミングができる)~1299(アルゴリズムは知っているが考察で失敗する)程度.
《読者パターン 1:プログラミング→数学+アルゴリズム
数学がわからないことが原因で,アルゴリズムが理解できない,あるいは理論は理解できても実際の問題解決に活かせない層.例えば,社会人エンジニアでアルゴリズムを使えるようになりたいが,数学を忘れてしまったせいで,既存の書籍が理解できない人.もちろん中高生で数学未履修の人も含まれる.中学数学レベルの基礎から知識がまとめられており,最終的にはけんちょん本など学術系のアルゴリズム本が読めるレベルまで,数学力・アルゴリズム力を向上させることを目標にしている.
《読者パターン 2:数学→アルゴリズム
算数・数学はそこまで苦手ではないが,アルゴリズムを知りたい人.社会人はあまり多くなく,優秀な中高生~標準的な理系大学生の層がメインとなる.情報系の学部ではない人(例:情報系ではない工学部だが,プログラムを書く場面でアルゴリズムを使うので,一通り触れてみたいケース)も思い描く読者として想定している.関連する数学的背景とアルゴリズムを同時に説明していることから,アルゴリズムに興味を持ちやすいと考えられる.

tsukammo
なるほど、すでに意識されていたということで了解です。
読者層のイメージは了解なのですが、ペルソナ設定やそれによる掲載情報の取捨選択には至っていない認識です。
一方、今回のレビューの仕方自体が、特定人物の感性に合わせて取捨選択をしているので、上手くバランスが取れていると感じています。

自分の中でレビュワーとしての客観的な立ち位置は全くわかっていなかったのですが(わからないことを伝える担当だとは思っていました)、そうか、この本は自分に合わせて作成されている部分が多分にあるのだなと、気がついたのでした(kiriminさん然り)。

6.「問題解決のための『アルゴリズム×数学』が基礎からしっかり身につく本」と自分の密接な関わり

この記事で書きたいと思っていたことも終わりに近づいてきました。

この章だけは、自分のために、自分がほめてもらうためだけに書こうと思います。

「問題解決のための『アルゴリズム×数学』が基礎からしっかり身につく本」の第一章のタイトル、「アルゴリズムと数学の密接なかかわり」は自分の提案を採用してもらいました。

E8さん側からの当初のこの章のタイトル案は以下の3つでした。

アルゴリズムには数学が必要
アルゴリズムと関わる数学
問題解決のためのアルゴリズムと数学

しかしこれらの提案は自分にはどれもピンと来なくて、何かちょっと違うと感じていました。そして他に適切な言葉はないかと考えているうちに、ふと「アルゴリズムと数学の密接な関わり」(自分は「かかわり」は「関わり」と漢字での提案をしました)はどうかな、と思いました。何回かこのフレーズを繰り返しつぶやいてみて、ん?これはかなり良いのではないかと思いました。「密接」という言葉の意味を調べたり、他とかぶらないかをわかる範囲で調べたりしました。

他の章もあわせた自分のタイトル案(この1章のタイトルを含む)の一部に、レビュワーのお一人であったYutaro Yamaguchiさんが同意してくれました。Yutaro Yamaguchiさんの発言はいつも心強く、このときの後押しは特にとてもうれしく思いました。最終的にはE8さんと編集者で決定するとのことでしたが、その後無事に採用してもらえたことがわかりました。今これを書くにあたって、その時の当初の提案を見返しても、やはりこの「密接なかかわり」という距離感が絶妙だなと思う私なのでした。

7.サイン本の到着とE8さんの本屋めぐりに同行

待ちに待った日がやってきました。

2021年12月18日、ついに完成した本が私の元に届きました。

f:id:kaede_2020:20220320224603p:plain

「問題解決のための『アルゴリズム×数学』が基礎からしっかり身につく本」の表紙

当然のごとくE8さんのサイン入りをお願いしていました。しかし、届いた本には、E8さんのお名前が入っていませんでした。

私はショックを受けてしまいました。いつか会う機会があったら、必ずサインをもらおうと決意します。

f:id:kaede_2020:20220320224442p:plain

E8さんからの直筆コメント

しかし、このサインがなかった問題は、早々に、2021年12月20日に解決されました。

E8さんに同行して、先行発売の丸善丸ノ内本店に行ったときにサインをもらうことができました。

なぜ同行することになったのか。元々は、本の発売後にE8さんのサイン会をしたらどうだろうかと考えていました。サイン会の集客に自分が何かできないだろうかと思っていました。しかし、コロナ禍でイベントを開く時期ではないということで、サイン会は実現しませんでした。

一方、E8さんは本を先行発売している書店を回って、本の宣伝をしていました。発売前の宣伝を一緒にするのは楽しそうだと思いました。また、本の売れ行きを見るのもまた楽しそうです。予定を聞いて、自分もそれに合流させてもらいました。

本の売れ行きを実際に目にして、すごいなあとうれしく思いました。

f:id:kaede_2020:20220320231454p:plain

無事、サインをもらうことができました
8.お疲れ様会

全国で本が発売されました。売れ行きは絶好調です。

その頃、2021年12月27日に、関東にいるレビュワーが集まることになりました。

初めて会う方ばかりでしたが、自然に打ち解けることができて、とても楽しい時間を過ごすことができました。この「問題解決のための『アルゴリズム×数学』が基礎からしっかり身につく本」にはプログラミング問題がついており、AtCoderでのジャッジもついています。

このお疲れ様会で話を聞くことで、問題のテストケース作成等、レビュー時の私からは見えない部分でも、多くの協力の上に成り立っていたことをあらためて知ることができました。

また、それぞれが熱い思いを語る時間を共有できて、とても幸せな気持ちになりました。

9.最後に

これで、私がレビューをしたときの話は終わりにしたいと思います。長い話になりましたが、ここまで読んでくださり、本当にありがとうございます。

本が発売された後の売れ行きは、自分の予想もつかない程良い結果でした。そして、それは今も続いています。

今回、このようなご縁で「問題解決のための『アルゴリズム×数学』が基礎からしっかり身につく本」のレビューに関わることができたことを本当に心から感謝しています。

大変だったけど、とても幸せで、価値のある時間でした。

そして私は、これからもE869120さんのことを応援し続けるでしょう。

10.番外編

本当は番外編ではないのかもしれません。それでもこのブログの中に、うまく取り入れることができなかったので、最後の最後に持ってきました。

2021年10月19日、いつものようにDMでレビューを行っていたときのことでした。

ところでお礼を伝えたいので,slack 通話しませんか?

E8さんからのうれしい一言でした。結局、1時間半くらい話していたでしょうか。

私のしてきたことがE8さんの力になっていたことを感じて、うれしく思いました。

自分にも何か手伝える力があるはずだと、自分を信じてレビューに参加してよかったと思いました。

本当は、自分のAtCoderでのレートが上がることが、この本の良さの証明となるのではと思っていました。だから、レビュー当初(2021年8月8日が802)と比較した今(2022年3月20日が691)のレートを残念に思います。最近の記憶力は本当にイマイチだなあとか、インプットとアウトプットには差ができるのはしょうがないなどと言い訳をして、この問題は先送りにしたいと思います(いつか良い報告をしたいものです)。

そして最後にもう一つだけ、番外編に書いておきたいことがあります。

2021年11月20日のDMです。

f:id:kaede_2020:20220320230121p:plain

いつか実現してもらいたいので貼っておきます

E8さんへ

何年後になっても構わないので、この記事を読み返して自分の書いたことを思い出したら、ぜひこの約束を果たしてくださいね。

その日を楽しみに待っています。2022年3月20日 かえで