I addition to very good suggestions before me, I'd also recommend investing some time in functional programming, aiming to write pure functions which are easy to parallelise (and unit test). In .NET world you can start with functional C# (e.g. "Functional programming in C#" by Enrico Buona...