Knowledge and skill in software engineering

When learning software engineering - both as a beginner and as a lifelong practice of professional development - we need to develop both our knowledge and our skill.

Knowledge means our understanding of the rules, patterns, philosophies, and patterns of software engineer. Knowledge implies having a broad and deep vocabulary of terms and concepts. This includes concrete details like the syntax and methods of specific programming languages, libraries, frameworks, specifications, and other tools. It also includes more abstract ideas, like when to use different design patterns and architecture styles.

Skill means our ability to actually build and operate software systems. Skill is applied knowledge. We demonstrate our skill when we apply our knowledge to solve real software engineering problems. These ‘real world’ problems are full of challenges, constraints, and trade-offs that go well beyond the range of simple textbook problems that we face in tutorials and boot camps. We solve these types of problems only by combining a diverse range of knowledge and skills.

When building our knowledge and skill, we should also think in terms of depth and breadth

See also:

  • [[Depth and breadth in software engineering]]
  • [[Necessity and curiosity in learning software engineering]]
  • [[Four modes of learning in software engineering]]
  • [[Break Out of Tutorial Hell and Overcome Impostor Syndrome]]