Modularity, and hence separation of concerns, is achieved by encapsulating information inside a section of code that has a well-defined interface.Modules can also expose different versions of an interface, which increases the freedom to upgrade a complex system in piecemeal fashion without interim loss of functionality.The term separation of concerns was probably coined by Edsger W. Dijkstra in his 1974 paper "On the role of scientific thought".It is being one- and multiple-track minded simultaneously.Fifteen years later, it was evident the term separation of concerns was becoming an accepted idea.In 1989, Chris Reade wrote a book titled Elements of Functional Programming[7] that describes separation of concerns: The programmer is having to do several things at the same time, namely, Reade continues to say, Ideally, the programmer should be able to concentrate on the first of the three tasks (describing what is to be computed) without being distracted by the other two, more administrative, tasks.Automating the administrative aspects means that the language implementor has to deal with them, but he/she has far more opportunity to make use of very different computation mechanisms with different machine architectures.Separation of concerns is crucial to the design of the Internet.In the Internet protocol suite, great efforts have been made to separate concerns into well-defined layers.Historically, this was not the case: prior to the introduction of CSS, HTML performed both duties of defining semantics and style.Each concern provides its own class-structure into which the objects in common are organized, and contributes state and methods to the composite result where they cut across one another.Adhering to this principle is one of the tools that helps reduce the combinatorial effects that, over time, get introduced in software that is being maintained.