
The Silent Majority: Why Visual Basic 6 Still Thrives - michael_fine
http://msdn.microsoft.com/en-us/magazine/jj133828.aspx
======
51Cards
This seems like the thread to confess that I still spend a lot of time
developing in VB6, it's open on my screen right now. I do a lot of custom
back-end corporate applications and still actively support many I did back in
the 90's. One is a tailored project tracking system that manages one of the
largest telecoms in North America, client/server, 350 users all day long. It
just runs. At the time VB6 was the best way to get them out and if you were
careful it was perfectly solid. Fast forward 15 years and here we are, these
applications still exist, and until they clear budgets to re-develop them in
something more modern, they will continue to be updated.

Now don't get me wrong, everything new is all web based product, but these
older apps keep running and we keep updating them. Until they _need_ to be
replaced entirely, well, there just isn't a business case for the expense. No
doubt it'll happen... I've been mentally preparing clients for years... but
most of them dodged expense of a .NET rewrite and will move right into Web
apps when that day comes.

~~~
wazoox
> _Until they _need_ to be replaced entirely, well, there just isn't a
> business case for the expense. No doubt it'll happen..._

Ask those maintaining COBOL applications inherited straight from the 70s :)
There are even people selling toolkits to convert 5250/3270 applications to
web apps through "terminal scraping" (uuugh). No doubt in 20 years we'll have
some equivalent windows+VB monstrosity :)

~~~
Spearchucker
If you run into anyone still doing scaping, you might suggest Microfocus
COBOL. It's a lot less painful to recompile for x86 and .NET than it is to
deal with terminal scraping.

~~~
beagle3
But that only solves the COBOL aspect. There's are many cases in which
assembly, FORTRAN and who-knows-what-else is involved.

Terminal scraping is "universal" (it is language agnostic; it's much easier to
get a system emulator working perfectly than multiple compilers/language
environments).

~~~
apaprocki
FORTRAN isn't scary. C was designed to be compatible with FORTRAN so it just
works in most situations. Most people don't realize that if you declare
variables non-extern without a value in different compilation units, they
actually have "common" linkage to be compatible with FORTRAN "common" memory.

    
    
      a.c: int a;
      $ cc -c -o a.o a.c; nm a.o
      0000000000000004 C _a <-- "common"
    
      a.c: int a = 1;
      $ cc -c -o a.o a.c; nm a.o
      0000000100001040 D _a
      

