30 years later, QBasic is still the best

(5 minutes read)

My oldest son Noah turned 7 three months ago. If he could trade his family for a 2 hour session of playing minecraft, he would do it in a heartbeat. The other love of his life is Super Mario Maker, and it’s been a thrill to see him play the same game and levels that I played when I was his age. About 5 months ago, I left my family for my yearly pilgrimage of ludum dare: a game dev competition during which I lock myself away with friends, return to a state of primitive caveman, not sleep for 48h, and create a full game from scratch (play it at the end of this post!) As I proudly showed my revolutionary AAA title to my wife, Noah was naturally intrigued and I introduced him to the world of code, showing him how simple words (he had just learned how to read) produced an actual game. Since that very day, Noah has been asking me repeatedly to teach him how to make his own video games. And for the past 5 months, I have been looking for the holy grail of language/IDE for kids in the hope of turning that spark of interest into a memorable experience…

My quest has led me to endless forums, through which I have tried countless suggestions: SmallBasic, Pico-8, Smalltalk, Scratch, etc. I have even inquired of the Great Oracles of StackOverflow, to no avail. After 5 months, I ended up with a disappointing conclusion: nothing is even close to what I had back in another era. 30 years later, QBasic is still the best when it comes to discovering programming.

“OMG please don’t teach him GOTOs!!”

10 PRINT “OH NO, WHAT ARE YOU DOING?!!!”
20 GOTO 10

Yes, QBasic is a terrible procedural language. It introduces one to concepts widely considered harmful, uses awkward syntax for implicit declarations, is not case sensitive, is non-zero-based, etc. the list goes on… When developing a skill, it is much better to acquire the right reflexes from the start rather than have to correct years of bad practice. Following this advice, I should have probably started off with the basics of the ruby language which I love. Yet, while most of those QBasic concepts are today generally considered as red flags by our peers, they each served a very specific purpose at the time: to keep the language simple and accessible, a notion that every other language has left behind in favor of flexibility, complexity and logic.

I installed QBasic on my son’s 11” HP Stream today, having to hack a DOSBox manual installation. He double clicked the icon on his desktop and in a split second, we were in the IDE, greeted with the introduction screen which brought back so many memories to my mind:

I then told Noah that there was a very sacred ritual, mandatory for anyone who enters the secret inner circle of programmers, to start off with a program that greets every other programmer out there. As I dictated the formula, he slowly searched for each key, carefully typing with his right finger the magic words: PRINT “hello world”

He pressed F5 and looked amazed as he saw his code being compiled into text rendered on his black screen. He smiled, gave me a high-five, and then scribbled down the code in his little notebook so that he could remember later.

We went on to a couple more commands: CLS, COLOR, PLAY, INPUT, and IF. There was nothing to explain: no complexity, no awkward operator, no abstract concepts, no documentation that needed to be read, no notion of objects/class/methods, no framework to install, no overwhelming menu/buttons in the IDE, no special keyword or parenthesis. It was code in its purest simplicity and form.

After less than an hour, he wrote his first program on his own – an interactive and incredibly subtle application which lets you know the computer’s feelings towards you as an individual and sensible human being:

…which he ran with utmost pride for his cousin and best friend Christian:

…after which he proceeded to easily explain him how it worked and what the code was doing!

And so it was that in a single hour, my 7 year old was able to not only write his first text game, but also to experience the fun and thrill that comes from creating, compiling and executing his own little program. Bonus points, it all fit on a single notebook page:

I was so glad that he was able to understand why I keep saying that I have the best job in the world. My only regret today was to realize that in more than 30 years, we have not been able to come up with something better for our kids: Qbasic has a limited set of simple keywords (the entire help fits on a single F1 screen and is packed with simple examples!), does not distract the coder with any visual artifacts, has a very confined and cosy dev environment, shows errors as early as possible, compiles and executes the code in a heartbeat with a single key, and is extremely straightforward. We have built more robust and more complex languages/frameworks/IDEs (which are of course necessary for any real-life application), but we have never really made a simpler or more direct access to the thrill of programming than QBasic. Even running QBasic today has become dreadful to the novice that uses a modern Mac/PC/Linux machine, whereas it used to simply require inserting a 3,5” floppy in the A:\ disk drive…

Enough rant, today is all about the celebration of yet another person who discovered the excitement and beauty of programming!

Cheers!

(as promised, my AAA title for which I await EA’s call to purchase copyrights)

165 thoughts on “30 years later, QBasic is still the best”

Great write-up. Check out FreeBASIC. I recently wanted to quickly solve a problem with a BASIC with no learning. Also started with QBasic. FreeBASIC looked… from what vague memory recalls… just like it with me picking it up in usable way in 10-20 minutes. Wrote app in pseudo-code, mapped that one to one in BASIC in text editor, executed it with simple command in shell, and it ran correctly the first time. And fast!

So, try it out. If I get similar feedback, I might start recommending it to educators just to get people started and hooked on the initial high.

I agree with you that Qbasic is great. My feeling is that big business and arrogant programmers with big egos have ruined the beauty of programming. I started with basic on a commodore 64 and loved it. I now program PHP for the web and love it because it allows you to code how you want to code. Yet OOP was forced upon PHP and now it just isn’t as fun. I wish some would bring a new language that is fun and easy that goes beyond Basic and PHP.

Great programs get built out of love and the fun of coding than out of code built by code Nazis.

10/10 article – like many others I first learnt qb style coding, mixed with assembly for speed, and all manner of insane optimization (look up tables to avoid floating point math ahaha) oh how I miss thee. For me the only thing close in terms of time to implement is probably JavaScript which imo is also very easy to learn ..

Wouldn’t using a subset of a scripting language like Python or Ruby provide a similar experience? Even though they have OO/functional designs, these aspects can be entirely ignored.

Ruby in particular is designed to work well as an unstructured/procedural scripting language. And its keywords almost exactly match those of BASIC. if .. else, for .. in, while, until, begin .. end while, def, puts, gets. The only thing it’s missing is goto, but… ew.

