I can’t judge because I didn’t follow the course, but I’d like to share my a priori reaction:
One should not have to modify a working program. One should be able to add to it to implement new functionality or to adjust old functions for new requirements. We call this additive programming.
That does sound like a terrible idea. It’s often used to justify horrendous abstractions and over-architecturing, for instance. Now this can make sense when third-parties depend on the code. But if you can change the code, it’s often better to do so.
The other school that I am aware on this is to use programming paradigms where you can forcibly add to existing code (for instance, Aspect Programming). This hasn’t generally been very successful, and it’s not incredibly difficult to understand why: the existing code makes some assumptions, which it does not document (and which are liable to change) - it’s easy for the “injected” code to break these assumptions.
I think I’ve heard of “additive programming” in another context with a slightly different definition. If you can isolate in advance the class of things that can be added (say you have a role playing game, and you know you might add new character classes, and new dungeons for instance). Then making it so that when these things are added, they can be added by writing code in a single location is “additive”, whereas having to modify things all over the place is not. I think this is a excellent idea, but it is by it’s very nature restricted to the kind of changes you can predict.
Anyhow, I’m curious to see how the course holds up to the promise (who knows, maybe it does hold the grail). If you have been following the course and you want to share your perspective, I’ll be grateful.
I can’t judge because I didn’t follow the course, but I’d like to share my a priori reaction:
That does sound like a terrible idea. It’s often used to justify horrendous abstractions and over-architecturing, for instance. Now this can make sense when third-parties depend on the code. But if you can change the code, it’s often better to do so.
The other school that I am aware on this is to use programming paradigms where you can forcibly add to existing code (for instance, Aspect Programming). This hasn’t generally been very successful, and it’s not incredibly difficult to understand why: the existing code makes some assumptions, which it does not document (and which are liable to change) - it’s easy for the “injected” code to break these assumptions.
I think I’ve heard of “additive programming” in another context with a slightly different definition. If you can isolate in advance the class of things that can be added (say you have a role playing game, and you know you might add new character classes, and new dungeons for instance). Then making it so that when these things are added, they can be added by writing code in a single location is “additive”, whereas having to modify things all over the place is not. I think this is a excellent idea, but it is by it’s very nature restricted to the kind of changes you can predict.
Anyhow, I’m curious to see how the course holds up to the promise (who knows, maybe it does hold the grail). If you have been following the course and you want to share your perspective, I’ll be grateful.