FORTRAN functions can be called from and call into C or C++ (extern "C"'d)
without any issue. Simplified example:

    
    
      foo.f:SUBROUTINE FOO
      foo.f:CHARACTER*80 LINE
      foo.f:INTEGER*4 NUM
      foo.f:CALL BAR(LINE, NUM)
      foo.f:END
      bar.c:void bar_(const char *line, int *num, int len) {
      bar.c:    /* implicit length for string arguments, values as pointers */
      bar.c:}
    
      foo.f:SUBROUTINE FOO
      foo.f:END
      bar.c:extern void foo_(void);
      bar.c:void bar(void) { foo_(); }

~~~
beagle3
Fortran isn't scary, but porting a system from one architecture to another,
when that system includes Fortran, Assembly, Cobol and other parts IS scary,
which makes emulation (and terminal scraping) a robust solution, and
recompilation/porting an expensive one.

[And Fortran does have scary aspects: from the 25 year old hacker's test: "Did
you ever change the value of 4? In a language other than Fortran?" - numeric
literals in fortran aren't constant!]

~~~
apaprocki
I haven't seen many cross-platform issues with FORTRAN. (If you redefine 4 on
any platform, it will be bad.) IMO, C is much more time consuming to port to a
different platform due to system headers and inevitably different system APIs.
POSIX helps, but certain parts of the system aren't covered by POSIX and so
you wind up with #ifdef platform support where new support needs to be added.

~~~
beagle3
> I haven't seen many cross-platform issues with FORTRAN.

Most fortran floating around is cross-platform fortran, and that is quite easy
to port. However, legacy systems are usually very much platform dependent. I
was once hired to port something in Fortran from a System 3090 (or was it 390?
That would be more than 20 years ago now) to an SGI workstation, and it took
several weeks of full time work.

And you're ignoring the subject under discussion: Porting a working system
comprised of multiple parts in multiple languages (COBOL, Fortran, ASM, REXX,
....) is a much harder than the sum of porting individual programs - which is
why emulation + terminal scraping is the cheaper, more robust solution.

------
ilaksh
This brings up a very prevalent false dichotomy and some interesting
psychological issues that are holding back software development.

The false dichotomy is the idea that you can have either well engineered and
powerful systems that are complex and difficult to program, or you can have
poorly engineered, simple systems that are easy to program.

There is a conflict here which is a little bit like the inherent opposition of
technology and business (most people aren't aware of this issue either, of
course, but that's a whole other comment for people to dismiss). The tools
which make software development easier and more efficient, both for
experienced professionals as well as for beginners, also make software
development more accessible, reduce the amount of traditional programming
being done and therefore mean it requires less programming skill to accomplish
the same thing.

This means that as new, more powerful programming tools appear, you can
actually be fairly sure that the programmers who have only used those tools
have less experience than programmers who use older, less powerful tools. Even
worse, since everyone knows the tools are easier to use, there is a social
dynamic and pressure warning programmers off of them: its basically cheating.

Many programmers are still acting like calligraphers in an area where the
printing press has just recently been introduced. What self-respecting
calligrapher uses a machine to print text? Its not even calligraphy.

I had to stop using Visual Basic anything just because I knew people would
judge me as being a lesser programmer if I took advantage of the easier and
more productive tool.

Peer pressure, pretty much at the level of 12-year-olds, is the main thing
holding back deployment and advancement of technology in all aspects of our
'society'.

~~~
sedev
I argue that Silicon Valley startup culture's existence and profitability
disproves the point you're attempting to make here. Haven't we all read pg's
"Beating the Averages"? Haven't we all heard a hundred startup founders say "I
used the tool that was closest to hand, and customers didn't care what I used
as long as my service met their needs"? Haven't we all seen the companies with
printing presses handily beating the calligraphers both in the Iron Age
assembler-versus-C contest and the modern contest of web startups with FOSS
stacks beating companies burdened with compiled languages and expensive
licenses?

Peer pressure is certainly not zero - but hackers are pragmatists. If the tool
really was easier and made a coder more productive, they'd be making money
with it and that would be its reputation right there. The thing you call
"cheating" is celebrated and encouraged. Better tools improve the whole
community.

>>> " _I had to stop using Visual Basic anything just because I knew people
would judge me as being a lesser programmer if I took advantage of the easier
and more productive tool._ "

This says far, _far_ more about you than about the people around you.

~~~
route66
>>> This says far, far more about you than about the people around you.

Not necessarily. In my MS past I also had to defend my VB.Net experience in
interviews, being perceived as a low-threshold toy language. And peer pressure
matters in your network: how much reach-out would you get, as self described
VB wizard or a SQL master?

Fashion rules, as PL topics on HN show regularly. A PL survey [1] was linked
from an article some hours ago; it shows interesting answers: just compare the
language list of "I know many people who use this language" to "I would use
this language on my resumee"

That said, of course you are right: If you stay out of the fashion circuit and
produce some value with tools you know, then nothing else matters...

[1]
[http://www.eecs.berkeley.edu/~lmeyerov/projects/socioplt/viz...](http://www.eecs.berkeley.edu/~lmeyerov/projects/socioplt/viz/rank.html)

------
sriramk
I have a soft spot for VB6 - I learnt to code using VB6 back in school. I had
loads of fun building these simple apps that I then distributed to my friends.
The highlight was when a magazine (PCQuest? Digit?) distributed one of my apps
on their CDs. Ah, those were the days.

I wanted to build GUI apps and wasn't fond of all the C/C++ books I could get
my hands on just having console mode apps. People always find it funny that I
started writing VB6 code and with every step, always seemed to move down the
stack, to writing kernel mode code at one point - people usually move in the
other direction.

The non-MSFT world underestimates the power of VB6 (as they do Delphi) - you
could build some really complex apps and by calling Win32 APIs you could do a
lot of what pure Win32/MFC got you.

MSFT completely messed up the move to .NET and fundamentally misunderstood
what the VB6 devs wanted. I saw them try and correct this for many years
internally but it never really worked. VB6 could have become PHP if Microsoft
had played their cards correctly.

~~~
nivla
Same here, Visual Basic 6 was my entry point into programming. I had lots of
fun coding and was able to learn a lot. Then they brought out VB.NET. It just
seemed distant and bloated from VB6. After so many years of not touching VB6,
it is interesting to know that windows still supports it.

------
AndrewDucker
The thing that most people forget about VB6 is that it wasn't the language
that made it succesful - it was the tools.

You could create a form in 30 seconds, drag a couple of buttons onto it, and
start sticking code behind them.

It was _incredibly_ easy to go from nothing to an app that did something
useful and was easy to use.

~~~
asmithmd1
What is the web app equivalent of this? There must be several different
companies trying to create a drag and drop web application IDE

~~~
MartinCron
The closest web app analog is (was) ASP.NET WebForms, which has pretty much
been replaced by ASP.NET MVC.

~~~
recursive
WebForms wishes it was VB6, but sadly, the ViewState abstraction leaks
complexity like a sieve for any but the most trivial case.

~~~
MartinCron
I agree wholeheartedly. Almost all of the abstractions in WebForms are leaky,
and the think that it's abstracting... HTML, isn't so complex that it benefits
from being abstracted.

It was a learning process for all of us :)

------
grandalf
For those who have never used it, VB6 syntax is actually very similar to Ruby.
It uses English language words instead of braces, does not require
parentheses, and uses dynamic typing.

VB6 is also quite fast, all things considered, and runs on lots of fairly old
hardware.

Don't get me wrong, I'd never choose to use it, but for those who use it day
to day it offers overall simplicity and flexibility that few mainstream
languages can match.

~~~
kristofferR
Visual Basic was actually created as a combination of Ruby and Basic.

Not the famous Ruby language though, it came years later ;)

<http://en.wikipedia.org/wiki/Visual_Basic#History>

------
carsongross
The VB6 development environment from the late 90's is still better in some
ways than my current development environment (IntelliJ+(JVM|ruby|javascript)).

A small example: in the VB6 debugger, when you hit a breakpoint, you can drag
the program counter/execution point around willy-nilly in the method, while
changing the code around. No hotswapping, no dropping call frames, no hitting
refresh in a browser. Just change the code, drag the PC up a few lines, and
step back over it. Amazing.

~~~
CurtHagenlocher
(You can do that in VB.NET and C# today, as long as you're writing a 32-bit
application.)

~~~
ConstantineXVI
There's some changes[1] you can't make in Edit and Continue without a full
restart. This has bitten me a bit with NancyFx, as all of your routes are
defined as lambdas (thus can't edit anything live).

[1] <http://msdn.microsoft.com/en-us/library/ms164927.aspx>

~~~
justforthis999
IIRC, Edit and Continue in Visual Studio products (I believe it was there in
VC++ as well as VB when it was first introduced) was a feature in at least one
Lisp version (maybe Franz Lisp or another popular commercial Lisp product at
the time) - before it was introduced in VS. I remember this because I had been
trying out either or both of those Lisps at the time, and soon after that, I
read about the Edit and Continue feature in the next-released VS product. I
think I emailed about it to a friend at the time.

------
MichaelGG
"Visual Basic 6 first shipped in 1998, so its apps will have at least 24 years
of supported lifetime. Contrast that with the Microsoft .NET Framework 1.0
(2002), which is incompatible with Windows 7 (2009)."

Somewhat misleading, as the .NET framework is still supported and will run
older binaries.

~~~
gouranga
.Net 1.0 code will run quite happily on the latest framework.

We just pulled one of our apps up to .Net 4.0 and it took about 5 minutes. Not
a small one either: 350kloc.

------
loso
I think its kind of funny that Visual Basic doesn't inspire the kind of hatred
that it once did. Now PHP has taken its place. Reading through the comments
there seems to be a level of fond remembrance going on. In the past, if you
used VB 6 or lesser, you were not seen as a real programmer.

Maybe we will stop the PHP hate as well and move on to a new language to kick
around.

~~~
flomo
People have forgotten all the terrible language warts all over VB. (From what
little I can recall, the hatred is slowly seething back upward.) PHP might
lack any sense of style but it's nowhere near as bad as VB.

Of course, there were a lot of good things about the VB environment, and
Microsoft could have straightened-out the syntax without throwing the baby out
with the bathwater. But the strategy was to legacy the whole heap of
VB/COM/etc.

------
mpunaskar
I started with VB6 Back in 2000. It was easy to pickup as my first programming
language was gwbasic/qbasic. I really loved event driven development, IDE and
easy Compile and run procedure.

IMO VB.net offers almost everything that VB6 has plus extra features of .net
libraries. It can also do project conversion from VB to vb.net (upto extent)
but as fellow commenters have mentioned there's cost of jumping from VB to
VB.NET based windows app. Therefore VB6 will continue to thrive until
corporation justify that cost.

------
bmccormack
This resonates a lot with Spolsky's "How Microsoft Lost the API War":
<http://www.joelonsoftware.com/articles/APIWar.html>

------
efa
Dave Platt. The man who predicted the iPhone would be a bigger marketing flop
than Ishtar and Waterworld. [http://suckbusters2.blogspot.com/2007/06/apple-
iphone-debut-...](http://suckbusters2.blogspot.com/2007/06/apple-iphone-debut-
to-flop-product-to.html)

~~~
efa
Not saying there is anything wrong with this article. I just remembered him
for this and thought it was funny.

------
evincarofautumn
Hackers who love to learn the latest and use the best often seem to be angered
by this kind of thing. But isn’t its continued existence evidence of its
success? Maybe it’s just hard to admit that a language’s success doesn’t
depend solely on its quality.

~~~
ajross
It's not limited to MS either. Running "cc" on a modern linux box still
accepts 35+ year old K&R code by default. The bourne shell has been officially
standardized since POSIX 25 years ago, and as a practical matter has been
backwards compatible much longer than that. Xlib code from 1987 still runs
unmodified...

~~~
evincarofautumn
Yeah, and I don’t actually believe in backward compatibility when it comes to
programming languages. If you want forward compatibility, make a good cross
compiler from _n_ to _n_ \+ 1. If you want backward compatibility, make one
from _n_ \+ 1 to _n_ , if it’s reasonable.

------
mappu
I spent a lot of time writing VB6... it took many years to get to the same
level of just being able to sit down and make something with C++, but i'm
happier being on more solid foundations now. I do have some fond memories of
it but i don't miss the syntax (feels like a cross between Python and Excel).

Some things i remember about VB6: 50kb binary with a GUI that ran on anything
from 95 through 7. Trying to modernise the UI even in the XP era (getting fast
images in menu items without owner-drawing the whole thing, getting the
default windows font on form controls, vbAccelerator controls, finding the
right-looking tab control..). OCX deployment. Manually adding manifests for
comctl6. IDE plugins to make DLL and console-mode projects that worked by
relinking the compiled binary. Jumping through hoops to handle events for an
array of objects. Using CopyMemory() to copy a pointer to a UDT. Not being
able to get the AddressOf a class method without some assembly. No threads.
Edit & continue becoming unsafe when subclassing your form window without some
third-party dll.

------
bmccormack
"Becoming a good Visual Basic 6 programmer took much less time than becoming a
good C++ programmer."

I love this line because it implies that you can actually become a good VB6
programmer. Sure, you may not be able to sort a linked list, but you can still
learn about encapsulation and ... actually, just start with encapsulation;
that's going to make your code SO much easier to read :-)

~~~
rbanffy
That's probably because a good VB6 programmer would still be a terrible C++
programmer. There are too many ideas VB programmers will never encounter. In
order to be a good C++ programmer you'd be a VB god (rolling out your own DLLs
and OCXs).

I have done more than my fair share of VB programming from version 2 when it
was new up until 98 or so. I even got my MCP certification on VB3... It was
the quickest tool to build a Windows application at the time.

In fact, at least here in Brazil, the rise of Windows as a corporate OS
coincides with a rapid adoption of VB for in-company development and the fall
of Clipper under DOS. I saw it first hand because it happened while I was
helping write a huge console-based app in Dataflex. The app is still used by
more than a hundred municipalities in Brazil and I learned the master thesis
of a colleague was about automatically porting it to something more modern
(the project more or less failed).

~~~
flomo
> the rise of Windows as a corporate OS coincides with a rapid adoption of VB
> for in-company development

Also true of at least one place in the USA. A few thousand Macs went into the
dumpster so they could roll-out shiny new VB client-server applications to
replace terminal stuff. (Ironically, they were rolling out Netscape 1.1 at the
same time.)

------
cfn
Funny that so many posts here are in the past tense. I still write brand new
VB6 code every other day and I suspect that there are many thousands like me
that have a large and old codebase that needs to be extended because the users
keep asking for new features (and couldn't care less about how it is done).

------
waivej
VB6 is a nice prototyping/quick app language. It's not suited for every job
but you can optimize around many weaknesses and it complemented early ASP
projects well.

Microsoft just dropped the ball by making it too hard to upgrade to VB.Net.
For some projects, you could port to a different language for the same effort.

------
gouranga
We're still running vb6 code inside COM on win2k3. It's ugly but it works
(just about)

------
DallaRosa
I've been trying to find a way to put in proper words why PHP is still this
big in webdev and this article just gave me the explanation I was looking for
all this time.

------
MatthewPhillips
Delphi is also still widely deployed in the enterprise world.

------
chj
I learned to program in c, then one time when i had this project to work in
VB6, i am really impressived by how easy it is to put something on the screen.
syntax check is very useful for beginners. and the UI is clean, no unnecessary
parts. vb6 community loves sharing code and it is very easy to use other
people's code too. no compiler hell to deal with.

a really great piece of work.

------
j_s
Silverlight is the next VB6

------
ktizo
I do wish the silent majority would shut up occasionally. You hear them on the
telly all the time, and read about them in print. Going on and on and on about
how no-one ever hears them or allows them any airtime.