@ProgrammerDude
Did you see a line number in the code? Didn’t think so. Also, QBasic supports (though doesn’t require) subroutines and functions, complex type declaration, etc… So, you can actually grow a pretty long way with it.

If you’re the unfortunate sort who chooses to use Windows as their primary development platform, then perhaps that’s true. Normal operating systems (as in, almost every other OS used in any significant capacity), all come with Python pre-installed, simply because it’s one of the most heavily used languages in existence… Windows is an island. More than that, it’s an island on which resides islanders who don’t play well with others. Python was not invented at Microsoft, so Microsoft doesn’t include it.

To Microsoft’s credit though, they have progressively become less like island-like in recent times. Perhaps they’ll even have Python by default some day.

Ruby and Python are a lot more complicated than QBasic, but Lua isn’t. You’ve got strings, numbers, functions, and tables; that’s it. And if you start with the Love2D game engine, you’ve got all the graphics capabilities of QBasic in a much better-designed language without sacrificing any of the immediacy and simplicity.

And I’d just like to add that I fully agree with the sentiment of not worrying about code being the cleanest or doing things “the right way”–at this point enthusiasm is much more important. And kids will only really understand why the “right way” is better once they spend time trying to maintain something that’s messy; that way the lesson really means something to them.

You’re confusing simplicity and elegance of the inner workings of the language and virtual machine with the simplicity of programming in it. Something MOST programmers these days seem to have forgotten.

I grew up in the early 80s’s writing BASIC and lament that most computers do not come with a built-in, easily accessible development environment like BASIC.

I teach middle school kids to code in an after-school robotics and computer science club. This year I switched to teaching the kids Python and it worked exceptionally well! Python is a modern, yet simple language. With add-ons such as pygame kids can easily write simple games with only a small amount of code.

The whitespace issue with Python (which admittedly I don’t like either) turned out to not be that bad and with a some practice kids got used to it.

