Where do I start learning about Avionics programming?
Ok, I was posting this as a comment but was becoming ridiculously long...

I worked for most of my professional life in fields that are somehow related. 
I can see that there are three areas of study that will help you a lot here. 

First: programming languages. Knowing a language used in the industry is a plus.
Now I am working in the automotive/transportation industry; I am not working on safety critical material, so we just use standard C/C++. Even at that level a good knowledge of low-level programming and software (how to write a simple driver, how to interact with a device using ioctl, etc..) are very useful.

Before that, I worked on a field related to programming languages and compilers, especially on the simulation and analysis of concurrent code. Among the others, I briefly interacted with people working for Airbus (professors that are in academia, but help to build real software).
They still see and use a lot of Ada out there, so.. knowing that is good :) I also know for a fact that Java is also used, together with special tools for verification of the code.

Which bring us to the second: everything related to the verification of software, both from a theoretical and a practical point of view, will help you hugely in this industry. Study and practice with runtime monitors and model checkers, at least. Learn about various static analysis techniques, like abstract interpretation. Take classes about that, if you can at your school.

And third: study and practice with embedded systems and with the (more rare) real-time OSes and how they work (and how you do program them).
Get yourself an arduino or a netduino (not a raspberry PI - too high level, too many resources there!) and practice with them. Lear about uboot.