I’m glad newly minted software engineers are exposed to data structures, compilers, concurrency, graph theory, assembly language, and the other goodies that constitute a computer science curriculum. All that stuff is important.
But it’s not enough.
Since I’m half way to curmudgeon-hood, I frequently find myself lamenting educational blindspots in the young. I’ve even toyed with the idea of teaching at the nearest university, some day when I Have More Time™. If academia would take me, my lesson plans might cover some of the following topics:
- How to work with smart but misaligned teammates, manage opinions and personalities, and contribute to a cohesive team. (Software development is a team sport, young padawan.)
- The power of metaphor in software design. (See this post.)
- Choosing a good error raising and error handling strategy. (Assignment: find half a dozen error messages in open source projects, and rewrite them to make them intelligible to the Average Human.)
- The art of tradeoffs. (Usually, there ain’t no such thing as a free lunch.)
- Managing technical debt.
- Using version control, especially somewhat diverged branches.
- Communicating effectively with remote collaborators, including those whose native language is not your own.
- Data- and use-case-driven optimization. (Required reading: The Goal, by Eliyahu M. Goldratt).
- Understanding and speaking the language of business.
- Learning how to learn, to keep up with the industry after you leave school.
- Estimating wisely.
- Finding the non-obvious human and process levers in an organization to get things done.
- Effective commenting.
- Coding for maintainability.
- Great role models in software development.
- Common newbie and journeyman mistakes.
- A running contest where any student is invited to stump the rest of the class to find some problem that doesn’t already have at least one useful open-source library you could use as a starting point. (Newton: “I have stood on the shoulders of giants.”)
This is only the beginning of my lesson topics; I’m sure I could come up with dozens more, if I thought for a while.
What would you add to the list? Please comment. And please subscribe to my blog (top of right sidebar) for explorations of these topics.