for all their flaws, one of the things that "agentic coding" tools seem to be legitimately doing is addressing a big gap in the programming tool space: specifically, introducing discoverability.

as a non-musician, I can open up GarageBand and make some beeps and boops and maybe eventually even get music out

as a non-artist, I can open up Photoshop and smudge around some colors by clicking on random tools

as a non-modeler, I can open up Blender and… okay bad example. I can open up Maya and

point is, most software has an idiom where its functions are visually exposed. you can figure out how to make a note or a pixel or whatever and then everything else can eventually flow from there.

but software tools have not crossed that chasm for some reason. there were things like Prograph which never caught on, I gather that there are things like "node-based editors" for shaders & game logic in tools like Unity and Unreal, but these are extremely niche use cases

if you wanna learn Python you gotta get a book or a blog post or some kind of tutorial system and learn about abstract symbol manipulation. nobody uses a tool like Scratch for actual programming and making the transition from Scratch to a "real" programming language involves *abandoning* the discoverable interface and moving towards the text-based abstract symbol-manipulation UI idiom that we all use
this is to say nothing of learning of the metacontext of, like, a Terminal app and remote UNIX server shells and docker containers or whatever. just "a text file with source code in it" is an intimidatingly stark UI. all the stuff to make this "easier" (i.e. vscode, etc) does not make its fundaments any easier to discover, there's no "if statement" or "while loop" button anywhere, even with the most advanced tools in the biz you gotta know what to type to get started
I had great hope that Apple's Shortcuts might end up doing this, because it's a node-based discoverable approach to real-life logic that a segment of users are forced to *actually use* to access some pretty useful platform interfaces. I have a bunch myself. But its environment replicates the mistakes of every other discoverable programming environment: it's almost comically tedious and difficult to program in with any kind of fluency.
everything is ten clicks and the keyboard focus is wack as hell. absolutely the polar opposite of other "pro" tools (graphics programs, video editors) which provide such a fine-grained level of macro and hotkey control that there are gigantic expensive physical decks that you can plug in just to drive those programs. but in service of being discoverable for new users, shortcuts (and all of its ilk) make actually *doing the discovering* and becoming a high-level power user uniquely unrewarding
whatever you think about Claude Code — and *believe me*, I have *thoughts* — it is a real tool structured in a way that working programmers can use it, that people DO use, that cares about things like where the keyboard focus lives and how to proceed to the next element of the workflow, but built in such a way that you can just tell it "make me a web app where you can log in with google and vote on what to have for lunch" and SOMETHING will happen, that might even work
@glyph It makes me wish so badly that other development tools had the chance to have this level of money poured into them to pay similar dividends.

@misty @glyph That's an interesting question: What would happen if these projects got multi-billions? VSCode, GCC, Python, Sentry, Bun, vi/emacs...

Reminds me a bit of Chandler; money isn't enough. https://en.wikipedia.org/wiki/Chandler_(software)

Chandler (software) - Wikipedia

@glyph Minecraft Redstone blocks got my son into "real programming". He could do scratch already, which helped.
@glyph The example you give sounds like something that Claude Code right now can totally one-shot no problem. I'd throw up an example, but the Google login component requires setting up the OIDC stuff in Google. But, take for example a "icebreaker" picker I had Claude build last week ( https://icebreaker.linsomniac.com/ ) or a "teach me options trading" game ( https://trading.linsomniac.com/ )
icebreaker-temp

@glyph I have so many weird problems with Shortcuts that don't seem to be debuggable. And there's no documentation. Can't figure out why things don't work.
@glyph HyperCard was closer to this back in the day, and people did use that to build and ship real things. There’s never been anything like HyperCard again. There’s clones, but just copying HyperCard for modern computers isn’t the same as making a modern HyperCard successor/inheritor.

@semanticist HyperCard was my first programming language, and then SuperCard. (Apropos of this, the maintainer of SuperCard recently died, and with him any hope of ever getting a modern version of it again; it had a brief revival about 10 years ago)

But also, although it had much to recommend it, it wasn't *really* this specific thing, c.f.
https://mastodon.social/@glyph/116073103689767975

@glyph Yeah, maybe a combo of HyperCard and a Scratch-like interface might be the thing but afaik it’s not a thing that exists, let alone being used for anything real.

@glyph Programming languages are pretty brutally unforgiving, comparatively speaking

I can pick a digital brush tool in a paint program and make -some- sort of image. It may not be the image I want. But it's -an- image. There's a very achievable feedback loop between try something different -> new image, hopefully closer to what I want

