I just rolled out a new change untested on one of my side projects. And it worked exactly like I wanted / expected it to. I'm actually a big proponent of writing tests. So it's weird that I don't have tests on my side projects... but I digress.

I wanted to document my change and how I think I've become a better programmer. I remember in University when coding in C / C++ on school projects I would almost compile and run my code after every line change. Changing 2 lines of code or rearranging my code would necessitate a compile + test.

I would be pair programming with Michael who in my eyes was a programming god back then. Even though he wasn't much better than me the gap between 95% and 100% is huge. And that 5% gap looked like the gap between man and god so to speak.

He would just refactor and code and change so much shit without compiling. Afterwards, it wasn't as if his shit would magically work. He'd have to resolve the issues that came up as a result of his changes. The thing is that as I've gotten better at programming I've changed from the mindset of expecting it to not work on the first try, to expecting it to work - with logical proof and a better understanding of the inner workings.

Programming is generally deterministic. I would argue that programming is wholly deterministic but I'm sure there's rare cases of OS interference and timings and whatnot. I think the jump from being scared of every single change to making changes and being able to logically explain the expected behavior is a huge jump and I'm glad that I've made it.

I think the next thing for me to do at work and on my side projects is some bigger refactors. Big refactors still scare me. Much the same way that changing two lines of code did back then. I want to reach the level where doing a big refactor, I can logically explain every situation and expect it to work. I've done big refactors, but they scared me and there was always a sense of 'Wow, I can't believe it works but it does'. I guess the big refactor is now equivalent to the small changes back in the day.

tl;dr - I use to test my code almost every other line change. but now I write code in blocks expecting it to work and it usually does. :)