VB.NETの誤解

2021年7月21日

妹「お兄ちゃん、VB.NETは素人でも作れるし、速度も遅いし、大規模開発には全然向いてないし、覚えるのは辞めた方が良いって本当なの?」

兄「それは誤解だよ。エンジニア特有の言語マウントだね」

妹「言語マウント?」

兄「そう言う人には『じゃあVB.netを使った経験からですか?』『どういう所が大規模開発に向いてないんですか?』と聞いてみるといいよ。返事は書籍に乗ってるVB6の内容ばかりだと思う」

妹「じゃあお兄ちゃんはVB.NETをどう思ってるの?」

兄「同じだよ。ドットネットフレームワークを使うのがCっぽい記述かVBっぽい記述かってだけ。実際にVB6の時は大規模開発に向いてなかったけどね。速度も遅いし、定義は曖昧だし、言語のスコープが曖昧で甘いし」

誤解その1 大規模開発に向いていない

兄「これは規模にもよるけど、しっかりした言語仕様になってるし.net frameworkを使うだけだからC#と変わらないよ」

誤解その2 素人でも簡単に作れる

兄「そんなわけがない。言語仕様をしっかりと覚えてないと作れないよ」

妹「なんでこんな誤解が生まれたの?」

兄「VBAの存在だろうね。あれは記録でソースコードを出力して、ちょっと手直しすればそれらしく動く。だから素人でもできる、と勘違されてると思う」

誤解その3 速度が遅い

兄「実際に比べてみると解るけど、VB.NETとC#だと変わらないよ。CやC++が相手なら差が出るけどね」

妹「なんでこんな誤解が生まれたの?」

兄「VB6は実際に遅かったしVBAも遅いけど、まともなコードを書けば普通に耐えられない速度にはならないよ。ただ適当なコードを書いて計算が多いからとか言語がVBだから、と言う言い訳を使いやすくもあったしね」

誤解その4 人気がない

妹「人気があんまりないよね。それはなんで?」

兄「誤解による負の連鎖かな」

妹「負の連鎖?」

兄「そうだよ。VB.netを使える人はC#も使える。速度も同じくらい。コンバータもあるし、VB.netで書いてもコンバータを通せばすぐC#になるんだよ。それでVBという響きで素人でもできるんなら安くなるでしょう?と案件を安く買い叩かれたり、大規模開発にVBを持ち出すなんてけしからん!って人がまだ一定層いる」

妹「ふむ」

兄「そしたら無難にC#を使っても手間は同じ。じゃあC#でいいよねってなる。そこからはC#の方がシェアを得てるから、ツールなんかもC#寄りに偏り使いやすくなる。VB.netは対応外にされたりして足回りの発展がなくなってくる。参考サイトもC#しかなかったりする」

妹「ヤンキーだと誤解されてる普通の人が、ヤンキーだと思われてるから人が近づかない。人と交流できないから誤解が解けない、みたいな?」

兄「……そうなのか?まぁ、それで参考サイトもC#が充実してくると、新規参入者の勉強できる場が減る。でも企業によってはVBAから入ってシステムコードも読みたい!ってコアなVBファンが居る」

妹「VB好きな人も居るよね」

兄「でもVB.netの勉強をし直すのは面倒くさいし育てるのもペイできなそうだ。そうなると頼るのは一世を風靡したVB6の知識だ。その時代の開発者とのツテやVBAエンジニアを動員する」

妹「VB6!?VBA!?」

兄「一応、VB6への互換機能があって、参照設定でVB6っぽくも書けるようになってる。ドットネット移行機能を使うのなら速度はだいぶ改善されてるけど、完全にVB6として使うためにはVB6DLLを参照設定にしてラッパークラスを作らないといけない。それで完成させるとVB6の速度を持ったナンチャッテドットネットソフトを作ることができる」

妹「ナンチャッテ!?」

兄「当然純粋な.net frameworkを使うC#よりも遅くなる。それを見た客は『あー、やっぱりVBはだめだなぁ!』となる」

妹「ダメじゃん!?」

兄「だからVB.netで開発って時にC#等のきちんとしたドットネット開発エンジニアを動員して当て込んだ場合やきちんと学んでいる人を当てた場合、C#と変わらない工期でC#と同じパフォーマンスを出すことができるはずなんだけど、慣れてない分C#よりも大変だって話が出たりする。ダメなのは言語じゃなくて、そう言う環境を作り出した開発者なのかもしれないね」