I am currently doing a PhD in analytical chemistry, however I am a reasonably good programmer and consider myself to be best in the lab apart from my supervisor. I spend most of my time coding and developing new software and algorithms for manipulating data. I have decided I do not want to stay in academia, and would like to go into software engineering. I recently attended a talk by Google who were trying to get us to apply for their positions and was really interested.
As I don't have people who are better than me to learn from other than my supervisor, I would like to as what I should learn to put me in the best position for getting these sort of jobs. I have a pretty free reign on what/how I code and still have 3 years left of my PhD so I think I could still learn most things.
I currently exclusively develop in Python, I am not a big fan of Java and would be happy if I avoided C#. I write quite complicated algorithms and possible pathways for improvement would be GPU parallelization, C and C++, code optimization in Python, and applying CPU parallelization.
There are a couple of questions which are similar but they don't take into account that I actually have the time to develop these new skills: