Hatena::ブログ(Diary)

やねうらお−ノーゲーム・ノーライフ このページをアンテナに追加 RSSフィード

GT-Rの買取ならここですわ。どこよりも高く買取ってもらえるはず。お勧め!GT-R 買取
電王戦出場記念! 書籍化されたで! 監修したで!(`ω´) 絶版なってしもた Kindle版で復活!! 記事書いたで!
解析魔法少女美咲ちゃん マジカル・オープン!

YaneuLabs / やねうら王公式 / やねうらおにメール / twitter / プロフィール

 | 

2008-11-14 ひなた先生が教えるデバッグが256倍速くなるテクニック

[] ひなた先生が教えるデバッグが256倍速くなるテクニック  ひなた先生が教えるデバッグが256倍速くなるテクニックを含むブックマーク  ひなた先生が教えるデバッグが256倍速くなるテクニックのブックマークコメント


今日が発売日です。2,3日前から書店に並んでいるようですが。

お値段は1980円+税です。たくさんの人に読んでもらいたいので、お求めやすくしてます。


ひなた先生が教えるデバッグが256倍速くなるテクニック

毎月の連載がこれほど辛いとは思わなかった。私は、あまりコツコツと仕事をするタイプでもないし、公私とも多忙を極めているころだったので、締め切りの一日前に徹夜して書くことがほとんどだった。


ストーリーも事前に練っていたものではなく、成り行き任せで、原稿提出後、編集の人から「ページが左半分余っているので1ページ加筆してもらえますか」なんてしょっちゅうで、ストーリー継ぎ接ぎつぎはぎだらけ、ある意味破綻していた。


それでも本連載の類を見ないテーマ、独特の切り口は読者にも伝わり、広く読者の支持を得られた。SoftwareDesign誌の人気投票では1位を獲得したとかしてないとか聞いた。(何がどう一位なのかは詳しく聞くのを忘れた。ごめん。)


長年プログラムをしている人なら自然と(無意識のうちに)身につけているデバッグの方法論を、初心者から中級者までにわかりやすく系統立てて解説することが当初の目的だった。その当初の目的が達成できているかどうかはいま読み返してみても自信はないが、デバッグについての考え方を強烈にインスパイアさせる連載であったのだろう。初心者から上級者の人まで幅広く支持していただけたようで嬉しく思う。


読者からの感想(SoftwareDesign誌の末尾付近にある)にはずいぶんと励まされた。

この連載には、比較的多くの感想が寄せられていたと思う。ざっと紹介しよう。

f:id:yaneurao:20081114162557p:image

f:id:yaneurao:20081114162558p:image

連載開始直後にいただいたコメント。これでやる気が俄然up!!

ライバルは、ふしぎ先輩かと(勝手に)思った。


f:id:yaneurao:20081114163425p:image

f:id:yaneurao:20081114163426j:image

長年プログラムをしている人なら自然と身についていることを

明文化してみると自分でも気づかなかった新しい発見がいろいろあった。

もっと小説風に描写をいろいろ入れたかったのだけど、

私にそこまで余力はなくて…

f:id:yaneurao:20081114164419j:image:w400

f:id:yaneurao:20081114164420j:image:w400

デバッグの考え方やアイデアみたなものをキャッチ

してもらえているようで嬉しかった。

連載数回目にして読者の感想がいくつも寄せられている。

意見を参考にさせてもらいながら連載の方向性を探って行った。


f:id:yaneurao:20081114165308j:image

f:id:yaneurao:20081114165309j:image

早井先輩の結末はそれほど不幸なものではないと思います。

著者としても、連載中、そして連載後も、ケンイチと

早井先輩が末永く幸せになる形を模索していたので

書籍化するにあたって少し書き足しています。

連載からいろいろ学んでいただけているようで

著者冥利に尽きます。


f:id:yaneurao:20081114170026j:image

f:id:yaneurao:20081114170027j:image

連載がお休みだとそれだけで抗議(?)が来るような人気連載に。

私にとって、早井先輩の原型は、江川達也氏の漫画の『Be Free』の

主人公なんですよね。


学歴も経歴も年齢も名前も全部、嘘。


「あんた一体誰?」って当然読者は思うんですが、

その解答はちゃんと用意してあります。


f:id:yaneurao:20081114170707j:image

f:id:yaneurao:20081114161043j:image

連載後に寄せられた感想

最後までおつきあいいただき、本当にありがとうございます。

ひなた先生は、「多くの人に多くのものを遺して行った」

と(著者としては)思いたい。


■ ひなた先生に関するトラックバック


ひなた先生に関するトラックバックはこのエントリに対していただけると幸いです。


■ 反響


『ShortCoding』本のOzyさんが取り上げてくれました。

ひなた先生本!

http://d.hatena.ne.jp/Ozy/20081115/p1



いい意味で裏切られた、やねうらお著『ひなた先生が教えるデバッグが256倍速くなるテクニック』

http://d.hatena.ne.jp/gikan/20081107



ひげぽんさんのレビュー。

http://d.hatena.ne.jp/higepon/20081118/1227003369


■ 裏話


・早井先輩の本名は、実はこのblog名前募集をした。→「教えて、ひなた先生!」(http://d.hatena.ne.jp/yaneurao/20050319)


あとで追記するかも


■ 訂正および解説


内容の間違いやコメント欄で受けた質問の回答などはここに掲載します。


【解説】

コメント欄での質問)

bool型の配列よりもstd::vector<bool>の方が配列に使用されるメモリは少なくなる、というのは何故なのでしょうか?

私の回答)

std::vector<bool>は、STLの実験作かつ失敗作です。templateの特殊化を使えば特殊化されていないstd::vector<bool>と同じ使い勝手で、省メモリ(1バイトを8つのboolとみなすから8倍の効率化)が実現できるかと思ったら、実際はC++が言語的にしょぼくてそんなものにはほど遠く、C++の限界が露呈したという…趣旨のことがEffective STL(→Effective STL―STLを効果的に使いこなす50の鉄則)に書かれていたと思います。



【修正】

p.92本文と脚注の「lap around」は「wrap around」の誤りです。

p.241の3行目。「this.Count = Count」とありますが、p.232のリスト3にはこの行はないです。リスト3を修正して、こっちを修正し忘れていました。リスト3のほうは、どうやっても警告は出ません。この部分はリスト3に「this.Count = Count」と追加したとすれば、コンパイル時に警告が出ると、読み替えてください。


※ ところで、この警告は、VC++EE(Express Edition)2005/2008では出ないと本文に書いていますが、VC#2008EEで確認したら警告が出ますね。ちなみに、VC++2008はStandardでも出ないようです。Standardだめぽ…。


P.119のリスト5(SparseMatrixの実装)の5行目にあるtypedef std::pair<P,int> CP;は、必要ないです。書き残してたのを消し忘れてみたいです。


【修正】

P.17の注4 : 「原子の位置」→「電子の位置」



■ 関連記事


実践デバッグ技法

http://d.hatena.ne.jp/yaneurao/20090604

kk 2008/11/13 23:36 ひな本を買ったはいいんですが、お外で読むには表紙がやや恥ずかしい感じです。

「ああそうか、美咲本みたく表紙取ればシンプルになってるんやな」と思ったら、そっちの方が大きいお友達みたいな感じで余計困りました。

yaneuraoyaneurao 2008/11/13 23:40 なるほど、その発想はなかった…。

まあ、タイトルが「ひなた先生が教えるCが256倍上手くなるテクニック」とかじゃないだけマシと言うか何と言うか…。

Keiji AriyamaKeiji Ariyama 2008/11/14 00:45 中学の頃、「はじめてのC」を学校に持っていて、周りから大騒ぎされた記憶が……。

><>< 2008/11/14 18:15 表紙がすごくレトロな気がします><

yaneuraoyaneurao 2008/11/14 21:52 ↑これはこれでなかなか味があって、いいんじゃないですか。(気に入ってます)

HyperDogHyperDog 2008/11/15 00:48 いつも楽しく読ませていただいています。
アマゾンに予約しておいたので、そのうち着くと思います。

hiyahiya 2008/11/15 01:35 アマゾンの発送は遅れているんだろうか?
それとも生産が追いつかないんだろうか?
あしたは来るかな…

yaneuraoyaneurao 2008/11/15 02:12 ↑*1,2
お買い上げありがとうございますm(_ _)m

zukkunzukkun 2008/11/15 10:58 買わせていただきます!

通る人通る人 2008/11/16 06:35 買いました!!!

愛がほしいの愛がほしいの 2008/11/16 11:16 今朝、アマゾンからやっと届きました。
子供が自分の本だと勘違いし、読んでいました。
来月3歳になります。

連載当時の興奮を思い出します。

ragerage 2008/11/17 08:45 買いました。
コールスタックの自動監視は目から鱗でした。
著者略歴に「ゲーム会社を経て独立」とありましたが、どこかの会社に勤めておられたのですか?

paellapaella 2008/11/17 11:17 私も買いました!すごく参考になっています。
すみませんが1点、質問させてください。
bool型の配列よりもstd::vector<bool>の方が配列に使用されるメモリは少なくなる、というのは何故なのでしょうか?
色々と調べているのですが,この点だけがまだ分かっていないのです・・・。

paellapaella 2008/11/17 12:03 スミマセン、自己解決(半分)です。

詳説C++第2版を読んでみたところ、
「std::vector<bool>は省スペースを意識した特殊バージョンで実装されている」
という記述がありました。これがSTLとしての仕様なのかどうかは分かりませんが、
少なくとも空間効率は良くなることは理解しました。

あとは仕様書なりを見てみることにします。

yaneuraoyaneurao 2008/11/17 15:17 購入していただいた方、ありがとうございます。
↑*3 エロゲー会社でディレクターをやっておりました。ごほごほ。
↑*2,1 今日のエントリに解説追加しました。

hiyahiya 2008/11/18 00:03 久々に参考書読んで笑いました^^
おまけに帰りの電車で終点まで行ってまうわ
もう、くちゃくちゃ、です^^;
プログラムを組むってこんなにオモロなんですね
もう一度読みます。

yaneuraoyaneurao 2008/11/18 03:10 ↑よしよし。今度会ったときに本にサインしたる(`ω´)

