月初めのモチベーターとして、準備したテキストを紹介していく。
The Elements of Computing Systems
The Elements of Computing Systems: Building a Modern Computer from First Principles (The MIT Press)
Nand2tetris という愛称が与えられていて、知名度も高い教科書である。O’Reily から『コンピューターシステムの理論と実装』という邦題で出ている日本語訳も評価は高いようす。
Nand2tetris という呼称が端的に表現しているように、 NAND という単一の論理ゲートを出発点に、CPU、メモリ、機械語、アセンブリ、コンパイラ、OS までのコンピューターシステムを作り上げて、最後にはそのマシンの上でテトリスを実装するという方針の教科書である。
骨太の一冊のように思われるが、実際には学部1年生でも取り組めるように、前提知識をほとんど要求しないように書かれている。学部レベルの計算機科学を学び直すという意味ではうってつけの教科書になる。ただし、「マシンを作り上げる」という目標のために、パイプライン処理やメモリ階層といった重要概念への言及が犠牲になっているとは指摘されている。
In seeking simplicity and cohesiveness, Nand2Tetris trades off depth. In particular, two very important concepts in modern computer architectures are pipelining and memory hierarchy, but both are mostly absent from the text. 1
基本知識へのハンズオンとしてこれを読み終えて、アーキテクチャの全体像を手に入れた上で、より古典的な計算機科学のテキストに進むのがいいのだろう。とっかかりとしては申し分のないテキストであるようだから、時間をかけても完走したいところ。
『新装版 数学読本2』
対数関数と三角関数について、ときおり参照する機会がありつつ、その度に検索エンジンに頼ってぼんやりと思い出すことを繰り返していた。受験勉強以来、数学の勉強から離れていたというブランクからくるコンプレックスを打破する上でもいい機会ではないかと、高校レベルの参考書を求めて、ここに行き着いた。
著名なシリーズであるから、内容の品質には一分の心配もない。第一巻を飛ばしていきなり第二巻から着手するのはすこし腰が引けたが、遠慮していて勉強ができるかと開き直った。
関数一般から取り組んでいて、二次関数の問題を解いたりしている。一日の終わりに、コンピュータを閉じて、裏紙に粛々と手計算をしていく時間には、日常から離れたリラクゼーションがあって、気持ちいい。
おわりに
7月は C++ の参考書を中心に取り組んでいた。継続して C++ の勉強を膨らませていく、という方針もありえたが、結局のところ業務で使わないスキルであるから、モチベーションの維持に不安があった。
計算機科学と数学については、そこに知識の欠落があるというコンプレックスは自覚してながら、「業務には必要ない」とか「いまの自分には必要ない」などと奇妙な正当化をして遠ざけてきた節がある。それでいて、「いつかは体系立てて学んでみたい」というようなことを飲み会の場で口走るようなこともあって、いくぶん迷走していた感じは否めない。
短期的な投資対効果が見込める学習対象はほかにごまんとある。しかし今後長くコンピューターに携わっていく気持ちがすこしでもあるのであれば、できるだけ早くに計算機科学のイロハを学び直すのがいいだろう、とここのところ考えている。
とはいえそれは、キャリアのための勉強とか、お金のための勉強とは思わず、好奇心を満たすための勉強と割り切って取り組むのが無難だろう。
■
いま、計算機科学の観点からコンピューターアーキテクチャを作り上げるという課題を前にして、ここで学ぶひとつひとつの知識が、新たな視点をもたらしてくれるのだと胸をときめかせている。この感覚は、大学用の MacbookAir に初めて Ruby をインストールした日々の清らかな思い出に通じるものがある。
モラトリアムの不安に押しつぶされていた時代に Ruby と出会い、のめり込むように学んできた結果としていまの自分があるけれど、その駆動力となったのは結局、好奇心であったはず。そして同じ好奇心を持って臨める対象であれば、なんでもある程度は習得できるはず。そう思って、一文無しの学生のように謙虚な気分で取り組んでいきたい。