« Web 2.0メモ | トップページ | スティーブ・ジョブズ~偶像復活 »

2005/11/22

プログラム=インターフェイス+アルゴリズム+データ構造

ここの記事「「アルゴリズム+データ構造=プログラム」? 本当に?」がすごくホットで面白い。

普通、IT業界に入社した当初は、現実世界をコンピュータ上へシミュレートする時、全てのロジックを構造化された形式に直すのがSEの仕事だと習う。
まさに、アルゴリズムやデータ構造を考えているのと同じ。

プログラマは、インターフェイスよりも、アルゴリズムを考えたり、データを保持するためのデータ構造を考える時が多い。

インターフェイスは、設計者によって既に作成され、プログラマは設計書に従ってコーディングする時が多い。

だから、インターフェイスを考えるプログラマは少ないのでは?

昔のFortrunやBasicのプログラムを読むと、ローカル変数が存在せず全てグローバル変数とか、サブルーチンが存在せずGoTo文しかないとか、今では考えられないような制約があった。
その頃の考え方の遺産が「アルゴリズム+データ構造=プログラム」。

最近何故かVBを仕事でやらされているが、JavaやC#がいかに書きやすいか、まざまざと感じさせられる。

・型チェックが弱い。コンパイルしても、実際に動かさないと、コンパイルエラーすら見つからない!!
・実装継承がないのでポリモルフィズムが使えない。Case文がやたらと多い。
・例外処理がないので、GoTo文を使うしかない。
・Formに全てのロジックを書いてしまっているために、シーケンス図で書くと、肥大化したクラスそのものになってしまう。
・クラスを使うロジックが少ないため、関数の引数がやたらと長い。
・関数の引数に戻り値を渡す書き方が多いため、混乱しやすい。
・VBはFTP等のネットワーク系ライブラリが使いづらい。
・Collection等のコンテナのライブラリの機能が少ないため、基本的なアルゴリズムをわざわざ実装する手間がかかる。

オブジェクト指向プログラミングは、アルゴリズムやデータ構造をオブジェクトの中に隠蔽してしまい、インターフェイスだけを考えれば良いプログラムが書ける、という発想。
インターフェイスを突き詰めて考えると、複雑な処理は、多数のクラスへ分割され、プログラム構造は階段状のシーケンス図で書き表される。
GoFのデザインパターンは、結局インターフェイス設計を説明しているのと同義。

現代の考え方は「プログラム=インターフェイス+アルゴリズム+データ構造」。

しかしながら、少なくともVBプログラマにはそういう発想はないみたい。
VBなんか、消えてしまえばいいのに。

|

« Web 2.0メモ | トップページ | スティーブ・ジョブズ~偶像復活 »

日記・コラム・つぶやき」カテゴリの記事

プログラミング」カテゴリの記事

コメント

はじめまして。ときどき拝見させていただいています。
わたしはプログラミングからはすこし遠のいていて、VBを擁護するつもりもないのですが、お書きになっているような書き方でないコーディングは可能ですよ。
古いプログラムのメンテナンスをされてるのでしょうか。それはうんざりしますよね。
若い人が最近書いたプログラムでも、ときどき、そういうのがありますが、たぶん、VBしか知らないOLDプログラマーと一緒にやってた人とかなんでしょうね・・・。
失礼があったらすみません。これからも楽しみに拝見させていただきたいです。

投稿: Chimay | 2005/11/24 08:58

またまたあきぴーさんらしいリジカルなご意見ですね。

VB(VB6かな?)って書いてらっしゃるのがデフォルトで、VB.NET では無いようですが、未だにレガシーVBの仕事があるって時点で、VB.NET の敷居の高さorオブジェクト指向言語の敷居の高さを証明していると思います。

私はWin3.1時代のC言語+初期のSDK開発に比したVB開発の容易さのメリットとか、COMコンポーネントの利便性を世に知らしめたVB5(?)の功績は高く評価しています。

VBとWindowsが無かったら現在のパソコン上で稼動するシステム市場規模は今ほどになって無かったでしょうから、お勤めご苦労様って感じで、やんわり引退してもらって次世代に移行するのが良いんじゃ無いかなって思います。
#全否定はちょっとかわいそう。C++のヘッダファイルと同じです。

投稿: ふくもと | 2005/11/24 13:17

Chimay さん

はじめまして。
Chimay さんのBlogも読みました。Oracle情報はちょっと興味が惹かれてます(^^)
VBで書くのは、コンテナやネットワークのライブラリがしょぼいし、Javaよりも労力がかかりすぎるので、古い言語だとまざまざと実感してます。

また、遊びに来てください。

投稿: あきぴー | 2005/11/26 22:47

ふくもとさん

あはは。突っ込まれるネタを提供してしまったかも。

歴史をひもとけば、VBの功績もあったのでしょうが、VB.NETになったとしても、JavaやC#に比べると生産性が落ちるかなあ、と思ってます。

特に、ネットワーク関係のライブラリが整っていないのを見ると、ローカルマシン上でスタンドアローンのアプリを動かすことしか考えていない発想のように見えます。

投稿: あきぴー | 2005/11/26 22:58

どもども

>VB.NETになったとしても、JavaやC#に比べると生産性が落ちるかなあ

これはちょっと不思議なご意見のように感じます。
VB.NET と C# の違いなんてシンタックスだけで、別段違いは無いと思うんですけどね。

あきぴーさんがわざわざ、
name.Mid(3,1) = "a"
こんなメソッドへの代入式を VB.NET では書かないでしょう?

ライブラリ(.NET Framework)を使う意味においては C# も VB.NET も同一条件でしょうから、ネットワーク関係のライブラリの話で言えば差は無いと思いますよ。

ちなみに、私が今 .NET Framework 上での開発言語は何を選ぶかと言われたら C# 2.0 を選ぶんですけどね。

投稿: ふくもと | 2005/11/28 08:57

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック


この記事へのトラックバック一覧です: プログラム=インターフェイス+アルゴリズム+データ構造:

» [programming]VB嫌いer発見 [sugarballの書き連ね。]
[http://d.hatena.ne.jp/sugarmemo/20051123#1132760579:title=こちらのエントリ]で、僕がVB嫌いだということを書いた矢先。こちらにもVB嫌いな方がおられました。 https://forza.cocolog-nifty.com/blog/2005/11/post_d29d.html ・型チェックが弱い。コンパイルしても、実際に動かさないと、コンパイルエラーすら見つからない!! ・実装継承がないのでポリモルフィズムが使えない。Case文がやたらと... [続きを読む]

受信: 2005/11/25 00:56

« Web 2.0メモ | トップページ | スティーブ・ジョブズ~偶像復活 »