Necessity and curiosity in learning software engineering

Software engineering requires both knowledge and skill, with significant depth and breadth in both.

We build some of this knowledge and skill on the job, on the fly, out of necessity. We become masters of ‘just in time’ learning, based on the demands of current and upcoming projects. We also build our knowledge and skill through regularly planned professional development, focused on topics that we know may be relevant in the near future.

But, we should also learn out of curiosity. The world of software engineering is built on thousands of interesting and interconnected ideas and implementations. These ideas and implementations have been building on each other for decades. We don’t need to understand the full history of these ideas to do the basics of our jobs. But understanding more of these ideas will make us more effective at our jobs. And they can even make our jobs more fun.

The more that you understand about different ideas in software engineering, and the implementation details of different languages, frameworks, and applications, the more effective you will be at solving interesting problems. The best engineers that I know have a deep and broad range of knowledge and skill that goes far beyond what they may have needed for any specific job. By becoming deeply interested in these topics, they have greatly expanded the possibilities of how they think and work.

Learn to regularly learn new ideas and technologies out of curiosity. Read many books, and read a wide range of code and technical documentation. Ask many questions. Dig for answers and insights. Not just the simplified code that you find in books and tutorials. Read real code, in real repositories. Read both exemplary code from popular projects, and messy (or exemplary) code from random projects. Also, not just the popular books. Dig for books on ideas that are adjacent to, and orthogonal to, the immediate problems of software engineering, or of your particular language and framework.

If you make this type of curious learning a habit, you’ll start to make some surprising connections, the world of software engineering will make more sense, and you’ll be prepared to tackle unexpected challenges.

See also:

  • [[2 Knowledge and skill in software engineering]]
  • [[3 Depth and breadth in software engineering]]
  • [[Four modes of learning in software engineering]]
  • [[6 Break Out of Tutorial Hell and Overcome Impostor Syndrome]]