In
software development, programming in the large can involve
programming by larger groups of people or by smaller groups over longer time periods. Either of these conditions will result in large, and hence complicated, programs that can be challenging for maintainers to understand. With programming in the large, coding managers place emphasis on partitioning work into
modules with precisely specified interactions. This requires careful planning and documentation. With programming in the large, program changes can become difficult. If a change operates across module boundaries, the work of many people may need re-doing. Because of this, one goal of programming in the large involves setting up modules that will not need altering in the event of probable changes. This is achieved by designing modules so they have high
cohesion and loose
coupling. Programming in the large requires
management skills. The process of building abstractions aims not just to describe something that can work but also to direct the efforts of people who will make it work. The concept was introduced by
Frank DeRemer and
Hans Kron in their 1975 paper "Programming-in-the-Large Versus Programming-in-the-Small", IEEE Trans. on Soft. Eng. 2(2). In
computer science terms,
programming in the large can refer to programming code that represents the high-level
state transition logic of a
system. This logic encodes information such as when to wait for
messages, when to send messages, when to compensate for failed non-
ACID transactions, etc. A language that was designed to explicitly support programming in the large is
BPEL. == Programming in the small ==