(※)このエントリは『見習いプログラマが読んだら、すぐにジョブレベルが上がる10冊』の補足になります。

(1)前回のエントリを書いた理由
(2)頂いたご意見に対して
(3)更に読んで欲しい5冊

の順に書きたいと思います。

『戯言はいいから本だけ教えれ』という方は下のほうの(3)へ

 

(1)前回のエントリを書いた理由

僕がプログラミングを最初に学んだ頃(まだテレホーダイの時代)
プログラミングを学ぶのにどの本が良いかなんて情報がさっぱりありませんでした。
手当たり次第に買うしかありませんでした。

#当時は『大人のCGIスクリプト』を書名に惹かれて買い、ログファイルが飛ばないカウンタ・掲示板の作り方を見て感動していました。
#ログファイルを二重に用意し、更新日時が新しいほうを読み出し、内容を変更・追加し、更新日時が古いほう上書きするというテクニックでした。


今は逆で、良い書籍の情報が山ほどあります。
ありすぎて、やっぱりどれ読めばいいかわからなくて困るんだろうな、
有名なプログラマさんが薦める本は難しすぎるんじゃないかな、と。

僕は、プログラマに幸せになって欲しいと思っています。
いつまでも『士農工商プログラマ』(Matzさんのお言葉)ではいけません。
そして、プログラマが幸せになる近道は、知識・技術を得ることだと思っています。


『読みやすいけれど、沢山学べるもの』
『少しマイナーなものも含めて』
『自分がやってる言語の本ぐらい読むだろうから、割と汎用的なものがいいかな』
『プログラミングのこと以外でも、知っておいて欲しいこと』

そして何より 『自分自身が読んでみて、読んでよかったと思える本』というコンセプトで10冊を書いてみました。

 

(2)頂いたご意見に対して

特にご意見の多かった『オブジェクト脳のつくり方』と『憂鬱なプログラマのためのオブジェクト指向開発講座』について言及したいと思います。


・『オブジェクト脳のつくり方』について
「この本はプログラムを現実世界のものに例えているから駄目だ。幼稚だ。実際にコード触らないとオブジェクト指向をわかるわけがない。データ型だって最初から教えろ。」
とおっしゃられる方が何人かいらっしゃいました。
その『例え』の部分に関しては色々な意見があると思います。
(僕は初心者が学ぶ際には良いと思っています。が、わからなくはないです。)
ですが、『だからこの本は駄目だ。』と言うのは言いすぎだと思います。

この本の真価は、その『例え』から入って、デザパタの本質のわかりやすい説明、簡単なUMLの説明、実際のシナリオからUMLを使った設計方法、と体系的に記載されている点でしょう。
非常に実務に沿った内容で、初心者の方が仕事をどういう風に進めて行くかを学ぶ際のチュートリアルとして優れていると思います。


・『憂鬱なプログラマのためのオブジェクト指向開発講座』について
C++をメインに使われている方には、非常に不評のようですね。
確かにポリモーフィズムの使い所やら怪しい箇所は何点かあります。
ですが、僕がオブジェクト指向について学び始めた頃に読み、
当時凄く悩んだことに答えてくれた本でした。

シューティングゲームで、自機がミサイルを打ち、敵機に当たった際の判定について考えて下さい。
ミサイルの当たり判定をするメソッドがあるべきなのは、どのクラスでしょう?
ミサイルが敵機に当たった際には、ミサイルと敵機が消滅しますが、ミサイル・敵機を消滅させるメソッドはがあるべきなのは、どのクラスでしょう?
もちろん、プログラムを書き慣れている人なら、『何当たり前のこと言ってんだよ』って思われるかもしれません。
でも学び始めの人は(いや、ある程度慣れてきていても)クラスの責務について迷うことは多いはずです。
その考え方をゲームを題材としてわかりやすく学べた書として、お勧めしました。


だったら最初から↑の説明書けよ
だって、どーせ身内2・3人にしか読まれないと思ってなかったんだもん。。。


