> Sunが必死こいて、「VBプログラマを獲得する!」なんて言ってますが、そんなことに
> なったら、ますます酷い状況になっていくんじゃ。。と、心配です。
このへんがよくわからないです。
VBのようにさくっと組める開発環境がJavaに不足しているのは事実でしょうし、
Java側としてはVBプログラマを取り込みたいのも当然でしょうし。
「酷い状況」というのが、MLなどのレベルが下がるということであれば、
別にVBプログラマをそう差別するもんでもないと思うんですが (^^;
JavaHouseとかで見かける酷い質問は、Javaに関する知識の不足とかよりも、
むしろ質問者の人格に原因を求めたくなるようなのが多いわけで。
> 同じ物書きのくせに他人の本を主観的に批判するのは人格を疑いますね。
質問します。
(1)これはいったい私のどの発言に関するコメントでしょうか?
Webページですか? 本ですか? MLなどの発言ですか?
具体的に示してください。
(2)「同じ物書きのくせに」とのことですが、物書きが物書きを批判しては
いかんという根拠は何でしょうか?
(3)「主観的に」とのことですが、どのあたりが「主観的」だと
感じられたでしょうか?
> でも一番大きいのは、やっぱり(c)で、かつての常連さんが嫌気がさして
> 来なくなっちゃった、というのが大きいと思いますよ。高木さんももう最近は
> 放置状態ですし。
かつて常連だった方にとっては、もはやJavaは興味の対象外なのかなぁ、なんてことも
思ったりします。
高木さんの日記を見ても、出てくる言語はRubyだったりしますし。
# ただ単に、書き捨てのプログラム書くのに丁度いいから、ということかもしれませんが。
> かつてのJavaHouseなら、今頃…というかもっと早い段階でtigerネタで
> 盛り上がってたと思うんですが。最近はたまに流れるメールも質問メールばっかりで。
> 質問メールも重要ですが、そればっかりでは「面白くない」ですよねえ…
Tigerが全然話題にならないということは、1.5が正式にリリースされても、一般的には
新しい機能がほとんど使われない、という状況になるのかな、という気もします。
Sunが必死こいて、「VBプログラマを獲得する!」なんて言ってますが、そんなことに
なったら、ますます酷い状況になっていくんじゃ。。と、心配です。
って、ROMってるだけの僕が、なんか偉そうですね(笑) すみません。。
> 結局、最後は前橋さんがまとめたような形になりましたが。
私がまとめたんだかどうだか。単に終わったところに蛇足的なレスつけて
放置されてるだけのような気もしますが (´・ω・`)
> 不思議なのは、Java人口は増加しているように思えるのに、それに比例するかのように
> JavaHouseが閑散としていったことです。
これは私もそう思います。
> ・Javaの情報量が増えたため、JavaHouseの必要性が薄れた。(a)
> ・Javaの対象領域が増えていったため、関心が拡散した。(b)
> ・人口が増えたことで、相対的にレベルが下がった。(c)
勝手に(a), (b), (c)と付けさせてもらいました。
(a)はどうかと思いますが(初心者向けJava本はあふれていますが、内容は大同小異
のように思いますし、質問する人は本に書いてあることでも質問するものですし)、
(b), (c)は確かにあると思います。周辺技術が増えすぎて「Javaできます!」と
いうだけじゃ何ができるのかわからん、という状況ですよね。現状は。
でも一番大きいのは、やっぱり(c)で、かつての常連さんが嫌気がさして
来なくなっちゃった、というのが大きいと思いますよ。高木さんももう最近は
放置状態ですし。
かつてのJavaHouseなら、今頃…というかもっと早い段階でtigerネタで
盛り上がってたと思うんですが。最近はたまに流れるメールも質問メールばっかりで。
質問メールも重要ですが、そればっかりでは「面白くない」ですよねえ…
# ここに書き込むべき内容じゃないかもしれないです。。
久しぶりにJavaHouseが盛り上がっているなぁ、と思ったら、Javaとは全然関係ない内容
だったんですね。。
結局、最後は前橋さんがまとめたような形になりましたが。
僕がプログラマを始めたのは2年半ほど前ですが、まだその頃のJavaHouseはそれなりに
活発で、有益な情報が多かったように思えます。
で、「いつかこういったMLで役に立つような発言が出来るようになるんだ!」と励みに
していた記憶があります。
そういう意味では、ここしばらくの閑散とした状況は、とても寂しく思えます。
不思議なのは、Java人口は増加しているように思えるのに、それに比例するかのように
JavaHouseが閑散としていったことです。
・Javaの情報量が増えたため、JavaHouseの必要性が薄れた。
・Javaの対象領域が増えていったため、関心が拡散した。
・人口が増えたことで、相対的にレベルが下がった。
などなど理由は考えられますが、どうなんでしょう???
> Solaris なら、pstack PID をシェルから実行すれば、その時点での
> LWP のスタックトレースが取れますが、本多さんの意図とは違うのでしょうか?
> 以前に仕事で定期的に pstack や pfiles を実行してログを取って監視して
> いたことがありました。
ご指導ありがとうございます。
しばらく緊急で海外へ派遣されていて
internetは可能なのですがご指摘内容を確認できなかったので、
ご指摘いただいた内容が私の意にかなっているのかどうか
何も解答できません。
無視していたわけじゃありませんのであしからずご了承ください。
覚え書き。
・正規表現で contents filter かける。
・2chみたいにしたいわけじゃないけど、「複数の掲示板」には対応したい。
新しい掲示板を立てられるのは管理者だけでいいから。
・スレッド表示のとき、「最後に書き込みがあったスレッド」を一番上に
表示したい。
思いついたらまた書きます。
> こんにちは。お久しぶりです。
>
> 今、UNIX上で常駐プログラムを作成しようと思っているのですが
> そのプログラムを本番動作させている状態で不正な動作を見つけた場合に
> どのような状態にあるのかを監視する仕組みを考えてます。
>
> 具体的にはtrussの様に必要なときに別コマンドからプロセスの状態を
> 監視したいのですが、システムコールレベルではなくて
> 自分の作った関数レベルで監視したいと思ってます。
> こういう場合、通常はどのようにするものなのでしょうか。
Solaris なら、pstack PID をシェルから実行すれば、その時点での
LWP のスタックトレースが取れますが、本多さんの意図とは違うのでしょうか?
以前に仕事で定期的に pstack や pfiles を実行してログを取って監視して
いたことがありました。
pstack
Print a hex+symbolic stack trace for each lwp in each process.
> > -gで出荷するのは現実問題として問題なくても上司は承認しないですよね。
> ふむー、うちは受託開発の会社なので、たぶん問題なく承認されちゃいます
> ねえ。まあ、この辺は仕事の種類によって様々ですね。
昔、お客様のシステムだけで動作するプログラムを
ソースコードごとお客様に提供するときに
「それでも-g付きは何が何でもいかん」
なんて言われたことすらあったのですが...f(^^;)
> > dbxとかはパッケージを買わないと使えませんよね。
> > 買ったばかりの素のSolarisでできると嬉しいんですよ。
> そうか。開発環境のないターゲットシステムで必要なんですね。
> だとするとログに出すのが一番安直じゃないですかね。
> 移植性も高いですし。
やっぱり、そうなりますかね。
操作できないのは、ちょっとあれですけど楽するのが一番ですし(^-^)
ありがとうございました。
> -gで出荷するのは現実問題として問題なくても上司は承認しないですよね。
ふむー、うちは受託開発の会社なので、たぶん問題なく承認されちゃいます
ねえ。まあ、この辺は仕事の種類によって様々ですね。
> どういう仕組みで他のプロセスの変数の内容を見たり
> 書き換えたりできるんですか?
このあたりは OS によって違うんですが、てっとり早く知るには
「truss gdb /path/to/command プロセスID」とかしてみるのが
良いと思います。
昔の Solaris では、proc ファイルシステムに対する ioctl(2) で
やってましたが、新しい方では、/proc/$PID/ctl に対する書き込み
で制御する方法が推奨のようです。詳しくは proc(4) に載ってます。
> dbxとかはパッケージを買わないと使えませんよね。
> 買ったばかりの素のSolarisでできると嬉しいんですよ。
そうか。開発環境のないターゲットシステムで必要なんですね。
だとするとログに出すのが一番安直じゃないですかね。
移植性も高いですし。
> > ある程度...私が期待する程度のことは-gなしでも十分できますね。
> また、gcc を使うなら、-g オプション付きでも -O オプションが有効
> なので、本番向けも -g オプション付きで作っておくのがいいと思います。
> (パッケージソフトウェアの場合には、そうはいかないでしょうけど)
-gで出荷するのは現実問題として問題なくても上司は承認しないですよね。
ところで、教えていただいた方法で
デバッガはメモリ保護された他のプロセスに対して、
その内容を読んだり、書き換えたりしてるわけですよね?
どういう仕組みで他のプロセスの変数の内容を見たり
書き換えたりできるんですか?
そういうのを実現する標準的な手段、関数とかIFってあるんですか?
> > Solaris標準で同じものありましたっけ?
> dbx とか…(有償なら他にもいろいろ)
dbxとかはパッケージを買わないと使えませんよね。
買ったばかりの素のSolarisでできると嬉しいんですよ。
> ある程度...私が期待する程度のことは-gなしでも十分できますね。
ですね。
また、gcc を使うなら、-g オプション付きでも -O オプションが有効
なので、本番向けも -g オプション付きで作っておくのがいいと思います。
(パッケージソフトウェアの場合には、そうはいかないでしょうけど)
> Solaris標準で同じものありましたっけ?
dbx とか…
(有償なら他にもいろいろ)
> 書込みが反映されるのは自分で書いた方がもちろん早いんでしょうけど
> プログラム自身はどうなんですか?
ファイル書き込みは、カーネルによるバッファリングがうまいこと働く
ので、直接書いても、プログラムの実行が遅れることを気にする必要は
ないと思います。
syslog に書くと、syslog がファイル書き込み時 fsync(2) を行うこと、
UDP の通信コスト、syslogd へのコンテキストスイッチなどなど、
負荷は増えるだけなので、性能的にはどうしても不利です。
> だとすると、syslog()を使うメリットって何ですか?
通常、syslog ではそれほど大量のログを流さないので、性能は問題に
なりません。メリットは、システム管理者が統一的な方法で、ログの
出し方をカスタマイズできる点です。例えばリモートマシンへログを
投げる機能とか、syslog.conf(5) には様々な機能がありますから。
ちゃんと調べてから書き込むべきでした。
> > 「gdb /path/to/command プロセスID」のようにすれば、動作中の
> > プロセスをデバッガにアタッチできますから、簡単な用途なら
> > それで十分だと思います。
> これって、-g付きでコンパイルした場合って言うことですよね?
> -gなしでも、ある程度情報取れるんでしたっけ?
ある程度...私が期待する程度のことは-gなしでも十分できますね。
gdbがあるシステムならって限定されちゃう部分はありますけど。
Solaris標準で同じものありましたっけ?
> > 頻繁に大量のログを取りたいのであれば、syslog(3) は噛まさず、
> > 直接自身でログファイルに書いた方が高速でしょうね。
> syslog()を使う場合と自分でlog fileを作る場合を比べたとき、
> 自分で作るほうが高速なんですか?
なんとなくsyslogdに処理を渡してしまうsyslog()の方が
ファイルの書込みが終わるまで全部の処理を行うより速そうな
イメージがありました。
書込みが反映されるのは自分で書いた方がもちろん早いんでしょうけど
プログラム自身はどうなんですか?
> 「gdb /path/to/command プロセスID」のようにすれば、動作中の
> プロセスをデバッガにアタッチできますから、簡単な用途なら
> それで十分だと思います。
これって、-g付きでコンパイルした場合って言うことですよね?
-gなしでも、ある程度情報取れるんでしたっけ?
> 常駐プログラム(デーモン) の場合には、syslog(3) を使って、
> 適宜イベントをsyslogd に投げてログをとるというのも定石の
> 一つです。
syslog()か、そうですね。そういう手もありました。忘れてました。
> 大量にログを取りたいのであれば、ログを取るところにフラグか
> 関数ポインタを噛ませておいて、シグナルによって、syslog(3)
> を呼ぶか、何もしないかを切り替えるというのがいいかもしれません。
見たいときだけ、データを大量に吐かせるには、そういう手段が必要ですね。
全ての詳細情報をずっと出しっぱなしってわけにはイカナイし。
でも、外部からフラグ与えるのはメンドクサイなぁ(手抜き)...f(^^;)
> 頻繁に大量のログを取りたいのであれば、syslog(3) は噛まさず、
> 直接自身でログファイルに書いた方が高速でしょうね。この場合も、
> シグナルによって、ログを取る取らないを切り替えることは簡単で
> しょう。
不勉強でわかってないので、教えていただきたいのですが、
syslog()を使う場合と自分でlog fileを作る場合を比べたとき、
自分で作るほうが高速なんですか?
だとすると、syslog()を使うメリットって何ですか?
「gdb /path/to/command プロセスID」のようにすれば、動作中の
プロセスをデバッガにアタッチできますから、簡単な用途なら
それで十分だと思います。
常駐プログラム(デーモン) の場合には、syslog(3) を使って、
適宜イベントをsyslogd に投げてログをとるというのも定石の
一つです。実際にどのレベルまでログをとるかは、syslog.conf(5)
でログをとる priority を加減して設定します。でも、ログを
とるかとらないかを判断するのは syslogd(8) の側で、デーモン
の側は常にログ内容を syslogd(8) に知らせることになるので、
性能はあまり良くないです。
大量にログを取りたいのであれば、ログを取るところにフラグか
関数ポインタを噛ませておいて、シグナルによって、syslog(3)
を呼ぶか、何もしないかを切り替えるというのがいいかもしれません。
頻繁に大量のログを取りたいのであれば、syslog(3) は噛まさず、
直接自身でログファイルに書いた方が高速でしょうね。この場合も、
シグナルによって、ログを取る取らないを切り替えることは簡単で
しょう。
> こんにちは。お久しぶりです。
おひさしぶりです。
> 具体的にはtrussの様に必要なときに別コマンドからプロセスの状態を
> 監視したいのですが、システムコールレベルではなくて
> 自分の作った関数レベルで監視したいと思ってます。
> こういう場合、通常はどのようにするものなのでしょうか。
ようするにデバッガのようなことをやりたいということですよね。
私は使ったことはないですが、デバッガを作るには
ptrace()システムコールとか、/procにioctl()かましたりとかするようです。
ただ、システムコールのトレースはこれで問題なくできるようですが、
関数呼び出しに関しては、トレースされるほうが、自力で割り込みを
発生させなければならない… という解釈で合ってますでしょうか? > 詳しい方
手元にこういう本があります。昔ざっと読んだんですが、使ってないので
ほとんど覚えてないです (^^;;
http://www.amazon.co.jp/exec/obidos/ASIN/4756117457/249-9281511-4870706
別スレ立てました。
># 本題と関係ないことで恐縮ですが、「新掲示板」では、投稿前のプレビュー機能が
># あると、ちょっとうれしいかも、と思いました。
ご意見ありがとうございます。
雑記帳の方で、デフォルトを<PRE>にふるかどうか悩んでますが、
考えてみればプレビュー機能を付ければ解決する問題ですよね。
目からウロコが落ちました。
あと、将来的には独自タグで文字装飾ができるといいかな、とか思ってまして、
たとえば以下のようなタグがサポートできると便利かと思ってました。
[HUGE][/HUGE]
[LARGE][/LARGE]
[SMALL][/SMALL]
[COLOR:色名][/COLOR]
[COLOR:#色コード][/COLOR]
[発言番号]
こういうことをしたいなら、なおのことプレビュー機能は重要ですよね。
プレビュー機能を付けるとしたら、
http://www.rescue.ne.jp/cgi/trees/sample/trees.cgi?action=post
こんな感じで、「プレビューしたい人はしなさい」的な形にするか、
さもなきゃ強制的に投稿前にはプレビューするかですが、
間違って改行無しで投稿してしまうとかの事故を防ぐためには、
強制プレビューのほうがよいでしょうね。ちょっとめんどくさいですが。
> 最近見つけたこういった文章を読んでも、やはり、下から積み上げていかなければ
> 本当の力にならないんだなぁ、もっと精進が必要だなぁ、と心から思います。
あああああ。「箱」がだめですか。
いやその確かに言わんとすべきことはとてもよくわかります。
たとえば変数について「箱」にたとえると、ポインタとか参照の概念は
よくわからない。それどころか、
a = 10;
b = a;
という処理の後は「aってからっぽじゃないの?」という疑問も出てきます。
とはいうものの、最初の一歩のために箱のモデルを使うことが、
全面的に否定できるとも思えません。
普通、最初にhello, worldを表示するときはprintf()とかを使うわけで、
ここでVRAMにPOKEしてhello, worldのアスキーコードを書き込んでちゃ
挫折する人は多いでしょう。ていうかいまどきVRAMにPOKEして文字が出せる
わけでもないですし。
>> ・抽象的な概念を説明する
>> ・その抽象的な概念は、実際にはどうなっているのか?低レベルな視点から説明する
>> ・その視点を元に、再び抽象的な概念へと戻る
>
>私の主張は、この手順において、ふたつ目の過程から始めるべきだ、
>というものなんですね。
うーん、前言撤回ですみませんが、ひとつ目とふたつ目の視点はやっぱり
両の車輪として、あっちいったりこっちいったりでバランスよくやっていかなければ
ならないのかもしれません。
もちろん、「低レベルな視点が必要である」という持論は変えてませんが。
こんにちは。お久しぶりです。
今、UNIX上で常駐プログラムを作成しようと思っているのですが
そのプログラムを本番動作させている状態で不正な動作を見つけた場合に
どのような状態にあるのかを監視する仕組みを考えてます。
具体的にはtrussの様に必要なときに別コマンドからプロセスの状態を
監視したいのですが、システムコールレベルではなくて
自分の作った関数レベルで監視したいと思ってます。
こういう場合、通常はどのようにするものなのでしょうか。
メモリ保護の弱い組み込み系のOSだとシェルからダイレクトに関数ポインタを
変更できたりするので、
int NoPrintf(const char *format,...) { return 0;}
int (*MyPrintf)(const char *,...)=NoPrintf;
というポインタ変数(?)を作っておいて
シェルから、MyPrintf = printfなんてやることができたりするのですが、
UNIXなんかじゃ、この手のテクニックは使えませんね。
監視したい関数の先頭で必要な情報をFIFOのパイプに投げっぱなしにしておき
コマンド側で拾うとかでは、性能が出ないように思えますし、
コマンドを複数起動したら拾えなくなっちゃうし(trussも拾えないか...)
全ての関数にそのような仕組みをいちいち埋め込んでいくのは
あまりやりたくないなぁ、なんて思っているので。
こういう監視機能は普通どうやってつけるものなのでしょう?
> 私の主張は、この手順において、ふたつ目の過程から始めるべきだ、というものなんですね。
> うちのページの対象読者である「疑り深い」人は、最初の過程である
> 「抽象的な概念を説明する」という説明に納得しないであろう、というのが
> 前提になっています。
なるほど。。
> 実際にはこれで納得する人が大多数だということなら、うちのページは、
> 対象読者不明のムダなページだということになります。
>
> その判断は、読者の方に委ねられていると思います。
「疑り深い」人のための説明は、同時に「物分かりの良い、簡単に納得してしまう」人が、
「疑り深い」発想を身に付けるための、導入にもなり得るのかな、とも感じました。
実際、この業界にも、割と「物分かりの良い、簡単に納得してしまう」人が多い
ような気がします。僕自身も、結構そうかもしれません。
でも、低レベルからのアプローチに親しむことによって、そういった人間でも、疑り深くなる
作法を身につけられるのでは、と感じます。
最近見つけたこういった文章を読んでも、やはり、下から積み上げていかなければ
本当の力にならないんだなぁ、もっと精進が必要だなぁ、と心から思います。
# 本題と関係ないことで恐縮ですが、「新掲示板」では、投稿前のプレビュー機能が
# あると、ちょっとうれしいかも、と思いました。
> > 全部別のホストからなんで弾くことも出来ず。
>
> 自分で bbs スクリプトをメンテしているんだったら、
> 正規表現で contents filter かけるようにしておくとか?
えー、残念ながら自分でメンテできるスクリプトではないので…
ここはOTDのレンタル掲示板で、「上級者カスタマイズ」機能を使うと
要所要所のHTMLがいじれます。ここはそれを使っています。
がんばればかなりいろいろできるんですが、書き込みフィルタは
無理なんじゃないかと思います(書き込み画面でJavaScriptかますという
手はあるかもしれませんが、相手がスクリプトじゃ無意味でしょう)。
ドメイン移転と共にPHPやデータベースが使えるようになったので、
今度掲示板を作ってやろうとたくらんでますが、今はその余裕もない状況です。
いざ実現の際には、
> 正規表現で contents filter かけるようにしておくとか?
この機能も付けるとしましょう。メモメモ。
> 全部別のホストからなんで弾くことも出来ず。
自分で bbs スクリプトをメンテしているんだったら、
正規表現で contents filter かけるようにしておくとか?
> 例えば、COBOLer全般がそうだとは言いませんが、例にあげた元COBOLerの人で言えば、
> その人は、プログラムをする際に、メモリ等の低レベルな要素を意識する、という
> ことがありません。そういった、低レベルな要素を意識するという発想自体、
> 触れた経験がなかったようです。
うーん。
COBOLerな人が低レベルな概念を意識していない、という話は、Leptonさんの
「闘わないプログラマ」にもあったんですが、正直私はこれについてはちょっと
懐疑的でした。私は、「人間、誰だって低レベルな話の方が理解が早いはずだ」と
いうのを基本姿勢にしていましたから。
実際、Cに関して言えば、わかってない人が書いた入門書/Webページほど、
「intは16ビットである」なんてことを断定的に書いているものです。
「intは、なんだかよくわからないが整数を表現する型で、ビット数は処理系に
依存する」ということが、どうしても理解できない人がたくさんいるようでした。
別の例で言えば、HTMLについて「うちのIEではちゃんと見えている。何が悪いのか」
と主張する人も山ほどいるはずです。
つまり、抽象的なレイヤでの話というのは、低レベルな話に比べてたいていの人に
対して圧倒的に「難しい」というのが、私の基本的なスタンスです。
> ・抽象的な概念を説明する
> ・その抽象的な概念は、実際にはどうなっているのか?低レベルな視点から説明する
> ・その視点を元に、再び抽象的な概念へと戻る
>
> といった手順を踏まなければいけないんだなぁ、と感じたわけです。
私の主張は、この手順において、ふたつ目の過程から始めるべきだ、というものなんですね。
うちのページの対象読者である「疑り深い」人は、最初の過程である
「抽象的な概念を説明する」という説明に納得しないであろう、というのが
前提になっています。
実際にはこれで納得する人が大多数だということなら、うちのページは、
対象読者不明のムダなページだということになります。
その判断は、読者の方に委ねられていると思います。
# もっとも私もBASICプログラマのときは、(可変長で格納できる)文字列の領域が
# どこにどう確保されてるかなんて意識してませんでした。
# N-BASICで、文字列の領域が足りなくなったとき、GCが動いて極端に遅くなる、
# という記事をRAMで読んで納得したものです。
> アニメとかならいざしらず、「現実世界をモデリング」したものでは
> ありえませんよね。こういう点については、以下のページで指摘されています。
>
> 奇妙なクラスと実世界:
> http://www.ogis-ri.co.jp/otc/hiroba/technical/StrangeClass/
ありがとうございます。勉強になります。
クラスの役割分担・粒度のバランスは、いつもけっこう悩んでしまいます。
リファクタリングできる時間がそれなりにあれば、自然と綺麗になっては
いくんですが、なかなかそんな余裕もなく。。
> それはそれとして、WadaAkikoはクラスでよかったのかと。
> いっぱいnewすれば、アレがいっぱい量産できるのかと。
確かに、冷静に考えるとそれが一番の突っ込みどころですね(笑)
全然気づきませんでした。ダメ過ぎ > 自分
> > やはり、抽象的な説明でわかったような気がしてしまうのは、百害あって
> > 一理無し、な気がします。
>
> この部分に関しては、力いっぱい同意します。
実は、最初に元COBOLerの人に当該のページを見せたときは、それなりにわかり
やすい説明みたいだから、わかってない人に説明するのに丁度いいや、ぐらいに
思っていたんです。
でも、「わかりやすい!」と絶賛するのを見て、「あ、これじゃダメなんだ。」
と感じたわけです。
例えば、COBOLer全般がそうだとは言いませんが、例にあげた元COBOLerの人で言えば、
その人は、プログラムをする際に、メモリ等の低レベルな要素を意識する、という
ことがありません。そういった、低レベルな要素を意識するという発想自体、
触れた経験がなかったようです。
そういった土台の無い人に説明するのには、
・抽象的な概念を説明する
・その抽象的な概念は、実際にはどうなっているのか?低レベルな視点から説明する
・その視点を元に、再び抽象的な概念へと戻る
といった手順を踏まなければいけないんだなぁ、と感じたわけです。
逆に言えば、「抽象的な概念を理解する」のと、「そこから低レベルな要素へと
潜って行く」のは、プログラマとして必須のセンスなのかなぁ、などと
思ったりもします。
以上、長々と失礼しました。
> 以前、土台が前橋さん色に染まってしまったと書き込んだ者です。
>
> # こう書くと、なんかヒワイな感じですね。(すみません)
>
> 去年の秋頃、こちらの掲示板でメッセージと関数呼出しに関して、
> 熱い議論がかわされていましたが、
> ちょうど同じ時期に、↓こんなページがUpされていたことに
> 最近気づきました。
>
> http://www.geocities.jp/objectbrain/messagebrain.html
読みました。
「メッセージと関数とメソッドってなにがどう違うの」の部分を読む限りでは、
私には、やっぱりどう違うかわかりませんね。
関数だって、まともな設計をする限り実装隠蔽という目的はあるはずで、
「プログラムは関数で行われる内容を把握している必要があります」というのは
いかがなものかと。
で、「その証拠として次のサンプルをコーディングしてみましょう」…と、
この先は結局ポリモルフィズムに行っちゃうんですね。
> そもそも、このページのサンプルコード、オブジェクト指向的に見ても、
> なんだか妙だよなぁ、と感じてしまうのは僕が未熟なせいでしょうか。。
> 例えば、FanがSingerをnewしているところとか、SingCommandがSingerを
> ラップしているところとか。。
FanがSingerをnewしていたり、そもそもFanのインスタンスがいなかったりする
あたりは、サンプルだから仕方がないのかもしれません。
でも、SingCommandは、実現方法としてはアリでしょうが、メタファとしては
妙だと思います。SingCommandを、Singerに対するリクエストカードみたいな
ものだと考えると、リクエストカードが単独のスレッドで動作して、能動的に、
Singerに対して「歌ってくれ〜」とお願いする…
アニメとかならいざしらず、「現実世界をモデリング」したものでは
ありえませんよね。こういう点については、以下のページで指摘されています。
奇妙なクラスと実世界:
http://www.ogis-ri.co.jp/otc/hiroba/technical/StrangeClass/
それはそれとして、WadaAkikoはクラスでよかったのかと。
いっぱいnewすれば、アレがいっぱい量産できるのかと。
> やはり、抽象的な説明でわかったような気がしてしまうのは、百害あって
> 一理無し、な気がします。
この部分に関しては、力いっぱい同意します。
以前、土台が前橋さん色に染まってしまったと書き込んだ者です。
# こう書くと、なんかヒワイな感じですね。(すみません)
去年の秋頃、こちらの掲示板でメッセージと関数呼出しに関して、
熱い議論がかわされていましたが、
ちょうど同じ時期に、↓こんなページがUpされていたことに
最近気づきました。
http://www.geocities.jp/objectbrain/messagebrain.html
試しにこのページを、最近Javaに移行してきた元COBOLerに見せたところ、
「非常にわかりやすい!」
と絶賛していました。
で、それを聞きながら、人の悪い僕は内心、
「ほんとにわかったのかなぁ。。」
などと思ってしまったのでした。
やはり、抽象的な説明でわかったような気がしてしまうのは、百害あって
一理無し、な気がします。
抽象的な説明で満足してしまうのは、コード書きとして致命的ですが、
導入がこんな感じだと、そういった人間を量産しちゃうんじゃ。。などと、
若輩者ながら感じました。
そもそも、このページのサンプルコード、オブジェクト指向的に見ても、
なんだか妙だよなぁ、と感じてしまうのは僕が未熟なせいでしょうか。。
例えば、FanがSingerをnewしているところとか、SingCommandがSingerを
ラップしているところとか。。
# サンプルだから、仕方がないのかもしれないですが。