Man, I wish I had something like BASIC in my early XP days, when I was just starting out with computers seriously (at the age of 8 or so (-: ). Anything. There was probably a few programs which were scriptable, but it probably wouldn’t occur to me I could be actually the one _creating_ these programs. The funny thing is, I never actually stopped to think about how all these programs I installed came to be, that somebody must have created them, right?
I actually had a GUI drag-and-drop game designer tool The Games Factory (wow that name takes me back!), but in hindsight I see I probably didn’t have much understanding of what I was doing then, other of than simple animation and moving objects with keyboard and mouse.

In a sense, the (European/US) Commodore/Atari/ZX era kids had it much easier to get into programming – it was a very prominent part of computing at the time from what I can tell, with their computers’ built-in BASIC interpreters. I know this mainly based on the Internet computing history pages and people’s recollections on comment threads, as I wasn’t there at the right time to witness it (that, and the fact that my country’s computer availability would’ve presumably been scarce as it was communist until a couple of years before my birth). But then, with today’s Internet’s ability to exploit such vast repositories of human knowledge as StackOverflow, Google and YouTube, it’s also kind-of easy to get started with programming.

I wish the new generation all the best with their journey of learning programming (greetings if any one of you is reading this post).

Thanks for your comment. It’s true that there are a lot more resources today for those who want to start coding. However, I think that there was something about the confinement of the early days. With no internet and limited access to games (aka trading floppy-disks with friends), the only thing left to do was to create your own games with whatever tool was available. And it required persistence as there was nothing to switch your attention to. I think we were very fortunate to have tangible limits to what we had access to, as it forced us to rely on creativity to build new things to play with.

I started out with Q Basic on a Color 2 From Radio Shack. Back in the late 70’s or early 80′ writing programs for myself and tried games and loved it. Then I challenged my girlfriends son (13 yr. old) , who had a friend with a Mac 64 to write code to run on a Coco2 and Mac64 and I would do the same. We succeeded with our quest and went to more challenging tasks. Today both “kids” are still doing the same stuff with other languages and loving it.
So I have to agree Q basic is a great way to introduce kids to programming. Great write up, Nicolas.

TBH it gets a lot more complicated as soon as we want to get a bit more. Play some music? Draw a shape? those are one-liners in native QBasic. I love pygame and I think it’ll make a fine choice a couple of years down the road if his interest grows into a hobby.

BUGS
Never use gets(). Because it is impossible to tell without knowing the
data in advance how many characters gets() will read, and because
gets() will continue to store characters past the end of the buffer, it
is extremely dangerous to use. It has been used to break computer
security. Use fgets() instead.

QBASIC is actually great for this. The only other languages I know of that are comparable in terms of directness and simplicity are Tcl and Lua. Tcl is one of the great unappreciated languages, and is still the backbone in much software testing and automation and is great for quick and dirty code to stick a bunch of stuff together. Python has gotten better at that over the years, but I think Tcl is still better in many cases. Sadly, the Tk graphics haven’t kept up with the times.

For game development, have a look at Corona and Lua. Lua is another beautifully lightweight and direct language, but it’s seriously fast (faster than Python and approaching C in some benchmarks!), is the backbone infrastructure of many commercial games, and the Corona environment makes it really easy to build games with just a few lines of code, and then target them to any of the major modern platforms. (For instance, creating a few shapes, and then attaching them to a physics model to let them move and bounce correctly really is only a few lines of code – check out the demos…) Not only that, you can also do really serious web infrastructure and server stuff using the Lua-based Tarantool (multi-master replication, anyone?), so it’s something you can learn and grow with from a first playing-around experience to truly web-scale application systems. (It is also 1-indexed, which I consider to be a feature, not a bug. No one but programmers starts counting by assigning zero to the first thing being counted…)

Starting out, you can do more for less work with Lua than anything else I know of. It’s not mainstream yet, but it’s way too good (and getting better too quickly) for that not to change soon.

P.S.: I wouldn’t worry about picking up bad habits, since the entire idea of procedural code is pretty much lost on today’s programmers who can’t do a thing without a bunch of heavyweight objects anyway. (Seriously, I no longer code, but I find I am able to fairly often make suggestions about another way to do things that would apparently never have occurred to someone who’s never written a FORTRAN or BASIC program, or hacked together bunches of shell scripts with the UNIX text processing tools. I don’t recommend awk as a language to learn on – it is certainly, um, different, but it sure does make a lot of otherwise hard things way easier than anything else I’ve ever encountered…)

I’d like to respectfully put my side project forward as an improvement that learns from the lessons of QBasic: http://akkartik.name/post/mu. You get line-by-line programming without having to worry about intricate syntax, but you also get real procedure calls. You get gotos, but you can mostly use a simple form of structured programming that is just as easy to learn.

Mu seems really cool. What I find fascinating about it is not the final result but the process you got there. You seem to be using your wart literate guy. Reading your blog you seem inspired by Christopher Alexander. Me too! I’m a former student of Cope and was introduced to Alexander’s work through him.

I love that you decided to take it to heart and you can literally see the piecemeal growth of Mu via your literate system. One important part of Alexander’s method, especially after reading Theory of Centers, is backtracking. You add a little, see if the whole feels better and go on. Or you undo and try something else.

The undo and try something else, how are you planning on showing that? Seems as simple as deleting the latest file.

Thanks for the kind words, Maxim. I’m actually not familiar with Theory of Centers, so you have the advantage on me there. My favorite work of Christopher Alexander’s is actually “Notes on the Synthesis of Form”. I wasn’t smart enough to understand “A Pattern Language”, and I’m skeptical that there’s much mileage to be had in trying to apply that idea to software. But Notes is awesome. Extremely concrete and directly applicable. Everyone should read it. (And yes, I know it’s less fashionable than his other books, particularly since Richard Gabriel called it ‘juvenalia’.)

But I’d love to discuss this further offline. Perhaps I can benefit from the Theory of Centers.

There is a website, codingames.com, that offers puzzles and AI challenges related to game type puzzles and problems. I stumbled on it the other day and have lots of fun clearing out all the easy puzzles and many of the medium ones. I programmed QBasic and GWBasic as a kid, but am not a programmer, and I found these exercises fun and they really made me think. I am sure for real programmers, these might be childs play, but I would definitely recommend showing this to any kids or young adults interested in coding. Some people even get hired by companies like Nintendo for solving their challenges. Where was this when I was a kid?

I love that you shared this story. I identify closely with it because this is exactly how I started programming – by learning and playing with QBasic, and writing things down in a notebook. My curiosity led me to read the code for the Gorilla and Snake games that are written in QBasic to see what *could be done*. I’m sure Noah will be an excellent video game designer!

I learned to program when I was a kid with QBasic. I agree, nothing is as simple today.

I have a 6 year old and he is loving minecraft too. I fully expect him to get interested in programming.

When he was 3 years old, I felt a sense of distress knowing nothing is as simple qbasic today for him to learn.

His birth and various social events inspired me to create something interesting. I wrote Fire★ which allows you to write p2p applications in Lua, including little games.

When I wrote my qbasic programs I would share them with my friend on floppy disks. With Fire★ you can be connected with your friend on their computer and just share the game seamlessly, including the code. Even pair program.

It isn’t as simple as qbasic, and it isn’t designed just for children. However, it might be the simplest way to learn how to write networked software. I hope to have my child test it one day.

“QB64 is a modern version of the Basic programming language that allows programs created using Quick Basic 4.5 or Qbasic to run on Windows XP, Vista, 7, 8, 8.1, Linux and Mac OSX. It will work on 32 or 64 bit machines and has many new features such as stereo sound, improved graphics and TCP/IP internet capabilities. ”

If you install DOSBox and then run any of these programs, you will find that they have syntax correction as an aid – and the source code is almost identical to QB64. so one can then write install QB64 and compile Windows executables. Look here to see several examples:

Fantastic read – and so happy that your kid has the opportunity to learn code as such a young age. Will definitely serve him well in life.

I myself also learned programming via Qbasic – and this was “only” ~13 years ago. Qbasic is simple enough to be just fun to mess around with and see “I made this”, no need to care about best practices if you’re young and/or don’t even know if programming is something you want to persuade. Keep up the good work!

I agree that QBasic is very easy to pick up. I would also like to direct your attention to the Kano implementation of the Raspberry Pi. This is very directed at that age group and allows kids to understand what makes up a computer and then what it does and even has a programming environment for that age with Minecraft and Python (the snake) games to play and modify.

As another commenter noted, check out QB64! It maintains 99% compatibility with any QBasic program (really, the not supported stuff is super-obscure), and runs on modern operating systems without the hassle of DosBox or emulation. It also implements dozens of new commands allowing much more flexibility (such as full-color screen modes). It even keeps the old-school white-on-blue IDE

Very quickly he got used to the ObjectSomething way of getting to the toys. Also the documentation on the side is pretty good to get started with most of the toys.

Only thing I’d of liked ( and they consciously made the choice not to do it) is the concept of a function. Because once their programs get big enough ( and boy, my basic programs from when I was a kid were big convoluted messes) teaching the idea of a function is kind of a gateway to the bigger world of programming.

Sure, you need one extra word, but in the same hour you could have gave him, with very little extra effort, a brief introduction to object oriented programming.
Kids can totally deal with an extra word and a comma.
Also, the autocomplete feature in smallbasic is great for a slow typist, such as a kid, and is also the help system of the IDE.

I totally recommend putting aside your selfish melancholy or whatever and show smallbasic to your kid!

PS:
My QBasic “bomber” and “fighter” games that I wrote as a kid were the best plane games in the history of games with planes, obviously. B-)

The lesson here is that it’s less about the specific fitness of a particular language, and more about just getting your hands on something and rolling with it. Yeah, a language with line numbers will never be optimal, but that’s beside the point.

