ぼくをステップアップさせてくれたプログラミング書

| コメント(0) | トラックバック(0)

年末なので私も何かまとめのようなものを書こうと思うのですが、今年1年で何かまとまるようなことが特に思いつかない。

そこで学生時代から数えると23年プログラミングをやってきて、その間にステップアップした確かな手応えを今でも覚えているプログラミング書を思い出しつつ紹介することにします。

手元にないものもあって間違ってる記述があるかもしれませんが、あしからず。

紹介する本

紹介するのはこの10冊です。括弧内の数字は私が読んだであろう西暦年で発行日ではありません。

  1. プログラム書法 第二版(1992)
  2. WRITING SOLID CODE(1995)
  3. プログラマのためのSQL(1996)
  4. プログラミングPerl改訂版(1997)
  5. Effective C++(1997)
  6. プログラミング作法(2000)
  7. XPエクストリーム・プログラミング入門(2001)
  8. Railsによるアジャイルwebアプリケーション開発(2006)
  9. メタプログラミングRuby(2012)
  10. The RSpec Book(2012)

プログラム書法 第二版(1992)

就職して2年目の仕事でCのプログラムを書いている時に正規表現を自分のプログラムで使いたいシチュエーションがありました。手元にないので間違っているかもしれないのですが、確かこの本にFORTRANによる実装方法が書いてあって一生懸命Cに移植して使った記憶があります。

今なら正規表現のソースはOSSで山ほど見ることができますが当時はなかなか大変でした。でも調べてみたらPerlは既に存在していたのですね。

正規表現の実装以外でも勉強になった記憶はあります。具体的な内容は全く覚えてませんが。

次に紹介する「WRIGING SOLID CODE」の序章部のコラムに

「プログラム書法」にすでに詳しく言及されているガイダンスを焼き直すつもりはなかった...略...「プログラム書法」で築かれた土台の上に構築され、同様のフォーマットに従っている。

と記されていて、基本は本書で勉強しるとあります。

良書ですが今でも読んだほうが良いかと言われたら、FORTRANだし別の書籍を選択したほうが良いかもしれません(笑)

WRITING SOLID CODE(1995)

仕事では2000年くらいまでC/C++ばかり書いていたのですが、バカで不注意なので本当にミスが多かった。先輩に怒られてばかりいました。

書名からも分かる通り硬いコードを書くための指南書です。副題も「バグのないプログラミングを目指して」、その通りの内容なのです。

この本を読んでから、たまたま動いたというコードは1行でもあってはならないという考えでプログラムを書くようになり、また自分で書いた関数(メソッド)が間違われた使われ方をしたらすぐに気づけるように気をつけて書くようになりました。

ほとんどC言語に関する項目なのですが堅いコードを書く考え方を徹底するために買って損はないと思います。とは言っても既に絶版でAmazonのマーケットプレイスでは定価より高い価格で売られてますね...

今でも持ってます。

プログラマのためのSQL(1996)

先ほど、たまたま動くコードがあってはならないと言いましたが、私は最初SQLが非常に苦手で試行錯誤のうえたまたま動いていたコードの塊でした orz 今となってはお恥ずかしい限りですが、特にJOINが苦手でよく分かっていなかった。

昔のプログラム書には、書いている本人が(翻訳の場合、訳者がという事も多い)理解していない事も多く、それを読んでも分からないので自分は頭が悪いのかもしれないと思うことも多かったです。その点この本は(当たり前ですが)基本的に間違ったことは書いておらず説明も分かりやすい。

またSQLの本となると多くはベンダー(OracleやPostgreSQLやMySQL、懐かしのSybaseなど)依存な内容となってしまうのですが、本書は特定のベンダーに依存しない標準SQLについて書かれているのも魅力です。

難があるとすれば章立てが最初がDDLの解説からとSQLの構文仕様書的な順序で構成されていて頭から読み下すのは退屈なところかもしれません。私としては16章のSELECT文をまず読むことをお勧めします。JOINが何かを分かっていないビギナーの方はこの章を読むだけで元を取れるでしょう。

今でも持ってます。装丁ががらっと変わって第二版になって販売されていますね。

プログラミングPerl改訂版(1997)

今でこそRuby大好きな私ですがC/C++で仕事をしていたときは、バッチプログラムやちょっとしたツールはPerlを使って書いていました。sed/awkとShell Scriptで書くより自然に書けますからね。

昔いた会社の共有フォルダのbinディレクトリに最初にperlをコンパイルして置いたのは私でした。まだPerl 4でした。

