This knowledge grid gives tentative descriptions of two affective aspects and six types of cognitive knowledge in computer science. The grid is only a very — very! — slight adaptation of the Mathematical Knowledge Expertise Grid developed by Dewar and Bennett. In many cases we have derived our descriptions by replacing notions of proof with that of algorithm design or programming. In other cases we have copied Dewar and Bennett's descriptions verbatim.
This grid is in the early stages of development, and has been filled in only from anecdotal evidence and informal observations. It should be considered no more than a working hypothesis until a controlled study can be undertaken.
|Interest||Students are motivated to learn by external (often grade-oriented) reasons that lack any direct link to the field of study in general.||Students are motivated by both internal (desire to accomplish something) and external reasons. Students still prefer concrete ("how-to") concepts to abstractions (design patterns), even where the abstractions are more useful.||Students have both internal and external motivation. Internal motivation comes from an interest in why solutions work, not just that they do. Students are excited about solutions which are superior to other solutions.|
|Confidence||Students are unlikely to feel comfortable creating programs "from scratch"; they require specific code templates to fill in and a problem description that is almost as precise as the code itself. When given an explanation, they want minor details explained. They are unable to complete programs requiring significant decomposition.||Students are comfortable turning natural language descriptions of problems into code. They can build up complex systems, but not always with the most efficient organization. A feeling of being able to code anything starts taking hold.||Students can write code from high-level natural language descriptions but are also able to quickly spot ambiguities and contradictions in those specifications. Students will want to rewrite code already produced by others if they feel their code is superior. The feeling of being able to code anything has taken hold, together with knowledge of theoretical limits of computation.|
|Factual||Students start to become aware of basic facts about the discipline. They can, for example, recognize certain syntactic forms in their first programming language as being (or not being) well-formed.||Students have working knowledge of several concepts and facts from various sub-disciplines, and a programming language or two, but may struggle to apply the knowledge effectively.||Students have quick access to, and broad knowledge of, several programming languages and common algorithmic forms. They can apply results from computational complexity theory to create more efficient and robust applications.|
|Procedural||Students start to become aware of basic problem solving approaches, and can mimic procedures from existing code.||Students have working knowledge of well-known patterns and can implement them without reference material. They may, however, have difficulty with more complex algorithms.||Students can implement non-trivial, complex algorithms and invent new approaches.|
|Schematic||Students have begun to put knowledge and procedures into packets. Simple patterns (such as iteration and conditional execution) can be identified.||Students can translate basic concepts, algorithms, and problem solving approaches in one language and apply them in another. Much of the translation is still at the syntactic level.||Students have a deep understanding of algorithms, data structures and patterns at a semantic level, independent of any language. Expression of concepts through programming becomes truly language independent.|
|Strategic||Students decide which schema to apply based on little more than surface-level features of problems.||Students know a handful of patterns and can apply them based on simple criteria such as having seen a similar problem in another context.||Students can choose from a rich collection of design patterns and algorithms based on many different heuristic strategies. They will often implement a very general solution to a problem which solves their given problem as a special case.|
|Epistemic||Students begin to understand the common notions of the field. They are likely to believe a program to be working if five test cases pass; however, they may be skeptical at times.||Students are more strongly aware that the correctness of a program depends on more than passing a test suite, but are not necessarily able to fully argue the correctness of their own code.||Students are distrustful of claims of a program's correctness based on passing five tests. They can provide a rigorous (often inductive) argument for the correctness of the program, including all boundary cases.|
|Social||Students will struggle to write and document code. Results will be unpolished, with few comments, and poor choices for names. Known anti-patterns like copy/paste and hard coding will be present.||Students will be able to produce cleaner code but without sufficient documentation to be understood by others. Mistakes in terminology (e.g. "variable" in place of "identifier") may occasionally appear.||Students will produce very professional, clean code. Work is documented with precise prose containing correct technical terminology and diagrams, both in the code (as comments) and in external published media. Student's code can be "dropped in", without modification, into larger systems.|