All about QBasic and QuickBasic
qbasic.net
qbasic.net
At the time, the quickest way to contact home was to buy a calling card for the onboard satellite phone, which cost something like $5 per minute to use. The alternative was to write a physical letter, and if you were lucky and the person wrote back immediately, that would be about a one month round trip. My little program was free to use, and shortened the round trip to about one day. I can't exaggerate how happy this made my coworkers and bosses.
One day, a particularly enlightened boss sat me down. "Why do you lie to yourself that you want to be in medicine?" "Uh, because I want to be a doctor?" "Stop kidding yourself. You want to work with computers. We both know it." Whoa. It was like a lightning strike. Well, of course I could go to school for that thing which had been my obsessive hobby since I was tiny! Why hadn't I thought of that?!
And so I got out of the Navy, enrolled in comp sci, and here I am today rattling on about it.
Thank you, QBasic. You weren't running on my beloved Amiga, but you were in the right place and time to kick off a career that I've loved every step of the way.
I’ve thought about that. There were so many “what ifs”, you know? At one point I’d been accepted to the US Naval Academy, and I have a hard time imagining how that would have turned out. If it ever gets to the point that someone’s letting me drive a ship, things have gone very wrong in the world. And maybe I might’ve made a good doctor. Who knows? But I was never as driven to do that as I’ve been compelled to learn a language, or write a hobby project to solve some problem, or do the annual Advent of Code, etc.
All said, I wouldn’t change a thing.
In my 60s now. Same.
In my crowd, it was well known that you wanted to spend your duty evening inspecting the ship’s kitchens. Make sure the officers’ mess cooks didn’t have too rough of a time and they’d make sure you didn’t leave hungry.
I guess they got into computers too late in their path (or, maybe, computers got too late for them) and missed the time window to make that their main job.
One of them (he is in medicine, actually) still today write very complex and crazy algorithms in GW Basic that blow up my mind. A true hacker.
I was so bummed about the move to AREXX. It was much better in many ways, like interacting with the system or other programs, but not nearly as good for writing actual code.
I don't know why it hadn't occurred to me before then that maybe, just maybe, I should consider that my favorite hobby was also a nice career path. When my boss (who I profusely thanked later in life) pointed that out to me, I was blown away. I didn't sleep well afterward, at first because I had seen my whole planned future fall apart and re-form in a completely different way, and later because I couldn't wait to get started.
I've never looked back, not for a second. This is what I was meant to do. I love it, I'm good at it, and I've never since wanted to do anything else.
And in one of life’s funny quirks, I ended up marrying a doctor. She’s as into her work as I am into mine, and she likes that she can tell me work horror stories and I like hearing them. It makes for some interesting dinner table conversation, to be sure!
I was introduced to the programming language when I visited some family in the Midwest US. I had gone with my cousin to the home of a kid named “Robbie” that lived in a neighbor.
Robbie is what people today would call a, “script kiddie,” and he introduced me to a variety of his “hacking tools,” mIRC, and QBasic. I thought it was the coolest thing I had ever seen.
I spent the rest of my time during that trip in my aunts basement trying to write my own QBasic games and downloading other people’s QBasic projects and trying to modify them.
I began to attempt to write my own Zelda-esque game and was completely baffled by the concept of z-ordering and my giant green square of grass continues to cover my character and flash when I would make the character move around the screen.
It was all an absolutely mess, but it was my introduction to programming, and it changed my life forever. I was absolutely enamored with what I had discovered, and it was the beginning of a lifelong journey of exploration in technology.
Thanks Robbie, wherever you are.
Too bad I lost my childhood programs (along with everything else) when the Chernobyl Virus ( https://en.wikipedia.org/wiki/CIH_(computer_virus) ) messed up my hard drive and I tossed it (no backups of course).
I wonder how many others of "us" are there.
So my files should all still be on that 386. But I do not know if it still runs
I made a backup, on a ZIP disk. Do not know where that went
From QBasic I went to Delphi, did a detour to PHP/HTML during high school and ended up at C++ some 14 years ago. Today I'm a SSE and I still love programming and everything about computers. Seeing this post (and all the cool stories in the comments) brough a big nostalgia hit - all those hours spent in front of my dad's Compaq Contura just writing one QBasic program after another (and playing Commander Keen, of course!)...there's a big box of flopp disks at my parent's house, I suddenly feel a big urge to go buy a floppy drive and see if any of my masterpieces have survived...
Many programs would inline machine code and jump to it to get around limitations like that.
Mind you, in my first job, we had a full professional system, written in GWBASIC.
It was 300-400kB of code, in modules of under 64kB each. There was one big module that set up all the variables, then it loaded the other ones in on top of itself. Variables stayed in memory, so there was no need to explicitly pass values between modules.
All very modular, with a big block of REM statements detailing what would be found in memory, under what names, etc.
It was fast, on a PC-XT class machine with a hard disk. It ran on anything, even with no memory management. The runtime was included with DOS, so the company didn't need to include anything extra.
When my employers started out, they were very small and a copy of QuickBASIC would have cost too much.
This app cost many hundreds of pounds in the mid-1980s. By the end it was £200-£300, bespoke customised for every client.
My boss wrote it and really wanted to modernize it. His boss wouldn't let him. In the end, he quit and started his own company.
I quit that job and went to work for my former boss, who rewrote it in QB4, removing all the line numbers and making it one big monolithic structured app, compiled.
But TBH that didn't add any functionality, made on-the-fly patching much harder, and meant it was up against full-fledged professional apps.
(The niche was that I lived on the Isle of Man, which has unique tax laws. British payroll apps are no use; American ones, worse. But expensive pro-grade apps were very customisable and could be made to fit.)
CP/M only handled 64kB of RAM and that needed to fit the OS too. Lots of business software ran in that space.
TL;DR: you can (or could) write useful professional apps in an interpreter with a 64 kB code+data size limit. Big ones, if you're rigorous about modularity.
In the winter of 1993, I learned QBasic enough to write a tiny program (game). I used graph paper to calculate the position of a heart-shaped object on a robot-like figure. You move the cursors to shoot (like Space Invaders or something like that). When hitting the heart, it types out a name (which I asked when starting the gameplay).
I had gotten my friends to arrange for "the girl" to play the game in a fateful extra class while we were preparing for our upcoming state-level 10th examination.
Yes, she did play the game after I taught her how to, and instead of just her name, it said something like "Love you, NAME." She became my first girlfriend, my first kiss. I think the whole school knew that.
Now, we have all grown up, with families, and the whole Class of '93 is still in a tiny group communicating regularly. Everyone still teases me to this day, including my wife, who is good friends with all the girls from our Class.
(Is that better or worse than having students use an Electron- and JavaScript-based free IDE that will run like a dog even on the fastest hardware around? Dunno, really.)
1000x better, and I am damn serious.
So I “unprotected” the BASICA program, made the requested tweaks, and compiled the whole thing with QB45. They now had a stand-along executable that could run on any DOS clone machine. And since it was compiled, performance jumped, it was super fast!
Took me 15 minutes, client was thrilled, I charged them $5,000. Easiest money I ever made.
No, I don’t feel guilty about it. Was it difficult? Not for me. I just so happened to know where to hit the hammer while no one else did.
Wow, you did all that in your 15 minutes of ever using a computer? You must be some sort of genius!
Actually those "took me X minutes" jobs are only possible because of years of prior learning.
You should not feel bad about charging for your years of experience resulting in expertise.
If it was so easy then everyone would be doing it on Fiverr for 15 bucks.
My first one was fixing a flaky TSR "new mail" notifier that came with Microsoft Courier, a pre-cursor to Microsoft mail. I decided to write a new one which "merely" involved reverse-engineering what memory location to check to know that there is new mail, and then reverse-engineering the memory location to update to put the info on screen in the same place with the same colors. It was a drop-in replacement TSR that looked and behaved exactly like the original except it worked properly. (I made generous use of Norton Utilities to figure things out.) To this day I don't know how I came up with that approach, or why I thought I would be successful, or how I actually WAS successful. Yet hundreds of people used it for years with no issues.
The other memorable app was a pop-up TSR chat app for NetWare. I sold that as shareware and made at least $500 selling it for $35 IIRC. That was the last time I made any real money from software I wrote for myself :)
My code was terrible, and bug-ridden (like all the best code), but I was able to be very productive with QuickBasic and it heightened my sense that with a little effort you could do almost anything with computers.
One thing I managed to do was to delete the entire source for NIBBLES.BAS (while the screen was blank due to phix), which my sister and I genuinely enjoyed playing. I just looked it up[1] and it was a mere 700 lines of quality BASIC.
GORILLAS.BAS is one of my influential programs, and I want to write a competent spiritual successor to it one day.
Edit: MONEY.BAS was also pretty awesome. I was too young to understand the idea behind it, but the ncurses-style UI and the random star background were great.
Edit 2: I eventually wrote a tomagotchi game. It had a pretty awesome ASCII art intro sequence, but was plagued by a mistake of mine. `INKEY$` waits for an input key each time it was read, so an if-elseif-elseif-etc. would result in a kind of race condition. My instruction on the screen was essentially to "hold a key until it works." I eventually got hold of that machine 20+ years later and fixed the bug.
[1]: https://github.com/tangentstorm/tangentlabs/blob/master/qbas...
Nowadays there is also Powershell which can use the entirety of .NET and of course one can make an .html file and open it in a browser in pretty much any OS.
Something that if found, the average 10 year old would find the sample games in about a minute of clicking around. Gorillas and snake is a must.
Simply, with QBasic specifically, you got...QBasic.
Yea, it came with a nice help system, but that help system was was a user guide and reference manual. It didn't teach you how to program. It just showed what the arguments to PRINT were. Useful, as a reference.
Outside of the TRS-80, which had a fairly large BASIC tutorial manual, the early 8-Bits had rather poor BASIC documentation. They were combined BASIC reference and user manuals, and not spectacular at either. And they certainly weren't robust computer programming tutorials by any stretch.
The simple point being is that while, yes, early computers came with BASIC, they weren't really set up for someone to actually learn how to program a computer. Anyone wanting to program the computer would need to find another book (or magazine) to learn programming. Even if that book were 101 BASIC Computer Games (which is an excellent mechanic, I learned a lot typing in BASIC programs).
Every computer today comes with a web browser, a web browser that can take them to any of a long list of sites where they can start coding immediately -- whether in Javascript, or even many other languages. If anything, of course, the problem is that the web is "too big", the menu "too large" and an unguided novice can get lost in vast array of choices. I actually pity some poor soul typing "learn javascript" into Google alone.
But, truth is, today, there are even few of those. Few are learning this stuff in a vacuum today.
The modern web is hardly a barrier to someone interested in programming today. The available resources are endless.
QBasic was a wonderful tool. It was beautiful and useful. A very elegant early IDE. Head and shoulders above GWBASIC/BASICA. But, still, stand alone it was incomplete.
That led to a lifelong successful career as a programmer and software entrepreneur with no formal schooling in programming, tech or business. In theory, all the info for free on the web should make it even easier to self-teach and bootstrap your way into the industry but I'm not sure it does in practice. Maybe only having one available path to self-instruct was somehow more effective?
Thanks Radio Shack!
Maybe in the US where the TRS-80 was sold but in Europe we had really good manuals with things like the Amstrad CPC.
Also all the old platforms either do or soon will live on forever in Javascript/WASM based emulators.
Another QB site well worth the visit is http://petesqbsite.com/ (not mine, despite the similar name).
I owe the great arc of my life to that program.
Hah, same for me. I had no peers who knew programming, only a buddy who mentioned QBasic after I stumbled upon a small BASIC program in a magazine.
I'd spend evenings just going through each successive keyword in the help, trying to figure out what they meant. Didn't help that we only started learning English in school at age 12, so lots of words I didn't understand at age 13.
On the positive side, I think this is what made me so good at reading and understanding documentation, a skill that's been incredibly valuable for me since.
Your memory betrays you: QuickBasic is the version with a compiler. QBasic lacked one, though.
I remember this feeling like a big deal for me back then.
(Or are you exotic-.com cool?)
As for .BAS vs .EXE, I remember it was definitely about .EXE feeling "more real". I mean, I had the Basic interpreter in my computer anyway, and distributing programs wasn't in my mind, so a compiler wasn't really needed... it just felt that an .EXE program I could write was more "like the real deal"!
I still used QB4.5 occasionally to bash out a code idea just because it is so easy to get an idea down and running before moving it onto the real deal.
I am still upset that I threw out the hard drive with my side scrolling platforming game. It could do smooth scrolling like Mario on the NES but on a 486 33Mhz. Learning to split and address data sets as is needed would the game changer for me in gaining the speed up to what was needed.
Big nostalgia hit here.
One year I sent a “Happy Christmas” message to all stores on our internal Lotus Notes email system with a hyperlink in the email.
The link would, when clicked, load GORILLA.BAS into Qbasic and run it. The idea was, in my teenage mind, a little Easter Egg to cheer people up around the festive season. Unreal to think that you could just link and run an executable from an email back then!
An hour later I get a frantic call from group IT - I’d forgotten there’s no “exit” button - we now had 100s of stores where all the computers were playing Gorilla, and nobody knew the keyboard shortcut to quit the game.
I think the IT guys had to call every single store that day and tell them how to get out of Gorilla. For whatever reason, I wasn’t fired.
One day when he was out, I messed with the qbasic source and made his gravity concept be a random number. My coworker's winning streak ended as did his constant nagging to get people to play!
However I always felt it was a bit unfortunate that Microsoft never invested into QuickBasic the same way as they did with their C products, even with VB later on, it had to wait until version 6 to get a proper AOT compiler, and even then, only to be eventually replaced by .NET.
Somehow a company created on the BASIC wave seems to always have had a vocal minority (internally) that always messed up the products that helped the masses to program with more productive languages (nowadays still present in WinDev vs DevDiv politics).
https://www.amazon.com/Using-Turbo-BASIC-M-James/dp/18505809...
One reason I get sour with C, is because I was tainted with having the opportunity to do system level stuff Turbo Basic and Turbo Pascal languages and environments before getting acquainted with C.
So I learned to use a lighter before having to deal with creating fire with sticks, thanks Borland.
Sadly today using QBasic for real work would be difficult if you have to interact with anything else that basic I/O. I'm not aware of a websocket QBasic implementation or any kind of scalable framework. But it has to keep existing, so we can teach our children basic before moving on to the horror show languages we use today.
I remember doing a lot of QBasic on the computers in high school and having a blast – first time I ever felt like I really knew what I was doing, and somehow it even made learning by trial and error feel especially rewarding.
https://github.com/Hutsell-Games/civil-war-strategy
https://classicreload.com/civil-war-strategy.html
https://hutsellgames.com/civil-war-strategy/
[EDIT] Here's the 5k lines of code comprising the game, for anyone interested in seeing a formerly-commercial, stand-the-test-of-time example:
https://github.com/Hutsell-Games/civil-war-strategy/blob/mai...
Like so many here, QBasic literally altered the course of my life.
Does anyone here remember that feeling the first time you realized the power at your disposal?
[1] https://www.amazon.com/Mastering-Quickbasic-Rita-Belserene/d...
I remember being very proud of reverse engineering how BMP (I think?) files worked (pre internet days!) and writing a program that could (very slowly) render them in QBasic. There was a guy a couple of years above us who fancied himself as a bit of a hacker (I remember he edited the boot sector of the library computers to infinitely reboot…) would make proper “demo scene” style programs in QBasic which was pretty impressive, I wonder what became of him!
Would be kinda fun to go back and play with it with a deep understanding of programming, and see what is actually possible if you really understand it.
Code printed out in a popular hobby science magazine helped a lot too. I remember manually typing over whole pages full of unintelligible poke commands and how those would work at best 30% of the time.
I think it was the ability to directly tinker with the values and formulas in the games that I loved to play that shaped the coding style I'm still using to this day. Often I'm not exactly sure why I'm trying something, other than that it just "feels like it might be the right thing to do". And about 60% of the time it turns out I'm right.
Even F#, I am not really sure how long they will keep investing into it, as they have pivoted into trying to push F# for data science, while at the same time hired Guido and are driving the efforts to make CPython faster, and keep adding F# features to C# as well.
The irony that we get more options on the JVM side than on the CLR, versus what each one originally stood for.
We sat down together for a short while as they showed me thousands of lines of incredibly complex QuickBasic code.
It probably only lasted a short while as the bank upgraded their systems soon after that, but it was impressive to see what could be done with Basic for this time of corporate financial systems.
To this day those guys impressed the heck out of me, and that really caused me to switch from just doing computer repairs to programming.
So to those two English dudes out there, Thanks.
One of the first examples I built was a clone of Nibbles in only 120 lines of code which you can play at https://akedo.app/play?g=8eolqpn_fk-kr1TLi_WmKw
I'll need to come up with a version of Gorillas next!
Also worth visiting:
I was 11 when I discovered QBasic. In the years after that I made a few platform games (Martian Venture, Shotgun Sam) and a pixel art program, and a whole slew of unfinished things. Never could stop programming after that.
Without Internet, an empty mind is Basic's workshop.
Back then it was you and the computer, and maybe some magazines (well, and maybe BBS'es, but I never got into that). You had time to focus. The only major distraction were games, but then again we have many more today, and ALSO all the distractions of the always connected world.
The advantages today are obvious: every answer at your fingertips, online guides and interactive tutorials aplenty, chat, stackoverflow, no reason to get stuck in your programming journey.
But also, instagram, Facebook, whatsapp, HN...
I took a deep dive into BASICs earlier this year and came away with some unexpected results. In software, these stood out:
- SmallBASIC ...not the Microsoft one. Wow this is quite an interesting set of tools, and I was impressed by ongoing developments. I started with it on my phone and continued on my other platforms since it worked so well. There are some faux-OOP convenience features even, like myfakeobject.value = 10
- QB64pe ...this really holds your hand and the documentation is great.
- To-try: https://wonkey-coders.github.io/
In discussions with developers, I was surprised to find some extremely intense, protective vibes. I'd consider "my BASIC == my childhood" a pretty reliable model. Simple how-to queries that would get ordinary answers in other languages sometimes brought out defensive responses.
In group discussions there was also an interesting overlap between "strangely protective of my past" and "prefers writing BASIC" that came up over and over while I was trying to figure out the overall ecosystem of languages.
For example, somebody wrote an algorithm example full of $ii $tk $zx and so on and I asked them about this (who knows, maybe there's some logical reason to not use my_variable_name for example) and the tone became very defensive, even insisting that maybe it was wrong but they are never going to change! Which didn't exactly have anything to do with what I was asking...
In the various online forums there was frequently an ongoing argument over who left, for what reasons, where they ended up, and are you a member of that forum, and so on.
Overall there was a surprising amount of interpersonal drama given its proportion to the active surface area of this language. And a lot of emotionality that just isn't as prominent in other communities I experienced, even though it's probably there at some level.
Since I have spent a lot of professional time doing relationship work with techies, these things kind of reminded me of work pretty quick, and I found myself heading to some more modern languages just to get beyond the unaddressed, or unaddressable, feels-factor.
Still, I look forward to coding some more in the future and particularly in trying out some of the newer tools I discovered.
The only Basic I used long ago was in C64 and AFAIR only the first two characters were significant; maybe the person was (unconsciously) trying to write some kind of "portable" code :)
In my experience, groups devoted to niche topics tend to have this sort of drama and discussions about who goes to which other forums, with rivalries between groups with similar interests, etc.
Retro-anything communities in particular. Retro-anything also has the added flavor of "what they are doing these days is wrong, back then we would do $THING instead and it was so much better."
In mid-90s our home had an Amstrad PCW8256 which had CP/M and something called "Mallard Basic". It was the first computer I ever used.
You wrote code by typing a line number and then the code you wanted on that line.
The local library had a little instruction manual for how to program and had some example programs. I was like 6 years old and typing a lot was hard for me so I had my mom type in the example programs from the manual that I then tweaked.
I didn't know it at the time but that particular computer was already hopelessly outdated by the time we had it. (IIRC it was from late 80s, and the year was somewhere around 1995-1996).
Later we got a Windows 3.11 machine with some 486 and it had QBasic. I had a lot of fun reading and tweaking NIBBLES.BAS and GORILLAS.BAS. Especially to make the bananas in gorillas explode in much larger explosion because for a kid like myself the bigger the explosion the more funny that is.
Fast forward 20 years coding my entire life and I got master's degree in computer science and immigrated to USA to work in tech. Thanks Basic!
You were learning to write in modern BASIC without line numbers at that age? That's really interesting actually, not something I've heard about before.
I managed to build a breakout style game a few other things I can’t remember.
This lead to me learning html and then unlocked my whole career basically.
It is sometimes hard to imagine how much the DX has evolved over the years.
I also remember how impressed I was when I first saw a program bouncing 3d shapes around the screen instead of my 2d lines.
https://www.pcjs.org/software/pcx86/lang/microsoft/basic/qui...
Classic hangouts at jacobpalm.dk, reviews by Todd Seuss at Data Components.
Halcyon days.
I got my start writing one of the guis that was reviewed by MystikShadows on Pete's QB Site... Making things appear on the screen was so exciting. Now I kinda do the same thing, but with Jetpack Compose in the automotive space.
Btw, slightly related, if you want to do some BASIC from a Scala context, check this out: https://github.com/tpolecat/basic-dsl
TRS-80 Level I was very limited, and BASIC V2 on the C64 was only barely adequate - anything and everything interesting required myriad PEEKs and POKEs. I also pity anyone who tried to do anything with Intellivision ECS BASIC.
Then you have your awesome BASICs like IBM Cassette BASIC, GW-BASIC, QB, and BBC Basic.
TRS-80 Level I was limited because it was essentially Tiny BASIC with floating point added. Level II BASIC was Microsoft BASIC.
The Apple II initially came with Woz's Integer BASIC in ROM. It was better than TRS-80 Level I BASIC, unless you needed floating point. The Apple II Plus had Microsoft 6502 BASIC in ROM. It was essentially the same BASIC that Commodore used in the VIC-20 and 64, except Apple added a few graphics commands to theirs and Commodore added the screen editor. The Apple II and Commodore 64 ran at about the same clock speed, so when you benchmark their Microsoft 6502 BASICs, they're pretty much identical in speed.
For lack of an assembler, the initial way to use it was to hand-compute the op codes and put them into BASIC's "Data" directives, which you could read in a loop and store in some free area using POKE and then call from BASIC with the SYS command. One wrong number and the whole thing hangs, reset, type it all in again or load from a music cassette if you were lucky and had stored a recent version on tape (which took many minutes to read back in whilst giving various beeping sounds).
Basic is a great programming language, it is just such a shame that it has reputation as a language used by novices and beginners.
https://github.com/GorillaStack/gorillas/blob/master/gorilla...
The syntax is more Ruby/Lua like but with the improvements that Python is making in typing, it looks like it could get there in three minor releases.
Gross.