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)

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

  1. 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.

  2. 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.

    Anyway thank you for sharing the world of fun your son is having.

      • I dont think its OOP thats wrong its the Java way thats particularly horrible and is whats PHP seems to have adopted too.

    • 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 ..

  3. 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.

    • I thought of that… But just printing and getting input from the user into a variable is really a lot more complex than what Basic offers, don’t you think?

      • It’s not so different in python, especially with the input function in python 3:


        name = input('what is your name? ')
        if name == 'noah':
        print('noah is the best')
        else:
        print('you are the worst')


        > python3 name.py
        what is your name? noah
        noah is the best

          • Much like your grudge against the comment engine pointed out, it would be harder to teach a young kid that spacing is significant… let alone that the type of spacing is also important.

          • “it would be harder to teach a young kid that spacing is significant… let alone that the type of spacing is also important.”

            ^ Not any harder than teaching a young kid that every line must have a line number at the beginning. I think you give young kids too little credit.

          • @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.

        • you’re right! somehow I was stuck with raw_input in my mind but it’s really cool to see the new input function in python 3.

        • Yeah install umpteen bazillion files and libraries, just in order to be able to get a Python prompt… that’s the ticket!

          Brilliant idea. No wonder our industry has turned into living hell.

      • I wouldn’t say it’s more complicated at all, in fact it seems simpler to me… no dollar signs.

        name = input(“What is your name? “)

      • 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.

        I’ve had great luck helping my kids (6 and 8) write simple games in Lua, though granted I’m doing a fair bit of back-seat driving, and they’ve already been doing Snap for years. https://gitlab.com/technomancy/maze-bomb/blob/master/main.lua

        • 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.

        • This times one hundred.

          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.

    • 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…)

  4. I wrote roughly that exact same program (the “you are the worst” one) about 23 years ago as a child learning how to program.

    Awesome post; brought back so many memories.

  5. 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.

    • This looks pretty cool, and it has a nice doc on your github repo. I’ll check it out, thanks!

    • 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.

  6. 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?

  7. Nice post.
    I just looked up to notice a still shrinkwrapped copy of GW Basic at the end of the bookshelf in the office! But plenty of opened and well used copies of Basic over the years.

  8. 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!

  9. Oh wow. I’m 31 and QBasic was my first language — I spent entirely too much time making terrible text-based roleplaying games with it as a kid.

  10. Noah is adorable! I love his meticulous notes. He’s on the right track. I couldn’t get my kids interested in programming.

  11. hi nicolas,

    thank you.

    did you have a copy of qbasic or did you download from the net ? DosBox — did you have to do any particular configuration or was it plain loading qbasic ?

  12. 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.

    • This looks really cool! I love Lua and I agree it is a great language to start with. I’ll give it a spin!

  13. Best wishes for Noah!

    I found this link on Hacker News, maybe it’ll be useful 🙂

    “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. ”

    http://www.qb64.net/

  14. 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!

  15. thanks for sharing this – my dad bought a copy of turbo basic compiler for me 25 years ago. I asked for turbo pascal… at least he got the turbo right!

  16. 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.

  17. 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

  18. Try QB64 … it’s a free version, with the same blue UI (and should be compatible), but all sorts extras have been added + it works on modern OS’s too.

  19. Just curious, why didn’t you like smallbasic? My son did ok with this, and it seems just as simple as qbasic (if not simpler), except a lot more helpful. Also easy to get started on graphics!

    • Maybe we’ll look into this down the road… Just seemed that TextWindow.WriteLine (“Hello world”) was already too complex to simply print out some text.

      • I guess TextWindow seems a bit more complicated

        I started out with doing doing a one line program :-

        Turtle.Move(100)

        then

        Turtle.Move(100)
        Turtle.TurnRight()
        Turtle.Move(100)

        then

        Turtle.Move(100)
        Turtle.TurnRight()
        Turtle.Move(100)
        Turtle.TurnRight()
        Turtle.Move(100)
        Turtle.TurnRight()
        Turtle.Move(100)
        Turtle.TurnRight()

        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-)

  20. 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.

  21. 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?!

    http://www.calormen.com/jslogo/

  22. 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!

  23. “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!

  24. Nice article. I wrote my first program in QBasic too!! I added two numbers and I thought that was the greatest thing ever.

  25. I learned to program on old paper terminal. When I started on PDP-11’s, we had green bar or magnet paper that scrolled as you typed. To make a program:

    $ NEW
    $ 10 input “What is your name?”; A
    $ 20 IF A “dave” THEN 50
    $ 30 PRINT “You’re awesome!!!”
    $ 40 GOTO 60
    $ 50 PRINT “You’re okay.”
    $ 60 END
    $ SAVE myprog
    Saved.

    We didn’t have code blocks at all. You had to use GOTO and GOSUB to separate code.

  26. QBasic is not the best. “Noah is the best!” 😉

    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!

  27. 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.

    http://www.usborne.com/catalogue/feature-page/computer-and-coding-books.aspx

  28. 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.

  29. Thankyou, this brought at tear to my eye.
    This is just how I started out, just enough to want more.
    Good luck, awesome game Noah.

  30. 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!

    PD: FreeBasic is also very cool on modern PCs.

  31. 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!!

    QB is perfect for such…

  32. Try Processing, http://processing.org

    “Processing is a flexible software sketchbook and a language for learning how to code within the context of the visual arts.”

    It’s really Java, but in an environment that makes writing small visual programs very simple.

    Or, the logical move from QB would be Borland’s Turbo Pascal. 🙂

  33. My son is just shy of 6 months, I wouldn’t have read this the same way half a year ago. Thank you for this very inspiring read 🙂 (your game looks cool too, just about to play it)

  34. I’ve seen people using QBasic in coding live streams on Twitch and Livecoding.tv. It is, surely, a good way to learn coding.

  35. “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.

  36. Nostalgia 🙂
    I also started with QBasic when I was 8 and also started with a text game!

    Noah has now a tool to create his ideas! Awesome, and welcome to the club!

    10 PRINT “HELLO NOAH!”
    f5

  37. 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.

  38. A group in England has children -elementary and secondary – learning Python using the Raspberry Pi.

  39. This post got to me on two levels…

    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.

  40. Thanks for this article, BASIC and after QBasic was my first language programming,
    I’m glad when I remember these days!

  41. I started at age 6 with a single ~gasp~ 360kb floppy disk! containing the entire operating system AND BasicA. (1981 was such a fun time!)

  42. 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!!

  43. I use PHP and all the other default languages for a web developer but for pure pleasure of coding I always go back to PureBasic. ( works on Linux, PC and MAC )

    Thanks for the Basic idea. I will teach my 9 year old daughter using PureBasic

  44. 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.

  45. 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.

  46. Qbasic is a structured language and no line numbers are necessary – that’s just for backward compatibility with gwbasic and older variants which had line editors

  47. 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.

    view-source:http://files.mhulme.com/files/qbasic/prodraw2.bas

    I don’t know if that program there will run, but when I was 12(?) it did, and it was better than Paint. 🙂 I hope Noah can eventually use something in it, which would be the ultimate reward.

  48. 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!

  49. 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?

  50. “It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration.” Dijktra

  51. Nice post Nico. Some many memories from QBasic…

    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 🙂

  52. 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)

    It might be worth tracking down and checking out.

  53. I loved this post 🙂
    My son just turned 7 and I can’t wait for him to start writing code. Currently he helps QA my in-development iOS game, and he builds amazing stuff in Disney Infinity.

  54. Tell, me when your game gets released on xbox 1.
    JK
    Seriously though, it was fun, good job. I tried GGJ once, we never finished our game, but the experience was amazing.

  55. 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.

  56. Wow, Awesome stuff, I loved QBasic back in the day.

    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.

  57. 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

  58. Actually, case sensitivity in a programming language is a fault.

    There is absolutely no need for it, and its existence frequently leads to problems.

    Thanks,
    Jeff Bowman
    Fairbanks, Alaska

  59. 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!!

  60. 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.

  61. 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.

  62. 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.

    Psst. The homepage is here: https://www.qb64.org/

Leave a Reply

Your email address will not be published. Required fields are marked *