見出し画像

プログラミングの本を読みたいが、数学が分からなくて読めない

先日、退職エントリを公開したところ、たくさんの反響をいただいた。

このエントリの中で、大学院に行って勉強をし直すことに強い興味がある、ということを書いた。学生の頃の自分は、とにかく卒業をすることだけを考え、学問に対して心の底から湧き上がる探究心、好奇心のようなものを感じることはほとんどなかった。それが今、ある程度プログラムが書けるようになるにつれ、コンピュータのことをもっと知りたい、プログラミングについて理論的な勉強がしたい、そう思うようになってきた。

学ぶのに遅すぎることはない、とよく言われるが、それにしても、大学の頃、今くらいの情熱をもって勉強に取り組めていたら今頃、自分にはどのような世界が見えていたのだろうか、ということを考えると、学生の頃の時間の使い方について反省せざるを得ない。

とはいえ、Steve Jobsがスタンフォード大学卒業式のスピーチで "Connecting the dots" というフレーズで表現したように、将来絶対に役に立たないだろう、と思ってやっていたこと(点)の数々が、思わぬ形でつながる、ということは人生ではよくあることだとも思う。まだ20代半ばの自分でさえこのように感じているのだから、今後生き続けていく中で、過去の「点」がどんどんつながっていくのだろう。

過ぎ去った時間を悔やんでも戻ってくるわけではないので、今勉強をしたいと思うのならば、今から始めるしかない。というわけで、コンピュータサイエンスを学ぶ学生が学部生の間に読むであろう分野の本をポチポチと購入している。

今のところ特に興味があるのは、プログラムの静的解析手法。OSS活動として deno_lint という TypeScript / JavaScript のリンター開発にコントリビュートしているうちに、プログラムが人間の意図通りに動くことを静的に補助してくれるツールの奥深さに魅せられるようになったからである。

最新の研究を追っているわけではないので、静的解析が学術的にどのくらいホットなのかはまったく分からないのだが、トレンドの研究を追ったり論文を読んだりするための下準備としても、コンピュータサイエンスの基礎は学んでおく必要があるのは間違いない。

前置きが長くなった。ここからが本題で、コンピュータサイエンスの本が、難しくて読めない。
例えば静的解析手法としてはおなじみの型システムを勉強するため、定評ある「型システム入門」(通称TaPL)を読もうとするも、最初の数十ページの時点で、ふわふわとした理解しかできない。

集合とか論理とかの言葉についていくための数学的な基礎体力が足りていないことを実感する。基礎がしっかりしていないと、その上に知識を積み上げていくことは到底不可能である。

いろいろ検索してみると、「TaPLは難しいし分厚いしで挫折しやすいから、別の本を先に読んだほうがいい」というように言っている人がちらほらを見受けられた。その中ですすめられていた本が「論理と計算のしくみ」だった。

なるほど、と思ってこれも購入して、読み始めてみたら、これも最初の30ページほどでかなりの厳しさを覚えた。むしろTaPLより数学数学しているので読みにくいように感じるかもしれない。「束」「ハイティング代数」って何???

集合と論理について、とにかく前提知識が無いということを受け入れて、初歩の初歩から始めていくことにした。高校数学から大学数学への橋渡しとしておすすめされていた以下の書籍を購入した(未到着)。

さすがに高校数学は大丈夫……だと思うので、この本から入って順番にレベルアップしていけば、最終的にTaPLを読み解くことができると信じている。

上述した「TaPLルート」の他に、コンパイラルート、OSルートなども勉強していきたいため、いつになったら入門フェーズを終えることができるのか、途方もない道のりに感じる。時間がいくらあっても足りない……けど、勉強をするというのはこんなにも楽しいのか、と心躍っている。

この記事が気に入ったらサポートをしてみませんか?