Before the program can be written, humans have to describe and organize the knowledge it represents according to specific knowledge structures.
Software development is knowledge-intensive. Many concepts have been developed to ease or guide the processing of knowledge in software development, including information hiding, modularity, objects, functions and procedures, patterns, and more. These concepts are supported by various methods, approaches, and tools using symbols, graphics, and languages. Some are formal; others are semiformal or simply made up of key practices. Methods and approaches in software engineering are often based on the results of empirical observations or on individual success stories.
Key concepts have been developed by researchers in the cognitive sciences to account for the various aspects of knowledge processing. My goal here is to bridge the gaps between the viewpoints of cognitive scientists and software scientists and practitioners regarding knowledge and outline the characteristics of the related concepts in software methodologies and approaches. The benefits are twofold: a better understanding of the cognitive processes involved in software development and an additional scheme for developing new software practices, methods, and tools .
The mental processing and representation of knowledge are complex activities, and our understanding is still rudimentary and subject to debate . A general concept for describing knowledge is as elusive as ever, though various key concepts been developed from specific viewpoints in the cognitive sciences. Some of them are derived from the content or structure of knowledge, others from its representation. Here, "knowledge" refers to a permanent structure of information stored in memory. "Knowledge representation" refers to a transitory construction built up in memory for the processing of a specific situation. Table 1 lists the viewpoint corresponding to each key knowledge concept in the cognitive sciences.
Table 1. Key knowledge concepts in the cognitive sciences Key Knowledge Concept Viewpoint Procedural/Declarative Knowledge nature of content Schema Knowledge internal structure Proposition Formal knowledge representation Chunking Representing unit of knowledge Planning Managing knowledge structures
There are many ways to define knowledge. One is to consider the way it is stored in human memory. Related studies have identified two types of knowledge--procedural and declarative--and their corresponding memory contents.
Procedural knowledge, including psychomotor ability is dynamic. Procedural memory stores all the information related to the skills developed to interact with our environments (such as walking, talking, typing, and mouse clicking). Knowledge acquisition is based mainly on practice. Procedural knowledge never requires verbal support and is very difficult to describe but, once learned, is rarely forgotten. Such knowledge includes what we call know-how, or knowledge built up through experience. Early designers of expert systems underestimated the complexity of this knowledge concept.
Declarative knowledge, based on facts, is static and concerned with the properties of objects, persons, and events and their relationships. Declarative memory contains all the information that is consciously and directly accessible. Declarative knowledge is easy to describe and to communicate. Declarative memory consists of two types of knowledge--topic, or semantic, and episodic.
Topic knowledge refers to the meaning of words, such as definitions in dictionaries and textbooks. Topic memory is made up of all the cultural structures of an environment and supports the organization of knowledge related to an environment. Such environments exist at various levels, including social, personal, professional, and technical (such as structured analysis and object-oriented).
Episodic knowledge consists of one's experience with knowledge. Examples include reusing a function, decomposing data-flow …