The Return of Aspect Oriented Programming
Consider all the things a programmer needs to keep track of while writing code:
1) Correctness: making sure the program does the right thing, satisfies all requirements, maintains all important invariants, performs the business logic in the desired way, etc.
2) Efficiency: the program uses a minimal amount of time, memory, and resources. This includes not holding onto memory for longer that it is needed, and not releasing the used memory in a fragmented state if possible. Some programs have "real time constraints" where certain efficiency goals, like returning a response to the user within 0.2 seconds, are considered part of their correctness.
3) Debuggability: when things go wrong with the program, it shouldn't be too hard to find out what they are and how to fix them.
4) Maintainability. The program should be documented and readable. It should be written in an internally consistent style that should also match the style of any external codebase it is a part of.
5) Testability. The program should be written in a way that unit and integration tests are both helpful and not too difficult to create.
6) Logging. The program should produce a usually non-comprehensive trace of its execution path and variable state that facilitates its debugging, allows its efficiency to be monitored, and allows for the collection of statistics regarding its behavior.
7) Security. The program should let the user take only authorized actions; typically these are the actions that the user could already perform without the program plus possibly a small set of explicitly defined actions that the user is granted by having access to run the program.
8) Extensibility: small numbers of small changes to the program should be relatively easy to make.
... continue reading