I'm almost in the exact same position. If it wasn't for making ends meet, I'd definitely be on my feet again. I do know how to code, but trying to get into the field with no degree isn't the easiest thing in the world. As far as learning to code goes, I'd say jump right in! Pick a language (Python, Java, Ruby, and C are all pretty popular choices!), and slowly work your way up. Depending on your math background, some paradigms of coding may make more sense than others. Theory first: Personally, I think Imperative Programming is the easiest to start with. The general idea is you give computers the commands you want them to do. C is the de facto imperative language. Hello World! is a classic example of this style of programming. Once you get a little more familiar with functions and structures, Object Oriented Programming starts to make a lot of sense. The difference is that you start grouping structures and closely related functions into "classes". Java and C++ are traditional examples of OOP (Java especially). Compare and contrast it's Hello World. Know that although these languages were more or less designed with these styles of programming in mind, most newer languages incorporate ideas of both. After OOP, there's Functional Programming, which might make a ton more sense if you have a heavy math background.  With all that said, if I were to teach myself over again, I'd get Python, run through some tutorials [1] [2] [3], then run through a few Project Euler problems to get a feel for solving problems where the end goal is stated, but how to get there is up to you. Next, I'd learn about a few of the tools that many projects and teams use in order to coordinate their development, like shells, git, tar, etc. This site seems to have a lot of tutorials and resources for learning about them, and where to get them. After that, I'd look at some simple Python-based open source projects to get a feel for how they're structured, to make sure I can follow how the control flow of the program goes, and to see if there's something I might be able to improve with them. This site has a list of newbie-friendly open source projects, searchable by language. After that, it's a matter of practicing, keeping up on new language features, new libraries, etc. and learning how to do these same things in different languages. Considering how large they are, and how much they're used, I'd recommend Python or Ruby, Java, C, and Go as languages that are popular, used in commercial contexts, and will teach you useful skills. Haskell is another language that is very much a functional programming language, and may be good to learn in the same way Latin is good to learn (even if you don't use it, much of the knowledge of knowing it applies elsewhere).