・どっちが本当?
僕の意見と、反対されている方の意見、どちらを信じればいいかわからない、とおっしゃられてる方がいました。
反対されている方で「あのエントリに載ってる『××』じゃなくて、似た内容の『△△』がいいよ」と意見を出していらっしゃる方の本は、是非読んでみて下さい。
(不勉強な僕も是非読ませて頂きたいのでご教授願います。)
逆に『○○と××は読んでないけど、気にいらない本が何冊があるしどーせ全部駄目本でしょ』という意見には流されないで欲しいです。
前回のエントリで沢山の方に、紹介した書籍を買って頂いたようなので、またアチコチのブログやツイッターから感想が聞けると思います。
どうしても心配な方は、それらの情報を待ってから判断されるのがよいかもしれませんね。

 

(3)更に読んで欲しい5冊

 

C言語ポインタ完全制覇 (標準プログラマーズライブラリ) C言語ポインタ完全制覇 (標準プログラマーズライブラリ)
前橋 和弥

技術評論社
売り上げランキング : 9801

Amazonで詳しく見る

前回書くべき書籍なのに、すっかり忘れていました。。。 超有名本ですよね。
C言語使わない人も、是非読むべきです。
あわせて http://sakurai.sumomo.ne.jp/page/c_pointer も見るべき。
ちなみに、ポインタについての凄くわかりやすい説明を前どこかで見ましたので、うろ覚えながら書きます。
『ポインタって何?』『2chのレスと、そのレスへの安価

 

 

プレゼンテーションzen プレゼンテーションzen
Garr Reynolds,ガー・レイノルズ,熊谷 小百合

ピアソン桐原
売り上げランキング : 459

Amazonで詳しく見る

また『プログラマに関係ねーよ』って言われそうですが(笑)
いいプレゼンの作り方、プログラマも覚えておくべきです。
前に紹介した、『ノンデザイナーズ・デザインブック』の原則に基づいて、プレゼン資料を作る方法が載ってます。
勉強会の時に使うと、モテなプレゼンが出来るようになりますよ。
正直、かっこいいプレゼンが出来る人は大体これ読んでると思いますよ、バラしてゴメン。
気に入ったら続編の『プレゼンテーションzenデザイン』も読むと良いよ。

 

ペーパープロトタイピング 最適なユーザインタフェースを効率よくデザインする ペーパープロトタイピング 最適なユーザインタフェースを効率よくデザインする
Carolyn Snyder,黒須 正明

オーム社
売り上げランキング : 287782

Amazonで詳しく見る

プログラミングに慣れていない頃って、自分が何を作りたかったか忘れちゃって迷走することはよくあります。
その時期を過ぎると、簡単なプロトタイプをがちゃがちゃ作ってから、さぁプログラム書くか、って人は多いと思うんですけど、
HTMLであれ、GIMP・フォトショであれ、プロトタイプを作るのに結構時間食いますよね?動きを表現しにくいですし。
時間的にも値段的にもコスト低いし、紙を切った貼ったして、まずどんな動きするか決めてからやろーぜ!って本です。
上記の内容の実践方法を詳しく書いてあるだけなので『最初はコスト低くプロトタイプを紙で。』の概念を覚えておけば別に買わなくてもよいです。
でもこの考え方は大事。

 

 

データベース実践講義 ―エンジニアのためのリレーショナル理論 (THEORY/IN/PRACTICE) データベース実践講義 ―エンジニアのためのリレーショナル理論 (THEORY/IN/PRACTICE)
C.J.Date,株式会社クイープ

オライリージャパン
売り上げランキング : 193351

Amazonで詳しく見る

データベース系のものも入れろよ、という意見があったので。
あ、これは少し難しいです
でも名著だけどあまり挙げられないので、知っておいて欲しくて。
データベースの切り方とかを学べます。 特にどのDBについて、というわけでないので汎用的な内容です。
データベース系で簡単なのがいい人は、SQL書き方ドリルをどーぞ。いい本ですよ。

 

ひなた先生が教えるデバッグが256倍速くなるテクニック (Software Design Books) ひなた先生が教えるデバッグが256倍速くなるテクニック (Software Design Books)
やねうらお

