A method of teaching/learning a skill that involves many tacit and internal processes, like thinking.
For software engineering, cognitive apprenticeship is useful for enabling less-experienced developers to learn from more-experienced ones through modeling, explanation, and careful observation of a real-world task.
Since much of the work of coding cannot be seen (because the work "happens" mostly in the programmer's head), this technique brings that process into view for learners by having the "expert practitioner" explain their process as they go.
From Wikipedia (emphasis added):
Like traditional apprenticeships, in which the apprentice learns a trade such as tailoring or woodworking by working under a master teacher, cognitive apprenticeships allow masters to model behaviors in a real-world context with cognitive modeling.
After listening to the master explain exactly what they are doing and thinking as they model the skill, the apprentice identifies relevant behaviors and develops a conceptual model of the processes involved.
For our purposes, we'll use a simplified version of the modeling & reflection methods.
A cognitive apprenticeship session will last from 1 to 2 hours, we'll go through the following stages.
Before a session, we need to have the following pieces ready:
The task chosen should be something which is too difficult for the apprentices to complete unassisted, but not so difficult that they couldn't complete it with guidance. In other words, it should be within their zone of proximal development.
If any preparatory research or work-environment setup is needed, this should be taken care of before the session begins.