ステータスコードを返すメソッドは書くな!

progredditで上がってた記事の紹介.元記事はこちら:Binstock on Software: Banishing Return Status Codes

Cなんかでは普通に使うステータスコードを返す手続きはOOPではやめれ!というお話.要点をまとめると:

非常に当たり前.そもそも関数で無い限り戻り値って変.

redditの反応で興味深い指摘があって,このようなOOPの慣習にはhttp://c2.com/cgi/wiki?SamuraiPrincipleという名前がついてるそうな.

ちなみに,元記事があるブログのBinstock on Software: Perfecting OO's Small Classes and Short Methodsというエントリもあわせて読みたい

継承は何のためにあるか?

常々思ってることなんですが……オブジェクト指向プログラミング(OOP)って何?
オブジェクト指向言語xとyではどちらがより純粋か?とか,クラスベースvsインスタンスベースとか,Lispオブジェクト指向だ!とか.どれだけ抽象的な概念かも人によってさまざまで,一方ではプログラミングの哲学としてとらえてる人たちがいて,もう一方では単なる便利機能の詰め合わせだととらえている人たちがいるようです.

Daniel Pietraruさんはhttp://littletutorials.com/2008/06/23/inheritance-not-for-code-reuse/という記事で,よくある継承に関する誤解について書いています.彼は就職希望の大学卒業生の面接でOOP言語の特徴について尋ねるそうです.

Usually when I get to object oriented programming and I ask for characteristics of an OOP language, I get the text book mantra: encapsulation, inheritance and polymorphism - good. And then I ask what is the purpose of each of them.

彼らは教科書通りにカプセル化・継承・ポリモフィズムと答えるそうです.一方で,継承が何のためにあるのかを質問すると誰もが,コードの再利用のため.と答えるそうです.実際には全然違いますが.

実際には,継承は様々な抽象化のレベルでカテゴリー化された概念のヒエラルキーを作るためのものです.それによってポリモフィズムを助けるのだそうです.

Inheritance is a mechanism used to achieve categorization and to facilitate polymorphism. Using inheritance you can build a hierarchy of concepts separated in categories at different levels of abstraction. By doing this, you can efficiently use another OOP concept, polymorphism, which allows the same control code to manage all objects in a category even if they are different in their implementation.

つまり,コードの再利用という直接的なかたちでプログラミングに貢献するのではなく,IS-A関係の記述という一見プログラミング的には無価値に見える機能によって,ポリモフィズムを可能にする.ということでしょうか?

となると,カプセル化・継承・ポリモフィズムと3つ並べるのは変な感じがします.カプセル化ポリモフィズムでいいんじゃないでしょうか?カプセル化も取り立ててオブジェクト指向の特徴,というようなものでしょうか?ようはADTですよね?ポリモフィズムしか残りませんね……

ともかく,彼は継承によってコードの再利用が起こることはあるが,コードの再利用のために継承を用いるのは間違いだと指摘しています.

元記事はOOPだけでなく,誤解を広めた高等教育やソフトウェア危機についても言及したすばらしい記事です.読んでみることをオススメします.

2008/7/8 タイトルを継続と書いていたのを修正
2008/11/6 http://yichiban.blogspot.comから移動

ビル・ゲイツの引退後のTODOリスト

Hacker News経由.ビル・ゲイツ氏がソフトウェア産業の前線を退かれるそうですが,引退後は何をするんでしょうか?「引退後のTODOリスト」っちいう記事を見つけたので紹介します.

  1. サルでもわかるQBASIC』を執筆する
  2. GMailに切り替える
  3. マラリアエイズ,二日酔いを根絶する
  4. 世界中のTwitterユーザをFriendFeedに移行させる
  5. 世界のGDPランキング下位54カ国を買う(もしくは、アメリカの下位45%の世帯にする?)
  6. 黒のタートルネックジーンズ,スニーカー姿に慣れる
  7. ヒラリー・クリントンに借りを返す
  8. マイケル・アーリントンからの「返信待ち」メールに返信する
  9. XPにダウングレードする
  10. テレビ番組で社交ダンスに挑戦する

1 は超訳で原文では"QBASIC For Dummies".QBASICといえばQuick Basicのサブセットで,Windows98などには処理系が標準でインストールされていましたが,今はどうなんでしょう?Visual Basicのもとになった言語だけあって,行番号がオプションであったり,進化したBASIC言語というイメージを持ったことを覚えています.
2はHotMailから切り替えるということでしょうか?実際はGMailのアカウントは持ってそう.
ゲイツ夫妻の財力なら3, 5は余裕です.
4で取り上げられているFriendFeedってどうなんでしょう?海外のサイトではよく話題に上ってましたが,実際はたいしたものではない,という意見もちらほら.
6の格好で文字がぎっしり詰まったPowerPointを見せながら,ZunePhone 3Gを発表すれば完璧.
7.なにか因縁があるんでしょうか?サイレンサー付きのピストルをもったゲイツ氏を想像してしまいました.
8. どちらさま?著名なブロガーであることはわかりましたが,どんな質問をしたんでしょう?
9. 世間一般ではそれをアップグレードといいます.
10はいわゆるシャル・ウィ・ダンスです.きっとゲイツ氏はダンスをしても巧いはずです.インテル入ってますから.

元記事はこちら:Bill Gates' Retirement To Do List – TechCrunch

2008/11/6 http://yichiban.blogspot.com/から移動

体内時計をリセットする簡単な方法

Hacker News経由で興味深い記事を見つけたので紹介します。人間の睡眠に関する体内時計が日中に浴びる光によって制御されていることはよく知られています。しかし、空腹は光に基づく体内時計周期を変更する力をもっているそうです。

ハーバードメディカルスクールの最新の研究によると、12〜16時間の断食が睡眠サイクルのリセットをたすける可能性があるそうです。この発見によって、時差ぼけの解消や夜勤シフトへの対応を抜本的に改善することができます。


この記事は午前2時に起きる例を挙げて詳細な方法を解説しています。この場合、前日の午前10時から午後2時の間に断食を始めて、午前2時に起きてからおいしい健康的な朝食をとりましょう。ということらしいです。


元記事はこちらから。Easy way to reset your sleep cycle: Stop eating | Parenting Squad