Updating “101 Basic Computer Games” for 2021
discourse.codinghorror.com
discourse.codinghorror.com
- I remember when I started, using BlitzBasic, I had a really hard time understanding the concept of arrays.
- A friend of mine, when showing him the statement 'x = x + 1' was confused; surely, x cannot also equal x+1.
- When teaching Python, the concept of function parameters and variable scope is always a struggle.
To some degree, having spaghetti code and all globals is useful for teaching because it 1) gets people excited to program and see something working and 2) demonstrates why you don't want to do those things. I remember when trying to write my first text based CYOA game, I was so excited to add content to it and see it on screen, but also learned very quickly that having to scroll through 20 pages of if statements was not fun, and why functions would help. I'm not sure if someone explaining "encapsulation" to me would have really taken root.
I think there should be a rewrite of the book, for modern languages and development environments, but keep the complexity extremely low, like 70's BASIC was intended.
EDIT: Just looked at https://github.com/coding-horror/basic-computer-games/blob/m... , it actually looks like a pretty good blend of original but with mild improvements.
I think the best thing that my CS 101 prof did was always refer to the assignment operator as "gets" so you'd say "eks gets eks plus one" out loud. It really helped divorce assignment and equality in my mind.
I remember TI basic has "=" for comparison, and "<-" for assignment, like, 'A<-5'. That one, to me made, the most sense. "Put the value of 5 in something called A."
It is less jarring to see:
Let x = x + 1
because it could be read: we have a given value for x, now let us replace that value with x + 1.
While I'm certainly no fan of spaghetti code, I think this is an important kind of experience for novices. I, for example, let mentees at work go down a wrong/weird path with their code for a couple weeks when I see bad code patterns or poor choices in algorithms/data structures in order to give us something to discuss and correct later when they start to hit pain points that I, usually correctly, predict they'll hit. I let them know that they're making their life harder, but I don't direct them to change course (some do on their own, others don't). Telling someone who's just learning how to do things the "correct" way (to the extent that there is a singular correct or a small set of correct options) doesn't give them sufficient motivation and experience to actually learn and internalize it. Often you get a kind of cargo cult mentality around the things you teach them since they lack comprehension of why those are good ideas or better ways of organizing code or whatever, or a later rejection of what they're taught because they don't understand the motivation behind it.
Also, letting them go down the path of spaghetti code or confused structures gives an opportunity to teach them refactoring techniques, which even expert programmers still have to apply to systems they develop (most people don't write perfect code on the first pass, and most systems having changing requirements which would render the perfect code imperfect if they did).
When really they just wanted to increment the score variable by 10.
> To instruct calls for energy, and to remain almost silent, but watchful and helpful, while students instruct themselves calls for even greater energy. To see someone fall (which will teach him not to fall again) when a word from you would keep him on his feet but ignorant of an important danger, is one of the tasks of the teacher that calls for special energy, because holding in is more demanding that crying out.
It's a quotation that I often keep in mind while helping my kids learn.
Some people say a language like Haskell would be no harder, and maybe even easier, for someone with no previous programming or CS experience, than something like C or Python. Comments like that make me wonder if they're right!
(Haskell is a pure functional language. And so has the same reaction as your friend. Variables are immutable. Anything else would be madness.)
A few years back, there was someone who shared here his experience teaching young kids programming with a simplified/visual Haskell and it was pretty cool. It seems kids without programming preconceptions don't find it all that difficult.
When teacher was explaining equations first time. I thought, "this is easy, its just like programming".
I’d forgotten just how confusing those initial concepts like arrays could be.
They were an essential part of the book, for engaging your imagination. They were also a gateway to books like Heiserman's "How to build your own self-programming robot":
https://archive.org/details/howtobuildyourow01heis/page/n5/m...
Hi, I'm Al Sweigart. I wrote Automate the Boring Stuff with Python. My next book (working title The Big Book of Small Python Projects) is exactly what Jeff talks about in the article. I started on this three years ago, and the style of the programs are 1) short (under 256 lines, as an arbitrary limit) 2) text only (so that readers can link cause-effect between the print() calls and the text that appears on the screen 3) requires no additional libraries outside the standard library 4) fits in one source code file for easy copy-pasting, along with some other guidelines.
My main fear is that I'm just old, and I'm mistaking the nostalgia of how I learned to program for good pedagogy in modern times (this is a mistake the One Laptop Per Child project made). But I figure this might be a good start for beginners who want to see what programs "look like". I already have JavaScript, Java, C#, Kotlin, and Go versions also planned. The books, like all of mine, will be released under Creative Commons licenses. The first book should be out in a few months.
Wikipedia linked to here: http://datamuseum.dk/wiki/Rational/R1000s400/Logbook#2019-10...
and there it says:
---
The Ada language was originally designed for embedded systems, in particular for embedded systems in, around and in control of military weapons, and it dates back where state-of-the-art in radiation-hardened microcomputers was the RCA1802 and a few kilobytes of ROM and RAM was the norm, so being parsimonious with memory space is deeply embedded in the genes of Ada.
For instance, when you define:
subtype MISSILE_NUMBER is INTEGER range 1 .. 8;
The Ada compiler will know that only three bits will be needed to store that type.And five bits saved here and four bits saved there, it adds up.
The R1000 is a true-blooded Ada computer, so the fundamental unit of addressing is a bit, and just because your field may happen to be 16 bits wide, does not mean that it is going to be aligned at a 16-bit boundary. (There is a notable exception: Instructions are 16 bit wide and must be aligned to 16 bit boundaries.)
---
Now, my friend told me that usually it'll align at 8 or 32 nowadays, but still, this is fascinating. I don't know if any other languages do that because I don't work on embedded stuff which might be the only place its done now if at all? Fascinating enough that I'm reading about it when I should be working!
http://www.trs-80.org/trs-80-programs-32-basic-programs-for-...
I really liked "The Flying Walloons", simple as it was.
Here's one I never saw but would have been fun, I think:
http://www.trs-80.org/trs80-graphics/
I remember I had to hide them in my other books because kids would pick on me if they saw "nerdy" books like this, and teachers didn't like you reading anything interesting during their boring lectures.
IIRC, nothing in either volume of the original (not sure if this changed in the later update that targeted SmallBasic) used graphics, they were all text-mode, so there's no real need to target a canvas library. Maybe something that provides a simpler abstraction than the DOM for just dropping text onto the page, though, if you don't want all the display in dev tools.
It's kind of like discovering the assembly monitor on the Apple ][, which you could get to by poking a value in Basic. I remember typing in an assembly program I found in a magazine that sampled audio from the cassette recorder, and played it back on the speaker. It was gritty sounding, but an amazing discovery for me at the time (about 1982).
(I'm always doing Ctrl-Shift-C to copy text from the browser when I forget I'm not in the terminal anymore--which brings up the element inspector and the console. I've always wanted to explore it myself, but I'm usually deep into another project.)
I wonder what I could have done if I had Three.js?
https://en.wikipedia.org/wiki/IBM_BASIC#IBM_Cassette_BASIC
no OS needed, like the Apple ][, TRS-80, etc.
Any help is really, really appreciated.
There is a dialect called CerberusX that 's still alive (and I helped make a VSBasic extension for it): https://www.cerberus-x.com/community/index.php
With either a wireless keyboard or a long HDMI cable, a huge TV is great for hobby computing. Why would a huge TV be a bad thing for this use?
https://forum.xda-developers.com/t/windows-tool-fire-toolbox...
I think there are keyboards with space for raspberry. To replicate the c64, trash80, appliED, TI94a experience.
Sub $100 would be nice, sure, but it's not like what we have available today is bad.
Fabrix?
https://github.com/koalahedron/lisp-computer-games
Man that brought back the memories, and I had a blast doing it. Many thanks to Jeff Atwood.
270 A=INT(14\*RND(1))+2
280 IF A<2 THEN 270
290 IF A>14 THEN 270I feel like this would've been a great batteries-included environment to start in, back when I started programming.