QuickBasic64: Basic for the Modern Era
qb64.org
qb64.org
Take graphics. You aren't searching for a library to handle graphics since it is built into the language. Initializing graphics takes one line, so you aren't creating a separate function to handle an over-complicated process. Heck, there's less documenting of what you're doing since the language's documentation usually does that better than you can. You simply dive into the next task, which is always doing something more interesting than over-engineering a project that you originally set out on to have some fun.
I understand why complexity has grown in modern development tools and how much of a hindrance simplicity would be for professional software development, but it would be nice if there were more modern options out there to facilitate programming for pleasure. (I don't really count languages designed for education, since they're usually designed to deliver a curriculum. Something like Arduino would be a good example, since it is designed to facilitate creative projects.)
python3
>>> import turtle
>>> for x in range(36): turtle.forward(10); turtle.right(10)I have the Gigatron which is a bit similar but you have to solder it together.
Anyways, here it is if you want to play with it:
repl: https://repl.it/languages/basic
docs: https://docs.repl.it/misc/basic
some community programs: https://repl.it/talk/share?lang=basic
In case you wondered, it was called "Dancing Dobbins" and was a horse racing and betting game. It generated Random Horse names and odds, you placed bets and the horses ran across the screen, each drawn very jaggedly with vector lines.
I just kept adding to it and adding to it and it eventually got quite strange, some of the horses would randomly go mad and start attacking adjacent lanes. I believe there was alien abduction during some races.
I started out with TRS-80 BASIC, then assembly language on the TRS-80, then using BASIC on the PC, and then assembly language on the PC. After that was C.
But I still have fond memories of BASIC as my first programming language.
What i really want to point out, is that, if you look into Basic for what it shines, i think things like "GOTO line" are very good, because it teach you how the computer works under the hood (the native code will point to memory, stack, registers, program offset, call hard defined OS syscalls, etc..)
You could deal with the soft/logical and hard/physical paradigms at the same time, understanding that the logical ones are built through abstractions over the hard ones.
Later if you decide to code, than you can choose if you want/can be spoiled and use more abstract and easy languages like Python or Javascript, but also with a good understanding/intuition of how things work under the hood.
And all of this can be done in a easy way, like with jumps to a giving code position. (It alsos teach you to think over indirections, why some things are good or bad, and have the power to teach you to move on to better things, but only after you really know whats going on).
The basic GOTOS and other techniques might be bad for coding in real life, but im against taking them out of languages that can serve to teach programming to kids, and even creating more of this sort of instructions, that teach how to reason about code, where you can start with "bad practices" but that are pretty easy to use at a beginning level.
Stupid little things like taking graphics and sound for granted and not having to import libraries, using things like 'CIRCLE' or 'BEEP' or 'GOTO 10' is what your eight year old self would think its pretty cool and would run to your parents to show them with confidence in yourself.
That said, I like the options we have today for writing software that needs to be maintained :)
In 9th grade we had to choose a company for work practice. I chose Oki, since I figured printers were close enough to computers to be interesting.
Turns out the task was burning EPROMs, basically pushing a button once every five minutes. Luckily, the computer controlling the burner had QBasic installed. I remember some of the employees looking over my shoulder and oohing and aahing while I was making time pass by writing code.
Fast forward 30 years and here we are. Haven't touched Basic since then but I've written substantial amounts of code in most languages out there. Even created ten or so of my own.
As much as I respect the guy; when it comes to Basic, Dijkstra was wrong. You have to start somewhere.
Also I feel the pain, at one time I was the guy hitting enter every couple of minutes, then applying a label and putting the programmed eeprom in the tube.
Damn, now I remember the tubes.
Once a day or so a tube came back because one or more EPROMs where faulty which meant they all had to be verified.
Dijkstra would have been even crankier if he'd lived an another 15 years.
I'm co-maintainer of a large RPG creation engine written in FB.
Once they get more facile with programming BASIC in this style, I will introduce them to more structured programming.
BASIC is a great intro language for non-programmers cause it is so linear and there are few extraneous noise (for example the parentheses in Python 3)
I'm a very opinionated person about programming languages, and there are plenty of modern language trends that have been bothersome to me. But none of them will be ever as bad as any of the Basic code I have interacted with. I'd rather read and maintain code that went through a unicode-permitted Haskell code golf competition than anything written in Basic.
Also, consider that it may not be the language but the fact that most BASIC programmers tend not to know much about programming...?
One consideration is most BASIC implementations had to run on systems with very limited resources. On early personal computers, that could be 4 kB or 16 kB of RAM. That limited memory had to support both the editor and editor (which needed some RAM to store its state, even if the software itself was in ROM) as well as contain the user's program. Forget about superfluous syntax. Heck, forget about formatting since it was likely tokenized. Earlier versions of BASIC may have run on systems with more resources, but it was designed for education so those resources would have been shared by many users so I don't see the situation being terribly different. Later implementations did take advantage of additional resources, but the language was already on its way out so the impact would be limited.
My own BASIC is very simple, but easy to embed/extend:
https://github.com/skx/gobasic
I sometimes consider extending it with WHILE/WEND, named functions, and similar. But then I remember the constraints are part of what makes it interesting to me.
I still remember the Christmas when I received 48k Spectrum, with my sisters. The tape-deck didn't work, so my sisters lost interest. I worked my way through the (spiral-bound orange) manual, typing BASIC and having a blast.
Later we got a cassette recorder which worked, and I started playing games, and hacking them for infinite lives. I think my initial love/enthusiasm for typing in BASIC programs directly lead to my career.
As for modern era, a though that crossed my mind a couple of times was having QB target WebAssembly as well. :)
Porting those MS-DOS samples into a browser canvas.
I feel obligated to point out that https://copy.sh/v86/ has been able to do this for quite a while now. Of course, having a more native option is an extremely welcome improvement.
As a continuation of the story, the next year I took AP computer science and we learned using Borland C++. the year after that we learn Java 1.4 for AP computer science. Blast from the past, no?
I've used it for a long time to make tools for myself that will run cross-platform Windows / Mac / Linux.
I also made a cross-platform Twitter-esque client (similar to Tweetbot) to work with the Micro.Blog social network. I had it fully working with Mac, Windows and Linux before I got disillusioned with Micro.Blog and didn't release it.
For internal use, I made a project estimation app for solo/indie developers like myself, that uses Monte Carlo estimation to predict an actual ship date based on the (in)accuracy of your previous task estimates. It had charts of percentage confidence, so you could give an 85% or 95% confidence of shipping a milestone by X date. The tasks & milestones were structured like an outliner and could be moved just with keyboard navigation. It was able to load project files from a discontinued Java program called Mr Schedule that I loved. That Xojo app was cross-platform Windows & Mac too.
It compiled to bytecode so you could even compile (at least console and CGI) executables for Linux, and there was something similar to P/Invoke so you could call system functionality for advanced extending.
The author of RapidQ went on to develop RealBasic, but for a long time afterwards (and still today?) there’s a large community of people making extensions and addon components for it.
2010 (1 comment) https://news.ycombinator.com/item?id=1161656
More languages and IDEs like this will make easier for more people to find an on-ramp that suits them and their interests and ways of thinking.
Kinda difficult to read hehehe...