The title says it all. If a program never changes, it might as well be hardware: set in stone (circuitry?), meant to be worked with rather than meddled with.
So the ultimate programming, since programming is all about software (“programming” hardware is engineering, not programming), must support change.
Example changes: (summary of this page, with typing removed)
- Add/remove/replace something
- Name/hide/rename something
- Combine(merge/flatten/cache)/split(structurize?)/move things together/apart/elsewhere
- Convert something
These changes are possible in any language, but I want these to be operations of the language: first-class, polymorphic, statically typed, dynamically typed, runtime, object-oriented, functionally pure, distibuted, atomic, <insert latest programming idea here>.
I see that Google has (finally) found my blog. The good news, fortunately, is that it doesn’t yet have all the posts. Perhaps I might get a comment sometime…