The infinity of possible things I could type that are invalid programs vastly outweigh the valid

How do you get an approachable feedback loop when you have to climb such a mountain to even start at step one? The IDEs we had before offered no path forward without someone's external guide

@mikeymikey this is sort of like the gap between a linter and the halting problem

the *general* solution here is maybe impossibly difficult, to make it so discoverable that you require *no* bootstrapping, no tutorial at all to get into software architecture and complex layered logic and modularity? probably impossible

@mikeymikey but like, a version of shortcuts with a hotkey for "add a new action" that quickly returns your keyboard focus to the insertion point rather than leaving it stuck in the search field, or lets you tab through parameters and quickly select variables with fuzzy find, and serializes to Python code? not trivial to implement but also not difficult for any particularly fundamental reason. we've known what ASTs are for a few decades now
@mikeymikey @glyph in the last 20 years we've largely gone backwards in programming discoverability. Although professional programmers looked down on it, stuff like Visual Basic with its form editor allowed a bunch of people a pretty easy on-ramp to software. The shift away from dedicated IDEs also hasn't helped. In the early 2000s the setup was literally "install the IDE, and hit the new project button".

@danielleigh I started on QBasic and VB6 and I haven't really seen such an approachable interface since.

I could blame a lot of this on phones, especially Android and iOS being split between two megacorps with incompatible tooling. Flutter works on both but weighs a ton. Qt supports Unicode but it's C++ and a custom lang. HTML is a wooden crate with 10 billion dollars of thrust to make it fly, and you either get tied to a browser or you ship a browser.

I miss VB6. Not much, but I do.

@danielleigh @mikeymikey @glyph We still have form editors, that's not specific to VB. How is the VB from editor different from Delphi, msvc form editor, Apple SDK form editor, Glade, Qt form editor, etc?

Also note that these only help with the graphical layout, and in some cases simple connections between the graphical elements. For more complex logic you still need to learn the underlying language.
@mikeymikey I think the Arduino IDE ships with a bunch of templates and examples which is really nice of them

@glyph oh god this is why I hate emacs and vi and all that. give me nano. or joe.

I always say, the real hard problems of programming are environment, permissions, and connectivity.

@suzannealdrich I love emacs and the flip side of this coin is that sometimes developing an abstract understanding of a complex model is actually deeply rich and rewarding. but in every other field we have managed to make the learning curve for the software to do it not be a brick wall that you slam into head first. it might be steep but it isn't sheer
@glyph I always was looking around for some kind of printable guide for all the magic keystrokes you need to memorize for these cool whizbang text processors, but they didn't seem to exist at the time. I guess if I spent more time on it, like I did memorizing my custom keyboard layout later on, it would have stuck.
@glyph Like how you have to get the cheat codes and all the secret game controller moves by buying some game guide. That's emacs.

@suzannealdrich one of my coworkers at EA once joked that watching me use Emacs was like watching someone play a fighting game really well, and I spent the next 3 weeks writing a lisp program called "emacs-kombat.el" that would track my combo streak and print out ringside announcer type messages in the minibuffer based on how many modifier keys I was using

sadly this hooked way too deep into the input handling in emacs to be generally maintainable and it is lost to time but it was a good gag

@suzannealdrich personally I literally learned Emacs (and vi, simultaneously) from my father, it was handed to me like a goddamn lightsaber when I was 12 years old, which is one of the reasons I have a hard time recommending it; this is not a broadly accessible path to mastery
@glyph Yup, that's a big difference, when there's someone over your shoulder. I pretty much had to learn everything out of books and reading the docs and the early internet. I had a couple friends who taught me Linux but not the magic special keystroke things you have to memorize. I also don't really learn any other way than by seeing it in writing, written down somewhere. So if someone shows me something that's great, but it's immediately gone from my head. I need a cheatsheet.
@glyph Actually, I have a pretty good printer now so I should just actually do it and learn emacs keystrokes once and for all.
@suzannealdrich it's worth understanding the emacs idiom if you ever use macOS or iOS/iPadOS devices with a keyboard, because all the control-key cursor motion things (C-a, C-e, C-k, C-w, C-y) are built in to the native text widgets. in fact there's a secret, separate clipboard on macOS you can only access if you know the emacs idiom for copy/paste
Modern Alteryx Replacement | Self-Service Data Prep

