Also the ability to write code in an editor and see it instantly reflected in the browser by hitting refresh was a game changer. No compiling. No writing code in a black box where you don't get instant feedback or don't know if the code is behaving correctly.
I started copying code out of books a long time ago when you had to do that to run a program at all. Slowly I learned to debug as a result of my own typo's as well as typo's in the original books. Slowly I started writing very tiny things that were my own ideas and I think I got into a flow state even working on those. I do notice that I'm in less of this state when I'm learning a brand new language though.
Keep in mind that being in a flow state isn't really about being able to just type the code. I'm constantly looking things up and moving back and forth between previews, edits, etc. It's just that I seem to block out the rest of the world because I'm focused on the task. If someone speaks to me during this time it will either break my flow or I'll accidentally ignore them (or sometimes even respond subconsciously).
Anyway, just thought I'd share what little insight I have.
As time went on, I relied on her less and less, until one day I realized I didn't need her anymore to write anything. At some point during that time, it had "clicked" for me.
I think another part of the click happened when I transitioned from Java to Scala: it made me realize just how much time I was wasting manually transforming types/managing collections when map/filter/fold etc were sitting under my nose the whole time in Scala.
Yes, I know that Java has ways to accomplish the same things with streams/collectors, but it's not even close to as fluent as it is with Scala. For me, the only language I can truly enter a "flow" state in is Scala.
Programming is bliss when I restrict myself to tools and domains that I deeply understand.