技術評論社
売り上げランキング : 94549

Amazonで詳しく見る

有名なプログラマやねうらおさんの本。
バグ箇所の絞り込みや例外の使い方等、体系的に書かれています。
あとはバグりがちだから注意する場所とか。
内容的には高度なものも含まれていますが、かなーりわかりやすく書かれています。
あと、ひなた先生が段々可愛く見えてきますw

 

 

前回のエントリから、沢山の方に紹介した本を買って頂いたようです。
是非読み終わられましたら、ご感想をブログやツイッター等で教えて頂ければ、と思います。


(※)補足エントリ書きました『見習いプログラマ(中略)10冊』を書いた理由と、更に読んで欲しい5冊

 

某所で『プログラマが読むべき10冊』というのが公開されてましたが、
どうみても中身が重いし、バックグラウンドの知識が必要なものが多いと感じたので、
即、血となり肉となる本を独断と偏見でまとめてみました。

ジャンルごとの順番です。どれも読むべきだと思うので敢えて順番はつけません。

 

Subversion実践入門:達人プログラマに学ぶバージョン管理(第2版) Subversion実践入門:達人プログラマに学ぶバージョン管理(第2版)
Mike Mason,でびあんぐる

オーム社
売り上げランキング : 40275

Amazonで詳しく見る

取りあえず、何をするにも、まずバージョン管理だろう、ということで。
今、流行の git だけで充分だと思われるかもしれませんが、開発現場の多くで、まだまだ Subversion が現役なので、覚えておくべきです。
Subversion の解説本、3、4冊読んだ中で一番わかりやすかったです。

 

 

入門git 入門git
Travis Swicegood,でびあんぐる

オーム社
売り上げランキング : 42290

Amazonで詳しく見る

git 可愛いよ git。というわけで説明するまでもない git についての本です。非常に判りやすい。
同名のもう一冊もあって、そっちも読んだけれどそっちも良書。個人的にこっちが好きなのでこっちを紹介。

 

オブジェクト脳のつくり方―Java・UML・EJBをマスターするための究極の基礎講座 オブジェクト脳のつくり方―Java・UML・EJBをマスターするための究極の基礎講座
牛尾 剛,長瀬 嘉秀

翔泳社
売り上げランキング : 64018

Amazonで詳しく見る

プログラミング初めたばっかりで、オブジェクト指向ってなぁに?おいしいの?って人は絶対に読むべき。
すんげーわかりやすいです。でも初歩的なので、オブジェクト指向を知ってる人は読まなくてもOK。

 

 

バグがないプログラムのつくり方 JavaとEclipseで学ぶTDDテスト駆動開発 (Be agile!) バグがないプログラムのつくり方 JavaとEclipseで学ぶTDDテスト駆動開発 (Be agile!)
川端 光義,倉貫 義人,兒玉 督司

翔泳社
売り上げランキング : 220493

Amazonで詳しく見る

Java と Eclipse を使った テスト駆動開発方法についての本。
写真付きでどう操作すればいいのか、最初から最後まで書いています。超良書。
全Eclipse Java プログラマーに捧げる Eclispe 徹底活用術完全版~Eclipseに空気を読ませて楽する術~も併せて読むべき。

 

憂鬱なプログラマのためのオブジェクト指向開発講座―C++による実践的ソフトウェア構築入門 (DDJ Selection) 憂鬱なプログラマのためのオブジェクト指向開発講座―C++による実践的ソフトウェア構築入門 (DDJ Selection)
Tucker

翔泳社
売り上げランキング : 46355

Amazonで詳しく見る

C++ によるオブジェクト指向への本。
シューティングゲーム等を例に挙げて、その処理の責務を持つのはどっちのクラス?がわかりやすく書かれてます。
超良書、有名だよね。

 

 

Head Firstデザインパターン ―頭とからだで覚えるデザインパターンの基本 Head Firstデザインパターン ―頭とからだで覚えるデザインパターンの基本
Eric Freeman,Elisabeth Freeman,Kathy Sierra,Bert Bates,佐藤 直生(監訳),木下 哲也,有限会社 福龍興業

