WSH 誰でもプログラマ(WSH編)(その10- 何度だって挑戦(修正)) 2004年1月23日 di 7件のコメント アップしました。質問要望感想コメントはこちらへ。 Tweetいいね:いいね 読み込み中… 関連
”想像できないことに対しても、柔軟に対処できるような設計” これが どんな設計なのかが 知りたいです。 ここに設計のミソがあるようですから、簡単には説明できないかもしれないけど、 近い将来に、そこを簡単に説明して欲しい。 我が侭な読者で 申し訳ない・・・笑 読み込み中… 返信
気持ちはわかるが、まだ他人に説明できるほど自分も設計に対して、クリアなイメージができてないです。 設計ってのはこれが正解ってなのが無いので、なおさら試行錯誤の連続です。 何度も文章を書こうとしてるのですが、なかなか。。。まとまった文章にならないです。 日々修行してますので、期待せずになが~い目で楽しみにしていてください。 読み込み中… 返信
柔軟な設計…。素人考えだと、 素人にもぱっと見に理解できるほどシンプルで、 拡張の余地が残っているような設計? 聞いた話(悪い例)だと、たとえば電話番号。 電話番号の『桁数』が増える事(PHS,携帯)を想定できず、 最後に№を足せなくなって、別の何かをもって無理やり頭に№を付けて対処した云々。 というのがあるんですけど、どうなんでしょう。真偽は分からないです。 話を戻して、良い設計と言うのは、 似たような機能が各ブロックに跨る事が無くて、 拡張が必要になった時、問題のブロックの内部拡張だけで処理できたり、 最悪ブロックを丸ごと切り離せるとか。。 そう言う(良い設計の)意味ではPCの出力端子のUSB。 簡単に色々な部品を付けたり外したり。あれは凄いです。 前まで周辺機器の増設と言ったら、 ポート設定だの何だのともの凄い苦労した記憶があるのですが、 USBなら何も考えず端子を接続するだけ… これ(USB)って ”想像できないことに対しても、柔軟に対処できるような設計” に相当すると思います。 読み込み中… 返信
電話番号は苦悩の歴史があるようです。 昔は、地名+XX番。オペレーターに依頼してつないでもらう手動式。 ひとつの地名の中には100台しか電話が無かったってことです。 自動化が始まり、先頭にはそれまで使われていなかった0を利用しました。0XX地域-X局番号-0XX番。 電話をかけるときに、0が来たら地域が切り替わる、それ以外の番号ならば同一地域内の局を探す。という仕組みだったようです。 もっと番号が増えてくると、局番号の下1桁を最後の4桁の方に移動して、市内局番を導入などなど、既存の番号を使いつつ、新しい番号に違和感無く切り替えられるようにしていったようです。 最近では(ってもう何年も前だけど、)東京03-XXX-XXXXが、東京03-3XXX-XXXXに切り替わってますね。 IPアドレスも255.255.255.255では足らなくなって、IPv6の話が出てきていますし。この手のフォーマットデザインは難しいですよ。 さて、 僕は、良い設計というのは、誰に対してよい設計という、対象を考えなくてはならないと思っています。 作る人にとって都合のいい設計、メンテナンスする人にとって都合のいい設計、使う人にとって都合のいい設計、売る人にとって都合のいい設計、その他、ひとつの設計には多くの人が絡んできますので、それぞれの人たちのことを考えなくてはなりません。 自分ひとりで作って、自分ひとりで使う分にはあんまり考えなくてもいいのですが、仕事で作ってる場合はそうゆうわけには行きません。 使う人にとって良い設計であっても、そのせいで内部構造が複雑になったり、修正するのに手間がかかったりして、人件費がかかれば、それは、使う人が支払うコストに返っていきます。 同様に、作る人にとって都合のいい設計が、必ずしも使う人にとって使いやすい設計では無い場合もあるわけです。 先のnh様の例のブロック構造というのは、作る人やメンテナンスする人にとって、都合がいい設計の代表です。 またUSBも、ユーザーにとって都合のいい設計です。これが作る人やメンテナンスする人にとって、都合がいい設計かどうかは、USBに詳しく無いのでよくわかりません。 USBによって周辺機器が安易に接続できるようになって、PC内のデータを安易に持ち出せてしまう危険性が広がっていて、セキュリティを重要視する人にとってはUSBの設計は使いにくいかもしれません。) 極端な話、オブジェクト指向は設計に優れているというのは周知の事実ですが、すべての人がオブジェクト指向を理解しているわけではないので、その部分で、亀裂が発生したりします。 ありがちなのが、セールスの言い分で、「オブジェクト指向がどうのとか関係ない。客がこうしてくれってゆーてるんだから、こうしてくれ。」勘弁してくれ。。。 内部の顧客に見えない部分はオブジェクト指向的設計にして、顧客に見える部分は顧客にとってわかりやすい構造をとったほうがいい場合があります。 最近は、この手のいろんなことを考えることが多くって、「良い設計って何さ。」ってのがよくわからなくなっています。 自分で、「想像できないことに対しても、柔軟に対処できるような設計」って書いておいて、「想像でけへんもんは、想像でけへんのじゃ。」と開き直る自分がもう一方にいたりして。。。どのへんに線を引くのか、そのバランスをどうとったらいいのかに苦悩する日々。。。 設計って思想ですよ。ポリシーですよ。と思う今日この頃。。。 読み込み中… 返信
USBがどんなデバイスにも使えるのは、設計がすばらしいからでなく、バスだから何にでも使えるのです。 とはいっても、パケット化や帯域制御、ハブによる分岐、ホットプラグ、電源供給などは、設計上大きな意味を持ちますが、過去との互換性を完全に排除すると割り切ったのです。(私は設計とは割り切りだと思っています) USBに接続したHDDやCDROMからブートしたいという要望は想定できたけれども、割り切ったのです。デジカメからプリンタに直接接続することができない、つまり、PCをホストにしなければならないのも割り切りです。 また、USB1.0から2.0にするに至ったのは、設計(要望に対する割り切り)が甘かったからです。もちろん、コスト的要件で割り切ったところもあるでしょうけど。 あと、USBが提供されてから本当の意味で使い物になるのに何年かかったのでしょうか? そういう面から見ても決していい設計ではなかったのです。 私はそう思います。 読み込み中… 返信
いろいろあるんですね。 お話を聞いていて、何故かオンラインゲームの ラグナロクオンラインを思い出してしまいました。 与えられた総合ポイントを、各能力値に割振ることで キャラクターは(何かに特化した)個性を持つわけですけど、 万能=非万能であり、最強・最善の選択が存在しない。 何かに特化する代わり、相反する何かは切り捨てる。 設計も、そんな側面を持つんでしょうか? でも、全てを1から組むのでもない限り勝負の舞台(プラットホーム)と、 前提条件と、採れる選択肢は決まってくる訳で……。 後は妥協・調整した結果(設計)が、『良い設計』と言えるか? という価値(万人共通の基準が存在しない)判断になるんですよね。 難しいです。 読み込み中… 返信
”想像できないことに対しても、柔軟に対処できるような設計”
これが どんな設計なのかが 知りたいです。
ここに設計のミソがあるようですから、簡単には説明できないかもしれないけど、
近い将来に、そこを簡単に説明して欲しい。
我が侭な読者で 申し訳ない・・・笑
気持ちはわかるが、まだ他人に説明できるほど自分も設計に対して、クリアなイメージができてないです。
設計ってのはこれが正解ってなのが無いので、なおさら試行錯誤の連続です。
何度も文章を書こうとしてるのですが、なかなか。。。まとまった文章にならないです。
日々修行してますので、期待せずになが~い目で楽しみにしていてください。
柔軟な設計…。素人考えだと、
素人にもぱっと見に理解できるほどシンプルで、
拡張の余地が残っているような設計?
聞いた話(悪い例)だと、たとえば電話番号。
電話番号の『桁数』が増える事(PHS,携帯)を想定できず、
最後に№を足せなくなって、別の何かをもって無理やり頭に№を付けて対処した云々。
というのがあるんですけど、どうなんでしょう。真偽は分からないです。
話を戻して、良い設計と言うのは、
似たような機能が各ブロックに跨る事が無くて、
拡張が必要になった時、問題のブロックの内部拡張だけで処理できたり、
最悪ブロックを丸ごと切り離せるとか。。
そう言う(良い設計の)意味ではPCの出力端子のUSB。
簡単に色々な部品を付けたり外したり。あれは凄いです。
前まで周辺機器の増設と言ったら、
ポート設定だの何だのともの凄い苦労した記憶があるのですが、
USBなら何も考えず端子を接続するだけ…
これ(USB)って
”想像できないことに対しても、柔軟に対処できるような設計”
に相当すると思います。
電話番号は苦悩の歴史があるようです。
昔は、地名+XX番。オペレーターに依頼してつないでもらう手動式。
ひとつの地名の中には100台しか電話が無かったってことです。
自動化が始まり、先頭にはそれまで使われていなかった0を利用しました。0XX地域-X局番号-0XX番。
電話をかけるときに、0が来たら地域が切り替わる、それ以外の番号ならば同一地域内の局を探す。という仕組みだったようです。
もっと番号が増えてくると、局番号の下1桁を最後の4桁の方に移動して、市内局番を導入などなど、既存の番号を使いつつ、新しい番号に違和感無く切り替えられるようにしていったようです。
最近では(ってもう何年も前だけど、)東京03-XXX-XXXXが、東京03-3XXX-XXXXに切り替わってますね。
IPアドレスも255.255.255.255では足らなくなって、IPv6の話が出てきていますし。この手のフォーマットデザインは難しいですよ。
さて、
僕は、良い設計というのは、誰に対してよい設計という、対象を考えなくてはならないと思っています。
作る人にとって都合のいい設計、メンテナンスする人にとって都合のいい設計、使う人にとって都合のいい設計、売る人にとって都合のいい設計、その他、ひとつの設計には多くの人が絡んできますので、それぞれの人たちのことを考えなくてはなりません。
自分ひとりで作って、自分ひとりで使う分にはあんまり考えなくてもいいのですが、仕事で作ってる場合はそうゆうわけには行きません。
使う人にとって良い設計であっても、そのせいで内部構造が複雑になったり、修正するのに手間がかかったりして、人件費がかかれば、それは、使う人が支払うコストに返っていきます。
同様に、作る人にとって都合のいい設計が、必ずしも使う人にとって使いやすい設計では無い場合もあるわけです。
先のnh様の例のブロック構造というのは、作る人やメンテナンスする人にとって、都合がいい設計の代表です。
またUSBも、ユーザーにとって都合のいい設計です。これが作る人やメンテナンスする人にとって、都合がいい設計かどうかは、USBに詳しく無いのでよくわかりません。
USBによって周辺機器が安易に接続できるようになって、PC内のデータを安易に持ち出せてしまう危険性が広がっていて、セキュリティを重要視する人にとってはUSBの設計は使いにくいかもしれません。)
極端な話、オブジェクト指向は設計に優れているというのは周知の事実ですが、すべての人がオブジェクト指向を理解しているわけではないので、その部分で、亀裂が発生したりします。
ありがちなのが、セールスの言い分で、「オブジェクト指向がどうのとか関係ない。客がこうしてくれってゆーてるんだから、こうしてくれ。」勘弁してくれ。。。
内部の顧客に見えない部分はオブジェクト指向的設計にして、顧客に見える部分は顧客にとってわかりやすい構造をとったほうがいい場合があります。
最近は、この手のいろんなことを考えることが多くって、「良い設計って何さ。」ってのがよくわからなくなっています。
自分で、「想像できないことに対しても、柔軟に対処できるような設計」って書いておいて、「想像でけへんもんは、想像でけへんのじゃ。」と開き直る自分がもう一方にいたりして。。。どのへんに線を引くのか、そのバランスをどうとったらいいのかに苦悩する日々。。。
設計って思想ですよ。ポリシーですよ。と思う今日この頃。。。
USBがどんなデバイスにも使えるのは、設計がすばらしいからでなく、バスだから何にでも使えるのです。
とはいっても、パケット化や帯域制御、ハブによる分岐、ホットプラグ、電源供給などは、設計上大きな意味を持ちますが、過去との互換性を完全に排除すると割り切ったのです。(私は設計とは割り切りだと思っています)
USBに接続したHDDやCDROMからブートしたいという要望は想定できたけれども、割り切ったのです。デジカメからプリンタに直接接続することができない、つまり、PCをホストにしなければならないのも割り切りです。
また、USB1.0から2.0にするに至ったのは、設計(要望に対する割り切り)が甘かったからです。もちろん、コスト的要件で割り切ったところもあるでしょうけど。
あと、USBが提供されてから本当の意味で使い物になるのに何年かかったのでしょうか? そういう面から見ても決していい設計ではなかったのです。
私はそう思います。
いろいろあるんですね。
お話を聞いていて、何故かオンラインゲームの
ラグナロクオンラインを思い出してしまいました。
与えられた総合ポイントを、各能力値に割振ることで
キャラクターは(何かに特化した)個性を持つわけですけど、
万能=非万能であり、最強・最善の選択が存在しない。
何かに特化する代わり、相反する何かは切り捨てる。
設計も、そんな側面を持つんでしょうか?
でも、全てを1から組むのでもない限り勝負の舞台(プラットホーム)と、
前提条件と、採れる選択肢は決まってくる訳で……。
後は妥協・調整した結果(設計)が、『良い設計』と言えるか?
という価値(万人共通の基準が存在しない)判断になるんですよね。
難しいです。
総合ポイントの割り振り方だけを一生懸命考えるのも重要だけど、総合ポイント自体を大きくするにはどうしたらいいのかも、考えていきたいと思うおらは、ちょっと欲張りすぎ?