The future of programming environments could be the 'browser', not as in web, but the Smalltalk kind. There wasn't concepts of source files, and edit/compile/run weren't so distinct. Producing 'an executable' was merely saving the environment state. A platform that could work like that adding recent advancements like versioning and remote collaboration could be powerful and easy to use. Deployment could also be a very not-so-different thing than saying run that image on up-to-N concurrent hosts configuration.
One thing that I'd like to see attempted differently is removing the 'procedural' style so prevalent that it's barely even noticed as a choice. Immutable datastructures makes lots of things simpler. Not rebinding values to named 'variables' can also eliminate classes of bugs and sources of confusion. This can be done badly as in XSLT where you end up using recursion for the simplest things. There can also be better ways like the functional style that's gaining some adoption, e.g. map, filter, take_while, drop_while. Basically changing our thoughts into starting values, ending values, and transformation expressions in a declarative style, rather than the nitty gritty of pretending to be a CPU combining registers, loops, conditions etc.
Now I think the problem with the image-based programming is that while it is easy for a single programmer it makes collaboration more difficult. Why? Because it is very difficult or impossible to "merge" two or more images.
My changes might work when added to a default virgin image, but there is no such thing as virgin default image when every Smalltalk provider has their own and multiple versions of them. Any image is as good as any other.
The ability to change anything in the image really means the ability to depend on any fact about the current image. If you apply your changes in an environment/image where any one of those facts no longer holds you will get unpredictable results.
I thought making it all cloud-based with realtime collaboration would help, but it wouldn't be nearly enough. At scale there needs to be ensurances of stability--something like realtime tests. I have no idea how something like that could be made to work efficiently enough to be effective.
But if every programmer has their own version of the base-library that hinders collaboration. And still the base-library must also somehow evolve all the time. Like you say, not an easy problem, but as in mathematics the ability to use other people's software as "lemmas" I think is (or should be) the key problem of Software Engineering research.
Another thing that keeps happening is that languages become popular because of the platform it's tied to gets popular with little correlation to how good the language is in any sense, other than it being adequate to produce a working program. There's at least some possibility of convergence with LLVM backends, wasm or jvm and .NET. I think there will still be more (low-code, online collaborative) before there's any culling and less.
True. It's the Wild West, at this point