My Daily Programming Life...

Showing posts with label Books. Show all posts
Showing posts with label Books. Show all posts

セキュアソフトウェア


「セキュアソフトウェア」 Greg Hoglund / Gray McGraw トップスタジオ訳 日経BP社
を読んだ。

結論からいうと、読む価値はあまりない本だった。
自分のレベルに比べて、内容的に不十分であるとか、簡単すぎる内容であるとか、一般的すぎる内容であるなどという意味ではない。
文章の構成、説明の仕方、翻訳これらの悪さが相乗効果的に内容を分かりにくくしており、さらにそこから得られるものを極端に減らしている。

まず翻訳が悪いのは一目瞭然で、おそらく訳者も自分が何を書いているのか分かっていないのだろう。単純に英語をそのまま翻訳しただけになっており、そのためこちらにも何を言いたいのか分からないところだらけになっている。
「SQL Injection」→「SQL挿入」と訳すなど明らかに分かっていない訳が多々見られる。

原著でどうなっているかは分からないが、サンプルとして載っているソースコード一つとっても酷い。技術的に間違っているとかではなく、インデントがきちんとされていない。ifブロックの中身の一行目はifと左がそろっていて、2行目はインデントされている。こんなの基本中の基本だろ。

構成面でも物事の順番が一貫しておらず、まったく意味不明になっている箇所が多い。さっきまでの話の流れと今読んでいる部分の話の流れが全然つながっていない個所が多い。なぜ、いまそれを説明しているのか全く分からない。その場で筆者が思いついたことを並べて書いているようにしか見えない。

そういったことを顕著に表わしていると思う例としては、「boronタグ」という言葉について180ページで「boronタグがあるかどうか調べたいことがあります。」とあり、それまで一切boronタグの説明がないにもかかわらず当然分かっているかの如く文章が続く。そして300ページには「もう一つ、時間を節約する優れた技法として、boronタグという手法があります。この手法では、・・・」とboronタグの説明が始まる。言葉の説明の前に、それを使った内容が出てきてしまっている時点で、何も考えられていないとしか思えない。

こんな調子で、ばらばらと知識が適当な順番で並べられていて、翻訳も意味の分からない部分が多いため、ある程度の前提知識(ああ、これはあのことだろうと分かるような)がないと読み進められない。
すでに様々なソフトウェアの攻略法について知識があれば、なんとなくああ、これはあれのことかとか想像しながら読める。

リファレンス的な本にできるかといえばそうでもなく、何か新しい知識を体系的に身につけるために読める本かといえばそうでもなく、役に立たない。すでに分かっている人がフルに頭を使って著者の言いたいことを想像し、そのうえで知らないことを身につけていくという読み方ができないと、ここから何かを得るのは難しい。

最後の方のバッファオーバーフロー、Rootkitに関しては内容が比較的あるのである程度わかっている人なら読む価値のある部分だと思う。というか、なんとなくこの人たちが書きたかった部分は、ここだけであって、そのほかはあとから埋め合わせただけなんじゃないかとも感じられる。

個々の内容は知らないことも多いし、得るものも多いと思うので、もう一度構成をし直して、何をどういう順番で伝えるかということを考えて、翻訳もセキュリティやコンピュータについてある程度分かっている人が関って、作り直せば十分価値のある本だとは思う。

Amazon.comの原著のレビューを見ると、やはり技術的な視点で見ると期待外れだというところが大きいようだ。どちらかというとソフトウェア攻略の概要であったりどんなものかを知るという点で評価されている。しかし、実際にはIDAのプラグインの書き方が載っていたり、自作のデバッガの作り方が載っていたりと、やはりそのあたりのこの本の方向性がはっきりしていないことが見て取れる。

出るかわからないけど第2版に期待。

最短経路の本



「最短経路の本」R.ブランデンベルク P.グリッツマン シュプリンガー・ジャパン株式会社

を読んだ。

基本的にはグラフ理論を現実的な側面から解説している本。レナという女の子が、コンピュータと話をしながら、グラフ理論やアルゴリズムについて学んでいくというストーリー。

最短経路
アルゴリズムの時間計算
最小全域木
オイラーグラフ
マッチング問題
中国人郵便配達問題
ハミルトングラフ
巡回セールスマン問題

といった内容を、図などを交えて、対話形式の話を読みながら学べる。
教科書のような作りではなく、章が比較的短くまとめられていて、しかも一つ一つの章の内容も難しすぎないため、非常に読みやすい。しかもいつの間にか一通りのグラフ理論の概要は理解できるようになっている(と思われる。)

グラフ理論ばかりではなく、チューリングや、オイラーなどの人物の逸話なども載っていて飽きない作りになっているし、何よりそれによって頭が疲れないようになっている。頭を使って考える部分と、少し休んで読める部分が交互にあるため、また次の章を読むときにも、エネルギーが残っている。

ただし、一つ一つ理解するには、それなりに時間がかかる部分もある。たださっと読んだだけでは理解できない部分もあり、頭を使って読み進めないと、次の瞬間には何を言っているのかわからなくなるようなことも多い。そういう意味では、教科書を進めるときのように、1ページ1ページ確実に理解して前に進むべき本だと思う。

主人公のレナは、数学が苦手な女の子の役割だが、少なくとも数学がそれなりに得意だった僕よりもよっぽど数学ができるという点はちょっと・・・と思うところはある。なので、まったく数学が苦手な人にはちょっと難しいかもしれない個所もある。(数学的に難しいというより、その場で自分で論理的に考えて、そこで言われていることを理解する力が必要になる。)

