In computer science a concern is a problem your program tries to solve, whereby a core concern is one of the reasons that program is written for (such as credit card billing or sending email), and cross-cutting concerns are aspects of a program, that do not relate to the core concerns directly, but are needed for proper program execution.

Separation of concerns (SOC) is an important goal in program design. As long as calls to cross-cutting concerns such as logging, object persistence, etc. are simply put everywhere into the source code where needed this leads to a highly coupled system that is hard to change. Because every time you change a feature of these cross-cutting concerns, you may need to recompile a lot of source files and check a lot of calls for consistency. And every time you change the signature of an operation, you have to change all calls to that operation, again touching many separate source files.

Isolating these cross-cutting concerns is the goal of aspect-oriented programming.