Designing extensible, interactive systems
- by vemv
Steve Yegge's The Pinoccio Problem describes a very special type of program: one that not only fulfills the original purpose of its creators, but also is capable of performing arbitrary, user-defined computations.
They typically also host a console, by which one can reprogram the software on runtime, maybe persisting the modifications.
I find this problem very hard to reason about - there seems to be a conflict between implementing the 'core modules' of a program, and making the system really implementation-agnostic (i.e. no functionality is hard-coded).
So, how to architecture such a program - what techniques can help? Is it a well-studied topic?