しっかりした技術書でありながら随所にユーモアや面白い言い回しがあって読んでいて楽しいです。

言語としてのPerlは特に好きとか嫌いとか特別思い入れはないのですが、Perlを使って学んだことはとても多いです。デーモンプログラムをお気軽に作ったり、仲間うちで使うWEBサービスを作ったり、外部の公開APIをたたいたり、と何かの実験をする用途では2005年くらいまで常にPerlを使っていました。今はその用途でもすっかりRubyに置き換わってしまいましたが。

私はすでに手放してしまっていますが2分冊になった第3版が販売されていますね。

Effective C++(1997)

この本が私に与えた影響は計り知れないです。C++でプログラムを書くための間違いのない指針が50個紹介されています。この50個は守った方が良いというより絶対そうしろと言いたいレベルです。

最初にC++を使うプロジェクトに参加したときの自分は本当に惨憺たる状態でした。オブジェクト指向がどういうものかの知識はあったし、デザインパターンもGoF本が既にあって知識としては理解していたのだけどC++による実践力が最弱レベルだった。C++は言語使用が結構複雑な上に細部を理解せずテキトーに書くと必ずおかしな動きをする(笑)本当にひどいコードを書いた記憶があります。

次のプロジェクトで優れた先輩のコードを読んで、同時に(おそらく同じ先輩に)この本を紹介してもらい読んで、格段にレベルアップした。オブジェクト指向などプログラミングパラダイムの知識はもちろん大事なのだけど、危険を避けて確実に動くコードを書くのはもっと大事。C++は自由度が強烈に高いので特にそう思うのです。

今ならOSSの良質なコードをたくさん読めて開発に参加することもできるので、そういうのを積極的に読んでいるプログラマは最初から空気を吸うようにできているのかもなぁ。

本書は私にとってとても大事なので改訂第2版、続編の「More Effective C++」と一緒に本棚に並んでいます。もうC++を使うことは無いような気もしますが(笑)現在は第3版になっているのですね。

プログラミング作法(2000)

「プログラム書法」にとても似た名前ですからもちろん関係があります。著者の一人がカーニハンだし続編と言える書籍です。時代も変わってきてサンプルコードにJavaも使用されています。

個人的な思い入れは、これまで紹介してきた書籍に比べたら低いのですが、新人教育を自分がやることになったら真っ先にテキストとしてこれを使おうと思うに違いないという事で入れました。

図解○○やサルでも分かる○○系の入門技術書から試行錯誤して、また玉石混淆のネット情報だけからたどり着くのもアリだと思いますが、最初から正しいプログラムの書き方を知っている方が無駄がないですよね。

XPエクストリーム・プログラミング入門(2001)

正直に言いますと私はXPを実践したことは一度もないです(爆)なぜ入れたかというと、この本で紹介されている開発手順が当時、新鮮でうらやましく、みんなが幸せになれるのはコレしかないと思ったことがあったからです。

システム全体に対してあらかじめ要求仕様をしっかり文書にして、詳細設計してさらに多くの文書にしてと、この時点までにもうプロジェクトはだいたい遅れてるし、コーディングに入る頃には当初予定していた納品の時期を過ぎている事もある(笑)ポシャった時に動くものが何もなかったという話も聞いたことがあります。(幸運にもそこまでダメな仕事は私にはなかったですが)

それに対して、動くものを少しずつ作っていくというXPは目から鱗でした。

XP自体はもうメインストリームで流行っているとは言えないですが、うちも採用してます!とどこでも言っているアジャイル開発のほとんどはXPそのものだと言っても過言ではないし、ペアプログラミングはそれ単体で成果を上げられる仕組みだし、テスト駆動・リファクタリングに至ってはやって当然です。

第2版が出ていたのですね。知らなかった。ただ本書は初版から翻訳の質に難があると評判ですし、他にもいろいろ出てきているのでお勧めはしないです...今ならアジャイルサムライでしょうか。まだ読んでないですが。

Railsによるアジャイルwebアプリケーション開発(2006)

ちょっと間が開きますが来ましたよRuby on Rails!もうすぐ4が出そうですが、初版が出たときはまだ0.9〜1.0とかだった記憶がありますので、すごい成長ですね。実際に実践で使われているフレームワークとして他の言語や開発ツールにも大きな影響を与えました。

この頃、自分でも何か個人的にサービスを作って世の中に公開しようと思っていたときに、

  • 慣れているJ2EEを使う
  • プラスSeaserを使う
  • Perlのフレームワークを使う
  • 最近出てきたRailsを使う

