VB6 vrs .NET (again)

Author: Dave
Date: 10.03.12 - 5:16am

So .NET is now almost 11 yrs old (Feb 2002). VB6 is almost 15, (1998).

I tinker in C#. There is a lot of existing code now for it that can save me time. The .NET framework and having large debugged libraries available is nice, but there are still tradeoffs.

Vb6 is a dead language according to some definitions. In reality though, since it still works, its actually one of the most stable languages you will find. No break neck innovation, no one is whipping up new features that keep your head spinning. Its a stable environment. We know what it does, we know what it doesnt do, and there is a load of public code available for it.

If you arent familiar with the VB6 IDE, here is a quick video I made showing its strengths and a few reasons I still use it.

One gripe with vb6 was that it needs the 1mb vb runtime installed in order to run on a system. Also if you wanted other features such as listviews, or progress bars you had to include references to external ocx or dll files which made distributions harder.

.NET actually took that mess to a whole new level. At the present moment I have 4 seperate versions of the .NET runtimes installed on my system each taking up hundreds of MB of disk space, and each requiring at least 20-30 minutes to download and install.

How about all of the fancy features of .NET compared to the basic class structures of vb6? Honestly I find vb6 simpler and more direct. Typing in .NET code is very verbose, as you walk your way through the different classes and enums. Also all of the advanced object oriented class features such as polymorphism. They are stressed a lot, but in reality you can write an awful lot of code without having to use such features. Complexity and error are closely related.

Granted there is some liability in using VB6 for new products. There may come a day when it will cease to operate or bugs crop up in future operating systems, or more likely, that you will need some capability that cant be done in VB6 cleanly.

How is it that a decade latter, I still find myself reminiscing, and ranting on the new architecture? I guess to me, VB6 is still my perfect "get shit done quick" language due to its directness and simplicity. I am also lucky that I only really write research applications.

A danger of new technologies is that they tend to thrash about in the evolution process. Thank god i didnt start developing any code for windows phone! They have had several complete incompatible shifts in technology over the years and the phone still has poor market share.

Its amazing how many boutique programming languages are out there. This even extends to corners of the .NET framework such as WPF.

Mastery is being able to obtain a simple elegant answer even while interfacing with a complex (or even chaotic) system. Stability is virtuous.

Comments: (9)

On 11.18.13 - 11:47pm Daniel Duta (Bucharest, Romania) wrote:
Hello Dave, It is more than a blog, I would say it is a programming tutorial. I was very happy when I read your opinions regarding VB6 vs .NET. It is interesting that a young guy like you has such a philosophical view of programming - Complexity and error are closely related. Another guy, Olaf Schmidt (unfortunaly banned by si_the_geek after a technical debate ...), has similar ideas considering that VB6 is more open to improvements than other languages and he preferring to spend time in this sense - see his site www.vbrichclient.com . Your both views are even more interesting to considering the new generation madness regarding C#,Java, phone apps Android. I really love your inline injections within VB6 and often I feel you are able to reveal pieces of a lesser-known world. Good luck! This weekend I will read all your post from the blog.

On 12.06.13 - 6:10am Dave wrote:
One more additional thought. The more complex tools you give people, the more complex "solutions" they may come up to problems. I am reading through someone elses code right now. They are making things way more complex than they have to such as using a delegate set in an if else statement, instead of just calling the desired function within that same if else. Or declaring functions as static needlessly which then has effects on member accessibility. Complex language attributes can (in the right situation and in the right hands) equal elegant solutions, but for the majority I think it just makes a needless mess.

Another: .NET throws allot of needless errors. Clipboard.SetText(0 length string) = exception. really? I dont care, I just cleared it. There is no value to that exception. Im also not shy in saying i still love On Error Resume Next. there are allot of things its perfect for such as form resize code.

On 12.16.13 - 5:43am Dave wrote:
here are a couple more ways .net ide is inferior to vb6
  • the code navigation combo boxes at the top of the editor window, in vb6 you choose the object on the left one, and the events on the right, in .net 2008 they are all jumbled together on the right.

  • break and edit, in vb6 hitting pause put the entire codebase into source editable mode. you could make changes on the fly really easily. in .net you have to set a breakpoint and hit it before you can edit live. also the edit and continue is problamatic. not all changes can be applied like this

  • The class/property hierarchy is so loaded with crap, including base object methods that the intellisense menus are miles long instead of being clean and concise. Some people may argue the extra features are worth it. I am not one.

  • vb6 supports optional arguments. waaay better than having to write a bunch of stubs for overloads, which you then have to click through one by one to see them all in the bulky intellisense menu. wtf really?!