この本を読んだ後に、グラフ理論の教科書的なものを読んでいるが、この本を読んだ後で、教科書を読むのは非常に効率が良いと思う。教科書は数学的に正確な言葉で書かれていたりして、概要をつかむには、一つ一つを理解するのに時間がかかる。一方で概要が分かっていると、教科書はその概要を数学的に正しく書くとこうなるという説明として読めるので、頭の中のイメージをすぐにその式につなげることができる。式からイメージをつくるより、今あるイメージが式の中でどう表現されているかを考えるほうが楽だと思うし、この本はよい入門書になると思う。

最後の3章(全体の1割程度)は僕には難しすぎて理解できなかった。というより、個人的にはちょっと説明が雑すぎるんじゃないだろうかと思うところもある。おそらくこれですべてを理解してもらおうと思っていないというところはあると思うが、理解できない言葉(「1-木」ってなに?)ができたりして、説明されているようだけれど、理解できない。というわけで、最後の3章は読んでいない。

全体として、現実的な問題を解決するということを題材にして、説明されているので、その意味もはっきりしていて目的をもって読める。グラフ理論がどんなものか知りたい人、アルゴリズムに興味がある人は読んで損はない本だと思う。

暗号技術入門



「暗号技術入門」結城浩 ソフトバンク クリエイティブ株式会社
を読んだ。

対称暗号
公開鍵暗号
ハッシュ関数
メッセージ認証コード
デジタル署名
疑似乱数生成

これらを題材に順番に説明して、現在の暗号技術のなかでどのように使われているかを説明している。

どのように使われているか、どのような意味を持つか、なぜそれを使うのか、またこの技術で解決できない問題は何なのかということを順番にわかりやすく説明している。
暗号の作成者、実装者視点ではなく、利用者視点で書かれている。
という意味で、自分でプログラミングで直接暗号を使う必要はないけど、なんだかいまいち暗号通信がどうなっているのかよく分からない、HTTPSがどうして安全なのかよく分からない、そもそも安全なのか不安だという利用者向けの入門書だった。

個人的にはもう少し暗号技術その物の導入を期待したので、ちょっと物足りない感じだった。公開鍵暗号、デジタル書名の使われ方が分かっている人であれば、得るものは多くはないかもしれない。もう少し暗号そもののの説明が欲しい感じがした。ブロック暗号の話はかかれているが、ストリーム暗号は言葉が出てきているだけで具体的な説明はなかったりもする。

暗号技術全体の像を掴む上ではいいかもしれない。ただし、ちょっとページ数をかけすぎている気がする。それだけ丁寧だということはあるけれど。

もう少し簡単に、全体像を掴みたい人は「マスタリングTCP/IP SSL/TLS編」がよいと思う。プロトコルに関する本ではあるけど、最初に基本的な暗号全体に関する説明がある。これを読んで、もうちょっと詳しく、または丁寧な説明が欲しい人は「暗号技術入門」を読むのがいいと思う。

3年で読む本

今後3年で読むべき本をリストアップしてみた。
いろいろなサイトを参考に。すでに持っている本がほとんどだった。
特に参考にしたのは以下のサイト
http://leoclock.blogspot.com/2009/09/blog-post_21.html

一番上にMolecular Biology of the Cellが紹介されていて、これは自分が求めているサイトではないと一瞬思ってしまった。(この本は生物の本で僕も持っていたけど、すでに後輩にあげてしまった。たぶん、生物やってる人で持っていない人はいないんじゃないだろうか)

さて、というわけで読むべき本リスト
  • アルゴリズムイントロダクション 1~2
  • 計算理論の基礎 1~3
  • 暗号の数学的基礎
  • 離散数学 コンピュータサイエンスの基礎数学
  • Windows Internals 5th Edition
  • モダンオペレーティングシステム
  • 詳解 TCP/IP Vol1
  • コンピュータの構成と設計 上下
  • 分散システム
  • Database Management System
  • 構造化コンピュータ構成
  • セキュアソフトウェア

数えたら全部で 6979ページあった。

すでにある程度読んでいて、分かっている分もあるので、本当にすべてを端から読むわけではないけど、きちんと理解していくには相当時間がかかりそう。
3年=1000日として、1日平均7ページだ。1週間に1回読むとすると、50ページほど読まないといけない。いままでの経験から、技術書を一度に50ページ読むことはほとんどできない。1週間に3回は時間を取らないといけないかもしれない。平均して1回17ページならなんとかなるだろうか・・・。1回辺りの時間は2時間。厳しいか。内容によるし、どれだけ自分で整理しながら読むかにもよるけど。

「コンピュータの構成と設計」と「構造化コンピュータ構成」はかなり内容がかぶりそうなので、とりあえず前者を中心に。
とにかく、基礎的なところを中心に。

この中でもっとも異色なのは「セキュアソフトウェア」。一応セキュリティ技術者なので、この分野のことを、具体的に一通り経験した方がいいだろうということで選んだ。教科書的な存在ではないので、ちょっと基礎からははずれる。そういう意味では優先度は低い。

ところで、このリストを作る過程ですごいものを発見してしまった。といっても、当然といえば当然なのかもしれないけど。
http://video.google.com/videoplay?docid=-2333306016564732003#
おそらくこれ、リストに一番上に上げたアルゴリズムイントロダクションの授業だと思う。
ただでMITの授業受けられるのか。感動的だ。
まだ、ちょっとしか見てないけど、役に立ちそう。

何より僕は本を読むより、授業の方が好きなので、これは助かる。
feedSubscribe to my feed