In computer science separation of concerns is the process of breaking a program into distinct features, that do overlap in functionality as little as possible.

Example:

A program may log its actions, handle a database of records, compute a statistic from these records, etc.

What distinct concerns do exist should be determined first (separation of concerns), and then they should be implemented as separate as possible.

See aspect-oriented programming, aspect, core concern and cross-cutting concern as well.