Don't Repeat Yourself

Don't Repeat Yourself (DRY) is a principle of software development aimed at reducing repetition of all kinds. -- wikipedia

2017年読んでよかった技術書

年の瀬なので書こうと思います。今年はたくさん技術書を読みました。基本的に自腹だったのですが、転職して書籍補助が出るようになり、なんと本をあまり自費で買わなくなりました。書籍補助は技術者にとって嬉しい制度ですね。それはどうでもいいですが、読んだ本の中でとくにオススメできるものをご紹介します。

今年は人やTwitterで薦められていた本を読むことが多かったです。

ふつうの Linux プログラミング

Raspberry Pi を買ってみたのですが、Linux 関係のプログラミングってどうなってるんだろう?ということが知りたくて買いました。前半は cat コマンドを自作したり、 head コマンドを自作したりと Linux のコマンドを、Cのシステムコール系の API を使って実装していくのですが、(懐かしい)C言語のいい復習にもなってよかったかなと思いました。途中から Rust でやってみたりもしました。ちなみに最後は HTTP サーバーを作ります。

テスト駆動開発

テスト駆動開発

テスト駆動開発

ちょうどその時期にテストの書き方について悩んでいたのでいい機会だと思い読みました。テスト駆動開発(TDD)を、コードを1から書きながら丁寧に教えてくれます。TDD 初心者の私も、非常によく流れがわかりました。業務でも実際に使ってみたりしています。私は結構 BDD の考え方が好きだなと思い、それができるように意識してテストコードを書くようになりました。

コーディングを支える技術

自分の中で何かが目覚めた本でした。たとえば、関数(あるいはメソッド)がどのように実行されているのかに関して説明ができないなと思った方にはおすすめです。1つの概念を説明するために複数の言語を比較しながら説明するというアプローチを取っており、非常に理解が進みやすいです。抽象的な概念はその定義を説明するだけではうまく理解できないことが多いですしね。

あと、読んでいるとなぜかアセンブラを書いてみたくなります。読み終わったあとに、さっそくアセンブラで遊んでみました。プログラムがなぜ動くのか、System.out.println("Helo, World!") がなぜできるのかということを実体験込みで理解できるようになったと思います。オススメ。

計算機プログラムの構造と解釈

計算機プログラムの構造と解釈 第2版

計算機プログラムの構造と解釈 第2版

今年、読んで一番良かった本で、なおかつ大好きな本です。名著です。Lisp のシンプルな構造に感動しました。神言語と呼ばれる所以がわかりました。

内容はとても多岐に渡ります。最初は Lisp あるいは関数型プログラミングの解説から始まり、インタプリタの実装や DB の実装、さらにはレジスタの実装や GC の実装を、すべて Scheme (Lisp の方言) でやりきります。基本的な考え方さえ知っていれば、どんな機能であれ必ずプログラミング言語という偉大な発明を使って実現できるのだという勇気をもらった気がします。

Functional Programming in Scala

Functional Programming in Scala

Functional Programming in Scala

日本語版が出てるのを知らずに英語版で買いました(笑)。

最初、さまざまなエクササイズを通して List や Option などを自作させられます。ヒイヒイ言いながら10章くらいに来ると、「これまでエクササイズしてきたものには全部共通点があったでしょ?それが、モナド♡」と優しく教えてくれます。関数型プログラミングは理屈ではなく身体で覚えるものです。

日本語版は下記です。

来年の展望とか

来年は Raspberry Pi を使い倒したいなと思っているので、 ARM 関係の本を読みたいなと思っています。まとまった休みが取れたら、 OS 自作本もやりたいです。プログラミング言語としては、 CLI ツールが楽に作れそうなので Go 言語に興味が出てきました。それ関係も読むかもしれません。あと英語(笑)。