id:pocketberserkerさんとお話している時に
「ブログで良書まとめ的なものをやってみたい」
といった話が出たので、さっそくやってみることに。
とはいえ、良書くらいならそのあたりにいくらでもあるし、私の百数十冊の本のうち読んだもののほとんどは私の知識として直接ではなくとも役立っているものは数多くあります。
そういう面では良書なんていくらでもあるので、ここではプログラミング初級者〜中級者に特にお勧めしたい10冊をセレクトすることにしました。
ちなみに初級者はプログラミングで100行程度のコードなら楽に書ける人、中級者は実際に個人で500〜3000行程度のコードを持つ実用的なアプリケーションを作成する能力がある人を指して使っています。私は中級者一歩手前ですかねw(そんな人間が偉そうにこんな記事書くなよ、とか言わないでね)
私の経験的にはそれ以前の初心者の方はこれらの本よりはもう少し基礎的な部分を学ぶのがよいと思います。
ちなみにあくまでも、私の蔵書からのセレクトなので内容の偏りは気にしないでくださいね。
あと番号は順位ではなく、単なるナンバリングです。
No.1 「Write Great Code vol.1 & vol.2」
Write Great Code〈Vol.1〉ハードウェアを知り、ソフトウェアを書く
- 作者: Randall Hyde,鵜飼文敏,まつもとゆきひろ,後藤正徳,トップスタジオ
- 出版社/メーカー: 毎日コミュニケーションズ
- 発売日: 2005/12/01
- メディア: 単行本
- 購入: 2人 クリック: 129回
- この商品を含むブログ (105件) を見る
Write Great Code〈Vol.2〉低いレベルで考え高いレベルで書く
- 作者: Randall Hyde,鵜飼文敏,まつもとゆきひろ,後藤正徳,八重樫剛史,トップスタジオ
- 出版社/メーカー: 毎日コミュニケーションズ
- 発売日: 2006/12
- メディア: 単行本
- 購入: 3人 クリック: 49回
- この商品を含むブログ (40件) を見る
はっきり言います。昨今話題に上る高級言語でこれほど低レイヤーを意識する必要はないかもしれません。
ですが、こういう知識があった方が良い時もあります。
No.2 「Code Reading」
Code Reading―オープンソースから学ぶソフトウェア開発技法
- 作者: トップスタジオ,まつもとゆきひろ,平林俊一,鵜飼文敏
- 出版社/メーカー: 毎日コミュニケーションズ
- 発売日: 2004/06/01
- メディア: 単行本
- 購入: 18人 クリック: 550回
- この商品を含むブログ (214件) を見る
オープンソースのコードを題材に、いかにしてコードを読むかが書かれている貴重な1冊です。
No.3 「Code Complete(上) & (下)」
CODE COMPLETE 第2版 上 完全なプログラミングを目指して
- 作者: スティーブマコネル,Steve McConnell,クイープ
- 出版社/メーカー: 日経BP社
- 発売日: 2005/03/26
- メディア: 単行本
- 購入: 44人 クリック: 1,166回
- この商品を含むブログ (288件) を見る
CODE COMPLETE 第2版 下 完全なプログラミングを目指して
- 作者: スティーブマコネル,Steve McConnell,クイープ
- 出版社/メーカー: 日経BP社
- 発売日: 2005/03/26
- メディア: 単行本
- 購入: 16人 クリック: 193回
- この商品を含むブログ (164件) を見る
どのようにコードを書くべきか、どのような点に気をつけるべきかが書かれています。
こういう本を読んでいることでコードを書く際に意識できることが変わってくるので、読んでみてほしい1冊です。
No.4 「プログラマが知るべき97のこと」
- 作者: 和田卓人,Kevlin Henney,夏目大
- 出版社/メーカー: オライリージャパン
- 発売日: 2010/12/18
- メディア: 単行本(ソフトカバー)
- 購入: 58人 クリック: 2,107回
- この商品を含むブログ (350件) を見る
No.5 「Exceptional C++」
Exceptional C++―47のクイズ形式によるプログラム問題と解法 (C++ in‐Depth Series)
- 作者: ハーブサッター,浜田光之,Harb Sutter,浜田真理
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2000/11
- メディア: 単行本
- 購入: 9人 クリック: 134回
- この商品を含むブログ (63件) を見る
私がよく言われる「In Depth シリーズ」の中でも特にこの本をお勧めする理由は、内容が特に初心者〜中級者が気が付きくい、見落としている部分(例外について)が書かれている本だからです。
「例外を考えた設計をしていますか?」
こう問われて「していないかも」と思った人は一度読んでみてほしいです。
No.6 「メタプログラミングRuby」
- 作者: Paolo Perrotta,角征典
- 出版社/メーカー: KADOKAWA/アスキー・メディアワークス
- 発売日: 2010/08/28
- メディア: 大型本
- 購入: 18人 クリック: 533回
- この商品を含むブログ (125件) を見る
実際に動的型付け言語は多くがこの本に書いてあるような「メタプログラミング」ができる場合が多く、実際にオープンソースなどのコードでは多用されていたりします。それを読み解くために読んでおいて欲しい1冊です。
もっと言えば、Rubyistになりたいなら書けるようになるべし。
ただし、やり過ぎは禁物ですよ!
No.7 「デザインパターンと共に学ぶオブジェクト指向のこころ」
デザインパターンとともに学ぶオブジェクト指向のこころ (Software patterns series)
- 作者: アラン・シャロウェイ,ジェームズ・R・トロット,村上雅章
- 出版社/メーカー: ピアソン・エデュケーション
- 発売日: 2005/09/16
- メディア: 大型本
- 購入: 51人 クリック: 615回
- この商品を含むブログ (125件) を見る
これよりさらにもう少ししっかりと「デザインパターン」について触れたい人のための本として、「オブジェクト指向における再利用のためのデザインパターン」や「Java言語で学ぶデザインパターン入門」はお勧めです。この辺りは自分のレベルや肌に合いそうな方を選ぶことをお勧めします。挫折しては元も子もないので。
No.8 「ソフトウェア・テスト PRESS 総集編」
- 作者: ソフトウェア・テストPRESS編集部 編,ソフトウェア・テストPRESS編集部
- 出版社/メーカー: 技術評論社
- 発売日: 2011/07/15
- メディア: 大型本
- 購入: 23人 クリック: 502回
- この商品を含むブログ (31件) を見る
この本は名前の通り「ソフトウェアのテスト」のことが書かれています。総集編で過去10回の雑誌の記事がPDF形式でCDにすべて収められています。これはぜひ買うべきです。
テストは現場で軽視されやすいと言われていますが、実際にはとても重要なものです。
私としてはテスト初心者にはまずCDに収録されている「ソフトウェア・テスト PRESS Vol.1」の特集1の記事でテストがなぜ必要か、というものを見た後に、同じくVol.1の特集3でどのようにテストを行うのかをJava+JUnitの例で学んでもらうのがよいかと思います。
ただし、特集3で学ぶのも敷居が高いので、Java+JUnitの学習には「プログラミング現場の単体テスト」と言う本がありますので、そちらを参考にしたりするのもよいかと思います。
実際にxUnitに触れたことがある人は総集編で紙の記事に書いてある「ソフトウェアテスト技法道場」という記事を見て、その後CDに収録されている中にある「ソフトウェアテスト技法道場」の連載記事をみて、どのようなにテストすべきかを学ぶとよいと思います。
No.9 「ユースケース駆動開発実践ガイド」
ユースケース駆動開発実践ガイド (OOP Foundations)
- 作者: ダグ・ローゼンバーグ,Doug Rosenberg,三河淳一,船木健児,佐藤竜一
- 出版社/メーカー: 翔泳社
- 発売日: 2007/10/17
- メディア: 大型本
- 購入: 11人 クリック: 105回
- この商品を含むブログ (33件) を見る
この本の通りに設計をする必要は私は無いと思っていますが、実際に設計で注意すべき点と言うのはどのような場合においても同じです。
なのでこの本を読むことで一体どのようなことに注意して設計を行うべきかが見えてくるのではないかと思います。
特にICONIXプロセスにある、最初にドメインモデリングをするというのは結構重要だと思いますね。チーム開発を経て、実感してきましたよ。
No.10 「コンピュータプログラミングの概念・技法・モデル」
コンピュータプログラミングの概念・技法・モデル (IT Architects' Archiveクラシックモダン・コンピューティング)
- 作者: セイフ・ハリディ,ピーター・ヴァン・ロイ,Peter Van-Roy,Seif Haridi,羽永洋
- 出版社/メーカー: 翔泳社
- 発売日: 2007/11/08
- メディア: 大型本
- 購入: 9人 クリック: 304回
- この商品を含むブログ (64件) を見る
ただ最近のマルチパラダイムの流れに惑わされない、しっかりとパラダイムを意識することができる人になるために読んでほしい本です。
ただし、これを読むにはそこそこ気合いがいります。なにせ本がデカくて高いですから。さらに実際の開発では使いにくい「Oz」というプログラミング言語が使われているため、実践で即座に役に立つわけではないです。
でも知識はきっと役に立ちます。そういう本です。
この本だけでいろんなパラダイムの言語を学ぶことに満足せずにもっといろんな言語学んでみましょう。この本に書いてあるパラダイムの言語を探して学習してみるのもいいですよ。
他にも良書はたくさんあるのですが、今回はこの10冊を選んでみました。
あまり言語に依らない本をチョイスしました。言語それぞれの学習よりはもっとスキルや開発の知識などに役に立つ本が多くなるようにしています。
実際に私自身が特に影響を受けた本が並んでいると思います。
動的型付け言語をやらない人にとってはNo.6の「メタプログラミングRuby」はあまり必要ではないかもしれませんが、動的型付けの言語を触る人は読んでみるとまた違った形で進歩できるかもしれません。
No.1〜3に関しては、実際にコードを書くと言う本ではなく、「こういう風にした方がいい」とか「こうなってる」と言った部分が多く実践にどのように役に立つか見えにくいと思うので、一度に読むのは大変だと思います。でも、「こうすることで自分のコードの質が上がるんだなー」とか「この前書いたあの部分、こう直した方がいいかも」とか「あの内部ではこうなっていたのか!」と思ったりしながら楽しんで読んでほしいですね。
No.8〜10に関しては中級者向けかもしれません。初級者には少々大変かもしれませんので、プログラミングに慣れた時にはぜひ挑戦してほしいですね。
今回は10冊の中に書きませんでしたが、開発手法として「アジャイル開発」の本は読んでみてほしいです。ただし、これに関してはいろいろなアジャイル関連の本を読まなければならないため除外しました。
興味がある方は私が持ってる本でお勧めとしては「アジャイル開発の本質とスケールアップ」と言う本です。アジャイルの基本的な話から本来、小規模開発用であるアジャイル開発手法をどのように大規模開発に適用するかという話が書いてある本です。他にもアジャイルに関しての良書はたくさんあります。
あとはお勧めしたい本として、No.1の「Write Great Code」に通じるものがありますが、「Hacking:美しき策謀」と言う本があります。この本を私自身は「ハッキングのための本」ととらえてほしくなく、どのようにハッキングと言うのは行われるのか、実際にどのような点に気をつけるべきなのかが非常に低レイヤーに掘り下げて解説してあります。この本も面白い本です。
さて、実際にここまで書いてみて改めて思ったのは「実践も重要だけれど、本や先人からの知識もやっぱり重要」だと言うことです。私の中にこれらの本から受けた知識と言うのは大きなものだと思います。
あとで思ったけど、上下巻を1冊としてカウントしてるから、これって10冊に収まってないんじゃ…