"My code from that project isn’t pretty. It’s not DRY. It needs some refactoring, and there are probably a lot more efficient ways I could have done several things. There are also some things I did in that project that I didn’t even fully understand."
That describes pretty much all software projects, we are all human.
You learn about DRY, you write code, you try to apply it, you get it 30% 50% or 80% right and that's always better than never to have known about DRY and only getting it 5% right by accident.
"My code from that project isn’t pretty. It’s not DRY. It needs some refactoring, and there are probably a lot more efficient ways I could have done several things. There are also some things I did in that project that I didn’t even fully understand."
That describes pretty much all software projects, we are all human.
You learn about DRY, you write code, you try to apply it, you get it 30% 50% or 80% right and that's always better than never to have known about DRY and only getting it 5% right by accident.
This is an excellent point! And there's always a tradeoff between how much time you want to spend refactoring vs learning and building something new.
and while refactoring a whole architecture is a pain, VCS allow for code changes all the time.