オライリージャパン
売り上げランキング : 104117

Amazonで詳しく見る

本屋で必ず目に入る本(笑)
パラパラめくった事ある人は写真だらけで、読まず嫌いしてる人もいると思います。
が、絶対読むべき。
デザパタ丸暗記じゃなくて、各パターンがどんな感じの仕組みになってるか、すげーわかりやすいです。

 

UMLモデリングの本質 (日経ITプロフェッショナルBOOKS) UMLモデリングの本質 (日経ITプロフェッショナルBOOKS)
児玉 公信

日経BP社
売り上げランキング : 65772

Amazonで詳しく見る

あんまり有名じゃないんだけれど、UMLと設計を覚えるのに非常に適した本。
後半には、在庫管理や予約システム等のありがちなシステムを、どう設計するか書いています。
隠れた名書。

 

 

アジャイルプラクティス 達人プログラマに学ぶ現場開発者の習慣 アジャイルプラクティス 達人プログラマに学ぶ現場開発者の習慣
Venkat Subramaniam,Andy Hunt,木下 史彦,角谷 信太郎

オーム社
売り上げランキング : 38020

Amazonで詳しく見る

アジャイルのまとめ、みたいな本。
知っておくべきことを網羅しています。
トピックをこの本で読んで、詳しくはググるという使い方がお勧め。

 

ヒューメイン・インタフェース―人に優しいシステムへの新たな指針 ヒューメイン・インタフェース―人に優しいシステムへの新たな指針
ジェフ ラスキン,Jef Raskin,村上 雅章

ピアソンエデュケーション
売り上げランキング : 279292

Amazonで詳しく見る

インターフェイス部分を作るプログラマに必読。 絶対に読め
特に、インターフェイスの優秀さを数式にしている部分は、絶対に読むべし。

 

 

ノンデザイナーズ・デザインブック [フルカラー新装増補版] ノンデザイナーズ・デザインブック [フルカラー新装増補版]
Robin Williams,吉川 典秀

毎日コミュニケーションズ
売り上げランキング : 1586

Amazonで詳しく見る

デザイン系の本って、いいデザインをつらつらと並べて、さぁこれは○○だからいいでしょ。って感じの本が多いんだけれど、
これはまず、大まかな原理・原則を挙げて、
それに従って、古いデザインを変えるとこんなに良くなるよ、ってことがビジュアルで体感できます。
プログラマは簡単なデザインを任せられることもあると思うので、是非読むべき。

 

というわけで、アルゴリズムの本とか入ってねーじゃねーか、っていう文句もあると思いますが、
業務は結構ライブラリの組み合わせでなんとかなる場合があるので、取りあえず外しました。

これ全部読めば、絶対にレベル(及び収入)上がりますよ。
お勧めの名書ばかりなので、是非全部読んでみてください。


Q. 何が出来るの?

A. 会員制サイトがコマンド一行で出来ます。

Q. 本当かよ、嘘くせーな。

A. ちょっと煽り気味のタイトルであることは否めません。

Q. 具体的にどんなことしてくれるの?

A.
面倒臭がりの人の為の Rails3 用テンプレート : ソースコードは飲み物です。 - 株式会社ウサギィ blog で出来ることに加えて
devise をインストールして、 
日本語ファイル(Atsushi Nakatsugawa さんの devise.ja.ymlkuroda さんの ja.yml )落としてきて、その他ビューも適当に日本語化します。

Q. 実行環境は?

A. Rails 3.0.1 + bundler 1.0.3 (+ git)があれば動くはず。
面倒臭がりの人の為の Rails3 用テンプレート : ソースコードは飲み物です。 - 株式会社ウサギィ blog と同じ。

Q. で、早くそのコマンド教えろよ。

A.

rails new MyApp -m http://usagee.co.jp/for_dl/rails3-devise-init-template.rb


もしくは、ダウンロードしてから、

