がるの健忘録 このページをアンテナに追加 RSSフィード

2015-04-22

[][][]共通化は二回目

久しぶりの「がるパタ」でございます(笑


「同じ意味を持つ処理」をコピペするような輩は、オロドルインの中腹にある火室サンマス・ナウアにでも放り込んでしまうとしまして。

ちなみに「違う意味だけど同じ処理」の場合に「まとめるかまとめないか」は、議論に値するところではございます(おいちゃんとしては「意味レイヤーで別のメソッドにしつつ」「実装レイヤーで一端一箇所にまとめる」事が多いですが、例外もあります)。


割とあるのが「これは絶対に共通化して後で使うだろうから先に共通化しておこう」っていう発想でクラスとかメソッドとかを増やすケース。

先に言っとく「やめとけ」。


プログラムの世界には「YAGNI」という原則がございます。

You ain't gonna need it、という英文の略語ですな。「どうせ使わねぇよ」って超訳を入れておきます。


「あとで使う」は、大半が使われないものになります。

でも「それを作るために」時間が費やされます。


あぁなんで無駄なんでしょ。

だからがるパタではこう言います「共通化は二回目」。


「あとで絶対にもう一度使うだろう」処理は、そこをまとめて「寄せて」書いて、上下に、大体2〜4行くらいの空改行をあけて、後で「余裕でカット&ペーストが可能」なように、準備だけしておきます。

で「やっぱり予想通りだよ」って状況になったら、自分の先見の明を褒め称えつつ、切り取って共通化すりゃいいんです。


この方法だと「どこまでを切りだそう?」って悩む事もありませんだって「直面している」状況だから、悩みようがないし。

かつ、絶対に「共通化が必要なタイミング」でやってるから、無駄もありません。

ついでに「もし予測が外れた時」も「うん何となくここは1つ固有の処理をしているから、少し見やすくしておいたんだよ」と言い訳がききます B-p


「うまく共通化できない」「どうやってメソッド切りだそう」とお悩みのあなた、是非、一度試してみませんか?

2012-01-13

[][]芥子の種を持ってきてもらう

システムを作っていると、時々*1、無茶な、或いは無理な要求に遭遇します。

無理であることを説明してもよいのですが…いまひとつ、説明が理解いただきにくいシーンというのが、極めてごく稀に、ほんのわずかばかり、微々たる例外的ケースとして、可能性があります*2


実力行使で(精神的を含む)暴力に訴えるのもまた一興ではあるのですが、あまり楽しい結果にはならないことも少なくないので。

最近つかっているメソッドを紹介いたします。


端的には

・相手に、(彼ら的には)一見可能そうで、その実不可能な「依頼」をしてください

・で、「その依頼の成果がでたら」実装可能です、と、にこやかに伝えます


「うちのサイトの被リンク数が知りたいので、googleとかを使わず、独自で計測できるプログラムを作成してください」とか言われてみたとします。

被リンク数とは「他のサイトから当該サイトへのリンク、が張られている数」です。

母数は、基本的に多分「全世界にあるすべてのWeb Page」です。

いっぱしのエンジニアであれば、考える前に「母数 = 全世界にあるすべてのWeb Page? はぁ?」となるのですが。

これを前提に「ンなもん無理です」といっても、聞き分けのよくない子ちゃんが、ごく稀にいます。


ですので、このように話をします。

「なるほど被リンクですね。では、ベースになる"全世界のすべてのWeb pageのURI"のリストを頂戴できますか? そのリストがあれば、時間はかかりますが(HTMLクロールするからねぇw)、できなくもありません」。


…いやいっそ素直に「無理」って言ってあげたほうが、って気もするのですが。

時々、本当にごく稀に、きわめてレアなケースとして「自分の思い付きが最上位にあって、人の忠告がいまひとつ耳と脳に入り込まない」タイプが、ごく少量、いらっさるので。


元ネタは、お釈迦様の逸話。

こちらのサイトを引用させてもらいまふ。


http://homepage3.nifty.com/junsoyo/hiros/hiro49.htm

キサーゴタミーは,やっと授かった子どもを亡くした。「死んだ子どもを生き返らせる薬」を求めて尋ね歩き,半狂乱でやった来たキサーゴータミーにお釈迦さまは,「芥子(カラシ?)の種を貰っておいで。但し死人を出したことの内ない家から」と言うので,彼女は必死になって死人を出したことのない家を村中探すのだけれど,そんな家があるわけがない。そのうちに彼女は「死者を出したことのない家はない」ことに気づき,「生あるものは必ず死ぬ」というお釈迦さまの言葉を悟って仏弟子となった。


つまり「気付きがあるまで、芥子の種を探し回ってもらいましょう」と。


まぁ「万が一、芥子の種がみつかっちゃうと」もちろん「実装できるんだよね」といわれるので、その辺はちゃんと真摯に設計と論理的考察をする必要があるのですが(別に、無茶を吹っかけることそのものが目的ではないので)。

「100%無理」ではなくても「ちょっと工数膨大ぢゃね? その話」って時は、一度「芥子の種を探してみて」って言ってみると、もしかすると、今までよりは「少しだけ」楽になる、かも、しれません。


保証はしませんが B-p


あぁ真面目な余談。

この辺の話をふって「ちゃんと考えてくれる」お客さんは、なんだかんだ、貴重です。

そういうお客様は、大切に関係性を作っていきましょう。


追記

芥子は、「カラシ」ではなくて「ケシ」であるそうです(岩波仏教辞典、を引いてくださった方がいらっしゃいました。詳しくはコメントを参照してください)。

*1:正確な頻度については言及を避けます B-p

*2:つまり「しょっちゅう」

2010-11-20

[][]鉄蛇さまの教え

結論からいうと「やってみなきゃわからない」。

出来ないんなら「出来ないことを、手を動かして証明してから」*1


元ネタは…とある言語の素敵な由来、にあります。別に魔術でも禁書目録でもございませんが。

現在、マイクロソフトさんは共通言語基盤(CLI)という背景を持ってます。いわゆる中間言語な思想ですね。

んで。

とある人物J.Hさんは「CLIの設計は、いわゆる動的言語とは、ごっつ相性悪いはず〜」とか思いまして。

論文をしたためつつ、その論文の検証用に…つまり「何故、.NET Frameworkは動的言語として駄目なプラットホームなのか?」ということを証明しつつ調査するために、とある言語の移植が始まったわけでございます。

あにはからんや。

その言語が普通に動くこと動くことw

「んじゃまぁなんかいけてそうだし、開発続ける?」という感じで、これが現在もあります、IronPythonの由来でございます。


「うまくいくはずがない」はうまくいかないはずもまたないんです。

ありえないはありえると同意語でしかないんです。

仮説/推測と現実が食い違ったら、常に正しいのは現実なんです。仮説/推測に誤りがあるんです。


でも、人間は「信じたいものを信じ、見たいものを見る」もの。


だからこそ。

そんなときには、鉄蛇さまを思い出しましょう。

固定概念のカッチカッチな思考から、抜け出しましょう。

…この部分だけ切り抜くと、なんか怪しげな宗教チックではありますが(笑

*1:それでもなお「やり方がまずいだけ」って可能性もあるんだけど B-p

2010-07-14

[][][]パタリロの晩餐

元ネタは、あの、パタリロ。

パタリロの食卓は、とっても豪華なのですが。ン十人前とかあるし。

ただ、実際にその個々をみてみると…


瓶に入っているのはカルキ臭い水道水とか

賞味期限が切れたコロッケとか

狂牛病騒ぎで閉鎖された牧場の牛のステーキとか

マリネラ小学校の先日の学校給食の残りとか


とかいう感じで、品質的に「ど〜なの?」的なものの寄せ集めになってます。

例えば「これだけ多機能」とか「こんなにアプリの数がある」とか。いわゆる粗製濫造の雨あられ。

それって本当に「ユーザにとって嬉しい」「売り文句」なんですかねぇ?

2009-11-15

[][]学び実践するためのパターン

パターン名:三つ目のまんじゅう


元ネタなのですが。こんな話を、ずいぶんと昔に聞きました*1

ある男が腹を空かせていた。

そこで、まんじゅうを一つ食べた。でもまだ空腹は満たされない。

二つ目のまんじゅうを食べた。でもまだ空腹は満たされない。

三つ目まんじゅうを一つ食べた。ようやく空腹は満たされて、男は言った。

「なんだ。はじめから三つ目のまんじゅう1つだけを食べればよかった。

これがどれほど愚かな話かはわかると思うのですが…本当に理解できているのでしょうか?


使っているフレームワークの、関数の、システムの裏側はブラックボックスのままでよいです。

別に普段、HTTPやSMTPやその他プロトコルについて考え思いを馳せる必要もないです。

メモリとかCPUコストとかを意識する必要もありません。


ちゃんと学び理解しているのなら。


ブラックボックスは必要なら開いてホワイトボックスに出来るからこそ「必要な時までは」ブラックボックスでよいのです。

最低限一度以上はきちんとRFCを読み、また必要であるならいつでもそこに立ち返る事が可能であるからこそ「今この瞬間は」別に考えなくてもよいのです。

必要であればメモリ的にタイトなコードが組め、CPUがどう動いているかを理解し考察し、そのために必要なコードに置き換える事が出来るからこそ、「そこまでタイトな要求でなければ」そこまでを意識しなくてもよいのです。


やらない事は時として非常に大切ですが。

「出来なくてもよい」わけではないのです。

大切なのは「出来るけどやらない」。切り札は切らないためにあるものですが、同時に「それを持っている事」自体が交渉において強い圧力となるのです*2

そうして、そうした基礎を学ぶためには、結局の所「結構泥臭い基礎」が必須かつ不可避なのです。


「メモリなんか意識しなくても大丈夫」「コンピュータアーキテクチャなんかわからなくても今は問題ない」その他諸々。とんでもない誤解です。

基礎が出来ていなければ、便利さの裏側にある「不便さ」を知らなければ、結局その先を十分に享受する事は出来ないのです。

一つ目と二つ目のまんじゅうを食べたからこそ、三つ目のまんじゅうで「満腹」という幸せを享受できるのです。


あなたは。

ちゃんと基礎を、裏側を、背景を知り、学んでいますか?

それとも、三つ目のまんじゅうだけを食べようとしていますか?

*1:小学3〜4年の頃ですから…えぇ幾星霜も前ですともさw

*2:なんの話だいったいw