A couple of suggestions from my experience as a self-educated engineer:
1. Become a programmer and not a coder (see below)
2. Don't skimp on theory, algorithms, data structures and math
3. Learn many different languages between OOP and Functional
4. Contribute to open source
5. Have personal projects
6. Stay current (but not inundated) with the industry
7. Plan on spending at least 5 years to become "skilled"
Some elaboration:
Becoming a programmer means having vision and seeing the system - not just its parts.
Theory, math, algorithms, data structures &c... will help give you a point of view that is abstract enough that you can see the system and not just its constituent parts.
Learning different languages exposes you to radically different ways of thinking, different methodologies, different approaches, and different "programmer culture".
Contributing to open source was the best thing I ever did - I was around other programmers of varying skill levels that influenced me from the very small to the very large. Plus, there's an amount of rigor in the application of the VCS/ticketing/workflow system that you will rarely find anywhere else (you typically will have upwards of 50 or more developers that work on code at different times of the day and all of this needs to be coordinated without soaking up the project lead's time). There is also more quality control of the API's and code, in general, because it is something other people use - not just the institution.
Personal projects is self-explanatory. Anything small, to the large.
Staying current is easy, just skim HN/Reddit and read articles that catch your interest but don't get sucked into them as a time sink.
It took me five years to become "skilled" at web application programming with Python. I would venture to guess that number will be true of many industries (with varying degrees). However, do it once and your ability to adapt is pretty acute.
Programming is an investment of your mind, body, and spirit. I wouldn't have it any other way though :) Any engineering field, really, where you get to create. Programming just has the quickest feedback loop of them all.
I'm curious - but feel free to not dive into it if uncomfortable - about your current job. What job could you possibly have that means you don't get to create anything from the ground up?
I applaud your will to pivot to something else, and your desire to learn something new at a deep level. Best of luck!
1. Become a programmer and not a coder (see below)
2. Don't skimp on theory, algorithms, data structures and math
3. Learn many different languages between OOP and Functional
4. Contribute to open source
5. Have personal projects
6. Stay current (but not inundated) with the industry
7. Plan on spending at least 5 years to become "skilled"
Some elaboration:
Becoming a programmer means having vision and seeing the system - not just its parts.
Theory, math, algorithms, data structures &c... will help give you a point of view that is abstract enough that you can see the system and not just its constituent parts.
Learning different languages exposes you to radically different ways of thinking, different methodologies, different approaches, and different "programmer culture".
Contributing to open source was the best thing I ever did - I was around other programmers of varying skill levels that influenced me from the very small to the very large. Plus, there's an amount of rigor in the application of the VCS/ticketing/workflow system that you will rarely find anywhere else (you typically will have upwards of 50 or more developers that work on code at different times of the day and all of this needs to be coordinated without soaking up the project lead's time). There is also more quality control of the API's and code, in general, because it is something other people use - not just the institution.
Personal projects is self-explanatory. Anything small, to the large.
Staying current is easy, just skim HN/Reddit and read articles that catch your interest but don't get sucked into them as a time sink.
It took me five years to become "skilled" at web application programming with Python. I would venture to guess that number will be true of many industries (with varying degrees). However, do it once and your ability to adapt is pretty acute.
Programming is an investment of your mind, body, and spirit. I wouldn't have it any other way though :) Any engineering field, really, where you get to create. Programming just has the quickest feedback loop of them all.