年末ですね。年末に技術っぽいことを書いても誰も見ていないので、どうでもいいことを書こうと思います。
皆さん技術書は好きですか?好きですよね。読みもしないのに技術書典なんかに大挙して押しかけて、結局積読が増えていく。積んでいるとなんか落ち着くのかもしれません。
私は現在ハードウェア関連の技術者として働いているわけですが、短い人生の中で読んだ技術書の中で、本当に私の人生を変えてしまった技術書を思い出しながら紹介してみたいと思います。
あらかじめ断っておきますが、「名著」や「良い本」を紹介するのではなく、あくまでも私の人生を変えた本です。逆にいうと、あまり名著は出てきません。名著の紹介はすでにいろんなところでやられているので、そちらを見ていただければ。
1. 図解で分かるPCアーキテクチャのすべて(初版)
確か私が中学生の時くらいに読んでいた気がする。Amazonのリンクは改訂版ですが、もう初版は売っていない。初版はだPentium 2だとかPentium IIIだとか、そのあたりが解説してあった。
この本の凄いところは、コンピュータアーキテクチャという難しそうな分野を、非常に多くの図を追加ながら簡単にかみ砕いて紹介してくれるところだ。 CPUの簡単な仕組みだとか、レジスタ・メモリ・ハードディスク、バスについて、などなど。頭の悪い私のような人でも簡単に読み進めることができ、しかもわかりやすい。この本を読んで「コンピュータアーキテクチャオモシロ!」と思ってしまったのが私の人生の分岐点だった気がする。
つまり何が言いたいかというと、別に名著を読む必要はなくて、最初にとっつきやすい入門書や最初のハードルが低ければ、興味を持った多くの若者が入ってきやすい。 その門を広げるのが教育機関のはずなのだが、大学の先生とかは研究しか考えておらず教育に熱心でない人が多いのでそのあたりは不安に思っている。例えば授業がめっちゃ面白くない先生の研究室にわざわざ入って研究したいという学生がどれくらいいるのだろうか?自分の分野の門徒を狭めるような授業をするような先生は、とっとと教育研究機関など辞めてしまって、研究機関に転職した方が良い。
- 2020年に読むべきは?
今のところ、ここまで明快なPCアーキテクチャの技術書を私は知らない。 中学生にも分かるレベルでPCアーキテクチャを図解で説明してくれる書籍を、誰か執筆して欲しいものだ。
2. マイクロプロセッサ・アーキテクチャ入門
確か高校生くらいの時に読んでいた。例えば情報処理技術者試験の教科書を読んだりすると、CPUとは「フェッチ→デコード→実行」くらいにしか書いていないのだが、もう少し噛み砕いて、詳細なパイプラインを解説してくれる。あまりすべてを理解できていた記憶はないのだが、うっすらと、「パイプラインカッコいい」だとか「マルチコアすごい」などと思っていた気がする。小並感だな。
ちなみに、この本を読んで十数年後に、ずっと尊敬していた著者の中森章さんに実際にお会いする機会まで恵まれた。同じ分野でずっと活動していると、うれしいアクシデントも発生するものである。
- 2020年に読むべきは?
このレベルでマイクロプロセッサのアーキテクチャについて纏められる人は、後にも先にも中森章さんとHisa Andoさんくらいしかいないんじゃないかと思うが、今だったらHisa Ando氏の「コンピュータアーキテクチャ技術入門」「高性能コンピュータ技術の基礎」が類似するだろうか。いずれにしろ、Hisa Ando氏の書籍はマイクロプロセッサアーキテクトを志す人には必読の書籍だと思う。
3. 作りながら学ぶコンピュータアーキテクチャ
確か大学生くらいの時に読んでいた。今でこそCPUを設計しようという書籍は山ほど出ているが、当時はほとんど存在せずかなり貴重な存在だった気がする。SFLとパルテノンというなんじゃそりゃ?みたいな言語を使って解説してあるのだが、そこはとりあえずVHDLかVerilogに置き換えて実装していた。
この本の凄いところは、これまで教科書でしか見たことのなかったパイプラインの実装方法やフォワーディングなどの基本的なパイプラインの実装方法きちんと実ソースで示してくれるところだ。ステップバイステップで解説してくれるのでありがたい。この本を読みながら、自作MIPSプロセッサをたくさん作ってFPGAに乗せて遊んでいた。間違いなく私の人生を変えてしまった本である。
- 2020年に読むべきは?
2010年以降、雨後の筍のように発行され始めたCPU自作系の書籍は、別にどれも変わらないと思う。 みんなVerilogを書いてシミュレーションしてFPGAで動かす、基本的な流れは一緒なので好きなのを読めばよいと思う。
4. Modern Compiler Implementation in C
Modern Compiler Implementation in C
- 作者:Andrew W. Appel
- 出版社/メーカー: Foundation Books
- 発売日: 2007/12/01
- メディア: ペーパーバック
いわゆるタイガーブックである。コンパイラと言えば、ドラゴンブック・タイガーブックというのがあるが、私はタイガーブックから入った。なぜかというと当時東大生?だったか、誰かがブログでタイガーブックを読み始めた、というのがあったので私も読んでみようと思ったからだ。確か私は当時大学生だった気がする。そして、私が読み終えた1年後くらいに日本語版が発行された。とても悲しい。
実際、これも実際に手を動かすタイプの本で非常に面白い。この本のターゲットはフロントエンドが独自言語なのだが、最終的に私はC言語に移植して動かしていた気がする。バックエンドをMIPSにして、FPGA上で自分のコンパイルしたコードを自作MIPSプロセッサに流し込んで動かしていた。
結局、この時に作ったコンパイラを最後までもっていって、修論でも独自アーキテクチャ向けに改造して論文を書いていたので、間違いなく私の人生を変えた一冊だ。この本を読んだおかげで、コンパイラという存在があまり怖くなくなった。
- 2020年に読むべきは?
最近本格的なコンパイラの書籍はご無沙汰しているのでアレだが、今だったらRui Ueyama氏のコンパイラの資料が強いのだろうか。 まあ私もちゃんと読んでいないので、まずは自分が読め、というところだろうか...
5. Structure and Interpretation of Computer Programming
Structure and Interpretation of Computer Programs
- 作者:Harold Abelson,Gerald Sussman,Julie Sussman
- 出版社/メーカー: McGraw-Hill Science/Engineering/Math
- 発売日: 1996/08/01
- メディア: ハードカバー
なぜかこの辺から名著が登場し始める。いわゆるSICPである。これも大学生の頃に読んでいた。本文の中に問題が埋め込まれていて、これを1つ1つ読み解いていた気がする。英語だし分厚いので時間がかかるのだが、回答をどこかのブログに書いて進めていたら、どこかの韓国人の人が熱心にそれを見てコメントしてくれていたのが懐かしい。
この本は、英語の本を一冊やりきるということの満足感を教えてくれるという意味で大きな一冊だ。 多くの人が手を付けていたし、私にも頑張れば読めるだろ、という気分で読み始めたのだが、後半のインタプリタやコンパイラの所は完全に理解できたかというと曖昧な部分が多い。 ただしこの本を完了したおかげで、関数型言語は怖くなくなったし、論理型プログラミング言語が授業で登場したときも全く問題なく受け入れらた。字句解析とかの実験も難なくできた。自分、やればできるじゃんという自信をつけさせてくれた一冊。
- 2020年に読むべきは?
別に関数プログラミングを進めたいわけではなく、英語の本を一冊読むと、少しだけ人生変わるよというだけの話のなので、好きなのを自分で読めばよいと思う。
6. Advanced FPGA Design
Advanced FPGA Design: Architecture, Implementation, and Optimization (Wiley - IEEE)
- 作者:Steve Kilts
- 出版社/メーカー: Wiley-IEEE Press
- 発売日: 2007/06/29
- メディア: ハードカバー
たぶんこれもFPGA界隈のエンジニアにとっては有名。大学生の頃に読んでいた。FPGAはすでに好きでいろいろ遊んでいたのだけれども、この本を読んで「高性能・小面積・低消費電力」のデザインを設計するためにはどうすればよいか、ということを考えるようになった。FPGA向けのデザインはたくさん勉強したし、いろんな方式で合成をしてどんな回路ができるか確認した。Verilogの書き方はたくさん覚えた。
- 2020年に読むべきは?
「FPGA開発日記」のくせにFPGAからご無沙汰になって久しいが、最近はFPGA自体の性能向上によりこれらの技術はあまり重要視されないのだろうか?どちらかというと「FPGAに上手くはめ込む」という技術より「FPGAの上で何を作り込むか?」に重要性がシフトしてきている気がするので、マニアックなFPGA技術が知りたい人は読めばよいと思う。
私の人生を変えるのに少し役に立った技術書たち
列挙してみると10冊にならなかったので、お茶を濁す。
7. 月刊アスキー (96 ~ 97年代)
月刊 ASCII (アスキー) 2006年 08月号 [雑誌]
- 作者:
- 出版社/メーカー: アスキー
- 発売日: 2006/07/18
- メディア: 雑誌
私のコンピュータの基本的な知識を身につけさせてくれた雑誌。父親が買っていたものを読んでいた。 どうでもいいが、当時の月刊アスキーは1~12を示す月の番号を2進数で表記してあった。 当時は全く気が付かなかったけれども、これに気が付くのにはもう少し時間がかかった。
プログラミングの特集もあったし(当時は全く理解できなかったが)、ロードテストといういろんなPCを動かして試してみる、というのは編集者の日本語力にも差が出て非常に面白かった。あの時に大好きだった編集者が、月刊アスキーを経て別のウェブ雑誌の編集者になり、最終的にGoogleを経てVCの偉い人になっている経歴をずっと眺めていると、何となく彼も成長したな―と思っている。まあ私の方がずっと年下だけど。
今でも覚えている特集記事で「このIT語を知れ!」というものがあった。2000年代の特集で最新の技術紹介がなされているのだが、すでに「ペーパーライクディスプレイ」という名前で曲がるディスプレイの要素技術について紹介があった。その時の衝撃は鮮明に覚えている。実際に実用化させるまで、20年の歳月がかかるとは思ってもみなかったが。
8. FM-77のマニュアル
FM-77というと富士通の作った非常に古いコンピュータ。この辺の話をするとおそらく昔のPCオタクのような老人が生えてきて要らない情報を寄こしてくれるのだが、そんなものは全く不要なので省略。
FM-77のマニュアルは「本体はおまけ、マニュアルに価値あり」といわれるくらいに充実していて、確かこれでBASICを勉強しながら音楽とか鳴らして遊んでいた気がする。たぶん人生で一番最初に作ったプログラム。
9-10. パタヘネ・ヘネパタ
- 作者:ジョン・L. ヘネシー,デイビッド・A. パターソン
- 出版社/メーカー: 日経BP
- 発売日: 2014/12/06
- メディア: 単行本
- 作者:デイビッド・A・パターソン,ジョン・L・ヘネシー
- 出版社/メーカー: 日経BP
- 発売日: 2014/12/06
- メディア: 単行本
- 作者:ジョン L ヘネシー,デイビッド A パターソン
- 出版社/メーカー: 星雲社
- 発売日: 2019/09/25
- メディア: 新書
これは人生を変えた本というか、人生が変わった後に読んだ本なので省略。
というか、ヘネパタをいきなり読んで人生が変わってしまうような天才の人は、いきなり医学書とか読んで医者になった方が世界にとって有益な気がする。
というわけでつまり何が言いたいかというと、人生を変える技術書は意外と名著ではなく、魅力的な入門書だったり、初心者にもわかりやすく書いていある本であることが多いと思う。入門書を読んでから「これオモシロ!」と思ったら名著を買えばよろしい。いきなり分厚い本を買うと疲れてしまう。
しかしこうやって振り返ってみると学生の時は技術書をたくさん読んでいるが、社会人になってあまり読まなくなった。 これは勉強量が減っているのでは?精進しなければ。