Discover Enso Analytics, a self-service data preparation and analysis platform designed specifically for teams. With advanced tools, real-time feedback, and seamless API integration, Enso empowers teams to create, share, and schedule data workflows effortlessly. If you are looking for the best Alteryx replacement for data prep and blend, self-service analytics, data process automation or Excel Automation, Enso Analytics is for you.

Enso Analytics
@glyph it's a pipeline based visual programming language that also has a textual representation for everything. But you really are supposed to drag outputs onto inputs most of the time
@clayote even niche-er than the gamedev things I mentioned, but useful to know about nonetheless, thanks for the link
@glyph My friend Prof. Andreas Stefik and his team at the University of Nevada Las Vegas have done some good work on implementing a discoverable block-based interface for a real programming language. It's even screen reader accessible! (I did help them some with that part.) Too bad it's for their own Quorum programming language (https://quorumlanguage.com/) and not a language that anyone actually uses outside of intro programming classes.
The Quorum Programming Language

@matt a fascinating attempt, but messing around in the web editor it appears to be the worst of both worlds. and replicate nearly every single problem I complained about above with Shortcuts :). I certainly wish them luck in making this work, though!
@matt @glyph That's literally a text programming language with every statement displayed as a block. I think there are general purpose text editors in which you can select and drag a line as well.

There is some palette with suggested statements, perhaps a somewhat fancy autocomplete.

Exploring autocomplete UX, and especially way to provide it that does not involve jumping out of the place where you are typing and obscuring surrounding text is certainly useful but also does not sound particularly revolutionary, or making a great job of adding discoverability. If you were to write the sample program how would you know to add a frame and then a graph?
@glyph There are a lot of multimodal approaches attempting to bridge exactly this gap, with middling effectiveness. Tiled Grace was part of my thesis work & lets you switch mode, Poliglot has both at once, several others for both teaching and real languages. There was a good survey last year that covered most of them: https://www.sciencedirect.com/science/article/pii/S2590118425000280. It’s a hard problem and part of it is exactly what you brought up—the programming itself is one thing but all the other tooling is as much of an obstacle.

@glyph For all their "kids-orientatedness" or "playfullness", Scratch et al do a good job for that kind of discoverability.

Snap! (https://snap.berkeley.edu/) similiarly.

Snap! Build Your Own Blocks

The Snap! Community. Snap! is a blocks-based programming language built by UC Berkeley and used by hundreds of thousands of programmers around the world.

@glyph something something HyperCard
@genehack see several other branches of the replies :)
@glyph ah, sorry, I did look and didn’t see any mention
@genehack does your instance have fetch-all-replies? (I guess even if it does sometimes it still takes a minute)
@glyph it should, but 🤷

@glyph I learned programming in Delphi. Click together a GUI, then assign events to the elements. The IDE would then make a procedure and let me write the code for it.

I learned HTML by writing a site in Microsoft FrontPage Express, and then inspecting and modifying the resulting HTML.

I learned Linux by using SuSE which had YaST, which allowed you to do basically anything without commandline. Before Ubuntu was a thing, and Ubuntu never got it’s YaST.

@glyph And that's a necessity. I don't think I have seen a good spatial representation of software so far.

There are these planar graphs in nebulous 2D space where everything stays where you left it with very awkward point and click interface that makes everything tedious. Then there is the Dynamicland/Realtalk thing that makes things physical 3D objects eliminating point and click. The direct manipulation is probably less frustrating for most users but now your programs are also subject to gravity.

In any case neither can represent structured code. And in 'structured' I mean that there are parts like procedures or objects that are defined once but potentially used multiple times. And changing the one definition updates all uses.

You could require to represent each function as a separate graph in a separate 'tab' or 'file' or whatever. Scales fairly poorly. Not sure how it would transfer to 3D
@glyph I think the missing piece here is in the "execution environment". Most "application" software defines a constrained context in which your manipulations apply -- a document, or a score, or an image, or a grid of cells that interrelate in specific ways. These constrained contexts yield to layered, progressive abstractions and mental models, and in many (most?) cases even correspond to physical objects that new users might have a history of experience with. (1/2)
@glyph When writing in a general-purpose programming language, your execution environment is "everything a computer can do" (or maybe "everything Posix can do"). That puts most people at an instant abstraction disadvantage. And as others in this discussion have pointed out, there's a non-linear relationship between effort and results with most programming: a small effort gets a small result in a drawing program, but it takes at least a middling effort to get any result when coding. (2/2)
@umuhk not exactly new information for me but this is an interesting lens for sure