The real value of QBASIC here is that Dad knows it and can immediately smooth over any roadblocks that get in the way of that initial fun and discovery.

Have you tried LOGO? When I was a kid, I learned it without knowing it was programming. I just played it as a game.
Years later when I was actually learning coding seriously, I realized why is it so similar to that turtle drawing game?!

Never thought I would see that blue QBasic screen again. Good times. I remember finding QBasic on my own as a kid and messing around with it making games. We had some computers in our library at high school and they had QBasic on them. They also had a ‘no games’ policy, so I got told off for playing a game by one of the librarians… except I didn’t care because I explained to her how I wasn’t playing a game I was testing a game that I was writing. Haha.

I wish I had some guidance back in the day though. I distinctly remember arrays being too abstract for me to understand what they were, how to use them etc. Someone to guide me on the more technical aspects would have been wonderful.

I think you made an excellent choice choosing QBasic for its simplicity. Glad to see your son taking such a keen interest in programming. We definitely do have the best job! Hope to teach my son someday too. And I’m inspired to introduce him to QBasic when it’s time!

“Qbasic has a limited set of simple keywords (the entire help fits on a single F1 screen and is packed with simple examples!), does not distract the coder with any visual artifacts, has a very confined and cosy dev environment, shows errors as early as possible, compiles and executes the code in a heartbeat with a single key, and is extremely straightforward.”

I’ve been a programmer for decades, and while I’ve never used QBasic myself, I still find these to be valuable qualities for anyone, not just for kids.

Sadly, while there are some professional-grade programming environments that have most of these qualities today, they don’t seem to be very popular, and companies don’t tend to use them for serious projects. Professionals tend towards languages with big complex grammars, for some reason, even if they’re not any more powerful.

But those of us who know where to find simple elegant programming languages do really love them!

I read your article in the bus and I was wondering if you had thought about Python. I just tried re-creating the little program Noah wrote and it’s quite simple using IDLE (which takes care of the indentation for you and can run the script with the F5 shortcut as well).

In addition, Python has nice little libraries for teaching children, such as the turtle module that allows to get nice graphical output, which is quite stimulating for children I think 🙂

Thanks for your article and all the best to Noah in his video game creation journey!

You should have a look at the old 1980s Usborne books, which they have archived in PDF form online. They were written for old microcomputers like the Commodores, BBC Micro, Apple II and ZX Spectrum, but should be applicable to QBASIC. I particularly recommend Write Your Own Adventure Programs For Your Microcomputer. It has a good step-by-step walkthrough from concept to planning the structure of a text based adventure.

Aah, I still remember back in third grade – “what? you can put whatever you want after print?”. And then I found a BASIC book in the attic and discovered the “Sound” instruction. Needless to say , after a week or so I was forbidden to use it.

Cool! I am also for teaching kids BASIC. You could also try emulators for some of the 8bit computers which all have BASIC. I can recommend Amstrad CPC and MSX, very nice command set, its pretty easy to draw and make simple games!

As to the purists, as Monty Python would say, “Fornicate The Penguin!!!”

This is a First Reader situation. You don’t complicate thecstorybwith advanced concerns like Predicate Adjective bs Predicate Nominative… This is
See Jack run.
See Spot run.
See Jane run.
Run, Spot, run!!

“is not case sensitive, is non-zero-based” are between the limitations of C presented as good programming.
case sensitive is simpler for the compiler, but declaring 2 variables with the same name with different case is bad programming, especially if you want to allow converting code to another language.

Loved the post. I remember my first experiences with BASIC on sinclair 2048 and assembly after that. However I must disagree with you. We did create some languages good for young ones to start (I also had this as a must for any geek out there). Lego Mindstorms has a great system to introduce programming technics and really watching it doing something 🙂 It shows the concepts without going too deep on commands, wich I think is great.

First, I remember when I learned QBasic back in the day of doing my A Level computing course in the late 90’s. Why I was being taught such an old language I don’t know, but I distinctly remember the obligatory “Hello World” program, quickly following my inputting your name and printing to screen, and then feeling amazed that I “got it”. It eventually lead to me building Tic Tac Toe in QBasic, then other languages, and today some 15 years later I am now building web systems connected via queues, services and databases, a far cry from the days of putting coloured text to screen!

Secondly, as a father myself I’m hoping my kids will also one day ask about what I do and how everything works. Reading about Noah’s reactions and learning process was great and I hope he keeps it up.

QB64 uses most of the Qbasic keywords and runs your programs on newer OS’s without DOS or DOSBox. Also has new keywords for modern systems to use Open GL and 3-D images with millions of colors! Plus it is FREE!

Nice article. Back in the day I used to use QBasic programming as a ‘proof of concept’ before coding he final solutoin in assembly.

I was going to give my young son a ZX-Spectrum for the same reasons you describe here. Simple instruction set, and simple to get up and running with some rewarding results that may just get him interested.

After all, it’s the ultimate toy. It does whatever your imagination tells it to do!!

Don’t stop with just QBasic for your son. Move to the next level PowerBasic. I started programming in the early 1980’s using GWBasic, Commodore Basic, etc. Then started coding real business programs in GWBasic, then QBasic, then Microsoft Quick Basic and then PDS 7.1 (Professional Basic). In the Windows world I found the transition difficult at first and and tried a number of Basic’s finally falling back to Visual Basic 1.0.

In time I moved beyond Visual Basic, to PowerBasic (in the DOS days was TurboBasic), learned the WIN32 API and now have gone far beyond anything I did in DOS Basic’s. PowerBasic has a console compiler which would be like QBasic on steriods, but with full access to the WIN32 API, is a true 32 bit compiler and is fast, fast, fast. One can move on to the PowerBasic Windows compiler and either use its simple Dynamic Dialogs command set or code using the WIN32 directly if prefered. PowerBasic has the raw power of C, with the ease of QBasic.

