高見知英のかいはつにっし(β)

高見知英のアプリケーション開発日誌 のほか、地域活動などの活動報告ブログ。

プログラミング料理論

コメントしようと思ったものの、長くなりそうなのでこっちで直接。

苦労した経験が力になる というのにはとっても同意です。いまでもHSPでWindowsアプリを作ろうとしてる人に限って結構知識があったりしますものね。


わたしにとって一番不便な環境はVB6のプログラミング一年生時代でしょうか。

ライブラリを自分で用意しなくてはならない

ちょっと真面目なことをしようと思えばひたすらAPI呼び出しになりますから。おまけにVB6関数とAPI関数の相性の悪さと言ったら(PaintPictureとBitbltの互換性がないとか云々・・・)
しかもVB6には最適化がないので、ライブラリを作ること自体が困難だという(無駄な関数を作るとそれだけでアプリケーションが重くなる――)。

簡単にアプリがクラッシュ

VB6アプリケーションは例外ひとつで簡単に落ちます。ウィンドウメッセージを絡めるとIDEもろとも落ちるというおまけ付き。

原因究明が難しい

デバッガが見当違いの箇所をバグとして表示してきます。こちらに分かるのは「その辺にバグがある」と言う事実のみ。酷いときはその辺にバグがない可能性もあります。
環境依存が激しいのもVB6の悪い特徴のひとつですね。98時代のうちのPCでは正常に動いてたソフトがMeで極端にいろ化けしたという話を聞いたときには驚きました。そしてそのアプリケーションはXPに入れてもしっかりと色化けしてくれます(今Yahooブリーフケースに転がしてある、MediaBarのことです)

メモリリークは自分で探す

貧弱な関数群を補おうとAPIを使えばぼろぼろとでてくるメモリリーク。拾わなかったから気づかなかったものの、そのせいで無惨なことに・・・。


いやはや、まさにVB6のことを言っているようで。しかも最近になってVBAという亡霊がちらついてるきたのですから、嫌で嫌でたまりませんね。OfficeもVB.NETベースのマクロにしてくれればどれだけ楽なことか。

まあ、わたしの場合

そのような環境下でのプログラミングは当然慎重になります

これをしなかったためにほとんどの経験が台無しですが(^^ゞ わたしは「石橋を叩いて渡る」ようなことはせず、「吊り橋をスキップで渡る」人ですから。落ちましたよ、川に ね。


――まあ、わたしが言いたいのは、こういう失敗談ではなく

プログラミングが出来る人なら、やっぱり深いところが知りたいですよね。出来る限りハードやOSに近いところを目指すのがポイントでしょうか。Web ServiceよりSOAPSOAPよりSocket。SocketよりTCP/IPスタック。TCP/IPスタックよりEthernetドライバ。深くなればなるほど自分のレベルが上がっていくような、そんな気がします。

この部分。この部分にはちょっと「あれっ?」というか、違和感を感じます。
もちろん、職人プログラマ的理論で言えば正しいのかもしれません。3月のStudent Dayで、ソフトイーサの登さんもそういってらっしゃったことですし。

しかし、料理にたとえるなら、id:yasuhoさんの言っていることは「美味しい料理を作るには、まず稲から育てよう」と言っているようなことだと思うんです。もちろん、そこからやらないと高級料理店の味は出せないのかもしれません。しかし、そこまでしなくても人を唸らせる美味しい料理は作り出せるもの。
もちろん、稲から丹誠込めて作り上げることによって得られる知識、情報とは、属性の違うものにはなると思います。でもできあいの食材だけでも周囲から「カリスマ」と呼ばれるレベルにまで成長できる可能性はあります。
――プログラミングもおなじ。稲――ライブラリのひとつひとつを一から作り上げるのもまたひとつの道かもしれませんが、そこまでしなきゃレベルが上がらないのかというと、そんなことはない。別に稲がどうやって作られるか、小麦粉がどうやって製造されるかなんて知らなくても、美味しい料理は作れます。

わたしは、稲を作るのではなく、食材を調理するところからを極めていきたい。だから、わたしに言わせれば上の逆で「SocketよりSOAP」だし、「SOAPよりWeb Service」なのです。
こういうことは議論し出すと水掛け論になってしまい、意味のないものになるかもしれません。id:yasuhoさんのような「稲から作る」タイプと、わたしのような「調理からに心血を」のタイプとはどっちが正しいわけでもないし、どっちかに従わせる必要なんてないのですから。ただ、とりあえず「そう決めてかかるのはおかしいかな」と思って突っ込んでみた次第です。


ついでに、まあ、便利なフレームワークだろうが、IDEだろうが、ライブラリを作らなきゃ動かないさだめは変わらずだと思います(^^ゞ
.NET FrameworkだってCatalystだって、所詮はン億分のン十といったたった一握りのプログラマによって作られたものなんです、分子に入ってない人が使う場合はそれ相応の工夫なりなんなりが必要なのは当たり前ですからね。「自分でライブラリやクラスを設計し」なければならない機会はいくらでもあるでしょう、どんな言語でも。