あの子ぼくが「高専1年に読むべきおすすめ書籍」10冊言ったらどんな顔するだろう

この記事は群馬高専Advent Calendar 11日目の記事です(大遅刻)。

はじめにことわっておきますが、最初は、私が学んでいる図書館情報学、または、知識情報学について説明しようと思ったのですが、レポート等々あって時間がたらず、急遽、「高専1年に読むべきおすすめ書籍」10冊というテーマにしました。お許しを。

adventar.org

はじめ

Twitterを見てたら流れてきたこの記事。

qiita.com

この記事に触発されて、高専5年+編入8ヶ月を過ごして、当時高専1年の私に勧めるべき書籍を考えてみようと思った訳です。

というのは表向きな理由で、上の記事に紹介されている書籍やWebサイトって確かに名著なんだけど、高専1年生にSICP(『計算機プログラムの構造と解釈』)やRust公式ドキュメントを勧めるのって、かなりハードじゃない?とも思ったので、私なりの書籍を紹介したいな~というのが裏テーマ。

ただ、この記事で紹介するのは計算機工学、計算機科学が中心になり、電子工学、電気工学は範疇に入らないことは言っておきたい(私は電気電子系の学科にいたはずなのにね……)。

B3の私が高専1年の私に勧める書籍10選

初学者が言語を学ぶにあたっては、1つの書籍ではなく複数の書籍を使って学ぶべきである。 これは大前提である。

お金がなければ図書館で借りたりすることをお勧めする。図書館になければリクエストや取り寄せもできるので、各図書館で確認するとよさそう。

1.『CPUの創りかた

去年のAdvent Calendarにも書いたけど、この書籍は外せない。

demo.hedgedoc.org

正直、高専1年の早い頃、例えば夏休みにやるべきだったなと感じている。 この書籍に1年で出会っていたら、J科に転科してたかもしれない。 それくらいクリティカルな書籍だと個人的には感じている。 なぜならば、情報系にも電気電子系にも回路の講義があってそれらの違いが入学当初にはわからなかったためである。 要するに、「なんで情報を冠する学科が電子回路やるんですか」という問いを返してくれる。

情報系の学科にいた先輩も言っていたが、『「ゲーム創りたくて高専の情報系来たんです」という人は多いけど、そういう人は夢破れていく』らしい。 実際、情報系の学科でゲームを作るのは、できて1つくらいしかなさそうだったし、趣味でやらない限り、ゲームは作れない。 彼、彼女らが、回路の講義や実験を1年の頃やっても夢との乖離でやる気を失うのは想像に難しくない。

ちなみに、論理回路の理論は最低限しか記載されていない。 興味があるならば、普通に教科書として使われていそうなものを見繕ってくる必要がありそうかなと思う。 まあ、情報系なら論理回路は2、3年でやるだろうから、急ぎでない限りあまり必要性はなさそうだけど。

流石に4bitCPUだと実用に向かないのは考えるに難しくない。 実用のCPUの作りとかをもっとやりたいならば、『コンピュータの構成と設計』(略称: パタヘネ、著者の並びからそう呼称される)や、『ディジタル回路設計とコンピュータアーキテクチャ』(略称: ハリスハリス)を後に読むといいんじゃないかなと思う。

ちなみに、ハリスハリスはFPGA*1と使って実践的に学ぶ書籍である。 よって、FPGAを買う必要がある。私の場合は秋月電子通商で1万2千ほどで購入した。 また、『作ろう!CPU』などから、SystemVerilog*2をやってからのほうがいいようにも感じる。

あと、ハリスハリスにはRISC-V、ARM、MIPS版がそれぞれ刊行されているが、このへんは好きなものでよさそう。 個人的には、最近何かとアツいRISC-Vがイチ押しだけど。

RISC-Vを作りたかったが、引っ越しにあたりFPGAを紛失したのがとても悲しい……。

2.『退屈なことはPythonにやらせよう』

高専在学中も「プログラミングやりたい」と言った友人に一方的に勧めてた書籍である。 というのも、プログラミングはやりたいことがあったほうが続く気がするからである。 これはよく語られることでもある。 もちろん、これが、唯一の方法ではないが、やりたいことがない人はオススメできる方法である。

基本的にはオレイリーは初心者向けではないので勧めにくい。 しかし、その中でも「Head First」シリーズとこれはおすすめできるんじゃないかなと思っている。

3.『プログラミングの基礎』

プログラミングの基礎という書名からだとわかりにくいが、これは関数型言語の入門書である。 具体的に取り扱う言語は、OCamlの入門書である。 もちろん、再帰高階関数などの一般の関数型言語が持つ特有の概念が難しい。 しかし、この書籍は難しいと思われがちな関数型言語をわかりやすく解説してくれる。

今のプラグラミング言語は関数型のエッセンスを取り入れるのがトレンドのようにも感じる。 例えば、Rustは今まで主流であった言語に関数型を取り入れているのは1つの特徴としてあるような気がしている。 他にも、Pythonicとされているコードも意外に関数型のエッセンスが入ってたりするような気がする。 さらに、JavaScriptやTypeScriptもそのようなエッセンスが取り入れられているようにも思う。 ちなみに、もともとRustのコンパイラOCamlで書かれてたという話もあったりする。

そういえば、『ふつうのHaskellプログラミング』を積んでいたのを思いだした……。ウッウッ……。

4.『ふつうのLinuxプログラミング』