gikangikan 2008/11/18 22:52 はじめまして、反響へのリンクありがとう御座います。これからバグを見つける参考書籍として、仕事の手元に常備させていただきます。全て読み終わりましたら、こっそりと再び感想を書かせていただきますね。

ゲームプログラミングのfinal本、期待しています。

hiyahiya 2008/11/19 00:02 サインキター!
っていつになるんだろか?(´ω`)>お会いできるの

オフ会?

yabukiyabuki 2008/11/19 02:33 vector<bool>について書かれていたのは、
> More Effective C++
ではなく、同著者のEffective STLではないでしょうか

yaneuraoyaneurao 2008/11/19 12:13 ↑すみません、そうでした。Effective C++のほうの目次と索引になかったからMore Effective C++のほうかと勘違いしてしまいました。ご指摘感謝。

takotako 2008/11/19 14:35 本はまだ手に入れてないのですが、いつか読みたいと思っております。
あげ足を取るようで申し訳ないのですが、C++でなくてSTLだった件、amazonのリンクも張り替えた方がいいかもしれません。

yaneuraoyaneurao 2008/11/19 14:39 おお、すみません。修正しました。

taichitaichitaichitaichi 2008/11/25 23:20 今日から読み始めました。非常にしょうも無い事なんですが、P.119のSparseMatrixテキトー実装の5行目にあるtypedef std::pair<P,int> CP;の必要性が理解出来ないデス。誤植でしょうか?

yaneuraoyaneurao 2008/11/26 03:23 ↑すみません。それ、確かに必要ないです。書き残してたのを消し忘れてみたいです。お気になさらずに…。

w_h_ow_h_o 2009/01/01 06:04 年明け(って、つい先程)から読み始めました。楽しませていただいでいます。
たいした事ではないのですが、p.92本文と脚注の"lap around"は"wrap around"ですよね。

yaneuraoyaneurao 2009/01/01 13:13 うわ。私、間違えて覚えてました(´ω`)

