I'm working with <@U6KQ2S410> and others on a seri...
# of-end-user-programming
s
I'm working with @jonathoda and others on a series of end-user programming benchmark tasks. Thoughts? https://twitter.com/stevekrouse/status/1161678448559099913
d
I think I'd add TicTacToe (two player or player vs computer) and Flappy Bird in the game realm, and then maybe a small order-entry system with customer and item lookup
💯 1
I didn't like some of the 7GUIs that weren't real-world enough
I like the idea of a set of benchmark applications for testing PL coverage. Rather than learning the features of other PLs and choosing which features to copy, I prefer a task-driven approach -- i.e., I want to make sure that any tasks that can be performed using other PLs can be performed using my PL, where I define a "task" as something minimal that a program does, such as adding two numbers together or writing to a file, as opposed to how a given PL does something. I had hoped to find an existing set of such tasks and code them in my PL, and if I succeeded I would know that I would have achieved my coverage goal. Unfortunately, no such luck. I considered slogging through the Rosetta Code tasks, but there appeared to me to be an enormous amount of task overlap there and no guarantee of the full task coverage I'm looking for. In the meantime, I have decided to code common applications like 'Hello, World!," a Guess-the-number game, Tic-Tac-Toe, Flappy Bird, TodoMVC, etc., and in different areas such as games, business applications, Internet applications, etc., until I find that I am a) using my PL elements in a consistent manner, and b) no longer adding new PL elements.
So I'm all for what you and @jonathoda are trying to do
d
It would be good to know what aspects of a language/IDE each example exercises, e.g., ToDo exercises container and list of sub-objects manipulation with cross-interaction between the two levels; Chat exercises being able to build a distributed application without techie pain, etc
k
@Dan Swirsky I actually used Rosetta Code very similarly to your description for an earlier PL project of mine: http://rosettacode.org/wiki/Category:Wart You make a good point that it's useful not just to have a set of tasks at the same level of difficulty, but also multiple levels of tasks. For example, before programming TodoMVC maybe you should try the Arc Challenge (http://www.paulgraham.com/arcchallenge.html), a 3-screen web app with session-local storage.
d
Thanks. I'll give it a try.
n
@stevekrouse I second Flappy Bird. It forces consideration of how to make graphics (beyond traditional HTML pages) accessible. APIs are as important as a language itself (and the design of the language affects the design of the APIs).
For an advanced task you could consider games that would traditionally be considered more complex. Tower defense? How do you express a spatial query between two moving objects (bullet and enemy)? What would a path-finding algorithm look like? In most languages this requires complex data structures and algorithms. You need to be able to easily express "popular" algorithms such as these, i.e. that you want the "shortest path" between two things, or design your language & environment such that highly reusable pre-made solutions are readily available via a search bar (how does the user figure out what to search for?). Or if you think non-trivial games are out of the scope of end-user programming, then where did you draw the line on what end-users are "supposed" to build? Once they've built their timekeeping and social apps, what's next? As a kid I always wanted to make video games (and many kids do try). I've got several friends who design intricate pen-and-paper worlds on a regular basis (DnD) but don't have the ability to bring these worlds alive in a computer. Games are possibly the highest-demand end-user programming domain that exists.
👍 4
t
for my app, I'm looking first at the most basic stuff— things that don't require complex APIs. ex: moving average, gaussian blur, linear regression, binary search, sort, filter. (many of those probably would be basic library functions that users would just call instead of writing themselves, but they cover a spread of data manipulation "shapes" at a level of complexity that an end user might need). some of this is prompted by playing with parabola.io, which is a node editor for working on tables (hovering somewhere between a database and a spreadsheet). one thing I quickly discovered was nearly impossible was any kind of cross-row operation; moving average being a very basic example, and definitely something end-users would do with data all the time. if you can't invent simple operations even for the elementary data types, you're certainly not getting to tower defense! a text adventure game is another simple test which might be a good way to exercise solving stateful tasks
d
I think we should distinguish between a set of applications that test the coverage of a PL and one that tests programming skills. Is the goal the former or the latter? If it's the former, I'd prefer a larger set of low-complexity applications.
k
@Dan Swirsky the case for complex apps is that many techniques and ideas that have worked with small programs in the past don't scale. On the other hand it's plausible that it doesn't matter for EUP as this channel seems to conceive it.
n
If it’s an end-user programming language then the measure of success is not whether it’s possible or convenient for us to write an app in the language but whether it’s manageable for an end-user (with only basic computer literacy) to do so. If that’s what we’re targeting, then we want to choose apps that an end-user might reasonably want to create. To do so you really have to ask who your end-users are (and aren’t). That’s probably what we’re missing here. When I look at the people around me, the first thing that comes to mind is games (a creative outlet). For others, small business apps might be more important. @stevekrouse @jonathoda for your list, what kind of end-users are you thinking of? Or are you trying to target every app with one language?
👍 1
d
Perhaps we need to better define what we mean by "end-user programming language". Is it low code? No code? Is it a full PL with a quick learning curve? Once we do that, we might get a better grip on the minimal application set.
And I like Nick's idea about choosing apps that an end-user might reasonably want to create.
And I'd add, apps whose specs are minimal and therefore quickly grasped, like Flappy Bird.