What is it, naokirin?

きのこ本 感想 Part14

きのこ本感想です。

このままの調子で感想書いていくと冬になってしまいそうで怖い・・・

40 プロセス間通信とアプリケーション応答時間の関係 (ランディ・スタッフォード, Randy Stafford)

プロセス間通信による遅延がアプリケーション全体の応答時間に影響を及ぼす。

リレーショナルデータベースへ頻繁にアクセスするようなアプリケーションではよく聞きますね。並列化したり、キャッシュを使うことで出来る限りデータベースへのアクセスによる遅延を発生させないようにしている。ただ、データベースへの書き込みがこの処理に入ってくると並列化も一筋縄でいかないみたいですね。

最近は確かによく「最適化」という名のもとにアルゴリズムを変更することによる応答時間の問題の解消をよく聞きますが、あまりアルゴリズムを複雑で理解しにくいものにしてしまうのも保守の面では微妙な話ですし、高速化のためのアルゴリズムが必ずしも汎用ですべての状況において高速化されるとは限らないので、やっぱり後で仕様が変更されるときに負担を残すことになるのではないかと思います。
また、アルゴリズムによる改善は、元々使われていたロジックやアルゴリズムがひどくない限りそこまで劇的な改善が見込めるものは私は聞いたことがありません。

確かにそれよりはこのエッセイに書かれているような、プロセス間通信における遅延によって応答時間が長くなることを解消する方がよっぽど理性的だと思います。( とはいっても私の経験談ではないのであしからず。あくまでも耳から入った知識です。 )

高速化のために複雑なアルゴリズムへの変更を考えた時は、立ち止まって、「本質的に応答時間を長くしている部分は本当にこの部分なのか」ということを考えるべきだと思います。

ただし、これはプロセス間通信の遅延の影響を抑えることを考える時も一緒だと思います。思考停止せず、一体どこが本質的な問題なのか考えるべきですね。

41 無駄な警告を排除する (ヨハンネス・ブロドワル, Hohannes Brodwall)

これはもっと強い言葉で「警告はエラーと思え」的なことを聞いたことがあります。やっぱり警告は「問題にならないから大丈夫」と思っている人が多いから、逆にそのくらいの気持ちになって警告にも対処しろ、ということなのでしょう。

なかなか他の人とプログラミングする機会がないので、私自身が他の人のコードで警告が残されていて色々大変だったなんてことはないのですが、やっぱり警告自体は毎回つぶすようにしています。

つぶすと言っても完全になくしてしまうというより、問題にならないことが分かっている場合はその警告を単に表示されないように変更するという場合もあります。

確かに警告が大量に出ると、一体どの部分が問題になっているのか分からないことがよくあります。警告だから大丈夫だろうと思う人には問題ではないのでしょうが、警告はやっぱり問題です。
エラーと同じとは思いませんが、潜在的なバグを生んだり、セキュリティホールを生む要因になります。警告レベルの問題でも、ウィルスからすれば格好の獲物のようになっていることもよくあります。

警告は出た時につぶす。
これは鉄則ですね。私も忘れず続けていきたいものです。

42 コマンドラインツールを使う (キャロル・ロビンソン, Carroll Robinson)

私も昔はIDEに頼り切ってましたね。

コマンドラインツールをまともに使い始めたのは、つい最近のことです。使わなければプログラミングがそもそも進められなくなったという部分が出始めたから使い始めたのが本音です。

ですが、使い始めて慣れてくると、コマンドラインのツールの方が使いやすいと感じることも多くなってきました。

エッセイでは、「IDEを使うな、ということではなく、IDEが裏でしていることをより知るためにコマンドラインツールを使おう」と言っています。
IDEは開発をより楽に進められるので、これを捨ててコマンドラインツールですべてを進めていくというのは賢明な判断ではないでしょう。ただ、裏での動きを知ることでより良くIDEを使いこなせると思います。

正直に言うと、私はVisual StudioC++コンパイラが色々とひどい動き( C++本来の仕様とかけ離れた動作 )をしていることをコマンドラインツールを使うまであまり意識していなかったのです。
こういうことを意識するためにも、IDEに任せ切った開発をするのではなく、IDEをより効率的に上手に使うことが大切だと感じます。

最後に

私はあまり過度の最適化というのが好きではないので、40のエッセイには同調できます。私は問題点を洗い出し、もっともよく問題を解決できる点から解決すべきだと思っています。最適化とはそういうものだと思っています。
警告の排除は、この問題を軽視していると思われる話を聞くことがあるので、より多くの人がこの問題をしっかり意識してほしいですね。
コマンドラインツールは初心者には敷居が高いと思いますが、時間をかけてでも手を出す価値があります。特にコンパイラやmake、grepなどは慣れるととても便利です。
GitやMercurialなどのDVCSもコマンドラインで慣れるとこちらの方が便利で仕方なくなります。