The Rise and Fall of Visual Basic
medium.com
medium.com
I still sometimes program in Classic VB, (aka VB6). Each year it is more difficult to install the IDE, but the runtime is still installed by default.
It is incredible easy to build a nice one screen application with not very a very complicated background logic. Normal people like a nice graphical interface with a few buttons, and with Classic VB you can create them very easily and iterate and customize the form.
My last big problem was that it doesn't have a build in sort function, so you can use a n^2 sort or write a good sorting function by hand :( . When the logic start to be not so easy, there begin to apear problems.
--
About the article: I agree with most of it.
> Also on the big side: There was no more edit-and-continue feature.
I still miss that when I program in other languages. It kills so many (all!) optimizations possibilities, but it's extremely handy.
> VB.Fred and the .NET Solution
I call it VB# or VB#.Net instead of VB.Fred.
VB was great like you said until you needed to do something difficult. I remember Bruce McKinny’s Hardcore Visual Basic book being my best friend for a little while. It thought me I could do the hard stuff in C, make a DLL and drop that into my VB project.
Bruce had a saying, VB makes 95% of the job easy and the other 5% impossible.
My first job started out with mostly Visual Basic 6. One of the modules written in VC++ by a bunch of guys who were looking to get that on their resume (they had since departed). It probably should have just been in VB as well and was always a nightmare to debug and enhance.
Once .net was prominent we mostly moved to C#. There didn't seem to be much of a reason to go with VB.Net, C# seemed more "legitimate" and without the hassles of Visual C++/MFC.
Decades later and I still find myself writing an Excel macro in VBA now and then but I've largely moved on.
Though it has been a while since its last update.
I agree that Edit-&-Continue was a nice debugging feature but I disagree that it was the main draw to VB. The main attraction to VB really was the easy-to-use graphical widgets which was exposed to the programmer via an abstraction called "windows forms".
If one takes a look at a 1990s era Win32 "hello world" app[0] written in raw C Language, it has tons of complicated boilerplate. Lots of complexity with CreateWindow(param1, param2, etc, param11), GetMessage() loop, WndProc() callback. The Win32 HelloWorld example doesn't even handle a click event. One would have to add a switch case statement for the "WM_LBUTTONDOWN" message.
The VB "winforms" IDE eliminated all that and let a programmer "drag & drop" UI elements onto a "form" and put code on a "click" event. It was a clever simplification of raw Win32 API calls for business-oriented user interfaces. In the ~1991 era, the winforms abstraction empowered a bunch of 1980s 4GL programmers (e.g. dBase, Clipper, Foxpro) and business language programmers (e.g. COBOL) to immediately be productive writing apps for Windows -- without the steep learning curve of C/C++ and the raw Win32 API.
A lot of VB programmers I knew were not even aware of Edit&Continue but they nevertheless were able to drag a command button from the UI toolbox and add code to the button_click() event.
Another VB feature that I believe was more utilized than Edit&Continue was the VBX components ecosystem. Lots of programmers would buy add-on VBX widgets from various companies to enhance the UI such as calendar date picker, datagrids, charts & graphs, etc.
I'd disagree with both of you! VB's draw wasn't the edit-and-continue nor the drag-and-drop WYSIWYG GUI builder, it was all of the above plus more in a single self-contained package. VB was popular because you could do a lot of things using it, even if the depth provided by it was rather shallow (most people are fine with that). And if that wasn't enough, just grab some ActiveX control and it'll do what you want. VB was also built on the "common ground" of Windows tech, COM, essentially being the scripting language glue for Windows (yes Windows had a real scripting language - two in fact - but especially in the 90s, Windows=GUIs so it makes sense that The scripting language for Windows to be a one dedicated to GUIs).
It could have been better though, for example databases feel bolted-on instead of an inherent part of it, but i suppose if they added native database support (to the same level as native GUI support, not just talking to databases) it would cannibalize Access sales.
It was only with VB 6.0 that VB finally got competitive regarding native code generation and ability to write OCX controls in VB itself.
Still, I do find VB.NET quite good even without the QuickBasic compatibility features, and the fact that I still see people move from VBA into VB.NET proves it is still approachable as on the old days.
The concept of drag and drop components, and the PME (Property / Method / Event) programming paradigm is what made VB a success. VBX and OCX were implementation technologies and not really the secret sauce, except to the degree that they made the system extensible so it wouldn't be forever a toy with a fixed set of building blocks.
There was a lot of optimism at the time about how much of the more mundane software development would become the assembly pre-defined components and there'd be marketplaces of components. That's mostly not how things worked out but they did, for a while, for VBX. Seems like a bigger, more startling achievement than 'Edit & Continue' to me as well.
https://www.grapecity.com/componentone-studio
https://www.componentsource.com/
https://www.tmssoftware.com/site/tmspack.asp
It is just UNIX world is still busy replicating text terminals and daemons.
We got TCL/Tk in the 90's and right now I am doing some TCL code with the help of expect and some TK UI. Those replicating terminal and daemons forever and ever are just CADT Linux users who are trying to reimplement Unix poorly.
For everything else, TCL C bindings rock. Also, tcllib is pretty nice feature wise, too. For everyting else, as a RAD, TCL + SQLite, which is superior to Access on the DB field.
BTW, SQLite was born from a TCL developer, in TCL. Guess what's still used today, and which language, don't. Not even Access with VBA can match SQLite3's implementation.
Simplicity won in the end. The baroque interface of MS IDE's always gave a me a sense of innecesary bloat.
It wasn't a match for anything related to GUI RAD tools.
In fact it teached me to never use a programming language without either JIT or AOT as part of their default toolchain.
And the Tk L&F back in 2000 would make any UI/UX just cry.
For example, https://www.devexpress.com/
The basic vision that mundane programming would become the assembly of pre-built components has worked out astonishingly well though, to the extent that now many developers actually get upset if they're asked to write a program in an interview that isn't an assembly of pre-built components. They go on HN or reddit and post diatribes about how they should be asked to do "real" work, instead of coding up things they can just grab a component off github to do.
This could be but it is worth noting that this style of development wasn't unique to VB. Turbo Pascal and later Delphi pioneered this style of development in the same era as VB, each with their own inventions in an arms race towards easy-to-use.
But Visual Basic couldn't create self-contained executables. You needed to distribute an accompanying runtime dll. This was often a source of frustration for Visual Basic programmers when distributing their programmes: users didn't sometimes have the right runtime dll installed.
In contrast, Delphi, which also had a drag-and-drop interface builder was more powerful, faster and created self-contained executables with no external dependencies. My impression (which may be wrong) was that there wasn't much cross-over between VB and Delphi users. I think many VB programmers found Delphi's Object Pascal too complicated compared to the simplicity of the VB language so there was never an exodus of VB users to Delphi.
Also the runtime.dll is not any different from having the right MSVCRT.dll around, all programming languages need some kind of runtime, even if a very basic one.
Regardless, i'm was referring to single executable cases where you just download an EXE file and run it without the need for some sort of decompressing an archive to a temporary folder (especially considering that most people nowadays use 7zip which has broken behavior when it comes to running executables from an archive: unlike WinRAR it only extracts the EXE file, not any other files the archive may have and the application may need).
Many Delphi VCL implementations are also COM objects, and even COM can be loaded via xcopy deployments, they don't need necessarily the register, it is called Side-by-Side Assemblies in modern Windows dev speak.
Delphi VCL can use COM objects but on Delphi this is an exception rather than the norm, components on Delphi are (or can be) statically linked with the application. For VB6 the norm is using OCX controls... actually, i do not think it is possible to do anything else (outside of manually calling DLL functions of course, but even that is relying on a separate DLL).
Though none of them are as seamless as VB but then again, they are more powerful as languages, so you get some and lose some.
VB only really died when C# WinForms came along.
That combined with the easy to use WYSIWYG editor and the edit and continue functionality were, to me, what made it such an amazingly useful language for creating quick utilities or small programs. It was truly a "Rapid Application Development" language.
I also saw some nightmares in my days, though I don't blame VB as much as the people who created the app. The most notable one was a document management system that I'd been asked to port from VB3 to VB6 (so that it could run on win32 among other reasons) and to turn the system from a batch system for document processing facilities into a desktop DMS for home use. I will never forget when I opened up the project and there were 60 some-odd "forms" in it, and when I opened any one of them up not a single one defined a variable. They all - every last one - was defined as a global variable in a single globals.bas file. There were thousands of global variables. Every single one in the entire application declared there, and edited at will in any of the myriad forms wherever they fancied. My first task became "untangle the global variable mess."
Their researchers aren't using R, Python or even eyeing on Julia.
They use Excel with VB macros and those skillful enough, get IT to install them Visual Studio Professional and carry on using VB.NET.
Also remember that VB.NET, contrary to F#, enjoys equal footing with C# across all .NET deployment scenarios and Visual Studio graphical tooling.
The .NET version of Visual Basic, VB.NET, seems to be about as good as C# for getting at the .NET Framework and taking advantage of the "common language runtime" (CLR) but with more traditional syntax (Kemeny, Kurtz Basic, Algol, Fortran, Pascal, PL/I, etc.) easier to teach, learn, read, write, and debug. So, shock, I wrote the code for my startup in VB.NET! But, IIRC, there's a translator to convert at least one way between C# and VB.NET!
C# <--> VB
In fact we just moved into .NET 4.7.1 this year for our greenfield applications.
And the way the whole WCF vs gRPC has been dealt with, might mean some will even wait longer than .NET 5, so not a big deal.
Yes, also the UI technologies of WPF and Winforms are not getting ported to Linux: https://github.com/dotnet/wpf/issues/607#issuecomment-487360...
It seems like the people embracing .NET Core are using it for writing backend services (scenarios where it competes with Golang usage).
Sorry for the misunderstanding. I agree that Windows programmers will eventually migrate to .NET Core v5+. My comment was meant to be limited to the Linux scenario. I should have written "Linux" again in the 2nd sentence so that was more obvious:
- "It seems like the people embracing .NET Core on Linux are using it for writing backend services (scenarios where it competes with Golang usage)."
Microsoft has no plans to include the desktop UI technology of WPF & Winforms on Linux... even in the future unified .NET Core 5+ that deprecates classic .NET Full. Because the Linux side doesn't include all the Windows tech, it doesn't quite have the same 1st class status as Windows. But that limitation does not prevent C# programmers that want to use Linux from using it to write server-side network services (because no GUI required) where others might use Golang.
Where I am, when .NET is not possible, the alternatives are either the JVM languages or C++, no one ever thinks of Go.
enjoyed. Microsoft pretty much annonced it was a legacy technology and that they will not maintain parity going forward. Which is the only reason I switched to C#.
Excerpt from https://devblogs.microsoft.com/vbteam/digging-deeper-into-th... : "But with regard to the cloud and mobile, development beyond Visual Studio on Windows and for non-Windows platforms, and bleeding edge technologies we are leading with C#."
Microsoft made it very clear that VB.Net will not have equal footing with C# across all .NET deployment scenarios. The VB.Net being deliberately left behind for some future scenarios is a separate issue from your comparison with F#.
This is the audience that Microsoft cares about.
The kind of employees that outgrows their Office VBA macros, did not had any kind of CS background, and just wants to do some applications without having to create a custom IT order procurement for it, writing some code and dragging stuff out of the toolbox.
Umm, cough Lisp environments from the 1960s, Lispms, Smalltalk etc...
VB was the pinnacle of software development.
Nothing about it was perfect, except it was easy for anyone to build anything. I saw everything from kids making shareware to phd’s building multi-hundred-million dollar ERP systems.
A lot of nice-enough and useful software was built in VB that remained useful and editable over long lifetimes.
I pine for something like that in the mobile or web worlds. Everything else I’ve tried is an absolute mess in comparison.
I'm right with you. I taught so many people at places I've worked basic automation with VBA for Excel. People basically used Excel as a database so this was a massive timesaver for them. Being able to record yourself doing something and seeing the generated code was the modern-day software development equivalent of "teaching someone how to fish".
> I pine for something like that in the mobile or web worlds
Hypercard, but for the year 2019.
A recentish episode of a python podcast (https://www.pythonpodcast.com/anvil-web-application-developm...) had an interview with one of the founders of Anvil (https://anvil.works/). He claimed VB & Delphi as significant inspirations for their web app platform (using python for front & back ends, with a drag/drop GUI builder).
Might be worth a look, if only for curiosity's sake.
Something tells me that this could be a quite successful community project. Possibly for building cross platform apps for phones.
I like how we are at least talking again about Visual Basic recently - maybe it inspires the industry to build a super easy to learn language/environment for UI and data apps again.
VB had an extremely low barrier of entry, it was truly empowering for many non techies.
I'm a big .Net & C# programmer. But feel like no tool is as efficient for quick GUI apps as VB6 was.
to me it had these big draws 1) REALLY good documentation, this was the peak of MSDN.
2) object orientation for ui component reuse just made so much more sense than message queues in c/c++
3) out of the box ui that looked like a windows app. easy to make something that looked like users expectation of a windows app
4) speed of design and iteration. you could build new ui really quickly, and iterate with the edit/continue feature
5) it was cheap compared to other products, and continued to evolve with new versions on a regular basis. it had momentum
RAD Basic, a new IDE for Visual Basic 6.
Personally, I’ve always thought there was a niche for a VB6 runtime implemented on .NET that could intercept method calls an enable a system to be slowly rewritten in C#; issues with COM interop esp. visual components might be a challenge.
So due to emergency we rewrote all in a week in VB6 (or maybe it was 4 or 5 I don’t really remember) with the Internet Explorer browser object.
And thanks to the simplicity of Visual Basic it was possible to do so !
And then the demos lead to sales and we are still here 22 years later
Why was it easier to rewrite all your code than just buy a license to the component though?
It was in 1997 and it was not possible to order via Internet so the times the letter with the licence number arrive from US to France and we would have missed the important demo.
Plus, to be completely honest, we were totally broke !
It was not as powerful as VB, but being able to display graphical widgets in as few lines of code as VB got me hooked. Funnily enough RapidQ also supported writing CGI apps, which was my gateway into server-side programming.
Error handling was dismal. It was painfully obvious very few VB developers understood it and most applications would crash on failed IO. I’m talking production applications sold to third parties with 10+ years in the field. Syntax was incredibly clumsy. String manipulation was painful. It had classes but no inheritance. Small programs required complicated installers because OLE was the basis of all libraries. Most components came from for profit ISVs, and community sharing was actually rare. Many components had confusing license terms enforced by software that was as buggy as VB code often was.
And my search through FOSS has been for a similar environment, preferably supporting Python 3, now that I reflect upon it. Kind of a hold-over from working in Borland's ObjectVision back in the day, or FoxPro before that (the jump to Visual FoxPro caused me to stumble), or Paradox before that (as well as Ashton-Tate's DB2-3 and variants).
And yes, I am a hack who still manages to comment my code, at least at first. One of those "bad examples" I imagine c-corp professional programmers cite in TedX talks. But I do get paid :)
I'm very grateful for VB.Net. It's much cleaner and safer than VB6. My biggest wish now is for a way to port to C# piecemeal instead of doing the whole project in one shot.
I had recently taken OS/2 Presentation Manager courses at Microsoft and started to tinker with making an OS/2 version. The toy turned into a client/server product for the company that produced code generator and analysis tools for enterprise. It eventually because a cross-platform tool running on OS/2 or Win NT and targeting OS/2 and Win32/Win16. A separate X11 editor targeted several Unixes using the same document format and generator templates.
Good times.
Later versions including 6 could be switched back to SDI mode. I never liked it though, too confusing if you had stuff open in the background.
I'm saying that as someone who did quite a lot of VB6 programming many, many years ago but now generally creates UIs with some HTML or Vue or whatever inside of vim.
I think a lot more of what we do is related to fashion as much as any technical reason.
It's definitely not cool to program in VB6. People will assume you are not a programmer or just write awful code.
But that happens with any tool that really significantly makes programming easier, if it touches on the core paradigm of colorful cryptic text.
Due to this factor, and others, VB had the typical Microsoft learning curve: extremely easy to do simple things, and then exponentially difficult to do big things. It was the same in MS-Access that many people thought it was the future of client/server apps, ERP apps, etc.
This limitation was lifted in VB6 or so (dumped VB for Delphi when left win16 for win32 so I am not sure).
This led me to JS and PHP (asp.net drove me away from .NET for web) which ultimately led to my current career.
Granted, there was a lot to learn after I left VB, but for a self-directed ten year old, it was the perfect tool. Whenever I see someone trying to teach a youngster C or C++ instead of VB, JS, or Python (or Ruby) I cringe because there's so much there that they don't seriously need to learn, especially if they're just interested in dipping their toes in software.
I was lucky enough to be playing Sonic 3 and Knuckles on my Sega Genesis enough that I eventually asked my youth pastor, whom I knew was in IT, 'how do I make a game like this?'
He responded 'I dunno' and handed me a copy of Visual Studio 6 on a CD, and I grabbed a bunch of books from the library, and foolishly (but also correctly) tried to start with C/C++. The frustration of simply getting graphics to appear on the screen was enough to drive me away from it. While I understood the logic, what I really needed was a basic-level 2D graphics API like Cocos2D, likely.
Visual Basic was a very nice balance between code and it's visual link - I get the same feeling in a great way with Xcode and Interface Builder today. I owe it my career. :)
Web, particularly Dreamweaver and Frontpage served as the entry point for me.
They were actually very close to doing it. They created VSTA, which was a mini Visual Studio integrated in Office, allowing to integrate any .net code in Office just in the same way as VBA. I think one of the components of Office 2007 even shipped with it. Then they killed it.
The problem rather is that VB6 is a 1990s language and that not only Microsoft has never made a more modern scripting language available in Office (and I mean pre-installed on everyone's machine, with an integrated IDE, etc. I know there are all sorts of hacks and addins) but if anything they seem to consider scripting nothing more than a security risk and are doing anything they can to lock office down and make it hard for people to script it.
(Full disclosure: I work at Red Hat but my views do not necessarily reflect my employers views)
Objects were never embraced. Libraries are shunned. The project started to encompass every part of the company. It’s truly a picture of “persistence over skill”.
The worst part is that a couple years ago, the VB programmers started writing PHP code that is just as bad.
Most of the VB I've seen is front end code to MS Access '97 running underneath. We have been slowly chipping away at it and replacing various components but I wouldn't be surprised if at least some of it still around in another 10 years.
All sorts of legacy stuff here Visual Fox Pro - which I think is VB precursor as well. Lots of old 90's Commercial Unix stuff (RS/6000 era - Old C++ code - pre STL etc). Older than that we have a heap of Fortran and mainframe era stuff written in PL/1 language. Code and software here has very long lifespan and not always easy to replace it.
And this was a critical system. It certified the units we made were configured correctly-- which were then installed in semiconductor fabs.
Also, VB6 is responsible for my favorite bug ever-- an if statement: no more than "if count=0 then" that opened a dialog box, somehow. It was reproducible as well.
We wrote plenty of code in VC++, but I have to admit that VB had massively better ROI.
It wasn't bad. If you wanted a quick app with a few forms and a backend DB, then this was a decent choice.
I quite like it.
With the Regex and Scripting runtim COM objects, tools like a string interpolator are within reach.
I’ve been working on “VB, but hosted in the cloud, and built specifically for developers”: https://tryretool.com. We’re still early, so I'd appreciate any feedback :). To use Retool, you’re ideally an engineer who knows both SQL and JS. We connect to most databases, as well as any arbitrary REST / GraphQL APIs.
(Our docs are at https://docs.tryretool.com.)
Edit: removed a part I didn’t fully agree with, but paraphrased.
This feels a little elitist to me. VB (and Access) allowed a lot of people to develop mission critical things rapidly they would never have been able to afford before.
When I look at the complex monstrosities we develop these days I don't know if they are in any way more maintainable or well-built. Yes the people who created them know them in and out but give them a few years to become legacy and outdated and they will become a maintenance nightmare.
Looking around, I don't think these needed any help from VB to exist.
What's your front end stack?
Then the company decides to bend it out of shape or slow down the development. People cannot do anything about it because it's corporate-driven.
And yet, people have not learnt the lesson.