本はじめに僕がプログラミングを始めてから、もうすぐ12年になろうとしています。この12年間、いろんな技術書を読んだり、仕事やプライベートでたくさんコードを書いたりしてきました。最初に入ったSIerでは主にJavaを、前職の社内SE時代はC#をメインのプログラミング言語として使ってきました。現在はRubyをメインで使っていますが、言語が変わっても、また何年経っても「これはあのとき学んだ知識が役に立ってるよなあ」と思う瞬間がときどきあります。そこで今回はこれまでに読んだ技術書を一通り振り返り、「この本で学んだことは今でも役に立ってる」と思うものを17冊ピックアップしていきます。このエントリのタイトルは「10年経った今でも役に立っている」という意味で付けています。「今から10年後まで役立つ」という意味ではありません。(紛らわしくてごめんなさい)僕がプログラマとして従事してきたのは主に業務系の情報システムやインターネット向けのWebアプリケーションです。分野が異なると意見も異なるかもしれません。「10年経っても役立つ知識」というテーマなので、大半がかなり昔に読んだ技術書です。現在ではすでに絶版になっている本もいくつかあります。その場合は似たようなジャンルの技術書を見つけて読んでください。改訂版や新装版が発売されている場合はそちらのリンクを載せています。今回はあくまで「コードを書いたり、デバッグしたりするのに役立つ本」に絞りこみました。組織文化やプログラマとしての心構え等に関する本は載せていません。COMPLETEを読んだときは本当に衝撃的でした。COMPLETEはどういうコードが良くて、どういうコードが悪いのかを明快な言葉で説明してくれる技術書です。この本を読むと自分のコードが良くなるだけでなく、偉そうにしている先輩が書いたコードも「なんだ、意外と大したことないな」と思えるようになります(苦笑)。巻末の参考文献も豊富で、ここからさらに別の面白そうな技術書を見つけることもできます。最新のプログラミング言語やフレームワークから見ると、ところどころ内容が古く思えるところがあるかもしれません。COMPLETE、高くて買えません!(><)」っていう人は、代わりに「リーダブルコード」を読むのも良いと思います。COMPLETEとよく似た内容が書かれていたと思うので。見るリファクタリング、大事ですね。外から見た振る舞いは変わらなくても、中身のコードが違えば将来の保守性や可読性がずいぶん変わってきます。元祖「リファクタリング」はJavaで書かれていますが、「リファクタリング:Rubyエディション」のように、言語によってはその言語向けの「リファクタリング」が発売されていることもあります。Java以外の言語をよく使う人は別言語バージョンを探してみるのもいいかもしれません。yourself(同じコードを繰り返さないこと)」はこの本で有名になりました。他にもコードの書き方やプロジェクトの進め方において、とても役立つ考え方が満載です。ただの動作確認」と思っている人は意外と多いかもしれません。確かに動作確認なのですが、ソフトウェアのテスト方法には体系化された様々な「テスト技法」が存在します。「テスト技法」と言われてピンと来ない人は、こういったテスト専門の技術書を読んで一度勉強しておくことをお薦めします。この本はどちらもかなり難しい部類に入るので、最初は「はじめて学ぶソフトウェアのテスト技法」のような入門者向けの本で学習する方が良いかもしれません。見る一時期に比べると「デザインパターン」という言葉を聞く機会は減ってきたように思いますが、現在でもデザインパターンがオブジェクト指向設計の重要な考え方であることには違いありません。オープンソースライブラリの「XxxFactory」みたいなクラス名を見て、「Xxx工場って何や?」って思ったことがある人はデザインパターンの勉強をしましょう。結城浩さんの書かれたJava版の方がわかりやすいと思います。見るオブジェクト指向プログラミングに必ず出てくるのが「クラス」です。用意されているクラスを使うことは簡単でも、「自分でクラスを定義しろ」と言われたらどうすれば良いのかわからない、という人は結構多いのではないでしょうか?この本では仮想的な開発プロジェクトを題材にして、オブジェクト指向分析やオブジェクト指向設計の具体的な方法を学ぶことができます。いった技術書を読んで、どんなクラスが良いクラスなのか、また、どんなクラスが悪いクラスなのかを評価できるようになりましょう。見る上の「実践UML」と同様に、こちらの本でもオブジェクト指向設計において重要となる様々な原則が説明されています。「オレオレ分析」や「オレオレ設計」で拡張性や再利用性の低いクラスを作ってしまう前に、単一責任の原則やオープン・クローズドの原則などを適用してイケてるクラス設計ができるようになりましょう。見るデータベースを操作する言語と言えばSQLですが、そもそもデータベースシステムが「リレーショナル理論」という数学的な理論をベースにして作られていることはご存知でしょうか?この本ではSQLではなく、データベースシステムの土台となっている「リレーショナル理論」にフォーカスを当てており、SQLの裏に隠れているリレーショナル理論の奥深さを学ぶことができます。この本は数学的でかなり難解な部類に入るので、読み終えるまでになかなか時間がかかるかもしれません。見る別にこの本が特別オススメというわけでなく、これ以外の本でもいいんですが、システム開発をするなら「データベース設計/テーブル設計」に関する本を一冊以上読んでおきましょう。見る一般的な業務システムやWebシステムを開発する場合、文字列を扱わないシステムは皆無だと思います。電話番号、メールアドレス、生年月日など、形式はほぼ決まっているものの、値としては異なる文字列を抽出したり置換したりするケースはよくあります。そんな場面で威力を発揮してくれるのが正規表現です。正規表現を使いこなせれば、そうした文字列処理をほんの数行で実現することができます。この本は一見とっつきにくそうですが、正規表現を全く知らない人でも理解できるように一から丁寧に教えてくれます。僕もこの本を読んで正規表現を使いこなせるようになりました。見るインターネットを全く使わずに過ごす一日なんて考えられないと思います。空気のごとく存在しているWebページやEメールですが、どういう理屈でサーバーとあなたのマシンがつながっているのか、ちゃんと理解できているでしょうか?というわけで、技術者であればちゃんと裏側の仕組みも理解しておきましょう。いった知識を持っているかどうかで、トラブルを解決するまでのスピードも変わってきたりします。このシリーズは真面目に解説するとややこしいネットワーク関連の知識をゆる~く解説してくれるので、僕でも飽きずに最後まで読めました。見るプライベートであれ、仕事上であれ、忘れた頃に遭遇するのが「文字化け」です。そもそも文字コードって何でしょうか?文字コードとエンコーディングの違いは説明できますか?こういった知識が身についていると、文字化けに遭遇したときでも落ち着いて素早く解決できます。技術者なのに近所のおばちゃんと同じレベルで慌てふためいたりしないよう、こういった地味な(?)知識も身につけておきましょう。見る今どきのプログラミング言語で一般的なWebアプリケーションや業務システムを開発する場合には、ぶっちゃけアルゴリズムや計算機科学、すなわちコンピュータが計算を行える仕組みなんて知らなくてもプログラムは組めちゃいます。「僕はアルゴリズムなんて知りません!」と胸を張って答えるのは技術者として変ですし、計算機科学を勉強しておかないと、うっかり浮動小数点誤差の罠にはまって重大なバグを生み出してしまうかもしれません。合格できれば最低ラインの知識を身につけることはずです。(あくまで最低ラインですけど)僕の場合、この本を読んで試験に合格しました。わかりやすくてオススメです。追記まだ読み終わっていませんが、アルゴリズムやデータ構造の勉強をもう少しちゃんとやりたいときは、この本が良さそうです。見るまとめというわけで、今回は「10年経っても色あせない知識が学べる技術書」を17冊ピックアップしてみました。最新のフレームワークや流行りのプログラミング言語を学習するのも楽しいですが、こういった「技術者としての基礎体力作り」もおろそかにしないようにしましょう。人によって「10年経っても色あせない知識」は異なってくると思います。僕がこれまでに読んだ本はブクログに登録していってます。(最近買った本はあまり登録してないけど・・・)興味のある方はこちらも参考にしてみてください。ブクログあわせて読みたい技術書ではなく、僕のキャリアを振り返りながらこれまで経験したことやそのときに感じていたことなどをまとめています。今回のエントリに限らず、技術書関連のエントリはこれまでにいくつか書いてきています。気になる方はこちらもどうぞ。最近どうも技術書を読む時間がなくて新しい知識が増えてないの...2010-10-08犬小屋と高層ビルの違いちょっと興味深いエントリを見つけました。はてなブログPro株式会社ソニックガーデンで働くRubyプログラマ。2017年11月に「プロを目指す人のためのRuby入門」を出版。blog)はてなブログをはじめよう!JunichiItoさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。