I have inquired about IF games emulating real computer environments/applications in another thread, but the next issue I wonder about is whether you think teaching an authoring system would be a good first step towards learning to program. In many ways a system like TADS is closer in syntax to what you find when programming, but even the more “natural language” systems like INFORM introduce elements like logic, shared behavior, and many others. Even the non-parser systems can be used in ways like you see in Scratch (or games like Human Resource Machine). Have anyone tried this method or perhaps started with IF and then used their knowledge to progress to “actual” programming?
This is where I’ll do my usual plug for Adventuron, my authoring system of choice, which was originally conceived as tool to teach coding skills in schools (as the ‘classroom’ branding indicates), complete with tutorials and sample games. It may not have been particularly successful with its intended target audience, and there are possibly elements of the language that are a little idiosyncratic (so I’m told; I’m no expert), but having learned how to code with it over the past couple of years I can certainly say I’d feel a lot more confident about transferring the skills I’ve learnt to another programming language.
Being in the process of learning something of a new language (Roblox’s version of LUA) it has made me realise anew, perhaps, that programming is programming. Non-tricky things like variables are constants (ha!) across languages.
When I use Inform 7, when I go to do anything moderately tricky behind the scenes, I’m still using what I learned in AppleSoft BASIC almost four decades ago:
– Setting a variable
– Running a loop
– Reading and writing data in a loop
– Creating subroutines to do things you do over and over
– and (this one is more modern) finding indirect ways to refer to things while referring to something else, and indirect ways of referring to the things you’re referring to while referring to something else; sort of squishing complexity into smaller gestures. This one wasn’t really a built-in feature of the 8-bit era.
I’ve never programmed for a day job, and I’ve gone from Applesoft BASIC to some 8/16 bit assembly, then nothing new for decades (well, HTML), then to Inform 7, and now to Roblox LUA.
Learning this LUA thing, I watched about 20 tutorial videos in a row without typing anything. For someone less experienced, that’s probably a bad way to go about it, but really I was just learning the new syntax behind the same ideas I knew already. I didn’t need to relearn the ideas. Then I moved to copy and pasting examples while understanding them, tweaking them occasionally, and now very infrequently I write a line of my own from scratch. And it doesn’t work and I poke it or review the examples again until it does.
So I think you can use almost any language to teach programming, but students aren’t aware at the start that the same concepts may repeat. They’re always bewitched (bamboozled?) by all they can see in front of them initially, the forest of syntax.
EDIT: It just occurred to me, Inform taught me about classes. And that has paid off for LUA.
The University of Michigan-Dearborn used to run a course on games programming and the first major homework assignment was to write an adventure using Inform 6. It was amazing what those students came up with in just a couple of weeks.
Inform 6 is an object-oriented programming language that is very similar to languages like C++ and Java, so students will learn more about conventional programming languages by using Inform 6 than any of the other languages mentioned, apart from TADS.
I have used many programming languages over the years. Once you know the fundamentals, it’s usually fairly easy to transfer those fundamentals to other programming languages. It’s just a case of learning the new sysntax and the libraries.
I must also back up @ChristopherMerriner’s suggestion to use Adventuron. Adventuron’s syntax is somewhat unorthodox, but it has a built-in editor with syntax colouring, auto suggestions, error detection and so on, and you can see your progress immediately without mucking about with editors, compilers, linkers and/or assemblers. It is known to have been used in a number of school environments and a lot of first-timers have written their first adventure in Adventuron and some have stuck with it and written some really nice games.
In truth I’m more interested in elements of programming rather than a specific paradigm like OOP, and as you said, once you know the fundamentals and the way of thinking, the rest is syntax and libraries.
Personally I am more intrigued by the attempts of natural language syntax such as ALAN and Inform 7 (especially the latter). I have no experience of my own in Inform 6 or TADS to know how well do those translate, but I assume that since all of them incorporate the same elements, that is choice management, shared elements, assigned values, message handling and data manipulation, not to mention source management, compilation, deployment and running a program, that you should be able to “pick up” actual programming very easily once you have some experience in this.