遅井デバッグ遅井デバッグ 2009/01/30 13:19 どこかに正誤表はまとまってるのでしょうか?
P.199の意味がよくわからなかったもので自分が勘違いしてるのかなと思いまして。
「!(A||B)=A&&Bが成り立つ」など。

yaneuraoyaneurao 2009/01/30 14:36 ↑あ。それは見るからに !(A||B) = !A && !B の間違いです。すみませんすみません。

正誤表はまだ無いです。今日のエントリの末尾にある分しか私はまだ把握していないです。他にも疑問に思う部分があればここでコメントいただけると幸いです。

雪が降る日は暖かい雪が降る日は暖かい 2009/03/04 14:20 コードを書く前に実行時間を概算で見積もる習慣をつけよう120-121ページ: なるほどと思いました。 しかし、自分の書いたソースコードを見ながら L1 cache に入るか、入らないかはどのように推測、判断したらよいのでしょうか? 見当がつきませんので教えていただければありがたいのですが・・・。

yaneuraoyaneurao 2009/03/04 19:46 Visual C++であれば、「混合モード」にすればアセンブラの表示が得られますから、自分のソースの実行が集中している部分がどれくらいのバイナリサイズになっているかはだいたいわかります。

このバイナリサイズにアクセスするデータのサイズを加えたものがL1に入るか考えます。

