プログラム=インターフェイス+アルゴリズム+データ構造
ここの記事「「アルゴリズム+データ構造=プログラム」? 本当に?」がすごくホットで面白い。
普通、IT業界に入社した当初は、現実世界をコンピュータ上へシミュレートする時、全てのロジックを構造化された形式に直すのがSEの仕事だと習う。
まさに、アルゴリズムやデータ構造を考えているのと同じ。
プログラマは、インターフェイスよりも、アルゴリズムを考えたり、データを保持するためのデータ構造を考える時が多い。
インターフェイスは、設計者によって既に作成され、プログラマは設計書に従ってコーディングする時が多い。
だから、インターフェイスを考えるプログラマは少ないのでは?
昔のFortrunやBasicのプログラムを読むと、ローカル変数が存在せず全てグローバル変数とか、サブルーチンが存在せずGoTo文しかないとか、今では考えられないような制約があった。
その頃の考え方の遺産が「アルゴリズム+データ構造=プログラム」。
最近何故かVBを仕事でやらされているが、JavaやC#がいかに書きやすいか、まざまざと感じさせられる。
・型チェックが弱い。コンパイルしても、実際に動かさないと、コンパイルエラーすら見つからない!!
・実装継承がないのでポリモルフィズムが使えない。Case文がやたらと多い。
・例外処理がないので、GoTo文を使うしかない。
・Formに全てのロジックを書いてしまっているために、シーケンス図で書くと、肥大化したクラスそのものになってしまう。
・クラスを使うロジックが少ないため、関数の引数がやたらと長い。
・関数の引数に戻り値を渡す書き方が多いため、混乱しやすい。
・VBはFTP等のネットワーク系ライブラリが使いづらい。
・Collection等のコンテナのライブラリの機能が少ないため、基本的なアルゴリズムをわざわざ実装する手間がかかる。
オブジェクト指向プログラミングは、アルゴリズムやデータ構造をオブジェクトの中に隠蔽してしまい、インターフェイスだけを考えれば良いプログラムが書ける、という発想。
インターフェイスを突き詰めて考えると、複雑な処理は、多数のクラスへ分割され、プログラム構造は階段状のシーケンス図で書き表される。
GoFのデザインパターンは、結局インターフェイス設計を説明しているのと同義。
現代の考え方は「プログラム=インターフェイス+アルゴリズム+データ構造」。
しかしながら、少なくともVBプログラマにはそういう発想はないみたい。
VBなんか、消えてしまえばいいのに。
| 固定リンク
「日記・コラム・つぶやき」カテゴリの記事
- TwitterやFacebookは人力キュレーションツールとして使う(2022.10.02)
- 「現代病「集中できない」を知力に変える 読む力 最新スキル大全」の感想(2022.08.28)
- 人類は海辺から生まれた~水生類人猿説が面白い(2022.08.09)
- 戦前の日本人の気質はまだ成熟していない青年期と同じだった(2022.06.14)
- 物理学を攻略するためのマップ(2022.04.18)
「プログラミング」カテゴリの記事
- Javaのモジュールシステムの考え方をまとめてみた(2022.10.21)
- Javaのモジュールシステムは複雑性をより増している(2022.09.10)
- Javaはなぜ関数型言語になろうとしているのか(2022.09.02)
- Javaのラムダ式の考え方(2022.08.10)
- Javaはオブジェクト指向言語ではなく関数型言語だった~「[増補改訂]関数プログラミング実践入門」はお勧めの本だ(2022.08.06)
コメント
はじめまして。ときどき拝見させていただいています。
わたしはプログラミングからはすこし遠のいていて、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