この4つの選択で迷ってました。Javaは一番知ってるけど個人で書くのはめんどくさいしつまらない。つまらないので新顔のSeaserのプロダクトを使ってみようと少し触ってみましたが、当時の自分はドキュメントが少ないし完成度がイマイチだなと感じてしまったのです。そこでPerlにするかRubyにするかの一騎打ちになったのですが、本書の前半を本屋で立ち読みすると、簡単なオンラインストアをサクサク作るという実践的な内容で本当に簡単そうに思えた。

そんなわけでRailsを選択して、ひとつサイトを作ったのでした。Twitterが日本ではやり始めたばかりで、そんなノリのサイトを作ろうと思ってできたのが今読ミ。テストデータを除いて最初に登録したのはこの本です(笑)サイト自体はこの後、他の書籍管理系のサイトもたくさん生まれてきて、また伸ばしていくための方向性が分からなくて流行らなかったのですが、まだ数人使ってくれている人がいますので動かし続けてます。自分でも使ってますし。

この本からサイトが生まれて私の中でRubyはそれまでのPerlに変わるポジションを確定して、今ではほとんどのプログラムをRubyで書いています。Railsは本当にRubyのキラーアプリでした。

もっていたのは初版でさすがにもう手放してて第2版が手元にありますが、Rails3からは別物なのでこの年末の大処分物に入りました(笑)今では第4版が販売されていますのでそちらをどうぞ。

メタプログラミングRuby(2012)

先ほどのRails本からずっとRubyは書いていたのですが仕事ではやはりほとんどJava。Rubyを書いているとは言っても、普通のオブジェクト指向プログラミングをしていただけでRuby好きがRubyをなぜ好きかを分かってなかったと言えます。

Railsでは内部でメタプログラミングが使われまくっている事は知ってましたが自分には関係ないと思っていた。ところが仕事でもRailsを使いはじめ、Mongoidの新しいバージョンを古いMongoDBで使えないかコードを追いかけ回したり(結局MongoDBのバージョンを上げましたがw)少しずつ手を染め始めたのです。

そんな状況下、今年の初めに本書の存在を知って買いました。この本を必要とされる人は限られるかもしれませんが確実にステップアップさせてくれることは間違いないです。メタプログラミングなしでも問題なくプログラミングはできます。でもせっかくJava(笑)ではなくRubyを使っているのなら使えるようになりたくないですか?

本書は寸劇を交えながらメタプログラミングが効果的な状況での使い方が5章に渡って紹介され、(古いバージョンのですが)ActiveRecordで実際に使われているテクニックの解説がクライマックスとなっています。

でメタプログラミングの考え方やテクニックを理解したら、復習のために付録があります。

  • 付録A:よく使うイディオム
  • 付録B:ドメイン特化言語
  • 付録C:魔術書

Bはさわりだけなので言及を避けますが、AとCはメタプログラミングのカタログとなっていて血肉に変えるために後で何度でも読み返して思い出し記憶するために使えます。私は自分用のメモとして付録AとCだけ自力で入力したプライベートGistを見てよく確認しています。著作権があるでしょうから公開できないのが残念ですが。

The RSpec Book(2012)

ついに最後になりました。先ほどのメタプログラミングRubyと同じく今年読んだ本です。

TDD(やBDD)は前から知ってましたが、実際に自分でやるようになったのは去年くらいでしょうか。自動テストは書いてましたが、後から書くのがほとんどでした。正直テストファーストなんてできると思ってなかった(笑)XPの本を読んでても実際にはそんなもんです(汗)

本書は少しでも効率的に自己流じゃなく優れた人がやっている方法でTDDしたいと思って買いましたが大正解でした。実際に手を動かしながらやっていくことで誰でもTDDできるようになると思います。

実際にやってみると気持ちいいんですよね。テスト→実装→リファクタリング。今やこの順序じゃないとプログラムしたくないです。しかしRubyにはRSpecがあるからできるのであって、他の言語でも同じように行くかというと同じノリでは難しいようにも思います。

まとめ

思い出しながら10冊紹介しました。私の読んだことのある本のみでもっと良い本もあると思います。是非紹介して欲しいです。

しかし...今はネットで十分かもですが!(爆)



トラックバック(0)

トラックバックURL: http://www.iwazer.com/mt/mt-tb.cgi/1178

コメントする

このブログ記事について

このページは、iwazerが2012年12月30日 18:00に書いたブログ記事です。

ひとつ前のブログ記事は「RubyMotionでTDDしつつどこまでMetaProgrammingできるかな?の実験」です。

次のブログ記事は「2012年に読んだ本ベスト5」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。