良い本ってのはないな。逆に言えばどれでも良いってことかな。
大事なのは入門書読んだ後。

入門書読む→なんかよく分からないからまた入門書読む この
繰り返しが一番まずい。

入門書をどれでもいいから一読した後はとにかく良質のソースを
読む、これに限る。今はネットで便利になったからフリーソフトの
しっかりした奴がソース付で公開されてることも多い。

自分が作りたいと思ってる分野のこういうソースをそれこそ一ヶ月
くらいかけてじっくり読むことをおすすめする。分からないことが
あればまわりの知ってる人に聞く、いない場合は何が分からない
かをよく整理して2chできく、メーリングリストできく。

そしてそのソースを自分なりに変えてみる。そうこうしてるうちに
自然とプログラミングできるようになるもの。

それと平行して一般的なアルゴリズムとデータ構造の本も一冊読んでみよう。

そこまできたら今度は自分が作りたいソフトの専門分野の本を
読むようになる。そうすると結局一番大事なのはプログラムの
テクじゃなく自分がコーディングしたい対象をよく知ることだと分かる。

ちなみに自分の入門書は10年ほど前のC++基礎講座(インプレス)という本でした。
入門書はこれ一冊しか読んでない。だから読んだ後も全く細かいところは
身についていなかったと思うが、概略をつかめれば十分。あとは実際のコードに
あたり分からないところがあれば基礎講座を読み返し、それでも不明な点は
もっと辞書的な本でリファレンス的に調べる。この繰り返しがあるだけ。