As someone who spent a decent chunk of his youth typing BASIC commands from Books like these into a Mattel Aquarius, I’m pretty disenchanted by the choice of languages.
None of them embody the human-first optimism of early BASICs. BASIC was designed for normal humans to actually get work done, the same vision HyperCard would bring later. It’s reflected and it’s very English syntax. It was, in no uncertain terms, the actual User Interface to many if not most consumer level machines of the age.
I don’t have a strong proposition for a specific language. QB64 is maybe the closest syntactically, but nothing lives up to the spirit of the originals that I am aware of. I was kind of hopeful I was going to get to the end of this and it was going to be a call for developers to work on a new, modern, humane programming language.
People try to tell me that dream is dead. God I hope not, computers in the hands of most users are 99% untapped potential. It’s as if Prometheus give us fire, and we only ever used it to light cigarettes. Every time a user does a repetitive task that should have been a loop they created themself, that waste of life is a small death, and the blood is on our industry.
Actually there's a reason beyond stupidity and conspiracy for things going the way they did. It is very easy to make simple things simple, but by doing that you will likely turn complex things even more complex.
The first example shows a video-poker-like game implemented in 98 lines. You can get close to that with processing or lazarus-ide. Now try to do that so you can play on-line, using the browser, with multiple people at the same time, storing score, records, with login, a network of friends, authentication... You'll end up seeing that node developers and users are neither stupid nor conspiracists.
> Every time a user does a repetitive task that should have been a loop they created themself, that waste of life is a small death, and the blood is on our industry.
The majority of people have no interest in programming, no matter how humane a language were handed to them.
That is absolutely a myth; what we tell ourselves so we can sleep at night. At worst, they don’t know what they want; they asked for a faster horse, and we’re content to keep selling horses and feed.
Watch a normal user use a computer sometime to do work without interjecting. They all do stupid repetitive tasks that take hours and should be easily automated.
Look how far people get with Excel with no programming knowledge. I have seen absolutely incredible spreadsheets that do remarkable things. The will is there, but we’ve kneecap them with awful tools, and then keep repeating but lie that they liked it.
I have a friend with zero background in programming who completely automated his “job” with Autohotkey. His entire work for the day ran in minutes and he just messed around the rest of the day, that underutilization is emblematic of the problem.
> Watch a normal user use a computer sometime to do work without interjecting. They all do stupid repetitive tasks that take hours and should be easily automated.
if you buy the hypothesis about autism in Baron Cohen's book, it is the noticing of and obsession with repetition that is the hallmark of autism, so it is your watches-and-does-not-interject individual who is the one who wants to program, and still not the subject of the study.
You give two examples (spreadsheets, Autohotkey) that actually contradict your central thesis of no good tools. Seems like those are examples of ordinary people successfully using no-code to make their lives easier?
There are so many free programming languages available to anyone interested, ranging in human comprehensibility from (the incomprehensible) brainfuck [0] to natural language interpreters for writers of interactive fiction [1], and everything in between. Visual programming languages [2], languages for children [3], languages for visual artists, for musicians, for stock traders. There's even a language using power ballad lyrics [4]!
I love your sentiment that programming is for everyone, but with respect I utterly disagree that there are no good tools for ordinary people to use. If anything, there is an overwhelming, embarrassment of riches.
But, maybe you are right? Maybe you have an insight that could be helpful? Share it, man! The world needs you!
> ...we kneecap them with awful tools
Who is this "we", Kemosabe?
If you want to help make interactive narratives easier and less prone to bugs, I have a fallow side project I need help with [5]. These people seem cool [6] and could use your insights, I'm sure (seem to be defunct, but perhaps from lack of interest? Jump start it? Track them down, find out what happened?)
Why not QuickBASIC or (for modern systems) FreeBASIC[0]? It can be used both like old-school BASIC with line numbers and such, or as a modern style with named functions and subroutines, and FreeBASIC is FOSS.
I see no reason to progress toward the non-BASIC implementations until the modern BASIC equivalents have been accomplished as meaningfully as the originals.
Using FreeBASIC would be closer to the way it was universally at the fingertips of every single Apple II, TRS-80, and PET owner. Soon to be followed by Atari and Commodore 64.
Raspberry Pi 400 can run the full Python3 language, so why MicroPython ? IMHO, MicroPython is more suitable for something like an ESP32 or Raspberry Pi Pico.
> I’m pretty disenchanted by the choice of languages. None of them embody the human-first optimism of early BASICs.
Nothing yet exists that has the same properties: simplicity and automatic availability. JS wins on availability as it is present on almost every general purpose device via a web browser, but the syntax is not as human friendly as
10 PRINT "Hello"
20 GOTO 10
or better, lets tweak the language a bit and get rid of the line numbers:
This is the start
Print "Hello"
Goto the start
Though as much as we love to hate them, I'd say spreadsheets come closest to That What Was because the people who use them are automatically there for work or to do some basic calcs for themselves, and the “programming” side of it is just there for them to discover as they need more complexity, they don't need to decide “I want to program”, they have a problem, they look up a solution, find one online, and modify it for their own needs, much like me in the 80s typing in a 10-line graphics demo or basic game and learning more by tweaking it. To a lesser extent things like minecraft count too.
> I don’t have a strong proposition for a specific language.
> People try to tell me that dream is dead. God I hope not,
There is no such language for current times, so the dream of reproducing the feeling BBC BASIC¹ in the days of yore because not only has the tech mover on but so have people's expectations. No one is going to be satisfied with those simple introductions as we were back then, so the barrier for entry is higher - the language and wider environment need to provide much more and make all that feel like the heady days of drawing random coloured dots in graphics mode 2 while, hiding all the complexity long enough to not put people off, while not limiting itself by hiding that complexity (making the complex more so, or even impossible) so that people give up when they discover they need to move to something else to get beyond a certain point⁴. And it needs to somehow compete with the rest of the world, gone are the days that you are sat in front of a disconnected computer with not much else to do but experiment and learn - it can't wait to be discovered it needs to drag people away from consuming and actively attract them to creating⁴. And we aren't just dealing with a bunch of nerds/geeks who speak at least a little English, anything like this these days needs to be embarrassingly easy to perfectly internationalise⁵, without breaking anything⁴. And it then has to get commonly accepted to become popular and therefore survive³. If you create a language/environment that manages all that⁴, then why not finish off your morning with breakfast at MILLYWAYS?!
[1] The best 8-bit basic, bar non. No silly-short naming limits, proper procedures and functions² rather than just GOTO & GOSUB, a built-in multi-pass assembler for if you got really adventurous, ...
[2] Well, there were significant limits compared to what we have now, but understandably so in such small power & memory.
[3] Not unlike how gods and belief work in Pratchett's Discworld.
[4] This is, of course, impossible.
[5] ref: “reflected and it’s very English syntax”, and it isn't nearly as simple as just swapping keywords out for local ones either.
> BASIC was designed for normal humans to actually get work done,
I hate to break it to you but we were, at best, a subset of normal humans, in the eyes of the rest of the humans!
> Every time a user does a repetitive task that should have been a loop they created themself,
That is rather too dogmatic. I'm a dev-cum-DBA with decades of inexperience behind me, and I do many repetitive things that I've not yet automated. If you automate everything you do more than twice you end up automating things that you'll never use again after next week, and never actually do much beyond making and testing automations.
> that dream is dead
Going back to that: the general dream is dead IMO. We need to stop hoping to find the One True Path to lead people along. The dream can still exist in smaller parts though, if we accept multiple very different paths without disparaging any particular ones of them: people starting by automating Minecraft stuff, people starting by trying to make DayJob easier in Excel, people in learning settings using interative notebooks to explore in more detail, people who want to make Alexa tell a fart gag at an inappropriate time to embarrass gran, people adding interaction to a simple web page, ... No one language or environment can do all, or even a fraction of, the everythings that might work for some people.
I, like many others, unfortunately have no idea what to do about it, beyond pontificating as above and hoping that someone else comes up with some bright new ideas (or resurrects some forgotten old ones that were not fully realised/appreciated in their original frame).
> And it needs to somehow compete with the rest of the world, gone are the days that you are sat in front of a disconnected computer with not much else to do but experiment and learn - it can't wait to be discovered it needs to drag people away from consuming and actively attract them to creating.
This is a good point. Back in the 80s, learning on a BBC Micro for me was a lucky confluence of geek, machine, and time period.
Maybe the "geek" part is the most important part.
I loved the BBC Micro and am grateful to have had the opportunity then, but to be honest, I'd probably have discovered computers some other way anyway, and my life might not have been that different. It's probably similar for today's kids--- if they're programmer types, then they can use today's tools and get the same thing out of it. Maybe this particular dream is indeed accessible only to the geeks?
Oh man, I learned so much from these books and a few other similar ones.
I learned to program a few years after these were popular (around 1991 or so), but a friend of my dad’s gifted me a bunch of them after he found out I was into computers. I was 8, and it changed my life.
They were magical to me. I didn’t even have access to a BASIC interpreter yet (I didn’t even know what that meant), but I read the intro to BASIC programming book and the computer games books so many times. I remember running to my parents room to tell them I could use PRINT to output to the screen. I would write programs by hand onto paper.
I remember a few months later going to my dad’s friend and asking, “ok, where do I type these programs in?” He gave me a copy of QBasic, and away I went.
I remember having to learn so much to get the games to work. I learned about different versions of BASIC, and how to convert things to work in my version. Taking bits of one game and combining them with others. Making my own.
> Now, kids feel like they've accomplished very little, even though they're doing more with less code than we did during our generation.
I haven’t observed that. My nephew has great fun building things in Scratch and is really happy with what he has made even though it’s not some triple A game. I had the exact same experience writing stuff in Basic and knowing it could never be like the Buck Rogers arcade machine I’d played.
I distinctly remember my first program as a five-year-old child:
10 PRINT "CHAZ WOZ ERE "
20 GOTO 10
In the UK one of the main retailers of 8bit computers was Boots the Chemist. This store is functionally equivalent to America's CVS or Walgreens (who know owns a big chunk of Boots). They would have all the computers on shelves hooked up to TVs. And of course, almost all computers of the day would boot into BASIC.
My Mum would leave me in Boots in front of the computers while she went around town for hours doing the shopping each week and I would happily learn programming, picking up new ideas from older teenagers who would be happy to show off their superior coding skills.
It would be three years until my parents could buy me a Spectrum of my own. In that time before I had my own, my Dad would pick up the occasional computer book from a second-hand store and I would read technical manuals and programming books cover-to-cover in my bedroom, having to imagine the output in my head.
Personally, Compute! magazine was my goto for games...
The fact it autocheck the checksum at the end of each line was a sanity saver!
Anyone else remember the hex code dumps they had for entering/checking machine language programs? I still remember going thru 84 screens of the stuff to get an awesome monitor program with assembly/disassembly functionality!
Personally I preferred the basic listings to the machine language ones, with the asm listings somewhere in the middle. With the basic listings you could understand what you were typing in as you did it. With ml you’re just a monkey typing in numbers. Sure you could disassemble it at that point (if you had a disassembler), but the barrier to reaching that understanding was so much higher than with basic listings.
I remember getting that book from the library and getting the games to work on my TI-99/4a. The BASIC dialect on that machine was not quite the same as used in the book so some translation was necessary. Can't copy/paste from a book (copy/paste wasn't a thing on that machine anyway) so you had to sit down and type it in, keystroke by keystroke. I think the slow pace of it helped me understand what the program was doing. If a line was "GOTO 500" I would always look down at line 500 and try to understand why that jump was there.
My abiding memory of typing in listings on my TI-99/4a is how often I intended to type shift-equals to get '+' but instead hit function-equals, which reset the machine and lost all my work since I last saved (and since it was saving to tape, I didn't save all that frequently...)
For a few years now I’ve been teching my son to code. This feels like a good project to do together. Grab one of these games understand it in basic and then reimplement it using my fav language.
Any other parents out there teaching their kids/teens/young adults to code?
I bought a programming magazine in the 1980s and copied a game to my Commodore 128. It didn't work, and I failed to debug it, so I set the magazine aside and starting writing my own games. In retrospect I think it was a great educational lesson. My first attempt to copy/paste code was a complete failure, so I was forced to think up stuff on my own. Man, youngsters nowadays can copy/paste in milliseconds, whereas back in the day it took us hours!
Most the haves I typed from magazines never worked. It was pretty discouraging to spend so much time typing and then the disappointment. Glad to hear I was not alone because most people in this thread seem to have been successful. Maybe it was because the size of the games in this book were small. The programs I typed from magazines were pages and pages.
I tried but quickly realized that teaching is a different skill than coding itself. i also got overwhelmed with the choices and did not know how to start. Scratch did not really grab his interest. And "dad, teach me how to make a minecraft mod" was not possible. I also did not see the patience necessary to learn it.
I think the key is not to go too fast. Simply writing simple statements and seeing it work and do stuff is enough. So I found it best to start simple and work your way up. These little games look like great examples to work from.
I remember typing up a paint/simple sprite animation program from a book in BASIC when I was 12 or so. I had no idea what anything meant, but I managed to add color support to it. Geez, this brings up memories of me sitting there on the computer debugging things. It was before the age of popular Internet connectivity as well, so no stupid social media (there wasn't even social media!) to distract me every 30 seconds.
These books (and their earlier versions) came with most Apple ][s, probably just about all that were sold in educational settings. Unlike BASIC Computer Games, they taught programming - something BASIC Computer Games (also a great and influential book) didn't.
It would be nice to do a few things with these classic and influential games (isn't the original BASIC version of The Oregon Trail in there?):
- Update them with the minimal changes required to run on a modern-ish Microsoft(style) BASIC.
- Rewrite them in a modern beginner-friendly(ish) language like Python. (This seems to be what the author wants to do.)
- Create (hopefully) easy-to-understand JavaScript versions that can be run in a web browser.
- Create an compatible BASIC interpreter that can run them as-is in a web browser.
- Create modern-ish versions of the games with pixel graphics where appropriate.
- Create some new, simple but interesting and fun, modern-style games in a modern language/environment, to serve a similar purpose for current generations of computing enthusiasts and people who haven't discovered the fun of simple programming.
I remember getting out all these C64/BASIC programming books from the library when I was a kid. They were filled with cartoon robots and such if I remember correctly.
I remember typing a "lot" (I was somewhere in the 5-7 range at that point) of code from those (and other) books into our C64. I don't recall understanding most/any of what I wrote, but I think it got me sufficiently interested to keep me going until I got to an age that I actually understood what I was doing.
They had some notes around the graphics examples saying that differences in syntax may prevent the code from being parsed successfully, and sure enough, none of those commands were available in the V2 BASIC dialect the C64 had.
Even the manual of the machine only included a single hi-res mode example in an appendix, and dedicated one chapter to sprite handling, but that was it. Yes, I am still angry.
Same here, though my copy is in abysmal condition. Between this book and the 80s era enthusiast magazines that had delivered their code directly on the printed page I learned how to program and not be fearful of programming. I have to say that calling Ahl's book the most influential BASIC book sounds like a very feasible claim.
A few years ago, David Ahl was kind enough to sell me copies of the first two years of Creative Computing magazine. Those are a treasure. I love the offbeat informality of them, the cartoons, the old wood engravings.
These books were great. What especially captured my imagination were not just the drawings, but the fact that every listing would be prefaced by a print-out of a run of the game. This made it really easy to see what the program was about (entertaining enough by itself) but it would also allow me to map whatever the game was doing with the BASIC listing next to it. This was kind of like using a debugger to step through the program and it was a really neat way to learn about control flow and program structure.
Wow. These books were, well, foundational to me. I had a blast typing those into my C64. Then at a summer camp (CTY at F&M) I thought I was so very clever for writing a version of Nim where the computer would silently pick to go first or second so that it always won. I don't know why I still remember that.
And then some summer jobs writing dBase III and FoxPro, some actual education, and here I am.
Those books absolutely set the tone and sparked that first interest.
Any MacOS users who might need a little help running the originals: I downloaded the GitHub sources for the book and then downloaded the MacOS version of Vintage BASIC.
To run Super Star Trek, this command line worked for me in Terminal:
This is exactly how I got into computers at age 4. I’d type-in game code on the family Atari 800, taking great satisfaction if/when the games finally ran without throwing errors.
I’ve been looking for a similar resource to introduce my daughters.
None of them embody the human-first optimism of early BASICs. BASIC was designed for normal humans to actually get work done, the same vision HyperCard would bring later. It’s reflected and it’s very English syntax. It was, in no uncertain terms, the actual User Interface to many if not most consumer level machines of the age.
I don’t have a strong proposition for a specific language. QB64 is maybe the closest syntactically, but nothing lives up to the spirit of the originals that I am aware of. I was kind of hopeful I was going to get to the end of this and it was going to be a call for developers to work on a new, modern, humane programming language.
People try to tell me that dream is dead. God I hope not, computers in the hands of most users are 99% untapped potential. It’s as if Prometheus give us fire, and we only ever used it to light cigarettes. Every time a user does a repetitive task that should have been a loop they created themself, that waste of life is a small death, and the blood is on our industry.