First of all, I also started with QBasic, using my father old notebooks. But now that I’m more into this thing, I cannot understand why people don’t just teach JavaScript as first programming language. JavaScript is ubiquitous and can now be used to code apps, not only client side code of web pages, so It seems like a big win.

In the early 90s Prodigy had the best QBasic community, where we even invented compression techniques to share code to each other and fulfill single-post length requirements on the message boards. It was glorious. Thanks for taking me back.

Never thought I would see that blue QBasic screen again. Good times. I remember finding QBasic on my own as a kid and messing around with it making games. We had some computers in our library at high school and they had QBasic on them. They also had a ‘no games’ policy, so I got told off for playing a game by one of the librarians… except I didn’t care because I explained to her how I wasn’t playing a game I was testing a game that I was writing. Haha.

I wish I had some guidance back in the day though. I distinctly remember arrays being too abstract for me to understand what they were, how to use them etc. Someone to guide me on the more technical aspects would have been wonderful.

I think you made an excellent choice choosing QBasic for its simplicity. Glad to see your son taking such a keen interest in programming. We definitely do have the best job! Hope to teach my son someday too. And I’m inspired to introduce him to QBasic when it’s time!

Hi Nicolas, I thank you very much for refreshing my early sweet memories during my school days when the very first programming language I ever learnt was QBASIC. I also very clearly remember what the acronym sttod for – Quick Beginners’ All Purpose Symbolic Instruction Code (my then computer teacher had made the full class memorize it, hehe). Those days were really awesome and I used to marvel how the computer could solve the arithmetic and print stuff so fast and play some tunes and the most important part was drawing lines and circles. Wow, man! I really missed those days. I was, I think, in class 7 in school back then. Later for I learnt C, C++ and finally Java but did not find the same amount of fun I had that time.

I am a software engineer now working in an MNC. I use Java, PL/SQL (for programming and maintenance)and Selenium automation (in testing) alongwith UNIX for shell scripting. But really man, I really cherish those days and you have literally brought tears into my eyes. It is a very great decision to have your son recognize QBASIC first. I shall do it the same to my son or daughter if they consent. Are you on Facebook dear friend?

However, regarding Noah, children from his age or anybody starting to code, I think that what they need to acquire first is the concept of computational thinking. Once one gets that, he can pick up any coding language because he understands that differences between languages are mainly syntactic.

I’ve seen so many adults starting to code at uni. They did their best to pick up the language in itself but because they didn’t have a ‘computational thinking mind’ they were completely lost when they were asked to code something.

That’s why I find apps such as Scratch very good for children because it’s a nice interface between cartoons/playing and hard coding. It introduces nicely conditionals and loops.

And then, we all have our favorite coding language, mine being FORTRAN 77 :D, so he’ll find out his when the time comes 🙂

Haha hey Joseph good to hear from you man! 🙂
We tried Scratch but he didn’t like it so much… I’m wondering if maybe it’s because the IDE is so visual that the actual visual compiled result does not pop out and has that fast wow feedback? Not sure… He’s still super young and I don’t want to push him any direction so we’re rolling with the wind as we speak, trying out different things… QBasic seems to be the language that has sparked the most interest for now so he’s using that… Haven’t showed him Fortran yet, waiting for him to do something wrong, I’ll have a punition ready 🙂

If you can get your hands on the older Dark Basic program, then your son might enjoy that. It has similar experience as the Qbasic, but it adds some pretty easy to use built in stuff aimed toward making games. It’s been a long time since I used it, and they don’t see the offer the legacy Darkbasic for sale anymore (just the pro version and then some other stuff)

Great post, thanks very much. Brought back memories of a friend of mine showing me how to code in qbasic when we were kids. I am coming to programming relatively late again now and really enjoying it. Coming from a sysadmin background in a Windows shop, powershell got me into it and now I am learning C#. Definitely want to teach my kids programming too even just to get them into logical thinking.

For anyone who loved coding in Basic there is a modern day platform that ties in nicely with the Maker and STEM movement around these days called the Micromite. The platform uses a rewrite of GWBasic (Precursor to QBasic) called MMBasic, and you also get to build the “PC” itself. Quite a bit of fun. (New version out too now).

Allows reading of external sensors and control of external devices like the Arduino or PI but all done with fairly simple BASIC code.

This reminds me of how I started with QB back in the day. Back then there were so many sites devoted to teaching the language and unfortunately most have disappeared. It’s truly a perfect learning language for people interesting in getting into programming. My old Qbasic (and other languages) site is still online after all these years: http://eriks.servehttp.com

Hi! Nowadays i use Quick Basic. It´s a pleasure!! It has many libraries that you can use in your applications, written in other languages like C or Assembler.
I made programs with buttons and mouse, like Windows!!
You only need to have a good imagination and time!
It´s fantantic to make module programming. I usually use a 386SX with only 4 megas of ram with DOS 6.22 to run my programs.
Good to meet crazy people like me!!

You know, I’ve probably read this blog posting three or four times since it was first posted, and I have to say that the author is spot on.

Yeah, I too know that the language isn’t perfect, and it does teach a few “bad habits”. I know this because my first language was BASIC, too – specifically a version of Microsoft BASIC installed in the ROM of the TRS-80 Color Computer.

I started with that machine when I was 11 years old, back in 1984. I was in the 5th grade, and it opened up a new world for me. I still have memories of my dad and I typing in the first bit of code in the tutorial manual that came with the computer, and instead of hitting the “enter” key (aka return) to move to the next line, we “spaced” over to the end and down to the next line! We ran it – and got back “SN ERROR?” – the infamous “Syntax Error”. My first error (well, that’s not exactly true – my first “computer” was arguably the simple controller of the Milton Bradley Big Trak – and I know I had errors in those programs!).

Ultimately, that all led to where I am today, employed as a software engineer for the last 25 years, and having gone thru a ton of different languages in that time. From Pick BASIC (a “business BASIC” still in use!), to assembler, to C/C++, Java, Python, Perl, PHP, dabbling in Lisp, Javascript…and QB.

