Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman