Learning learning learning. No formal programming education, learned on the fly as I automated MS Access utilizing VBA and became a web developer for a Classic ASP (not .Net) and found my niche whipping out asp pages like they were going out of style (oops, they are) and diving into SQL Server every chance I get. Scratch the no formal education, I did take Turbo Pascal in the early 90's
I graduated into the .Net Framework via C# ASP.NET MVC, and learned from fixing the errors of someone who did it all wrong, with no error catching and assuming everyone would request something as expected. To compound the situation, my employer was a cheapskate when it came to infrastructure; only upgrading servers when they crashed, and I actually was still using XP into 2015. My MO (Method of Operation) was simple, junior developers were doing the SCRUM sprints and when they got implemented they were made to be as efficient as possible. Now I find that my practical knowledge is pretty much set, and I have been working on the classroom theoretical foundations which allows me to write even more efficient code.