技術力をあげたいプログラマが読んでおかないと話にならない本10冊

ここにあげた本じゃなくてもいいので、同じ分野でなにか読むとか、本に書いてあるほど詳しくなくてもそれなりに知識をもっておくべき本。

アルゴリズムクイックリファレンス

アルゴリズムクイックリファレンス

まずはアルゴリズム。クイックって書いてあるけどぜんぜんクイックじゃないw。各言語で書かれた入門書を読んでもいいと思う。
実際のプログラムにアルゴリズムの知識を活かすということを知りたいならプログラミングコンテストチャレンジブックがおすすめ。

プログラミングの基礎 ((Computer Science Library))

プログラミングの基礎 ((Computer Science Library))

プログラミングってなにかということを。再帰とか、そういうの。OCamlという関数型言語で書かれてるので、関数型言語も知っておくという意味でもおすすめ。

並行コンピューティング技法 ―実践マルチコア/マルチスレッドプログラミング

並行コンピューティング技法 ―実践マルチコア/マルチスレッドプログラミング

そろそろ並行処理の勉強は必須になるんじゃなかろうか。ほかにThe Art of Multiprocessor Programmingとか。あと、実際にプログラムを書くためのライブラリとしてはJavaがかなり充実してるのでJava並行処理プログラミングとか読んどくといいですね。

データベース入門 (Computer Science Library)

データベース入門 (Computer Science Library)

NoSQLとはいうけども、リレーショナルデータベースのコンセプトを知らないのは話にならないと思われる。
知っておくべきは、現実データから論理データへの落とし込み・一貫性の確保について。要するに、現実世界から論理世界にデータを変換して、物理的にどう扱うかという問題があることを知っておく必要があるということです。

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

HTTPとかURLとか、このあたりは、ちゃんと整理して知っておいたほうがいいですね。

ネットワークはなぜつながるのか 第2版 知っておきたいTCP/IP、LAN、光ファイバの基礎知識

ネットワークはなぜつながるのか 第2版 知っておきたいTCP/IP、LAN、光ファイバの基礎知識

ネットワークについてちゃんと知っておいたほうが、ちゃんとネットワークを扱うプログラムが書けます。

図解 64ビットがわかる (図解 知りたい!テクノロジー)

図解 64ビットがわかる (図解 知りたい!テクノロジー)

CPUなどハードウェアのアーキテクチャ。これから多コアを意識するのプログラムのが大事になると思うので、知っておいたほうがいいかも。
薄い割に、OSの対応から仮想化までとりあげられていい本なんけど、この分野はすぐに「出品者からお求めいただけます。」になっちゃうのよねー。まあ、似たような本はだいたいいつでも出てると思います。
あと、アーキテクチャという点でOSについてLinuxとWindowsを理解するためのOS入門とかで勉強するのもいいんじゃないかと思います。けど、この本のAmazon評価、タイトルにつられて間違えて買った人が逆切れしてる感じで、かなりかわいそうなことになってます。

ソフトウェア工学入門 (Computer Science Library)

ソフトウェア工学入門 (Computer Science Library)

要求定義、設計、テスト、プロジェクト管理といった、プログラムを作る作業について。実際の技法は好みや環境でかわるけど、プログラムを作る作業の中で何が問題とされているかは知っておく必要があります。
いい本がどれかはわかんなかったので、シリーズとしてお気に入りの「Computer Science Library」のやつをあげておきました。
実際のプログラムを作る作業についての分野だけに、「いいプログラムを作る」という文脈では設計やテストといったソフトウェア工学の分野ばかりが取り上げられがちだけど、「いいプログラマになる」という点では、重要ではあるけど一分野にすぎないことを踏まえておいたほうがいいと思います。
まずプログラムを書く能力があって、そのプログラミング能力をいかに有効に使うかというのがソフトウェア工学だと思ってます。

数学ガール (数学ガールシリーズ 1)

数学ガール (数学ガールシリーズ 1)

数学が直接プログラムの作業に関係はしないとはいえ、無印数学ガールの範囲の数学は知っておきましょう。あと、これからは統計がどんどん重要になると思うのでRによるやさしい統計学なんかで勉強しておくといいと思います。

論理学

論理学

プログラマがやるのは結局のところ論理コンピュータを動かすことになるわけですが、その論理とはなにか知っておくと論理自体の限界とかがわかって、コンピュータにできることとできないことの判別がつきやすくなります。つまり、プログラム組みえないことをプログラムしようと思わなくなるので楽になります。
同じ著者による文庫本の入門!論理学のほうが、簡単でいいかも。
論理学からコンピュータプログラムにどうつながるのか知りたければ論理と計算のしくみを読むとラムダ計算につながっていくのでいいです。

創るJava NetBeansでつくって学ぶJava GUI & Webアプリケーション[改訂第3版]

創るJava NetBeansでつくって学ぶJava GUI & Webアプリケーション[改訂第3版]

なにか問題でも?
まあ、なにかプログラム言語を知って実際にプログラムが書けることは大事ですよねー。ここまでにあげた10冊以外に、自分のメイン言語については、しっかり押さえときましょうってことです。

なにか問題でも?
まあ、クラウドとかはやってるし、知っておいたほうがいいですよねー。実際に作ったプログラムを動かす環境とかも、おさえておいたほうがいいですね。