What is it, naokirin?

きのこ本 感想 Part11

前回から随分と間があいてしまいました。

合間を見つけてしっかりやっていきたいところです。

31 状態だけでなく「ふるまい」もカプセル化する (アイナー・ランドル, Einar Landre)

オブジェクト指向を習い始めた当初によく聞かされる「カプセル化」ですね。

初心者向けの記述によくある説明が「変数の詳細などを外部に漏らさないようにすることで、使用者が余計な情報を気にしたり、また不要に情報が変更されたりしないようにする」みたいな説明もあったりしますが、確かにこの説明だけでは不十分でカプセル化は「ふるまい」そのものも封じ込めることができます。そして、こちらも変数や状態の封じ込めと同じく重要です。

エッセイでも『状態と「ふるまい」の両方をカプセル化できる』と書いてあります。「ふるまい」がカプセル化できていないとオブジェクト指向でよく「悪い状態」と言われる「密結合」の状態を生みます。

この辺りを上手くカプセル化を行っていくにはどうしたらいいか、と考えてみると、やはりオブジェクトに割り当てられる責務を明確にして、オブジェクトには単一の責務を与えることが重要になると思います。

32 浮動小数点数は実数ではない (チャック・アリソン, Chuck Allison)

これは知ってる人からすれば当たり前みたいに感じることかもしれませんが、意外と忘れたころに思わぬバグを運んでくる原因になることもよくあります。

数学的に実数と言うと、デデキント切断 - Wikipediaというようなもので専門的には実数論での実数の連続性が基礎付けされているみたいです。簡単に言ってしまえば、ある実数と実数の間には必ず実数が存在する、というわけです。

一方、浮動小数点数はというと、任意の浮動小数点数の間に必ず浮動小数点数が存在するかと言われると、もちろん精度が無限大でない限り存在しない場合があります。

これが大きな影響を与えることはよくあります。とくに科学計算や精度を求められる金融での計算などで、浮動小数点数の誤差をしっかり把握していないと実際の結果ととんでもなく違った結果をプログラムが出力することはよくありますし、現にそういうことを起こしたという例も耳にします。

私自身、大学にいて講義で数値計算を習った際にもそういうことを言われたことがあります。 ( とはいっても、その講義を受けた人は私以外のほとんどの人がプログラミングをしたこともない人たちばかりで、実際どの程度の人が覚えているかは定かではないですが… )

実際に浮動小数点数を使う際には「実数ではない」ということを意識して、「本当に浮動小数点数を使うべきか?」、そして「この計算は許されない誤差を生まないか?」と問うべきですね。

33 オープンソースプロジェクトで夢を実現する (リチャード・モンソンヘーフェル, Richard Monson-Haefel)

オープンソースプロジェクトに関わる。

ある種これもあまりプログラミングができない私みたいな人にとっては夢ですよね。

オープンソースプロジェクトも大小さまざまあって、バックに企業がついてたりするものもあったりしますね。

実際にソフトウェアを企業で開発している人でも思ったような開発ができないこともあると思いますし、そもそもソフトウェア開発をしたくても現状の仕事としてはしていない人もオープンソースプロジェクトであれば参加することができます。

もちろんただ開発するだけなら一人で開発しててもいいのでしょうが、人とかかわってプロジェクトを進めることは人のソースを見たり、レビューされたりレビューしたり、同じ趣味を持つ技術者と話したりと色々な楽しみがあると思います。

エッセイに書いてあることで初心者の方にお勧めできそうな方法として、「プロジェクトにテストコードを書く」というのがあります。

テストコードを書くというのは結構難しいことのようですが、その難しいことをやっていくことでソースコードについて学べ、また自分でコードを組み上げてプロジェクトに参加するのは敷居が高くても、テストコードでバグを見つけると言った参加方法もありだと思います。

最後に

エッセイを読みながら思ったことですが、分かっていても実践できていないことも多くあるので、反省点は多いですね。