Today, I still have a soft spot in my heart for BASIC; my favorite form of it – and what I think is probably the best implementation – is QB64. I have two other compiler/interpreters on my phone. Yesterday I coded up a simple Truchet tile maze generator for the Color Computer, using an online javascript-based emulator for the development! BASIC will always be close and dear to me; part of my career involved the development and maintenance of a largish Visual Basic system for an employer – that they still use to this day (almost 15 years have passed since I left them, but they have yet to find a suitable replacement).

I often wonder why – in this era of talk about “teaching everyone how to code” – why we don’t teach BASIC to people. It’s almost the perfect language for this. If we really wanted to round things out, we’d teach LOGO as well.

There are a lot of people out there who could be excellent programmers, people who would love to program, and don’t know it. Simply because for a beginner, they don’t even know much of where or how to start. As the author of this blog post noted, even getting QBASIC running again is an exercise for the beginner – nevermind the “experts”! You have to basically know how to install and set up an emulator of an operating system, or you have to set up a virtual machine, or dig out an old computer and make that run something, or…

No longer (well – there are a few examples) can one just buy a computer, turn it on, and be greeted with a prompt begging you to input some code to run. I do tend to wonder though if such a computer wouldn’t find some audience. I know of a few examples like this (one which is arguably as close as possible to that retro style using current components is the Nuts and Volts Amigo computer – http://www.nutsvolts.com/magazine/article/december2015_Weston).

I’ve long thought there is something being missed in trying to educate people about computer programming, and we continue to try “new ideas” when the solution to the problem was solved a long time ago back in the 1960s. Instead, we try to teach systems to beginners that are much more abstract than what is needed to learn the – ahem – basics of software programming, and this can cause confusion and disinterest in continuing. If we were smart, we’d realize that maybe our forebears knew something we didn’t, and work with their ideas and knowledge, instead of against them.

I know this thread is old, but man …. QB4.5! That brings me back. I taught myself on TI-Basic starting in 1981 when I was 5, typing long strings of hex code directly in order to use any kind of graphics. Quickly transitioned to QBasic and with the rapidly advancing home computer technology and the super user-friendly IDE I was creating all kinds of programs over the next 10 years, including Fantasy AI game engines, full featured eBBS platforms, graphics processors, side scrolling video games, etc. etc. I even used QBasic professionally in 1999 to automate machines in a factory, building a GUI on a 386 that plugged into a 6 axis USB stepper motor controller. Unfortunately, I have a contrarian streak and when a VC told me in 2000 that they would give any kid who knew how to code $1M if they had a business, I left programming behind to go to business school since I didn’t feel like learning C++. Now I’m slowly realizing that I should have never stopped coding, so I’m re-teaching myself, and see that modern languages are definitely more efficient, but sorely lacking in an intuitive IDE like QB4.5 and have a lot of syntax requirements which likely have negligible performance gain.

I actually found this while looking for a Python IDE that is better than Canopy, but I’m glad I found it, as I have also been debating teaching my kids (7&9) QBasic or letting them learn Python with me. They play around in Scratch, but I find it hides the functioning of the program behind layers of the GUI and all that visual drag and drop makes it harder to get to the core of what programming is about. I have seen some others, like Glitch, that I was going to try out, but now I’m psyched to install QB4.5.

I don’t know how old this is, or if the author still reads the comments, but a modern version is called QB64 (there even is a Twitter @QBZ64team for it as well) which does not need an ugly DOSBox setup, but does run on all three major desktop OSes.

I would not doubt ANY of you disbelieving what I’m about to say. It sounds totally improbable.

I discovered Basic in 197… 7 or 8. We had a Wang 2200 computer at work that was used to compute monthly payments and to print bank contracts. The program was written in Wang’s version of Basic. The fellow who’s job it was at the bank to use it had a heart attack and passed away and my boss jammed me into that empty office and said I’d better learn quickly how to use the thing because my continued employment depended on it.

The program was super easy to use and learn and within a couple days I became comfortable with it. THEN it happened… the thing went nuts. It began printing out all of it’s many thousands of lines of uncompiled plain Basic code on its 14″ wide big metal Wang daisy-wheel printer. I killed the power but it started over every time I turned it back on. We called the software company who sold us the hardware and software but they said it’d be several days before they could get there from another state.

Curious… I decided to see what it was printing! I mounted a big box of 14″-wide pin-fed paper in the printer… turned it on again, and the thing printed for nearly 12 HOURS. Had to pause printing to change to a new RIBBON fire or six times !!

I carried that huge stack of fan-folded paper around for months and studied it… IF, THEN, ELSE… uncompiled NOT COPYRIGHTED plain Basic… Eventually I realized – hey – not only can I understand this stuff… I could do 80 or 90% of the the same stuff with about one forth as much code!! How cool was that.

So yeah, “I went to school” on what that bizarre ton of code taught me. Over the years some said I “stole” that code. Nope. Never used a single line of it. However it was a great teacher (professor!) because it TAUGHT me how to write code – just like a French book teaches French. You wouldn’t say you STOLE the French language – just because you learned French from reading the instructional French guide. I even phoned the software company and told them the program was printed and they offered to answer software questions! Gotta remember, folks, this happened in 1978… almost 40 years ago – before most of you were even BORN. Copyright law for software didn’t even EXIST 40 years ago because it’d just been INVENTED.

Months passed while I figured out how to build my own program and shortly I actually wrote my own finance program from scratch which ran way faster because it was tiny compared to the company who supplied the original bank software. Wang computers only had 4k of ram so files had to be chained together… and the smaller the package – the faster the execution.

Another bank heard about me and offered to PAY ME (woo hoo) to set up their Wang machine… and then another bank… and then another. Then car dealers and motorcycle and boat dealerships called. They were purchasing the Wang computer JUST BECAUSE it was the one I knew how to write code for… all of this happening just before IBM introduced the PC and the AT. It occurred to me that I seemed to be looking at the word, “POOR”, from the other side for once in my life (banks still to this day don’t pay much!).

I incorporated my little company in December 1984 and today, in December 2017, it’s our 33rd year in business. And I still use that same 16-bit GW Basic (compiled, thank you) software in all our customer’s businesses.

As the years rolled by I learned how to design Adobe PDF’s and how to populate them with customer data from my little program using “shell” and daughter operations to call FDF’s… such that NOW virtually all the many legal documents (sometimes as many as 15 or 16 individual documents) that have to be printed and signed by customers at the time a loan is closed are all true originals that print out back-to-back usually by a super fast high-end laser up to 80 pages a minute.

I agree with all of you who say I should have changed to VB and DOT NET etc., etc., and I gotta tell ya… I did try. Heck – I’m STILL trying. But I hit the magic number on my last birthday – 70 – and I’m just not up for it. I’m maintaining a dwindling book of business thanks to natural attrition… down from over 80 monthly paying customers back in 2000 to just 10 or 11 now… but that’s okay. I’ll let you kids figure out to fly every new iteration and machination of Basic that continues to come down the pike.

But who EVER – in their wildest DREAM – would have thought that good old GW Basic… compiled using QB3 (not 4, mind you)… would have a true shelf life of THIRTY THREE YEARS.

Doubt me if you will. I get it. It’s human nature. But every word true. All I can tell you guys is dream on. Sometimes it works.

Wow that was such an awesome read Allen, thanks!! 🙂 I know that there’s still a lot of Cobol code currently being used in a lot of areas we don’t expect. I wonder how many other Basic gems like yours are still up and running after all those years.

Hello Nicolas,
I have been adicted to coding since I am 10 because of QBasic, I had almost tears in my eyes when I read your article since I thought that for once someone was sharing my exact thoughts ! I couldn’t agree more with you !!
Reading your article made me decide to do something about it and I am currently re-writing QBasic, it is a difficult task but I will try to make something as simple as I can, and you can trust me for keeping the spirit, I’ll keep you posted as soon as I completed the first version, y’ou’ll be the first to know, it should be in a week.
Thank you so much for sharing this thought with us !!

I dont program much.. but in HD i studied from this book and cross trained into C++ using projects from here. This book hasnt changed but has a universal quality.. it sums up the basic of qbasic and can be learned in a semester if not two. For rudimentary concepts its so nice and easy. If there was any hint of any programming knowledge i owe it to qbasic and learned sorting programs. i did my calculus on qbasic as a challenge. Qbasic gets so much flak.. I was happy to stumble on your article with opinion I strongly agree with. I wish everyone would agree qbasic is the best to start kids off. Any knowledge learned will NOT stop anyone from further education (ie C++ or puthon). We all have to master one language anyways. I am getting back to programming as a hobbyist but getting into python. But i will be sure to parallel my education with qbasic and reinforce the concepts. Thanks for this article!!

Hello Nicolas,
Still not finished, I’ll need more time, making QBasic is much more complex that what I expected… But I won’t stop until I’m done and I’ll keep you posted.
I also found this : http://www.qb64.net which I had been looking for years, but mine will be a little bit different, can’t wait to finish it !!

Why? Maybe I got this wrong… but YOU guys are not writing software like I did for the banking industry. Oh no. You’re just writing a new version of an existing language. Oh I get it. You don’t need money. You aren’t poor like I was back in the day – grasping at straws to put the next meal on the table. You’ve got so much spare time and TALENT that you’re just gonna sit down and redesign the design.

This is when I’m pretty sure I’ve lived too long – when you kids are so freekin smart that you can just whip out an entirely new computer language like it’s sausage on a 4th of July freekin BUN ?

Well. Okay den. I raise my beer glass to you guys. More power to ya. May the need for a bigger paycheck never hit you in the HASS like it did me all those years ago.

PLAY ON.

p.s. Why not turn all that mental horsepower into building the first 5 mile pillarless bridge or a $20,000 500-mile-per-charge Tesla killer or something else, y’know, useful.

Still have fond memories of QBasic -really learned matrix algebra writing a regression program in QBasic; no regression function in early … Enable, Lotus. Long ago and faraway.
Your son will feel you through the language. Talk about shared experience with Dad! Lucky you, lucky son. BASIC!

Hi Nicolas,
Just discovered this post and it has lit a fire beneath me. My oldest son, who’s name is also Noah, is 5 and graduating from Kindergarten next Tuesday. While he’s still a bit young compared to your son at the time this was written, the thought of sharing a love for software development is thrilling. I’ve been patiently waiting since the day he was born, and am so excited that he’s begun developing the Basic (haha) skills needed to start in earnest.

I just revisited True Basic and it seems good enough. The demo version won’t open or save files, but it’s procedural BASIC as opposed to line-number oriented.

I started with BASIC on PDP-11’s and in the late 80’s did consulting work using Microsoft PDS (Professional Development System), which was an actual BASIC compiler (not P-code or interpreted). I got it running in a VM if you’re interested, but nothing is transferable in/out of the VM, so it’s not that usable. But PDS was a fairly sophisticated procedural syntax and the ability to create include files and such.

I’d also recommend later on you might try Inform 6, which is an OO-ish static-y text adventure programming language. TADS is probably a more traditional OO implementation of a text adventure language. Writing games is always a fun way to learn.

I’ve seen my father wrote the first program in BASIC to introduce men computer when I’m 12. The program is called “You Stupid !”. The program random 2 numbers and ask the user to enter the total sum of those two numbers. When the answer is correct it will response with compliment. When the answer is wrong it will response with “You Stupid !”. And then the program start another math question with other random numbers.

This simple program demonstrate quite a number of elementary concepts of programming — condition, variables, function call, loop, and blaming.

being captivated by the article and diving deep into nostalgia*, I just have to recommend you (actually, recommend to Noah) an enlighting book about Basic that my parents bought me when I was a child, and that I think it fits perfectly with the desire of your son of fullfilling his “game-building” abilities.

Luca Novelli published in the 80s two books called “My first book about Basic” and “My first book about Computers” [1], which are specifically intended to introduce computers and programming to children. After an introduction to algorithms and flow diagrams, the book dedicates a full page to each (GW)Basic instruction, providing an easy-to-understand explanation and -even more important- a small code example (~10 to ~50 lines) in the form of a game.

This means that the whole book is a compendium of interesting games (guess the animal, guess my age, pick a number) that slowly build up knowledge without being boring or pushy, and gives the child tools to build his own games. It may look outdated, but programming hasn’t changed that much since K&R C, so most of the concepts are still relevant today.

Sadly, the few page scans I could find are in portuguese or spanish (my mother tongue), but they will serve as an example of the pedagogical approach. I hope you can find an English copy on Amazon, as it is IMHO an excellent way to teach & learn programming.

* I coded many interesting things in QBasic in my childhood, way before the Internet era: a point-and-click GUI like windows 3.x, a compression format that I thought was a marvelous. Later in my life I found I had “invented” Run-Length Encoding, haha.

When I was starting I learned Fortran77 and GWBasic and I had a conversation with a US government Computer Department (wasn’t called IT back then) about the two. It went like this…

Me: We should use BASIC to get all these neat functions.
GOV: Fortran is flexible and you can have libraries to do all that.
Me: So, where are all those functions in your Fortran libraries?
GOV: ……..crickets

Basic had the quick response a programmer loves, but a few very bad qualities like line numbers or all CAPS and “$” characters allover. It didn’t help that the UI was always non-graphic and ugly with terrible mouse use.

I say that about Commodore 64 BASIC. Same ‘problems’ as QBasic I suppose. Download a C64 emulator and you are ready to program. Graduate to Assembly when you are comfortable – I learned 6502 Assembly when I was 15 or so, just out of curiosity (the C128 had a built in assembler). Don’t fear the GOTO! It’s a great step before learning about functions.

I found this on a DuckDuckGo search about “arrogant programmers”, and trust me, being a Linux user, I ran into my fair share of them.

Ah… QBasic. I remember writing a lot in that, after my TRS-80 Color Computer (26-3002, 16K with Extended Color BASIC–I got a replacement one off eBay nearly 20 years later… But that’s another show, as Alton Brown, a Cooking Channel staple, would say) blown its 6809 processor.

The documentation for the BASIC language with any Tandy computer of its time was concise and pretty much like the “Dummies” books of today (even the Model I Level I BASIC packed in every box had a well written manual). Even the QBASIC manual that came with my MS-DOS disks was of the same quality. (And written by David A. Lien, nonetheless!)

I still program in Basic. On my Tandy Color Computer 2 (what I got as the replacement to relieve my childhood from eBay — I’m 41 now) and on Ubuntu with a similar language that’s almost similar to the Microsoft dialect of BASIC from the Canonical repos.

Yeah, call me old school. But I’m not alone. There’s a small group online of Tandy Color Computer enthusiasts. I am one of them. We still program in BASIC. It might not be as powerful as C and its offshoots, or whatever, but one thing I liked was when I found a copy of “500 POKEs, PEEKs and EXECs for the TRS-80 Color Computer” in a thrift store a few months ago, it was like getting my hands on the holy Grail. I don’t know Motorola 6809 assembly, nor do I know i386/x86_64 assembly, or much C, Java, whatever, but Basic.. oh yeah. And a few well placed POKEs and EXECs in a couple of lines of BASIC code can make a difference.

Many years ago (about 35) I first started to play with a CBM 2001 PET – cassette tape for data and programs! – I learned and loved basic.

It was so SIMPLE to learn – everything was pretty much intuitive. Even when you were “clever” and wrote little routines that used GET A$ to build up text input letter at a time so you could error trap instead of INPUT A$ and hope some berk didn’t press clear screen or move the cursor up or down – it was still simple stuff.

After that, by the time I was 18, I went to work as a programmer for Pegasus Software (accounts software) where we wrote in CBM basic for the Commodores and GWbasic (will usually run with virtually no mods in Qbasic) for everything else.

I can still remember some of the routines in my head – like the bit that took a data stamp code for data storage from human readable form – dated$=left$(da$,2)+mid$(da$,4,2)+right$(da$,2) to convert dd/mm/yy into ddmmyy which worked in Commodore basic and GWBasic.

I know “goto” is frowned on now – and line numbers? Goodness, it’s a wonder the world didn’t end. BUT – the software was widely recognised as about the best there was – and it WAS superbly reliable.

Just because code has line numbers and uses the occasional goto does not mean it is poorly coded.

How many lines of code do you need in other languages to replace:
10 print”hello world”: goto 10 – and does it work any better?

My interest was peaked recently in Qbasic and I found that it ill run very well in DOSBOX on a Raspberry Pi – even the compiler for it works on the Pi and makes executable code which will run in the DOSBOX.

The ONE downside is that it is tantamount to impossible to make Qbasic access the IO pins of the Raspberry Pi – but if that is not important, then you can have a little computer running DOSBOX and Qbasic with change out of about £20. Not only that it will run almost ALL of the old DOS programs too – and emulates a soundblaster for audio too!

For me, I want to be able to code for fun and also to make a couple of little gadgets which I think might be of interest to folks. I want the luxury of being able to use line numbers, the freedom not to have to #define everything in existence, no need to #include a boatload of libraries to make it work at all – and in many cases, then have to compile it before you can even see if it works.

I have had to compromise a little as much as I love Qbasic, as I cannot find a decent way to make it access the IO pins on the Pi, I am going to try Freebasic. Line numbers not needed but ARE allowed. It is not an interpreter though – you write the program using a text editor (remember edlin?) and then compile it.

So, great to see someone else who remembers and loved old fashioned Basic – the language that was FUN to learn!

Just wish Qbasic in DOSBOX would let me control the IO ports of the Raspberry Pi!