If you know the right way and wrong way to build a bridge, you'd build it wrong, because it makes no difference?
[replace "blog" by "code"]
(Yes, I know I'm representing a terrible argument.)
(Not that there aren't good reasons to do this. Especially for public infrastructure which might be around for a shockingly large time. But predicting future usage is very difficult. For a small start-up, it's fair to err on the side of leaner/fix-it later IMO)
Refactoring scientists code was how I got into software engineering. I used to be a scientist, and I found restructuring/modularizing the analysis code more fulfilling than the actual analysis.
- get really proficient in a language, for me it was python, it is a solid, flexible, minimal boilerplate, can use it already for science applications (amazing libraries for it, like pandas, scipy etc)
- understand databases, and how to interact with them
- start testing (unit, integration and acceptance), this is super important, and key difference with scientist programming. When doing a take home test for a job interview, always include tests, even if you get the solution wrong, they will give you massive points for having tests.
- start applying! You'll fail a lot, but you gain experience with each test and interview you do.
Python also glues v. nicely with C, if a part of your code is v. CPU heavy, you can write it with cython, and then call the compiled code from python, as you would a normal python function, and it would run just as fast as native c. This is how all those python data libraries work under the hood (pandas, sklearn etc)
Library catalogue is a great idea for DB learning, you'll learn how to model data, and the relations between them, using tables, foreign keys, primary keys etc. I'd recommend postgres for the DB.
Again, python would be an excellent language for this, you can use sqlalchemy to define your tables, and query them. You can then use flask to provide a web interface for the catalogue.
- Take some time to learn some CS fundamentals.
- Make sure you know a language that someone that might employ you knows (just so they have a point of reference).
- Write some toy applications in the field you want to move to.
In fire-fighting situations at least to my experience it is usually about fixing things fast and under stress. Not many devs are interested in doing that. These hotfixers probably know their code sucks, but I don't think they need to feel bad for solving the urgent problems in their own way - in my experience it is not a job that many are that willing to take. Majority like to solve the problems properly in a slow-paced less stressful way.
But sometimes a new checkbox appears and that is a real problem.
Probably skills they learned reading their own code. I've noticed it with other people, the ones he can quickly debug spaghetti are the ones that will create more of it. It's why they stick around, management likes them because the can solve problems, they just don't see the creation of yet more problems.