rails new MyApp -m rails3-devise-init-template.rb

Q. どういうことだってばよ?

A.

1. まず端末開いて

devise-template1

2. Rails の展開が終わった後に Git を使うか聞かれるから yes か no で答えて

devise-template2

3. しばらく放っておいたら色々処理が終わります。(前回と違い、自動でサーバーは立ち上がりません)

devise-template3

4. インストールしたフォルダに cd し、サーバーを立ち上げます。

cd Huga
rails server

devise-template4

5. http://localhost:3000/ にアクセス → 新規登録をクリックします。

devise-template5

6. 登録すると、登録メールは配送される代わりにサーバーのログに出ます。

devise-template6devise-template7

7. 上のログ内のURLをコピってブラウザでアクセスすると登録完了です。

devise-template8

8. こんな感じで遊んだ後に、これを改造して、もっと役に立つようにしてください。

Q. ほう、まぁ使ってやってみるか。

A. ありがとうございます。 改造する場合は

plataformatec's devise at master - GitHub ここが公式です。色々役に立つこと書いてます。

皆が必要そうだったら devise についても後ほどまとめます。


Q. 何が出来るの?

A. Rails3で新しくアプリを作る際にやらなきゃいけないことを自動でやってくれます。

Q. 具体的にどんなことしてくれるの?

A.
git を使う場合は git の用意とコミット
不要ファイルの削除
Gemfile の設定
bundle install –path vendor/bundle の実行
ホーム画面の作成とルーティングの設定
database.yml の設定
データベースの作成
サーバーの起動

Q. 実行環境は?

A. Rails 3.0.1 + bundler 1.0.3 (+ git)で動かしているよ。
Windows7 + RubyInstaller for Windows の Ruby 1.8.7-p302 + Development Kit + msysgit - Project Hosting on Google Code で実験済み

Q. 使い方は?

A.

rails new MyApp -m http://usagee.co.jp/for_dl/rails3-init-template.rb


もしくは、ダウンロードしてから、

rails new MyApp -m rails3-init-template.rb

Q. どういうことだってばよ?

A.

1. まず端末開いて

template1

2. Rails の展開が終わった後に Git を使うか聞かれるから yes か no で答えて

template2

3. しばらく放っておいたら色々処理が終わった後にサーバーが立ち上がるので

template3

4. http://localhost:3000/ にアクセス

template4

5. あとは自分が便利なようにソース改造して使ってね。


タイトル通り。ついでに git と capistrano で管理するように移行。2日ぐらい潰れた。
Webistrano で git サーバーから web サーバーに、ブラウザからボタン一発配備。
スゲー気持ちいい。けど、これぐらいの規模でやると、手間が増えるだけだね。トレードオフ重要。

そんなわけで、テストを兼ねて、Windows Live Writer 2011 にて投稿。

 

折角だしこの theme のソース公開しようかと思ったんだけれど、
theme は typographic を元に、 css は pukiwiki を元にしてるので、ライセンスが怪しくて公開出来ない罠。

日本に Typo をインストールしてる人口が多ければ、オリジナルテーマ作って公開するんだけど、
手間の割に欲しがる人が超少なそうだよね。やはり WordPress が強いのかな。
その辺りの統計あるなら、知ってる人おせーて。

 

皆が必要そうな情報は株式会社ウサギィwikiのほうが見やすいと思うので向こうで公開することにして、
ブログは日記&wikiに書く前のドラフトとして使おうかな。

あとは書評やら、だらだら書こう、っと。


プラグインの更新したら、

!ENTRY org.eclipse.osgi 4 0 2010-04-22 15:00:00.306
!MESSAGE バンドル org.eclipse.equinox.app (487) を自動的に有効化している間にエラーが発生しました。
!STACK 0
org.osgi.framework.BundleException: バンドル org.eclipse.equinox.app の org.eclipse.equinox.internal.app.Activator.start() での例外。
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:806)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:755)
….

みたいなエラーが出てeclipseが立ち上がらない。

ウゲー、どっかでコンフリクトしたかな、と思ってググったら
eclipse内にある、eclipse.exe -clean.cmdを実行すればよいとのこと

