Earlier quoted context omitted.
AoC is amazing, but I don't think it's a good fit for what the OP needs. The solutions tend to be algorithmically hard, but for the most part quite short, and don't really require SW Engineering chops (as opposed to "programming" chops). Working on a real, larger-scale code base, in a context where good SWEng practices are required is probably a better learning path. An internship, as suggested by Jakobeha above is p…
Yea, I have learned some important practices while programming projects but I feel as though my coding is rather messy. It's not as though I haven't programmed at all since I build out and maintain expriments for research. It's just that I feel that I am just programming to get things done and have no clear structure to my code.
On the other hand, much of the code you do while doing research is truly throw-away stuff. What I found helped me (especially when coming back to my code later on), was to use literate programming (in org-mode) to record my thought process along with the (often polyglot) code.