アクセスしているデータを推定するのに、変数ひとつずつ数えるわけにはいかないので、主に使っている配列のサイズなどから推定します。配列もシーケンシャルにアクセスする場合と、ランダムにアクセスする場合とでは話が違ってきます。…が、ここに詳しく書けないので、あとは、Intelのプロセッサの最適化のpdf資料などを参考にどうぞ。

雪が降る日は暖かい 雪が降る日は暖かい 2009/03/06 10:13 教えていただきまして大変有難う御座いました。

BC++B6を使ってます。
デバッグで実行するといつでもCPUとメモリをみることができるのですが、変数名や関数名表示はありません。
マップファイルに作成チェック入れてビルドして参照するとよいのかな・・・。 
バイナリエディタでみる方法もありますね。
どれも慣れないのでスムーズに行きません。

IntelのCPUのpdfはだいぶまえにダウンロードしてこのパソコンにあるのですが見ているとなぜか眠くなります。
最適化、L1 cache に視点を絞って眺めると読める部分があるかもしれません。 読んでみたいと思います。


その後、早井さんはお元気でしょうか? 
けんいち君は心配してません。 
ひなた先生、倉塚美咲さんにもよろしく!

暖かくなって雨の日暖かくなって雨の日 2009/03/19 11:26 17ページの脚注の注4.についてです。
本文とは直接関係はないとはいうものの、一見読んで「あっ」と思いましたので書きます。

2行目の「電子の」と「原子の」は、

1.どちらも「電子の」とする。
2.どちらも「原子の」とする。
3.注4.をすべて削除する。

以上1.2.3.のどちらかにするほうがよいと思います。

yaneuraoyaneurao 2009/03/19 11:35 ↑あ、それ、1.のつもりで書いてました。ご指摘感謝。

rustlerustle 2009/05/21 15:34 本の中に 「Visual Studio ミニテクニックショートカットキイ」(1)から(6)まであります。 これは実際に著者が常日頃よくショートカットキイを使っているから書いてあるのでしょうか?それとも、ページの空白を埋めるために書いただけなので
しょうか?  

Visual Studio 2005 付属のユーザズガイドの「入力とショートカット」(38ページの中段)の節に、

「ベテラン プログラマの多くは、キーボードからほとんど手を離さずにルーチン タスクを実行しますが、経験の浅いプログラマは、マウスを使用してルーチンタスクを実行します。」

とあります。

「デバッグが256倍速くなるテクニック」の著者は、いつもキーボードからほとんど手を離さずにルーチン タスクを実行しているので「Visual Studio ミニテクニックショートカットキイ」(1)から(6)までを書いたのでしょうか?
いかがでしょうか? 教えていただければと思います。

http://rararahp.cool.ne.jp/cgi-bin/zatulng/read.cgi?
mode=all&list=topic&no=1869

にもありますが、「使い方"だけ"能率アップしてどーすんの? て思うし。」てなことは十分承知しているつもりではありますが、ちょっと伺いたいのです。

yaneuraoyaneurao 2009/05/22 04:13 VSのショートカットキーを紹介したのは、そのなかに読者によっては知らない機能もいくつかあるだろうと思ったからです。

紙面上の体裁としてはショートカットの紹介になっていますが、「この機能、デバッグに使うと便利なんだけど使ってる?」みたいな問いかけですね。

rustle_2rustle_2 2009/05/23 07:47 >> 紙面上の体裁としてはショートカットの紹介になっていますが、「この機能、デバッグに使うと便利なんだけど使ってる?」みたいな問いかけですね。

回答ありがとうございます。 なるほど、わかりました。
Visual Studio 2005 Standard なんですが、値段の割に目が回るほどたくさん機能があって使いきれません。 当面どれを使ってよいかも見当がつきません。 

それでショートカットのページだけ全部ホトコピーでまとめて、手元において、今日はこれを使ってみようかなー、なんていうふうに参考にして役立てています。

sunasuna 2010/03/13 13:52 書籍化されていたのですね。早速購入します。
連載時にひなた先生の服の襟合わせが右前になっているのが気になっていましたが、直っていますでしょうか?

yaneuraoyaneurao 2010/03/13 15:54 > 連載時にひなた先生の服の襟合わせが右前になっているのが気になっていましたが、直っていますでしょうか?

い、、いや。私はわかりませぬ..。たぶんそのへんは連載のときのまま..

 | 

1900 | 01 |
2004 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2013 | 01 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2014 | 01 | 02 | 03 | 04 | 06 | 08 | 10 | 11 | 12 |
2015 | 01 | 02 |


Microsoft MVP
Microsoft MVP Visual C# 2006.07-2011.06