早速やってみたらすぐ治った。


TypoにWindows Live Writerで記事を書く

カテゴリ 2010-05-06 17:38:00 GMT このエントリーをはてなブックマークに追加 Delicious Check

Windws Live Writerで記事を書く際にxmlrpcを扱う形式を入力しなきゃいけないんだけど、情報落ちてないのでメモ。

http://<your-site>/backend/xmlrpc を入力すればOK。(<your-site>は自サイトに編集してね)

windowsLiveWriterSetting


ググっても解決法出てこないので困ってたんだけど。

mongrelのログ読んでて気付いた。

contentsテーブルのpermalinkにタイトルがURLエンコードされた値が入ってるのに、 find時に、生のタイトルで検索してた。

そりゃ見つからないよね。

ということで、app/models/article.rbを修正。

@@ -272,7 +272,7 @@
     date_range = self.time_delta(params[:year], params[:month], params[:day])
     req_params = {}
     if params[:title]
-      req_params[:permalink] = params[:title]
+      req_params[:permalink] = CGI.escape(params[:title].tr(FROM, TO).gsub(/<[^>]*>/, '').to_url)
     end
 
     if date_range

これでURLに日本語が使えるように。

おっけー


Dreamhostでtypoをインストールしたのですが、表示がビックリするぐらい遅い。

Operaで見て、10秒程表示にかかる。

typoがメモリ喰いまくってるのかな、と思ってVPS申し込もうかと悩んでtたんですが、どうも違う。

ステータスバー見ると、HTML自体は読み込まれてるんだけど、表示に異様に時間がかかってる様子。

 

パフォーマンス計測ツールである、YSlow :: Firefox Add-onsを使ってみると、

日本語表示用のjs /javascripts/lang/ja_JP.js が無い。

 

ググって見ると公開されているかたがいらっしゃいました。

Typoのテーマをいじってみる : Verboseモードでいこう

さんからja_JP.rbとja_JP.jsを拝借。

 

表示が速くなった!!


ここではユーザーのhome直下に.gemsというフォルダを作り、その中にRubyGems 1.3.4をインストールすることにします。

cd ~
mkdir .gems
echo 'export GEM_HOME="$HOME/.gems"' >> ~/.bash_profile
echo 'export GEM_PATH="$GEM_HOME:/usr/lib/ruby/gems/1.8"' >> ~/.bash_profile
mkdir bin lib src
echo 'export PATH="$HOME/bin:$HOME/.gems/bin:$PATH"' >> ~/.bash_profile
echo 'export RUBYLIB="$HOME/lib:$RUBYLIB"' >> ~/.bash_profile
echo 'alias gem="nice -n19 ~/bin/gem"' >> ~/.bash_profile
source ~/.bash_profile
cd ~/src
wget http://rubyforge.org/frs/download.php/57643/rubygems-1.3.4.tgz
tar xzvf rubygems-1.3.4.tgz
cd rubygems-1.3.4
ruby setup.rb --prefix=$HOME
cd ~/bin
ln -s gem1.8 gem
which gem   # should return /home/USERNAME/bin/gem
gem -v      # should return 1.3.4

 

上記をgem_local_install.shという名前でシェルスクリプトとして保存して、

sh gem_local_install.sh

とコマンドを打てば、しばらく放置後に完了してます。

シェルスクリプトとして保存し実行した場合は、

source ~/.bash_profile

と、bashの設定ファイルを再読み込みしてくださいませ。

 

またRailsを使う場合、このままだとRailsがユーザーがインストールしたGemsを認識しません。

ので、vendor/plugins内で、

gem unpack gem_name

として、gemを固定して入れてしまうか、

 

config/environment.rb内に、

ENV['GEM_PATH'] = File.expand_path('~/.gems') + ':/usr/lib/ruby/gems/1.8'

と記述することによって、Railsアプリケーションが新しいGemsを認識するようになります。

 

via:

RubyGems - DreamHost

Ruby on Rails - DreamHost