3 ms·
What do you think the the future of learning to program is? Something like this or repl.it for beginners to not have to understand the environment?
by pjfin123 5y ago
What do you think the the future of learning to program is? Something like this or repl.it for beginners to not have to understand the environment?
- karmakaze 5y agoSo many things that go from initial concept, to full implementation, then thinned out, and back to a full implementation in a new technology. A good example is from centralized mainframes and terminals, to desktop computers, then client-server, then thin client, rich client, and finally rich client in a web browser with centralized app hosting on a cloud server. 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.
- galaxyLogic 5y agoI used to program in Smalltalk and as it faded from popularity I wondered why. It seemed so much better in many ways. 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.
- karmakaze 5y agoThat's really well said. I've read this before but the way you've described it makes more sense to me. I can see that a similar problem made lisp difficult to catch on, as each application or company was its own ecosystem creating its own dialect with so many bits and pieces that the core language is such a small part as to not really be considered transferable knowledge between shops. 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.
- galaxyLogic 5y agoIt is also interesting to think from the viewpoint of Curry-Howard Isomorphism. Programs are proofs. Progress in mathematics relies on the ability of mathematicians to use other mathematicians proofs as their lemmas. That is possible because all mathematicians speak the same language. 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.
- karmakaze 5y agoI can relate this to what does happen between ecosystems. We 'black-box' subsets of the problem by splitting up into front-end, back-end, microservices, datastores, etc. This does give some interoperability between languages/ecosystems. Within each language/ecosystem there are library/packages that can serve as a shared/reusable base but still have many challenges in that there typically is no agreed-upon contract. We're even drifting from stability that we had before in that languages themselves evolve more rapidly now often having version/point-version numbers or add-in extensions. 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.