I’m super grateful for little things like that. All those older people that were welcoming to me on those forums have a special place in my heart, and I’ve been thinking about them fondly while I build a compiler—something I wouldn’t have been able to do without them answering all my questions when I got stuck.
I do miss the old Internet.
Later I spent a lot of time writing IRC bots and the IRC communities were equally as friendly.
The real light bulb moment for me was a PHP tutorial from, I think, W3Schools. There was this moment where I realized I could build this thing and with a single click anyone in the world with a computer and internet connection could consume it. Everybody has a web browser! That was the moment I realized I wanted to to be a web developer and I never looked back.
However, today there are far better languages that are easier and are better introductions to programming for beginners. Of those, Python is my favorite.
Maybe that was only the case in the '70s and '80s. I'm sure that if I had Python as a kid, it would have been just as easy to experiment as it was with BASIC back then.
The early interpreted BASICs did make it difficult to write good code. All source editing was line editing, every line was numbered, there weren't any structured control flow statements, composite data structures were limited to arrays and strings...
But even as early as the second half of the 80's there were mainstream implementations of BASIC that addressed all of these. Microsoft QuickBASIC 4 added a full screen editor and then completely relaxed the need for line numbering. Line numbers were still supported, but so were symbolic labels. QB4 also had support for functions/subroutines, decent control flow statements, and structured data types. There was also reasonable support for extension libraries, and the like. As long as you didn't rely on any code patterns that required any kind of callback or inversion of control, you could do a very nice job writing well factored and maintainable code.
The sad part is that, because BASIC was supposed to be the "easy" programming language, it was frequently used as the language in which students were taught how to program. Which meant its bad habits ended up getting impressed hard onto a lot of impressionable minds. I spent years fixing all the ways first learning to program in BASIC had bent my brain.
Back in the early 80's, my elementary school piloted a program (inspired by Seymour Papert, I presume) to teach school age children to program in Logo. So we had a lab full of twelve C64's across the hall from the Apple ][ lab and were taught to program in Logo. This included structured control flow, sub programs, recursion and the like. It was a far, far better experience than I imagine it would've been to be initially exposed to Basic.
In retrospect, this is probably a big part of why, a few years later, I found some of the structured programming facilities of QB4 as appealing as I did.
You have to see this in historical context. That Basic had an editor was a huge step forwards. That it wasn’t a full-screen editor was because full-screen editors didn’t exist yet (who wants to wait for their teletype to print 24 lines, and waste half a page of paper on it?)
https://en.wikipedia.org/wiki/BASIC#Origin:
"The first version BASIC language was released on 1 May 1964”
https://en.wikipedia.org/wiki/Text_editor#History:
"One of the earliest full-screen editors was O26, which was written for the operator console of the CDC 6000 series computers in 1967.”
I (mistakenly!) edited out the part of my post that clarified I was thinking of microcomputer implementations (77-83 or so). Of course, full screen editing was common then, even if not necessarily in the interpreted BASICs of the time.
BASICA had a command to edit a line 'EDIT 120' that let you use an interactive line editor of sorts. (And C64 BASIC 2.0 could do something similar, I'm pretty sure). On the contrary, the contemporary Logo implementations of the time let you hit an F-key that dropped you into a full screen editor window with your source text. QB4 just started you off in the full screen editor with an immediate window (REPL, sort of) at the bottom of the screen.
When I was sixteen or seventeen, I worked as a summer intern in the IT department of a local utility company. They gave me this data conversion task that they expected me to complete manually on a timescale of roughly the entire summer.
It took about two days before I just automated the whole thing with a Turbo Pascal 6 program and had the task completed in something like a week. The biggest part of the challenge by that point was moving around a large volume of data (~100MB) on the 1.44MB floppies common at the time. (I remember ARJ helping immensely, between it's multi-disk support and the high compressibility of the data.)
My unexpectedly high output on this task served me well.
It's actually more difficult to teach Arduino in a day or two and hope any of it sticks if the person you're training in coming in with zero programming background. BASIC is still an easy language for complete newbie to pick up in a short amount of time. The ease of learning comes at a cost later on though. I've encouraged teachers to start with BASIC if their students had no prior background or if they themselves feel overwhelmed by the wider pastures of the Arduino. I underscore that the time spent learning C++ in an Arduino context is a better investment than time spent mastering BASIC. BASIC is easy to learn for the purposes of the robot, but C++ can control the robot and allow you to branch out into countless other languages. I liken programming languages to spoken languages and learning C++ is like learning Latin. It may be obtuse and difficult at first, but once it clicks, you can easily slide into any number of other languages with ease.
I'm now not really beating the BASIC drum anymore, instead I talk up Python now that Parallax has released a bot built atop the micro:bit. It's limited in the amount of memory on board and python eats embedded memory for lunch. It's time well spent learning Python. It allows students to grow into "what's next" far easier. Kids that learn Python on something like this robot can easily write the same kind of code on a computer to have it do all sorts of things. Kids in camps that I've run (and students in my classroom years ago) love learning about the countless python libraries they can use. I casually point out "mouse" and they making "random mouse movement" scripts as a gag. I always "fall for it" each time. ("Oh no! What?! My mouse... it's jumping all over the place!!!" - met with giggles, high fives, raucous laughter, etc)
So, yeah, I actually still teach BASIC on occasion, but I'm more and more turning teachers into Python lovers and C++ for the Arduino.
On a personal note, I collect vintage computers. I have too many and stopped counting at 50. So I do use BASIC in that sense.
I've used it to make a business dashboard for my indie software business, a schedule estimating app using "evidence based" Monte Carlo methods, and I was working on a cross platform Micro.Blog client (inspired a lot by Tweetbot).
I teach kids to program via an after school robotics club and Python is so much easier and more powerful than BASIC ever was.
Occasionally I get nostalgic and break out a BASIC and its fun for a bit but I quickly realize how clunky the language really is.
It gets the job done. Part of my reticence is ignorance. I might have a meaningful opinion if I were familiar with more than just println and single line if/else. I am glad I don't need to plan for line numbering in any other realm.
I echo the sentiment of proxybop; the ability to type things and see something happen is a powerful motivator in learning to code. As a lot of commenters point out, Python seems to have largely replaced BASIC as the "beginner" language to help teach folks. The REPL reinforces this, imo.
The lack of a reasonable porting tool and the fact that it didn't really have any advantages over C# in .net land, it made sense for most people to jump to C# instead of VB.net.
MS had to know this was going to happen. They left the door open for someone to actually create something to fill the VB niche, but all the focus on web technologies has meant that nothing really stepped up.
Indeed! Desktop tools largely got ignored and everybody went web. But web development is a royal pain in the butt. Apps that a single developer/analyst could produce in a couple of months now require teams of specialists (UI, middle, DB, etc.) and bloated stacks. Productivity died. Yes, deployment is simpler with web, but the desktop tools had been improving in that area. Something died.
(Under ideal circumstances, a well-run web shop can be productive, but it takes too many things to go right. Most orgs are wobbly.)
VB6 (runtime and language) was great for its time but it's an evolutionary dead end.
> Was it because of Microsoft forcing VB into "just another skin" over .NET, i.e., a variant of C# that doesn't have curly braces? That's how it looks on the surface, but it's compiled, not interpreted, has an actual type system, threads, a proper standard library.
There's also the need to gather the C++ Win32/MFC crowd and the VB6 crowd into a single tent.
It would have been (maybe still would be) amazing to see what the community would pull off with VB6 if Microsoft would open source it.
VB6 IDE was so far ahead of it's time, even today (20+ years later) most languages don't have anything that comes close to what Microsoft had done there in the 90s.
It would probabaly the perfect language for UI development and data analysis (think VBNotebooks), possibly ML.
It's UI tools were eventually bettered by the WinForms and WPF/UWP Designers.
Having to work in the VB6 IDE against my better judgment still, I have zero nostalgia for it left.
People want simple, that's why Go is so successful these days - in many ways the enthusiasm (positive and negative) around Go reminds me of VB6.
The fact that VB6 and IDE still works (didnt know that) on modern computers is by itself an amazing thing actually.
> WinForms (and generally VS.net) was always slow in comparison
It was slower at first, sure. Performance was a huge project over multiple years for Visual Studio and the WinForms designer hasn't been considered "slow" in years.
> and WPF, same as WCF, is just an abstraction nightmare (and even slower compared to WinForms)
Not really? XAML itself is a pretty direct representation of an object graph. More so than the hideously long Attribute blocks at the top of VB1-6 FRM files and the giant blobs of binary nonsense in FRX files.
WPF Binding can be confusing, because like Vue or half the other web frameworks, two-way data binding is hard. But WPF has always supported classic double-click to code behind and set properties directly on window controls models of UI code writing, just like WinForms and VB1-6. Just about no one recommends it, for the same reason people recommend two-way binding systems like Vue because it can simplify other parts of your application and can be hugely beneficial on the other side of the learning curve.
Mileage varies on the speed of the WPF designer. Again, performance is something that greatly improved over time. Most of my worst WPF performance problems, when I was using it regularly, were with third party controls I had no control over, and tried to get rid of.
Personally, I'd greatly prefer to write XAML by hand in notepad than design in a UI in VB6 ever again. I'd complain a lot without tools to help me fix basic IntelliSense mistakes in my XAML, but I'd do it. Obviously, everyone's opinion will vary.
> The fact that VB6 and IDE still works
I cannot stress enough: it doesn't. The work I have to do in VB6 is pulling teeth. I have to do it in a VM that for reasons of security now has to be entirely isolated from network access. Even just scrolling code in that VM now takes what feels like subjective minutes to scroll just a few lines at a time. I'm constantly trying to use VS Code to comb through the codebase and prepare my plan of attack before ever opening the VM and it's like preparing punch cards for a Mainframe because I want to make sure I've prepared enough I spend as minimal time in that VM as possible. Navigating the VB6 in VS Code is horrible due to the aforementioned Attribute block garbage and absolutely no sense of navigation because all of the event handlers are wired in the FRX opaque whatsit from what I can tell and you can only assume that functions still do what they were named to do and that a `Form32_Load` wasn't actually repurposed to be `Button98_Click`. For the most part I'm thankful the codebase I'm working on isn't that evil, though I'm incredibly sick of VB6-era Hungarian notation at this point.
Everything evolved, it sounds like you just don't like the direction it evolved in.
I know so many hobbyists, and even professional developers, that were totally lost. Microsoft really messed that one up, similar with what they did with Silverlight.
Too bad Microsoft didn't open source it.
Also, because it is from an ancient image I don't want to break it because I doubt we could rebuild the ecosystem from scratch, it feels like it is stuck in VirtualBox, which is I think a large part of the slowdown because VirtualBox doesn't just directly support Hyper-V-based acceleration like just about everyone else finally does. I really need to convert it directly to a Hyper-V VM, but I don't have the free hard-drive space at the moment to have multiple VM copies around, haven't had the budget time, and I'm not sure I trust some of the available tools.
I'm using the last build of Git for Windows I was able to get to install on XP, and I pray that there isn't a compatibility break as right now a shared worktree-less folder as "remote" to the VM internal repo is the only way I'm getting code in/out of the VM. I'm generally happy with VS Code outside of the VM for full text search, but VS Code can't build "Find All References" and "Go To/Peek Definition" maps, and that's the biggest itch that I miss, and VB6 IDE never had a good "Find All References" because it predates that tool in VS by like half a decade at least, and more than a decade before "Peek" sub-editors came about.
This isn't necessarily a bad thing because it's hard to make both small projects and big projects happy at the same time. But MS decided to focus on "enterprise" because the profit margins are usually bigger there. Thus, they mostly abandoned the original VB.
This sent a shock-wave through the industry because their code base couldn't go anywhere. It did give a boost to FOSS, because it's less likely that a heavily used FOSS product will be outright abandoned.
When .NET came along MS replaced "classic" VB with VB.NET, which was syntactically just different enough from classic VB to make moving to it a big project.
Worse, VB.NET wasn't backwards-compatible with classic VB, so you couldn't just bring your old projects into the new environment; you had to rewrite them from the ground up in the new syntax.
Worse still, to encourage VB devs to move to VB.NET, Microsoft stopped selling licenses for classic VB. Not "warned developers they would stop selling licenses in five years" or the like, mind. They just stopped. If you wanted to buy a license for VB, it was VB.NET or nothing. Which, when you considered that VB.NET wouldn't run all your old code, was kind of terrifying.
All of which amounted to dropping a nuclear bomb on the VB community, as it pushed everyone into doing what someone (I think Joel Spolsky) once called "the dreaded market survey." In other words, if you're going to have to learn a whole new language in a hurry anyway, why not consider all the new languages available to you?
So while a few classic VB devs did move to VB.NET, most ended up landing elsewhere; some to C#, some to web application platforms like ColdFusion, some to open-source languages like Perl, etc. (I went to Perl, which led me to PHP, which led me to Python.) What had been one of the world's largest programming communities was scattered to the four winds overnight.
It has some issues, but it's still probably the best possible tool for making cross-platform desktop applications.
I really enjoy the expressive power and/or other features of Swift, Go, and a few other languages, but if I could write code in only one language it would be an object-oriented BASIC like Xojo.
If you need to program in a particular language at your place of work, or you want to learn a language to compete for a job then that's a different matter. ;-)
I still break out the QBasic once in a while. I have it in DosBox for when I get the itch. In AppleWin I toy with Applesoft Basic. I also play a bit with QB64 which is a modern QBasic clone.
Normally I write code in C# or Python though. C# is my main language and it's what puts food on my table.
BASIC was designed with a simple, algebraic syntax to enable non-experts to learn how to write simple programs in an afternoon, and Python seems to follow in that mold.
In fact, the following BASIC program runs fine in Python 2.7:
a = 2
b = 3
print "Hello, world! Let's do some math:"
print "a * b =", a * b
XBASIC, QB64, and various BASICs specific to old computers I still use, like MBASIC on my Osborne 1.
(prog ()
10 (print "hello")
20 (go 10))20 ???
30 GOSUB 10
40 PROFIT!