1.6. Software: Embedded Knowledge

When we program, we teach a computer to do something. We use our knowledge of computers and programming to create an automated system that embodies knowledge. For example, accounts software contains knowledge of accounting principles and practices, the software in a telephone exchange contains knowledge of call handling and routing, and so on.

As we shall see later (Section 4.1), software brings together three knowledge domains: knowledge of the technical tools to create the software, knowledge of software creation process and knowledge of the problem that we're trying to solve. Sometimes one person will be accomplished in all three domains – say, an experienced compiler writer. On other occasions, different individuals will embody different knowledge: a programmer knows the tools, a manager knows the process and a product expert knows the problem that we're trying to solve.

At the end of the process we have a piece of software that we expect to function without the presence of any of these individuals. The software itself doesn't know anything; even when running on a computer, it has no self-awareness. However, the software does, to a greater or lesser degree, embody knowledge from all those who were part of its creation.

Get Changing Software Development: Learning to Become Agile now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.