VB6を使い続けること(プチ炎上したのでまとめ)
みんなVB6を使い続けていることを、こんなにも気にしているということが分かりました。プチ炎上したのでまとめです(うそ、まとめになってない)。
以前、しゃれでこんなゲームを作ってみたのですが、わたしもここ5年ぐらいはほとんどVB6を触ってないので(当時としては3年ぐらいのブランクかな)、3時間って見積もって8時間もかかってしまった(苦笑)。
これを元に、VB6か.NETか考えてみましょう。
要件によっては差が出るものもありますが、このゲームを作るには.NET(エクセルマクロにはないけど)の方が多少都合がよい。これは通常の業務システムよりも大きな差になる。
作った当時もブランクがあったので、「(VBAの)配列って……、あれ? こんなことできなかったけ?」ってなことになり、.NETでできることがVBAでもできると勘違い(忘れてた)して、かなり大幅に後戻りしました。こんな小さなプログラムなら1カ所でも嵌ったら差が出るけれど、プロジェクトで嵌りっぱなしってことはないはずで、誤差の範囲でしょう。
余談ですが、新入社員の教育用に「ゲームなら業務システムより抵抗がなかろう」と思って「3時間で作ったる!」って宣言して作ったので嵌って悔しくってね。で、新入社員には難しすぎると大不評でした。こういう自己満足のための仕事は良くないね。
勘違いして後戻りしなかったら5時間ぐらい、でき上がったソース量からみて全盛期ならVBAで4時間ぐらいと思う。エクセルマクロに.NETが使えたらとしたら3時間ぐらいかな。
言語(開発環境)としての特性を比較するならば、不得意の人がやると、「できない=無限大の工数」になるので、どちらにも慣れている人で比較しないと意味がない。わたしはどちらもそれなりに慣れていると考えて(異論は受け付けるよ)、差が出る機能で20~30%の生産性の違いでしょう。
もし、20~30%以上の差がつくと思うなら、単にいずれかが、わたしよりもはるかに得意か、ものすごく苦手かなだけじゃないですかね?
比べてみたら「.NETは楽だね~」って思うけれど、PCのメモリを2Gから4G(3Gしか認識しないけど)変えたぐらいの差しかない。増やした瞬間は楽に感じたり、減らした瞬間はイラっとしたりするけど、次の瞬間には忘れている。
このぐらいの差は、担当者の「能力&慣れ」で簡単に逆転してしまいます。たとえば、.NETでやったら2時間でできるって技術者は、どこかにはいるでしょうけれど会ったことはないし、.NETが得意という技術者でも、大半は4時間じゃ無理なんじゃないかな。異論は受け付けるけど、普段の弊社の見積りは、わたし(がやったとしたら)×3 でも足らないことが……。
つまり、VB6がかなり得意な技術者なら、同じものを.NETにちょっと得意ぐらいの技術者が作っても、まだ、VB6の方が早くできます。
いずれにしても、顧客の都合を前にしたらごく瑣末な問題です。VB6も、.NETも無視できない数のユーザー(案件)があるのですから、両方できればよいし、片方を無視できると思えば無視すればよいのです。
無視するかどうかは、経営者の判断で技術者がする判断ではないと思う。技術者は必要になる日のために自己研鑽はすべきですけれど、それと顧客の便益とはまったく別次元のお話です。
もちろん、わたしは社内的にはどちらも無視することは許さないのですが(笑)、他人に変えた方が良いというほどの差はないでしょう。
ところが、同じ(最善を尽くす)感覚で見積もっても、SQLでできることはSQLで処理した方が絶対に早い。どんなに効率的に書いてもSQLの方が処理も速い。
これには、どんなにがんばっても超えられない壁がある。
こんな風にできれば、コーディング30分、テスト資料作り含めて0.5 日で終わります。一般的な開発(Java、VB6、.Net、PHP、Ruby ……)では2~5人日。0.5 日対、2~5人日って400~1000%の差になるのですけれど……。
20~30%の差が猛烈に気になって炎上するぐらいなのに、400~1000%の差が気にならない理屈が分からない(ちょっとしたレトリックが入ってますけどね)。
そもそも、VB6しかないところで、「.NETで!」言ったところで始まらないけれど、RDBMSは基本的に導入済みなんだから、ちゃんと使ったらいいじゃないですか? 他に余計なツール(O/R何チャラとか)すらも要らないですよ。
早くできても、あまり給料に差が出ないサラリーマン感覚では分からないかもしれませんが(この給与体系が技術者にはそもそもおかしい)、たとえばタクシーと同じに考えれば分かるでしょう。目的地に着くのに何倍も時間が掛かって、何倍もの料金になる。感覚的には「右折は怖いんです」って左折だけで行けるルートを通るぐらいの差です。
顧客に提供する成果物も明らかに違うのに、プロとしてそこに問題意識がいかないのはなぜ?
もちろん、左折と直進だけで到着する目的地もあるけれど、そんな屁理屈ばっかり聞いていると、社長として金払う立場になったら猛烈に腹立つよ~~。
上流の技術者ってのは、タクシーの運転手をナビゲートする立場にあるのですが、これも左折だけでルートを探そうとする。左折だけではいけないときには、客をいったん降ろして(これが一番むかつくのね)客に横断歩道を渡らせて、対向車線にいる別のタクシーに乗せてしまうとか、目的地を変える交渉をするとか、そんな設計ができる人がすばらしい技術者って呼ばれてたりするけれど……。空気も読まず、鬼の形相で「右へ曲がれや! コラぁ!!」って言うからな~、わたしは。
日本中の技術者にケンカ売ったかな(苦笑)。
右折する文化のない人たちにはなかなか理解できないと思うけれど、右折できる人が、右折しないタクシーに10年も乗ってたら誰でもキレると思う。
VB4のころからSQLを使っているけれど、スキルチェンジはOracle9i、SQLServer2005からのOLAP関数だけですからね(他の今後出てくるであろう、SQLの言語的な追加機能は母言語にやらせた方が効率的と思う)。VBやったり、Delphiやったり、C#やったり、Javaやったり、PHPやったり、他にもいろいろやってきたけれど、SQLはずーとわたしの中ではメインにできてきた。VB6 → .NET 程度の違いで騒ぐぐらいなら、極力、言語の切り替えの影響を排除するためにもSQLにロジック入れるべきですけど……。
この後も、SQLの方がある程度、息が長く使えると思います。
SQLが消えるなら、1000%をさらに何倍も超える生産性のものが出てくるってことですから、そのときは完全にEUCが実現されてプロが要らなくなっていると思います。
煽ろうとどうしようと、そう簡単に変わらないのですけどね。
嫌味なことを言うと、差がありすぎると儲からない。「時代の先を行き過ぎる人は評価されないもの」って慰めてたいところですが、「10年以上前の技術で喰ってるのに」って思っているので、先に行ってるつもりがまったくなく、慰めにもならない。
「技術者が社長になってもうまくいかない」って典型ですな、本当にエリック・シュミットに来て欲しい(笑)。
アイ 2009年6月10日 (水) 22:21
社長より優秀な人材に囲まれて経営できるようにもっていきたいですね!
「社長はもうSQLなんか書いてないで、経営に専念してください」とか言われてみたいですね!
もしそうなっても生島さんはSQL書くことを止めないでしょうけど(笑)。
生島勘富 2009年6月10日 (水) 23:00
アイさん、ども。
技術者というのは、経営者には向いてないのです。
今は社長は代われないけど儲かったら、ラリー・ペイジやビル・ゲイツのように社員より社長を募集します(笑)
SQLなんてどうでもよくって、そんなレベルじゃない話をしたいのですけど、今のところ、SQLが生産性の差が大きすぎるのでその差が詰まるまでは、こだわるでしょうね。
インドリ 2009年6月11日 (木) 09:08
残念です。VB.NETがオブジェクト指向言語だという点を考慮していませんね。
オブジェクト指向であるという事は、ソフトウェア開発の原価管理上重要な事です。
標準作業時間を下げて経費を下げ、高い品質を維持する事が出来ます。
オブジェクト指向言語で多い誤解が「新規開発で余計に遅くなるから役に立たない」という考えです。
それがそもそも筋違いで、オブジェクト指向は「未来の標準作業時間を下げる技術」なのです。
おまけに.NETはリファクタリングより、自動テストツールなどが作れ、
バグを減らしてかなりの品質を出せます。
VB6とVB.NETじゃあ、自身でオリジナルの開発ツールを作っている事もありますが、生産性が桁違いです。
プロならば、道具でどれだけ生産性が上げられるのかという限界点を見極め、
その最高値が叩きだせる状態にするために、常に自分を鍛え続けなくてはなりません。
VBAはVBAでマスターしておけばいいことです。
それに.NETでオフィス製品は作れます。
生島勘富 2009年6月11日 (木) 09:31
う~ん。
そこそこ長い時間この業界に生きてきたけれど、残念ながら桁違いは見たことないですね。
どれぐらい大きなプロジェクトでどれぐらいのメリットが出ましたか?
桁違いなら、本当に業界は変わっているはずだけれど、相変わらずブラックな業界と言われていますし、桁違いの生産性のVB6を選択する会社がたくさんあるというのは私には理解できません。桁違いの生産性でこの厳しい世の中で生き残るはずはないのですが、むしろ、VB6を選択している会社の方が元気です。
ものすごくバラ色の宣伝は一杯見るけれど、せいぜい20~30%ってとこです。
このぐらいは習熟度によって簡単に逆転するので、経営者としてスキルチェンジさせるリスクを取らないのは立派な戦略です。
20~30%なら、不況の今は、赤字でも遊ばせるよりマシってプロジェクトがあるので、スキルチェンジするのにちょうどいいでしょうけれど、企業の戦略として積極的にすべきとは言えないね。
VB6から.Netへのスキルチェンジできない人を叩いている若造を見るにつけ、「弱い者が夕暮れ、更に弱いものを叩く」って風にしか見えない。
どっちもミジンコほどどうでもいいことです。
生島勘富 2009年6月11日 (木) 09:41
追加。
もちろん、
■ SQLができるようになるべき → 効率がよいから
■ VB6ではなく.Netへ → 新しいから、多少効率がいいから
私は新しいことに価値はない。
効率を見るべきでしょうと言ってます。
インドリ 2009年6月11日 (木) 09:56
少なくとも私はリファクタリングによるメタプログラミング等により生産性が10倍以上上がっています。
やっぱり開発者は自分独自のツールを作って生産性を上げなくてはなりません。
いわゆるUNIX思想ですね。
それと、出来る事は.NETの方がはるかに上ですし、セキュリティがランタイム自体から考慮されている点などの品質面から考えると.NETを採用しないのは信じられません。
そんな私にしてみれば、VB6を新規開発で使うのは怠惰精神の賜物だとしか思えません。
インドリ 2009年6月11日 (木) 10:00
書き忘れていましたが、これからはマルチコアの時代です。
マルチスレッドプログラミングが極度にしにくいVB6を採用しない事をお勧めします。
生島勘富 2009年6月11日 (木) 10:06
何度も書いていますが、顧客の要件に合うことが第一です。
マルチコアのCPUを搭載してください。って顧客に言ったら、業務システムの案件は取れません。
インドリ 2009年6月11日 (木) 10:08
生島さんが生産性向上を体験できないわけは、設計者の問題だと思います。
日本は現実を知らない=技術を知らない人が机上の空論で設計します。
その様な状態でまともなオブジェクト指向分析&オブジェクト指向設計が出来ているはずがありません。
オブジェクト指向技術は未来の生産性を上げる再利用技術です。
再利用できないものばかりを作っていればコストは逆に上がります。
インドリ 2009年6月11日 (木) 10:10
>マルチコアのCPUを搭載してください。って顧客に言ったら、業務システムの案件は取れません。
それは誤解です。
お客様はマルチコアなんて考えていません。
ただ新しいCPUに交換すればパフォーマンスが上がるとだけ考えています。
ですからマルチコアに買い換えてもパフォーマンスが上がらないであろうVB6はお客様の心証を著しく悪いものにします。
生島勘富 2009年6月11日 (木) 10:18
それはずいぶんな言い方ですね。
VBだろうが、Javaだろうが、.Netだろうがコンポーネント化して再利用していますよ。
でなかったら、DLLヘルなんて気にする必要もないでしょう。
VBでできないのは継承ぐらいで、他は効率の差はあっても大体できます。
VBを使い切れてなかったから、桁違いに思うのではないでしょうか。