From english major to software engineer

I studied English as an undergraduate, but since then I've taken an untraditional path into software engineering. Years later, I'm working as an Engineering Manager at Yelp.

I've heard everything from curiosity to scorn when people learn my background.

I'm writing for the curious, to share how I changed from one career to a very different one. I'm also writing for those who are considering a similar jump. Hopefully my story sheds some light on the road ahead.

English Major

I majored in English for the usual reasons. I like reading, writing, diagramming sentences, and picking apart complex narratives. I wanted to learn more about those things. And at eighteen years old, I was not particularly concerned about the future.

As graduation approached, I realized that in order to make money, I would need a job. So which job?

Law

Law seemed like a good fit. It's meaningful and interesting work. There is plenty of reading, writing, and picking apart complex narratives.

But becoming a lawyer means law school, which is expensive and itself requires the LSAT. And the LSAT takes months of study in order to do well. I needed time to scope out the industry before committing all that money.

So I became a paralegal. I worked at Cadwalader, Wickersham, and Taft (CWT), which is a very old, very large, and very traditional law firm. If you've heard of BigLaw, that's CWT.

I had a productive first year at CWT. I got the LSAT score I needed, I secured some strong recommendations, and I feel like I got an excellent window into the industry.

After all that, I was dismayed to admit: I didn't want to be a lawyer. While I liked many of the people I met at CWT, the lifestyle of the profession didn't appeal to me at all.

As someone who self-identifies as "quirky" at minimum, I felt like I would need to drastically alter my personality to suit the profession. Even more frightening: I thought I might be capable of doing that. What a terrible fate.

Back to square one. My paralegal job felt like a dead-end and law school felt like an expensive mistake. What to do?

Learn Everything

While continuing on as a paralegal, I tried to learn everything I could about other industries. Maybe one of them would stand out.

After a few months, my friend said to me: "You like linguistics, right? How about you try programming in Python. There are lots of cool linguistic applications for Python programming."

I'd never programmed before, but...sure. Why not?

So at 23-years-old, I wrote my first line of code. And let me tell you, when I saw "hello world" printed in the terminal, it was glorious.

Silly as it was, I was drunk with power. I could make the computer print out anything. In a strange way, I found programming similar to the creative / logical act of sentence diagramming, which I loved. So I was hooked. I started spending all of my free time programming.

Learn Programming

There were several initial hurdles to overcome. What curriculum would I follow? What language should I learn? Heck, what editor should I use to write code and where could I even execute it?

I imagine these things are obvious to someone who goes to school for Computer Science. But I was sitting at home with just the internet and a few spare hours. Fortunately, I had two great resources.

First, my programmer friends. I'm sure they got sick of my endless questions, but their help was invaluable. Working on your own, it's easy to get lost in StackOverflow posts and wind up dismayed. My friends kept me on track and cleared up a lot of confusing points. ("What's a constructor function?" "What's a list comprehension?")

Second, I found a fantastic e-book called Invent Your Own Computer Games With Python. It's targeted at an audience...much younger than I was. As a result, the writing is exceptionally clear and simple. Perfect for an absolute beginner with limited guidance.

Armed with these tools, I wrote dozens of sloppy, rudimentary programs. Notably, I made a "chatbot" with hard-coded responses to common phrases. I was so proud of that, and success felt like it was just around the corner.

Except it wasn't.

I sent out a blizzard of internship applications, and every single one was rejected. It was a seemingly endless stream: rejection after rejection after rejection. I was even rejected from Yelp, where I work as of this writing.

Around this time, a well-meaning acquaintance told me that I should give up trying to be a software engineer. It was too hard, there was too much math, and didn't I know? Software Engineers were really smart.

Boy did that make me mad. I'm still mad, just thinking about it.

Any thoughts I had of giving up were promptly sidelined. I was sure I could break into the industry, given enough time. Maybe I needed more education.

What Sort of Education?

By whatever fortune, during that period I was blessed with clarity of vision. I was going to be a software engineer, full stop. I wanted to build the foundation for my life's professional work.

Programming bootcamps had become very popular, and I spent a long time weighing them against a traditional graduate school.

It's easy to understand bootcamps' appeal. They teach you industry-relevant skills, help you apply for jobs, and promise that you can shift careers at supersonic speed: often in just a few months.

I thought for a long time about enrolling in a bootcamp. But, for whatever reason, it seemed risky.

Maybe it was the horror stories about poorly-run bootcamps. Maybe it was a personal bias towards traditional education. Maybe it was the impression I got online, that companies looked down on bootcamp graduates. Or a worry that I'd miss out on theoretical aspects of Computer Science.

Switching careers already felt risky, and I was desperate to reduce uncertainty. Bootcamps were out.

I've met many bootcamp graduates since then, most of them highly driven and intelligent. Some have found success, some not.

It's worth acknowledging that I enjoy several privileges which made it possible for me to quit my job and spend two years in grad school. I am very fortunate in that respect, and very grateful.