On 01.20.14 - 4:13am BioMeg wrote:
Visual Basic 6 is the best ! Thank you for this video Dave.

On 02.23.14 - 4:00pm Dave wrote:
Another one I dont think I have mentioned yet. I LOVE that VB6 does not have a default null type for variable and function returns. It is so nice being able to just exit function and know that the default value of the return is false for booleans or an empty string. It makes your code way more readable and all of those null object checks you have to liter your code with C# have negative value in my book. A higher level language should do more for you, not require you to be super anal.

On 02.23.14 - 4:02pm Dave wrote:
also @BioMeg, I saw the advanced submissions you have tracked down and are keeping alive on PSC. Thats a great idea, thanks right back :)

On 04.06.14 - 12:53pm Sten wrote:
Dont forget the Vote for an updated VB6 at http//visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/3440221-bring-back-classic-visual-basic-an-improved-versi

On 06.28.14 - 9:11am Dave wrote:
Here is a succinct definition of why I cant leave VB6.

It is a simple and direct language without over complication. It is fast and can do 90% of my general programming requirements directly. For the other 10%, it can integrate very easily with C/C++ through either COM or direct API declares.

its still a winner, and I will use it until something better comes along...

On 06.07.17 - 9:40am VB6 Programming wrote:
Microsoft support VB6 for the lifetime of Windows 10, so until at least 2025. And for the lifetime of Windows Server 2016, until at least 2027. https//docs.microsoft.com/en-us/dotnet/visual-basic/reference/vb6-support

Leave Comment:
Email: (not shown)
Message: (Required)
Math Question: 8 + 25 = ? followed by the letter: G 

About Me
More Blogs
Main Site
C libs for VB6
Console tricks
FireFox temp dir
OCX License
Extract substring
VB6 Console Apps
VB6 Debugger View As Hex tooltips
VB6 - C Share registry data
VB6 Addin Missing Menus
VB6 Class Init Params
VB6 isIn function
Python and VB6
Python pros and cons
download web Dir
vc rand in python
VB6 Language Enhancement
Register .NET as COM
UDT Tricks pt2
Remote Data Extraction
Collection Extender
VB6 FindResource
DirList Single Click
Reset CheckPoint VPN Policy
VB6 BSTR Oddities Explained
SafeArrays in C
BSTR and Variant in C++
Property let optional args
Misc Libs
Enum Named Pipes
Vb6 Collection in C++
VB6 Overloaded Methods
VB6 Syncronous Socket
Simple IPC
VB6 Auto Resize Form Elements
Mach3 Automation
Exit For in While
C# self register ocx
VB6 Class Method Pointers
JS Debugger
Duktape Debug Protocol
QtScript 4 VB
Vb6 Named Args
vb6 Addin Part 2
VB6 Addin vrs Toolbars
OpenFile Dialog MultiSelect
Duktape Example
DukTape JS
VB6 Unsigned
.Net version
TitleBar Height
.NET again
VB6 Self Register OCXs
Query Last 12 Mos
Progid from Interface ID
VB6 to C Array Examples
Human Readable Variant Type
ScriptBasic COM Integration
CodeView Addin
ScriptBasic - Part 2
Script Env
printf override
History Combo
Disable IE
API Hooking in VB6
Addin Hook Events
FastBuild Addin
VB6 MemoryWindow
Link C Obj Files into VB6
Vb6 Standard Dlls
CStr for Pascal
Lazarus Review
asprintf for VS
VB6 GlobalMultiUse
Scintilla in VB6
Dynamic Highlight
WinVerifyTrust, CryptMsgGetParam VB6
MS GLEE Graphing
printf for VB6
C# App Config
Tero DES C# Test
VC 2008 Bit Fields
Speed trap
C# Db Class Generator
VB6 vrs .NET (again)
FireFox Whois Extension
git and vb6
Code Additions
Compiled date to string
C# ListView Sorter
VB6 Wish List
C# Process Injection
C# PE Offset Calculator
VB6 Async Download
Show Desktop
coding philosophy
Code release
Dll Not Found in IDE
Advanced MSScript Control
random tip
Clipart / Vector Art
VB6 Callback from C#
Binary data from VB6 to C#
CSharp and MsScriptControl
HexDumper functions
Js Beautify From VB6 or C#
vb6 FormPos
Inline Asm w VB6
The .NET Fiasco
One rub on computers
Universal extractor