Douglas Adams on Hypercard and new educational models
arbesman.substack.com
arbesman.substack.com
Speaking as someone who used HyperCard to create a couple of applications, this is...somewhat overstated. It was quite good at creating things that resembled flipping through a deck of cards. (One app was a "smart test" that would present a more-or-less difficult question based on the user's previous answers---my first introduction to Bayesian statistics.)
It was, however, not a good programming environment if you needed to do anything complex---think of writing a complicated Emacs major mode, not using Emacs lisp but a simplified textual language intended for those without much expertise.
This is a general problem for systems built for "those without much expertise in programming (or even any at all)"; they may be able to do simple things, but you'll still need to be a "real programmer" to do slightly more complicated things, and a "real programmer" will be doing it with one hand tied behind their back.
I guess spreadsheet apps are pretty self-contained so I’m not sure that composability is a strength.
Nevertheless, HyperCard on the whole was still enough to be highly empowering to a very broad userbase, which cannot be understated. It is difficult to quantify the amount of productivity and enjoyment that can be given to users simply by allowing them to make minor changes to personal software themselves, even if the bulk of the work was done by some "real programmer".
That's good enough to build form-based apps with basic conditional logic, which was Hypercard's biggest use case.
A person can sit through a Hypercard tutorial and learn how to build a small app using forms. That same person will have a much harder time rebuilding that app in PHP or Xamarin.
If your application was naturally modeled as a set of records and where you wanted a nice UI to navigate and edit records, it was incredibly easy and productive to get up and running. It's hard to understate how much easier it was to make a GUI app for storing recipes or something along those lines in HyperCard compared to anything out there.
But, like other domain-specific languages, if your app didn't fit that UI style, it got real weird real fast and you felt like you were swimming upstream.
I switched to Visual Basic when it came out. VB did a lot of what HC could do, plus it had more traditional structures, and was more than grudgingly supported.
I liked that they had an escape hatch, though. If you wanted to do complicated things and had the skill to do so, you could write an XCMD or XFCN in C or Pascal and which could be called from your Hypercard stack. Not a perfect system, but useful and extensible.
That would really be something.
There are major glaring issues - like the rigidness of the Timer and the lack of a separate “sleep” timer. No option to pause the shortcut for an extended period of time. And the all too familiar Apple bugs these days. In spite of all this it’s definitely one of the exciting things Apple has released - especially after they made it portable between the phone, watch, iPad, mac and HomePod - albeit limited.
On the side of developers writing apps to support AppleScript, it was a nightmare because the language was too flexible. I remember having to build parse trees to handle my DirectObjects and the various other English-language-sentence-diagram portions of an AppleEvent.
I'm envisioning something like being able to tell the managing software to take your most recent photo, apply a filter to it, resize it with Waifu2x and then post it to your instagram or something similar.
Or to tell it to open Krita, make a line drawing of a character based on a photo, then use that as the input for stable diffusion 16 times and show me the results in a new folder.
I'm guessing the rudiments of such a system exist but that the control and orchestration element is missing.
> I had assumed that Apple would provide a way for Shortcuts to encode media into Apple Lossless format, but it doesn’t. The Encode Media action can encode audio, but only to M4A or AIF formats. Instead, I retreated to the command-line, since Apple provides a utility called afconvert that will let you convert audio files between an enormous number of formats, including not just Apple Lossless but the even more widely supported (and slightly more efficient) FLAC. https://sixcolors.com/post/2022/11/automate-this-audio-archi...
This is an interesting take. From this perspective, I suppose Unix got composability right but its approachability to the average person is nearly zero.
In some way "pure" functional programming often feels the same way to me. Extremely composable but am I willing to trade approachability for that? And on second thought maybe that's true of "pure OO" languages too...
Maybe people feel the same way about hardcore text editors like vim or emacs?
The list goes on... I think I read somewhere that innovation is defined as the solution to a trade-off, and this particular battle between approachability and composability seems like a particularly fruitful avenue to explore if looking for "modern problems to solve"
Or spreadsheets. Spreadsheets where the cells run little Python programs. Someone has done this I think, forget the name of the program…
As for editors. Right now vscode get that formula the most correct.
As for Unix what do we have to compare it too? Everything more or less is a Unix these days. So it couldn't have got approachability that wrong.
If that problem can be solved, there's nothing inherently problematic with just using large swathes of mostly unknown code. Almost no Debian user knows the innards of every package they've installed, even the dev libraries they're building new applications on top of (to say nothing of every Ubuntu user).
(TBF to the ecosystem, there actually is a mechanism for flagging security issues in old library versions and surfacing those to a package builder. But it is up to the package builder to account for them by changing their dependencies).
Contrast this with apt, which inspects package signatures and compares them to keys I've trusted. If a package shows up with the same name as before, but different bits, and it's signed by somebody new, I have a reason to scrutinize it more heavily.
Because npm treats package dependencies recursively, a package depending on v1 of another package and a package depending on v2 of that package can actually live in the same codebase (with proper configuration; it comes as kind of a side-effect of transpilation and tree-shaking requiring the toolchain to rename symbols anyway, so the two different versions of the library just end up either properly hidden via module inclusion or in the same codebase but name-mangled to different things). This isn't foolproof (if one of those libraries leaks details of its dependency, and another piece of code tries to do `instanceof`, it's going to have a bad time), but it makes it easier to work with codebases one doesn't control.
I strongly agree with the first part of the sentence, but I disagree with the second. Considering the users that the Unix developers had in mind at the time---the late 1970s to late 1980s, say---its approachability was significantly better than the alternatives. (DCL, anyone?)
It wasn't until Unix expanded outside that niche that people began having bad reactions to it. :-)
I always liked his take on Windows 95: https://www.info.ucl.ac.be/~pvr/os_hype.html
And extended edition: https://youtu.be/5qxg0ykOcgM
One of the things that struck me when I fired up Hypercard.sheepvm was that what came out of Hypercard is very different than what comes out of html/css/javascript. The same way that if you paint with a palette knife versus a paint brush, what comes out is different.
As a thought experiment, since I am currently building a website, I started using Hypercard to mock up the web UI. It is immediately different. (Yes I know there is the black&white vs colors). Does anyone have any thoughts on that or why that would be?
I reckon it’s like the GUI version of BASIC.
It was, as other comments point out, kinda toy-like, but in a good way as well as a bad way.
It gave Mac users a way to “play” with their Mac and make it do their bidding in much the same way that BASIC interpreters built into pre-GUI home computers did.
It was half way between magic and godlike power - at least for some people. It gave a very low barrier to entry feeling of “Oh, I get it now. I can make this machine do what I want it to do. I am in control now!”
In my head, Director or Flash was the next equivalent tool in that niche.
There's a link to a browser version there too
The subtitle of the article specifically mentions Educational Models, creating an expectation they will be covered as part of the subject matter. But then it's tacked on without any context or reason. Total non-sequitur.
When I was a pre-teen my computer booted up to BASIC. I taught largely by guessing commands. I created many simple graphical games drawing lines and circles.
SCREEN 12
LINE 0 0 640 480 5
Imagine being a pre-teen today and just trying to draw a line to the screen. Several hundred lines of boilerplate. We've lost more than we've gained.Obviously BASIC isn't a super modern choice for a lot of reasons. But really makes you wonder. Modern development feels like needless abstraction spaghetti in comparison. It's all fluff driven by 'adoption', chained together with endless toolchains. Not that we haven't learned anything good in the last 30 years, but I think we could certainly stand to swing the pendulum back the other way a bit.
Alan Kay has a well-regarded talk called "Is it really 'Complex'? Or did we just make it 'Complicated'?". (Full disclosure, haven't seen it yet, but it sounds pretty topical) https://www.youtube.com/watch?v=ubaX1Smg6pY
Yeah, I did that with my dad as a kid in the 1980s. Well, actually, they were polyglot apps using GWBASIC and DOS batch scripts, but…
If I had to rewrite them in modern Python or Ruby, using just the stdlib, they’d take far less code. (Now, if I was actually going to do it, I’d probably actually use some external libraries – if it was Python I’d use Click to give it a nice CLI and I’d probably at least bump it up to a TUI with Textual instead of leaving it straight line-oriented terminal style. But not because it wouldn’t be viable to do it without that, just because it would be worth the improvement.)
function setup() {
createCanvas(640, 480)
}
function draw() {
background(0, 100, 200)
strokeWeight(100)
stroke(200, 200, 0)
line(0, 0, 640, 480)
}
There's an online editor so pre-teens (or indeed post-teens) can get started right away (https://editor.p5js.org) but I'll admit there's still quite a hurdle if you want to host yourself, or run offline.