End-User Programming
inkandswitch.com
inkandswitch.com
From several decades before that, I have an engineering textbook from the early 60s which devotes an entire chapter to the basics of how computers work and writing programs (once again, in Asm) to use them for solving problems.
Thus I'd say "End-User Programming" has been around for a very long time, but it's only recently that the rise of "user-friendliness" and locked-down walled-garden environments contributed to its demise.
By all accounts, he was not entirely satisfied with what commercial software was offering.
Which isn’t to say that quality of life improvements aren’t important, I just don’t think they’ll turn non-programmers to programmers in any great number.
I think that's the property which is worth fighting for. If those people would not try programming at all otherwise, providing them with a dumbed down ramp leading to frustration and graduating may actually result in non-programmers turning into programmers in greater numbers.
Every sufficiently advanced program already needs a consistent model of objects, manipulations that can be done on them, etc. The skill of seeing a pattern of manipulation and wanting to abstract it may not be universal, but it's a larger category than the motivation to pick up a general purpose programing language from square one.
> The existence of eg massively customized Excel spreadsheets say otherwise.
But those sheets are far from being maintained by everyone.
Or was it about:
>> just want to do ‘real’ programming eventually
Which is why Excel has this huge programming support.
Strongly disagree. The "magic" interface will be a machine that understands verbal instructions well enough to convert them into logic, figure out which cases are undefined and non-obvious, and then ask clarifying questions. I'm not saying we'll necessarily get there in 10 years, but barring civilizational collapse we should get there in n years. It's both useful and theoretically possible, so we will eventually build it.
Prolog can do that (once the audio has been converted to text anyway.)
I'm thinking of the interactive debugger described in "Art of Prolog" hooked up to e.g. Siri/Alexa-style VOX interface. The user would need some training, and you would need some glue logic of course, but I bet it would work pretty well.
Sure, if there are guard rails. But ideally the environment available to them is the same environment (at least most of) the system itself is written in; it shouldn’t be dumbed down, just more approachable.
>and the people that do, don’t need a more intuitive interface.
We may not need it, but it sure does help. As a concrete example, I was using an Emacs media player interface a while back and was frustrated with how it responded to mouse clicks. Were it a different media player (even if it were free software) I likely would have just accepted it and moved on. But Emacs does this sort of end-user programming pretty well (once you’re over the learning curve of using Emacs itself) and I was able to quickly trace why it was behaving the way it did and patch the offending code.
Old school GUI apps are often programmable via some interpreter embedded in the application or via apis that can be called from other programs. Lots of people would use these features to automate little tasks... there's just nothing there for web apps. Easy deployment, no maintenance > user programmable.
iOS apps aren’t unique in this. Modern software isn’t very flexible.
For simple modifications, there’s also Flex, which doesn’t require any programming! Flex provides a list of variables and methods, and lets you to override them with whatever value you want. I changed setSwitcherStyle from 1 to 2, and now I have the iPad’s “grid” app switcher on my iPhone.
iOS software isn’t inherently inflexible. Apple is just preventing you from modifying it.
I also think there's a big difference between "programming" and "toggle a single bit of configuration". You got a different behavior which didn't require programming because someone else had already gone to all the effort of programming it, and you only needed to find the secret switch to enable it.
If there's any system in common use today which allows subclassing applications to permit users to change arbitrary behavior, or plucking out a single function to re-use in a different context, I'd love to hear about it. We've got open-source, but most of those are really not at all designed for end-user programming.
The closest example I can think of today is Greasemonkey.
There's a line in a blog post[2] Saurik (Substrate's creator) wrote a while back:
> In general, I also believe the algorithms for reverse engineering have started getting better faster than the technology behind binary obfuscation. [...] I believe that we will find the distinction between closed source and open source crumbling—not just for people like comex and myself, but for the average developer.
He also references a longer talk he gave on the subject. Disclaimer that I haven't watched it. https://www.youtube.com/watch?v=D91jVZ4Z6og
Note that all of this absolutely still requires programming though. And Flex is absolutely not a programming tool, although the wealth of options it opens up is very substantial, since you can modify the return value of just about any method.
---
[1] https://github.com/Flipboard/FLEX (Note: Flipboard Explorer's abbreviated name is "FLEX". It has no relation to the other software I mentioned, "Flex".)
Tried everything I can think of. Currently, not much luck.
Visually is more complex, you need to build a UI.
But the concept, that can be done with a DSL, combining the concatenate/stack/tacit programming paradigms. How much nice, depend in what you want...
The concept, can't be done in a DSL. Because node-red makes exceptionally well use of the dynamic programming paradigm ( and with the optional payload property).
Just converting it to a Dictionary<string,object> when it enters || exits a node doesn't seem enough. + A huge performance drain
With something like Dictionary<string,object>. Yep, exist some tricks you can apply, but to make things "dynamic" you will need to use something like that.
C# have the buildings blocks for make something like that, like the Expando object and the whole meta programming.
However, a custom interpreter could be best.
P.D: I'm implementing a custom programming language, and research about it a lot. BTW, the use of hash maps with a decent hash function will not be necessarily the bottleneck...
Because of flexibility around the payload/context property. I can map anything generic through abstracts and T1,T2,... In c#, but it's not enough
Not sure about anything use related. Or I need to reduce the flexibility that I wanted before and look to the mapped properties only and ignore the rest. Which would be a lot easier
What I came up with (in Objective-C) was a 'filter' that has two things:
1. A single -writeObject: message it responds to that takes a single object argument.
2. a 'target' property that also responds to -writeObject:
That was it.Is it the same as "flow-based" programming? Certainly not at present, simply because I haven't needed various bits of "full flow". On the other hand, it's been up to every task in that general domain I've thrown at it.
What's nice is that it is first order, has named/reusable components, is super-simple, debuggable and can even integrate actual Unix filters smoothly.
¯\_(ツ)_/¯
https://github.com/mpw/MPWFoundation/blob/master/Documentati...
Thought about it though.
Ohh, I'm not at all sure I agree with that -- but then again, I am pretty sure I have an above-average number of scripts for my Android phone's Automagic app, and before that Llama. I have all sorts of automation and customization set up on my phone and workstation -- but granted, this is far above the trodden path for Joe User.
If their work has very little to do with computers, then they don't really need any functionality to do their job. So this article is kind of irrelevant.
So the decrease in effort needed lead to an increase in analysis of the information captured in the system - new uses.
You know this how? Not a single non-tech user would even try?
I would suspect that the quality and accessibility of the implementation has a huge impact on this, far more than the region or domain.