Applying to Grad School

Applying to grad school was pretty straightforward. The GRE felt like a piece of cake after the LSAT. I just needed to relearn high-school math (English major, remember?).

Few schools would accept me without a bachelor's in Computer Science. So that narrowed the field for me, in some ways a blessing. I applied to about five schools.

Of those, Brandeis was my top pick. There, I could take remedial undergraduate classes while I did my Master's. And they had a strong Computational Linguistics program to boot.

My background actually made parts of the application very easy. Writing a personal statement? No problem. Verbal portion of the GRE? Forget about it.

After submitting the applications, I took a mid-summer trip to Boracay, an island in the Philippines. I ducked in from the white-sand beach to check my email and found out that Brandeis had accepted me. Despite all the surf and sun, I could only dream of Boston in winter.

First Year at Brandeis

Brandeis was as great as Boston was cold.

I spent my time learning Computer Science, surrounded by intelligent people who had similar interests. It was like paradise.

Except for Discrete Math, that is. Everyone has that one class where they struggle. But even tougher than the material was the imposter syndrome I felt as a result. It was my first semester and, heck, I was just an English major. If I was already struggling, maybe I didn't belong in a Computer Science program? Surely I'd be exposed as a fraud.

In the end, I managed to scrape out a hard-won B+. And boy was I relieved. I won't say it fully alleviated my imposter syndrome, but it was a good start.

There were high points too, like the Computational Linguistics classes I took. I've rarely had so much fun being challenged intellectually. Finally I was back to diagramming sentences, but now the computer did it for me.

Internship

That summer, I was lucky to get an internship with Ginger.io, out in mythical San Francisco. I'd never been to SF and didn't know much about Ginger.io. But on paper, it was perfect.

Ginger.io was a small-ish startup, with ~20 engineers. Their goal was to provide mental healthcare to people without the usual means of access—something I'm personally passionate about.

Their tech-stack was Python-based too. That meshed with the programming I'd done at Brandeis. Finally, this time success was just around the corner.

Except it wasn't.

The people at Ginger.io were patient and kind. But, to be frank, I was woefully underprepared.

I'd done very little collaborative programming. I was somewhat baffled by the command line, and exceptionally baffled by git. I'd never even dreamed of a codebase bigger than a few files.

It was one of the most difficult periods of my life. I spent much of the summer trying to learn all the things software engineers take for granted—automated testing, development environments, version control, architectural patterns, and so forth. I worked very slowly and I felt like I'd let the team down. It was doubly painful, since I cared deeply about the company's mission.

Second Year at Brandeis

As difficult as it was, that summer at Ginger.io was transformative for my education. I was determined to be better prepared for the next opportunity.

Suddenly, it was obvious which courses I should take. It was obvious which modules I needed to pay close attention to. I still managed to take a few Computational Linguistics courses, but I added other electives like Databases and Web Development.

As the year wound down, I felt vastly more prepared for professional software engineering than I had the previous summer. Letting the challenges of my internship guide my education was one of the most effective things I've done.

Interviewing

Many people have written about the software industry's interviewing practices. I won't dwell on that, except to say that it ain't no fun.

The process is long, emotionally fraught, and exhausting. As many as five or six separate interviews per company, where they can ask you to solve whatever problem they want. As a result, the questions can be very unpredictable.

And it's surprisingly hard to program while you describe what you're doing. I found there to be a steep learning curve.

First Job: Practice Fusion

My first "real" job as a software engineer took me back to San Francisco. I'd loved the city and was raring for a second chance to prove myself in the industry.

I wound up at Practice Fusion (PF). PF maintained a free electronic health record system. They were especially geared for smaller practices—the mom and pop shops of medicine. It was a small-but-mature company, with maybe as many as 50 developers.

I was hired as a "Frameworks and Tools" engineer. We were given free rein to fix developer pain points anywhere in the stack, with any tool we wanted. At first, I was frustrated that my role wasn't more user-facing. I wanted to build software for people, dangit!

But as I grew into it, I realized that the flexibility of my role was perfect for growing my skills. I got to do things I otherwise wouldn't have, like building a development environment, prototyping a database, and dabbling in frontend work.

It helped that my team was great. I learned a lot from their camaraderie, their pursuit of excellence, and their technical experience.

Unlike my internship, I felt like I had the skills to contribute to my team. Armed with confidence, I dove into any project I could get my hands on, and I learned a ton.

And Beyond

Since then, I've landed at Yelp. There, I've written features that millions of people use every day. I've even taken on the role of Engineering Manager. I lead the team that handles the search experience, across Android, iOS, and web.

My road to software engineering was long, difficult, and felt uncertain at every step. It took a series of great mentors, lucky breaks, and a level of perseverance that brought me to my limits often.

But, for all that strife and uncertainty, I can't imagine another life that would make me happier. I do interesting work with great people, and have the opportunity to touch people's lives daily.