If you already have a degree in engineering and solid experience, then you probably have the ability to learn effectively. Software development is often called software engineering - which is how it should be practised. That is, construct "things" based on sound engineering practices and a good understanding of the underlying physics / maths.
Any given library/framework is a collection of sub-assemblies that you then "glue" together using the programming language that it is implemented in. Personally I like Python with its "batteries included" philosophy. As long as you can avoid the "not invented here" syndrome you will do well by reading the documentation and source code for the components you are looking at using.
I've met history majors who became accomplished programmers purely by teaching themselves. There are lots of resources out there, books, videos, forums, etc. I would suggest that you pick a language and stick with it. Once you are competent in one language and a couple of frameworks implemented for it, it is much easier to transfer the knowledge to another combination. Just remember that almost all languages are "Turing Equivalent".
But is it really realistic that I will make money doing this? I hear about all this freelancing etc..., but is that just to lure in dumb money into the industry? I just have trouble comprehending that I will be able to compete with the current force, especially when their foundation in CS is much more stable than my layman understanding. I will essentially just know how to write code for the sake of writing code. I won't understand assembly and compilers, etc...
If earning money is your sole criteria, then you'd be better off doing what you already have qualifications for.
You can learn about assembly, compilers, etc by reading a couple of good text books. There are some excellent video CS courses out there if you prefer that sort of tuition.
Yes, there will be a period while you are learning and not earning. But that's how it was with your original degree - wasn't it? If you have a keen desire, then you will accomplish your goals. Read some Anthony Robbins, e.g. Awaken the Giant Within. Everything is possible, and you have to work for it, which means you really have to want it.
Any given library/framework is a collection of sub-assemblies that you then "glue" together using the programming language that it is implemented in. Personally I like Python with its "batteries included" philosophy. As long as you can avoid the "not invented here" syndrome you will do well by reading the documentation and source code for the components you are looking at using.
I've met history majors who became accomplished programmers purely by teaching themselves. There are lots of resources out there, books, videos, forums, etc. I would suggest that you pick a language and stick with it. Once you are competent in one language and a couple of frameworks implemented for it, it is much easier to transfer the knowledge to another combination. Just remember that almost all languages are "Turing Equivalent".