Learning the fundamentals
Something I’ve been thinking lately is where to focus my learning. Should my learning be focused on learning more practical things like new programming tools and languages or should it be mainly focused on learning theory and more fundamental things? For some reason I’m somewhat lacking motivation to learn new tools and I’m much more keen on learning new “fundamental” skills. But what are fundamental skills? I think fundamental skills are those that age well. That of course also depends on your circumstances and what kind of work you do as a programmer. For me as someone who works as a consultant it means that the skills should be applicable to many tools and programming languages. There’s an obvious tradeoff though - theory is not always practical and practice often doesn’t age well. So we must find a balance and make learning a fun process at the same time.
Practice
On the one hand I could spend the little freetime I have just writing code using the tools I already know. This is fun at times but in my experience quickly turns into a grind resembling real work. I’ve never been able to sustain the development of bigger OSS software projects because of this. It’s just not super fun doing the same thing for a longer period of time. With bigger projects the work also consists of maintanance tasks like fixing bugs, making releases and writing documentation, which can be hard work.
On the contrary, picking up new tools and libraries can act as vehicles for much deeper learning than it might first seem like. Maybe you find a bug in a compiler or a library and you start digging deeper, which requires you to learn things that are not related to the original problem but that challenge your current understanding in some way.
There are also differences in the tools you decide to spend your time on. Should you pick up Go or PureScript? I’d argue that PureScript stands on a much firmer theoretical ground and thus provides deeper things to learn. How much of skills involved in knowing Go are transferable to other languages? To be honest I don’t think much of it is. On the contrary, learning a pure functional languages will make you a better Java programmer, I’m sure of it.
Theory
On the theory side of things we have programming paradigms, algorithms, formal methods, mathematics, and maybe some programming laguages with deep theory behind them. These have more potential to age better than just learning the new hipster devstack and be a good investment in your career. For me the difficult part about learning theory is that it’s …difficult, and takes a lot of time. I find that it’s also often difficult to find good learning material which might be in part because of the things I’ve chosen to learn.
Learning theory and fundamentals also seems like a good way to secure our jobs when AI replaces some of the grind from software development.
Combining the theory learning with some programming seems like the winning combination for me. This is obviously the case when learning programming related theory like type systems and category theory, but I’ve been wondering whether this method would work for learning mathematics as well since we have better tools now.