システムプログラミングに入門するなら、この書籍はかなりよさそうな気がしている。 気がしているというのは私もそこまで読んでおらず、積んでいるからである。

この書籍はPOSIX系と呼ばれるOSの1つであるLinuxを使って、Linuxでよく使われるcdlsなどのコマンドを自分で実装するのが主な内容である。 最終的には、HTTPサーバを実装する。

注意すべきは、C言語自体は学習済みであるという想定で話が進むということだ。 C言語自体の学習に関しては『苦しんで覚えるC言語』(苦C)とかでやるといい気がする。Webサイトも書籍もあるのでそこはお好きに。

9cguide.appspot.com

または、『C言語の絵本』もよさそうだけど。 そういえば高専1年の頃はまだ苦Cの書籍版を持っていたんだけど、パクられたのを思い出した。どこ行ったんだろう……。

書いてて途中で思ったが、この書籍はLinuxに慣れてから読んだほうがよいような気もする……。

5. 『Head First Python

私はWebのサーバーサイドをやりはじめたのはPHPからだったような、Pythonのbottle.pyからだったような……。 思い出せないが、PythonのWebを扱うのに役立った1冊。

6.『ノンデザイナーズ・デザインブック』

デザインに関しての3原則を述べた後、その用例を示す、というのが大枠の本。 デザイナーではない人にとっては3原則だけでも参考になる。

7.「Aizu Online Judge Course」

onlinejudge.u-aizu.ac.jp

普通にプログラミングの入門として使えると思う。 もともとはコンピュータ系の専門大学である会津大学が運営している競技プログラミングのコンテストサイトである。 このサイトには世界的な大会の過去問やこういった入門者向けの問題が掲載されていて、実際にプログラムが正しいものであるがjudgeしてもらうこともできる。

個人的には、ALDS1(「アルゴリズムとデータ構造1」)とかGRL(「グラフ」)とかは今やってもタメになりそうだなと思った。

8. 「AtCoder 精選10問」シリーズ

何にせよ、精選10問シリーズの記事はマストな気がする。 なぜならば、制御構文の基礎を取り扱った問題から、本格的なアルゴリズムの入門問題まで取り上げられており、とても初心者向けだからである。 さらに、C++以外の言語でも解けてうれしい。

qiita.com

AtCoder Beginners Selectionもよさそう。C++でしか解説されてないけど……。

9. 『ライティングの哲学』

ここからは、技術書から離れる。

まずは、『ライティングの哲学』である。 ライティングと書いてあるが、実際はアウトラインプロセッサ*4を使う人々がどのように苦しい執筆に対し、どれだけ苦しさを柔らげられるかということについて語り合い、書いている。

アウトラインプロセッサに出会ったのはそういえばこの本に出てくる読書猿さんのブログからだったっけか。 この記事から入るのがよさそう。

readingmonkey.blog.fc2.com

アウトラインプロセッサ編入試験でも高専の卒研でも触れた内容なので、その出会い、関係性は劇的と言ってもいいかもしれない。 ちなみに、VimからEmacsへ改宗したのもEmacsの拡張であるorg-modeというアウトラインプロセッサ(厳密には違うけど)が原因だったりする。

また、千葉雅也さんの思想を感じたいなら『現代思想入門』もおすすめできる。 彼がこの本のの中で語る考えは哲学的にどのように裏付けられているかというのを一部伏線回収できるように思う。

さらに、アウトラインプロセッサとパラグラフライティング*5とは相性がよいと言われている(ような気がする)。 パラグラフライティングの解説書でいえば、『日本語パラグラフ・ライティング入門』が気になっている。

アウトラインプロセッサとの関連は記述されていないような気もする。しかし、パラグラフライティングに関する割と実践的な書籍である。例えば、文章の穴埋め問題が出されていたりする。

10. 『哲学の誤配』

高専時代は東浩紀さんを知ったことも大きい気がする。特に『ゲンロン戦記』読んでから本格的に見始めたように思う。 その中でも、『哲学の誤配』は彼の思想を知るにあたり、大枠を掴むことができたように感じる。

そういえば、観光客の哲学、欲しいと思って2、3年経ってた……。

著者 : 東浩紀
株式会社ゲンロン
発売日 : 2017-12-11

おわり

図書館情報学の書籍は入れておきたかったけど、Semantic Webとかに興味が出始めるのは高専3、4年の頃だった気がするので、今回はパス。 それと、基本情報技術者試験不要論ってあるけど、結構あの試験勉強で得られる知識って重要な気がした。まあ私は持っていない訳なんですが。

でも、先輩(これも私という想定だけど)に勧められた書籍を読んでる高専1年の私が想像できないな……と書きながら思ったのでした。 当時の電算部はUnityを触る人が主流で、その中で逆張りをやっていたのが私なので。 それでもまあ、どちらにせよアドカレ読んでる高専生たちにはこの本たちはオススメしたいかなと思う訳です。

それはそうと、岡村靖幸よくね? 深夜の孤独感にジャストフィットって感じするし。

open.spotify.com open.spotify.com

*1:プログラミング言語のようなもので論理回路を自由に構成できるボード

*2:FPGAを操作するための言語とでも言えばいいのだろうか

*3:Computer Science Library

*4:ワープロの1形態であるソフトウェア。箇条書きとそのネストで文を並べることにより、事前に文章の論理構造を整理することができる。

*5:科学的、技術的な作文でよく使われる文章の構成手法。