I don’t have a degree in Computer Science. I don’t have a background in computers. Or math. Or science. What I do have is a BA in English and creative writing, an MA in digital communications, and tenacity.

I’ve changed careers twice in the past decade. First, from paralegal to communications. Then from communications to front end engineer. That makes complete sense, right?

It wasn’t that simple though. Those arrows between job titles are abstracting the many trials, failures, and repetitions of trying to get where I wanted to go.

The full picture is more circular. Fun fact here: Humans cannot walk in a straight line without guidance. We walk in circles. We think we’re moving in a straight line but each step is a small deviation in our cognitive understanding of what’s straight, and “these deviations accumulate to send [you] veering around in ever tighter circles as time goes on.”

But with guidance, this doesn’t happen. As long as you can reference external points along the way, you can walk in a straight line.

I started learning to code at the age of 14. I somehow got it into my head that I wanted to make a website. I found some HTML and CSS tutorials online and started to build one. Those early websites were some awful markup but I loved them. I loved this secret language that so few of my peers knew. I loved being able to build things. But I quickly hit a wall. I didn’t know how to go from a static website to something more interactive. I didn’t know how to discover other languages or how things worked. I also felt like I couldn’t go much farther than I had because computers weren’t for girls. I hung out with a few male friends who loved computers but were very dismissive toward my interest and understanding of it. I quickly got the sense that I didn’t belong and with no guidance, I accepted that as a fact.

So, I deviated. I stopped building websites. I focused on what I was naturally good at: writing. I still thought about becoming a software engineer, even considering it in college, but the math requirements unnerved me. Instead, I focused on what I could do with a degree in English, which is anything, honestly. But communications or law seemed likely.

This was 2008. Lucky me, I graduated from college in time for the economy to collapse. Somehow, I managed to get hired as a paralegal at an intellectual property law firm. I thought it would give me insight into a potential career in law. It did: the insight that I did not want a career in law.

For the next two years, I applied to any job I could in digital communications or marketing. Social media marketing was picking up steam and sensing an escape from law, I asked a local Pilates studio if I could run their online presence to get some experience. Unpaid, of course. Each job I applied to rejected me for candidates with actual experience, so I had to do something to push myself towards hireable. I had to make experience where there was none.

It paid off. I joined the National Academy of Sciences as a Web Content Manager in June 2010, completing a two-year transition from law to communications. I barely let the recruiter offer me the job before saying yes.

That new job reunited me with some old loves: HTML & CSS. I needed to make updates to the website I managed, so I dusted off that old (but working) knowledge. I wanted to build more than that though. I wanted to make actual changes to the website. I wanted to fix things and I felt frustrated that I couldn’t. I started looking at job descriptions for software engineers. What were the requirements? Could I learn them? I did some research on what language to learn first and bought Learn to Program by Chris Pine.

I started working through the book during the weekends. But I didn’t understand how I would go from Ruby and basic programming concepts to building something bigger. I also wasn’t sure I could learn solely from a book. I had questions but no one to answer them.

I decided to take a few courses at the local community college. I breezed through the 101 course on computer science but when I tried to take 102, which involved Java programming, it all fell apart. The professor didn’t understand how to teach. He was dismissive and rude. He took points off if the homework you submitted wasn’t a 100% copy of his solution. I thought, “Is this what software engineers are like? Do I really want to do this?” I dropped the class.

I could’ve stopped right there. I could’ve stopped applying to jobs and resigned myself to being a paralegal. I could’ve stopped attempting to learn to code and resigned myself to a non-technical job. But—and here’s the important part—I didn’t. I chose not to. I recognized the circle I kept going in and I made an effort to find those external reference points I needed.

I continued learning, picking up a book on HTML & CSS and going back to building static websites. I figured I had taught myself before, so I could do it again. I also learned a bit of JavaScript and jQuery. But I still had no real clue what I was doing or how to become an engineer. A lot of the time I felt like I wasn’t making progress towards that goal. No matter how much I was learning or how hard I pushed myself, it felt unattainable. I felt like a kid playing house—a marketer pretending to be a web developer.

One day, an email from a recruiter landed in my inbox. The job role it described entailed more technical skills than I had, so I wrote the recruiter back: “I don’t think I’m a fit for this role. I don’t have ___ skills.” Surprisingly, he wrote back that that wasn’t a deal-breaker—the company wanted to speak with me.

Luck. Let’s talk about it for a minute. I refer to this first front end developer position as pure luck. That isn’t quite true. It’s luck that the recruiter emailed me. It’s luck that the interviews were brief and non-technical in nature. It is not luck that I had the skills to do the actual job. It is luck that a door opened for me. It is not luck that I did more than stick my foot in the door—I pushed that damn door wide open.

I had the one thing I needed to get this career going: legitimacy. At least, more legitimacy than I had previously. I was no longer playing house. But I still needed to learn on my own. The developers at that particular company worked in silos. Literally, we worked in cubicles and rarely shared knowledge. The more senior developers weren’t interested in mentoring juniors. The work was also mundane and not very challenging. Lesson learned: Just because you got the job doesn’t mean you’re going to get the knowledge.

It would take more learning, more coding, more resources, and external reference points to score the next job (and to meet a great mentor at that next job). But getting the first job, having some legitimacy was a major point in correcting that spiraling path. I had a better idea of how to get where I wanted to go. I spent downtime watching coding videos on and working on side projects. I discovered and started working through those tutorials. Plus, work paid for me to attend a JavaScript course.

I also signed up for a Railsbridge workshop and started attending meetups for women developers. I revised my LinkedIn with new skills. I built out a portfolio with projects I had worked on. I learned enough Ruby on Rails to start volunteering as a Railsbridge TA. All of these were external reference points. All of these helped refine the path I wanted to go down and push me farther along a straight path.

And I hope if you’re making the transition too, and finding that the path curves round and round, you know there’s a way to get out of it. You just need keep going.

This article was originally published on Medium. It has been republished here with permission.