SSブログ

「知っている」と「うまく使える」の差 [プログラミング]

思い出を語ってみる

[例外処理]
最初に C++ で例外を使っているソースを見たのは Windows (MFC)のソースだった。
MFC のプログラミングをわかる人間が居なかったので、外注丸投げ状態だったんだけど、
納品されたときに、イベントハンドラのメソッドの中であらゆる例外をキャッチして、
何もなかったことにされてて参った。
配列を壊してメモリ例外になるようなものまで全部キャッチしていて何が起きてるかわからん。
いちいち指摘して直しててもとても終わりそうになかったので、良くないとは思いつつも、納品されてから try catch を全部外して、僕がデバッグした。
シンタックスとしての例外は一応知っていたが、その時
「例外処理って、こんなバグ隠しに使われるもんなの?いらないじゃん」
と思った。
それから十年。C++ で例外を使う場合は、メモリーリークが起きそうで未だにうまく使いこなせそうな気がしないが、Python とかでは例外を使うことによって物事をすっきり書けるようになったと実感できる。十年前と比べたら例外の使い方や利点が少しは判ったような気がする。
バグを隠蔽するために例外をキャッチしてはいけない

先日、VB で書かれたソースが納品されたが、それもやみくもに例外をキャッチしてて中で何が起きてるか判らん状態になってた(そっちは、僕は直さなくていい)。
ちょっと懐かしかった。
Java や .NET Framework で VM 上に例外処理機構が載ることによって、例外がより使いやすくなったけど、いくない例外処理をしているソースが量産されただけのような気もする。

[SQL]
最初に Oracle を使ったときにも、その良さが全くわからなかった。
多分 Pro C で何かの処理をしたんだと思うけど、 select * from foo で
データを全部取ってきて1行ずつプログラムのほうのロジックで処理しようとしてた。
僕も理解できてなかったけど、テーブル設計をしてた人もわかってなかったんだと思う。
リレーショナルデーターベースの教科書的な書籍の最初にある集合演算の考え方で処理すると、プログラムがすっきり書けると身をもって実感できるのに数年かかったように思う。
僕も SQL ハッカーってほどのことはないので、すぐ挫折してプログラムロジックでごまかそうとするけど、「SQL 文で取ってくるときにこうすればもっと簡単に済むんじゃん?」と思う場面も、あまりにも多い。
まずは SQL文の集合演算で問題が解けないか真剣に考えるべし

[オブジェクト指向]
class 付きの C の部分は、最初からどこらへんが利点かなんとなく判った。
状態(プロパティ)と手続き(メソッド)が一塊になってるってあたり。
さらに進化して C++ の public/protect/private とか virtual とかポリフォーリズムとか多重継承とか「真のオブジェクト指向とはなんだ!」と考えてる頃はよくわからなかった。
結局、プログラム全てをオブジェクト指向で書くのには無理があるとか、public/protect/private は(Perl や Python を見ると)いらないんじゃないかとか、思えてくると、少しずつその利点がわかってきたような気がする今日この頃。
class だけじゃなくて、vector とか map とか iterator も大事だよ、結局は全体のバランスと適材適所って、最近の C++ が教えてくれたおかげでもある。
オブジェクト指向至上主義いくない。

[番外]
以前どこかで Matz さんが、前の会社で C++ で苦労したっていう記述を見た。
http://www.rubyist.net/~matz/20070323.html#p01
これ↑ではなく、「同僚にカンマ演算子をオーバーロードされてえらい目にあった」という内容だったと思う。(情報ソースわかったら教えてください)
よくある話だが、さぞ大変だったろうなぁと苦笑した記憶がある。

知っているかよりも、適切に使えてるかどうかを気にしてる今日この頃。
知っていても、適切に使えてなければ迷惑をかけるだけなので、それなら知らないほうが良い。
最近考えるのは、普通の人が理解できないようなテクニックは、それがどんなにすばらしいアイデアでも使わないほうが良いということ。成功するプログラムは、個人を離れて使われるものなので。
すばらしいソースよりも凡庸なソースを書くように心がけている、といっても良いかもしれない。


nice!(0)  コメント(7)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 7

Auststeend

Viagra Pfizer Forum <a href=http://cialtadalaf.com>cialis</a> Canadian Pharmices Cialis Kamagra Bestellen Sildenafil Generic
by Auststeend (2019-04-10 03:43) 

Auststeend

Comprar Levitra Cialis where to purchase discount isotretinoin no prior script overseas <a href=http://leviprix.com>vardenafil</a> Vendita Cialis Da 5 Mg
by Auststeend (2019-05-10 06:31) 

FranSkige

Zentel Real Propecia Irreversible Schaden Anadian Companies Selling Ciailis <a href=http://cpsmeds.com>cialis</a> Levothyroxine Overnight Levitra Shipped From Us
by FranSkige (2019-06-11 16:00) 

Auststeend

Viagra. Dosage For Amoxicillin 500mg Order Meds No Acript <a href=http://cialonlinecs.com>cialis prices</a> Comment Acheter Du Cytotec Floucoric Capsule 150 Mg
by Auststeend (2019-06-18 10:27) 

FranSkige

Cialis On Line Buy Viagra Via American Express Card <a href=http://propecorder.com>buy cheap finasteride</a> Propecia Spermatogenesis
by FranSkige (2019-07-06 09:05) 

Auststeend

Can Amoxicillin Cause Nausea Kamagra Preisvergleich <a href=http://tadalafonline.com>canadian pharmacy cialis</a> Alopecie Physiologique Cheap Lasix Buy Best Place To Order Generic Cialis
by Auststeend (2019-07-09 01:25) 

Auststeend

Whisky Amoxicillin Is Keflex Sulfur Drug Cialis Generico PreР С–Р’В§o <a href=http://bestlevi.com>levitra non prescription</a> Generic Viagra Shipped From Usa Viagra En La Red Priligy Par Johnson & Johnson
by Auststeend (2019-07-26 04:30) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

Facebook コメント

トラックバック 0