I very much enjoyed reading Jeremy Kun's A Programmer's Introduction to Mathematics. The book does exactly what it says on the tin, in the most beautiful way. If you haven't already completed first year university mathematics, prepare for your brain to sweat a little. It's worth the effort.
Alongside brilliant explanations of graph theory, calculus, linear algebra and more, Jeremy also describes the many cultural differences between mathematicians and software engineers. This point on the culture of relearning was my favourite.
In software, once an engineer is experienced in the lower levels of the hierarchy, for the most part they're not encouraged to relearn them. There are exceptions to this, for example, when one learns a new programming language or is submitted to code review by senior engineers with too much time on their hands. But usually one doesn't spend a lot of time revisiting the foundations of programming language design to pick up Go, nor dive deep into the design of a database when deciding what to use for a new app. You learn SQL once, and don't revisit the technicalities of relational algebra unless absolutely necessary.
In mathematics, relearning one's field is routine. The prevalence of teaching in the research mathematician's profession has a large impact on this. Mathematicians spend an unusual amount of time learning and relearning the basics of their field because they prepare lectures for undergraduates, run seminars and reading groups, and induct clueless graduate students into the world of their research. It's an entrenched part of the culture.
Constantly relearning has helped me become a better engineer. I didn't truly understand the Ruby Object Model until I had to explain it to a student at a coding workshop.
I would guess that relearning is critical for many other fields too. I have been going to comedy classes for about 12 years, so inevitably a teacher will repeat a concept I have learned elsewhere. I never think of this as wasted time. The best comedians are constantly relearning and drilling the basics. It's funny, some advanced ideas only become clear after a decade of practicing the basics. (I hope this underscores the value of relearning rather than my lack of talent.)
I think we can all improve as software engineers by relearning the basics. Here are some ideas:
- Teach someone at a coding workshop
- Present a talk at your local meetup
- Complete a course in a tool you use every day. (There is probably something cool to learn about Git)
- Read an unusual book and write about the points that resonated with you