If you are a student, most of what you have probably been involved with in relation to programming can be characterized as programming in the small. Programming in the small involves one programmer, who understands all aspect of a computer program from top to bottom. The major difficulty in software development is algorithmic, finding the correct sequence of operations to get the computer to do what you want. Programming in the small is like solving a puzzle, and rewards those with good puzzle solving skills.
In contrast, programming in the large is an entirely different type of task. Large software applications are developed by a team of programmers, perhaps a dozen, sometimes hundreds. In this environment, the major problems are not algorithmic. Instead, the major problems are communication issues. How much information does programmer A need to know about the work being performed by programmer B in order to do his or her job?
To illustrate, consider the issue of information hiding, which in chapter One I indentified as a fundamental tool in the control of complexity. In a one programmer project, who are you hiding information from? Yourself? Or the computer? The concept simply does not make any sense.
In a multi-person project, the concept makes abundant sense. By focusing on information hiding, you reduce the amount of information that must be communicated between programmers. This reduces the chances for error, makes it easier for each member of a team to develop and test his or her section in isolation, and has a host of other beneficial effects.