Alchemy: Converting a ZInternship Into a Golden Opportunity

I always wanted to be a scientist. Where I grew up — in a northern Indiana farming community with a heavy Amish population — all scientists are doctors. My choices were: Did I want to work at gas station/grocery store, or did I want to become a doctor?

But, there was also something else happening in my community — something more insidious and frightening than lack of choices. An epidemic of heroin was taking over our community, and I watched as many of my friends died from heroin overdoses.

Determined to leave behind the culture with which I could never identify, I left to attend college in the big city — Iowa City. Three years into my biochemistry studies of University of Iowa, I landed my first research job in the school’s chemistry department. It was a part-time unpaid job that counted as a grade. Even though it’s more like a class, it’s not easy to get a position like this. It was a special thing to be trusted with a nearly bottomless dispenser of THF, diethyl ether and toluene, and to have my own set of Schlenk lines. One misstep in handling this pressurized system could have hurt dozens of people. But I was a darn good chemist.

Out of My Control

It was also during this time that I experienced first-hand what sexual harassment looks like. First, one of UIowa’s  chemistry professors resigned after being convicted of assault (two counts of assault causing bodily injury and one count of assault with intent of sexual abuse) against one of the few other females in the department. The incident made headlines.

During this same time, I was struggling in my chemistry class. When I asked the professor for help, he suggested I visit his fraternity — the one that he belonged to while attending UIowa — and “see what I need to do to get the answers” to his next test.

I was stunned. The class was almost all male, and almost all of its members belonged to this fraternity. Class conversations centered on the school’s football team, rather than chemistry. This was hugely disappointing for me. I had always been terrified of failure and here I felt like the outcome of my whole life was totally outside my control. It was the worst time in my adult life.

I needed to get out, so I left the chemistry lab and switched to cloning and sequencing rotifer DNA for the biology department. This was my first paid research job, at 45 cents above minimum wage.

During this time, I was looking into getting an internship in the biotech industry. The biotech industry just seemed more glamorous and fortunately, the University of Iowa was holding its first biotech job fair. I was excited about all of the career possibilities.

At the fair, I showed up in a business suit with a clipboard full of resumes. When I approached a company’s representative, she gestured a “give it here” motion for my resume without any greeting. Bright-eyed and ready to sell myself based on my previous work that had been well-respected and presented internationally, I introduced myself and expressed my interest in this unpaid internship. “You and a thousand others,” she said, tossing my resume into a messy pile. I got the same response when asking to volunteer at a nonprofit walk-in clinic. It was a demoralizing event.

Bye-bye Iowa, Hello Seattle

Later that same year, I decided again to change careers. This time, I was focused on another science: computer science. After taking one semester of programming classes and discrete math, I fell in love with CS, but soon realized that living in a state that had just one major tech company (Rockwell Collins) wasn’t going to cut it.

I needed to be in the center of a growing tech market — Seattle.

While we considered the Bay Area, the cost of living scared me. My husband (fiancé at the time) worked at Rockwell Collins, and he got a job at Amazon in order to get us to Seattle. We moved to the Emerald City in May 2013.

My goal was to get into the University of Washington, but the lead time to apply is almost a year, so I planned to take community college classes in the meantime. I had no job lined up, and it was a couple of months before the community college classes were to begin.

Shortly after moving to Seattle, we got married in a courthouse (best wedding ever!) and while waiting for community college classes to start, I got a job at Starbucks as a barista. While exploring Reddit one evening, I learned about an upcoming class at the Ada Developers Academy. Applications were due in 12 hours, and that’s literally how long it took me to apply. The application contained difficult logic puzzles and a coding challenge, and I had to make a video of myself answering interview questions that I then had to edit down to 5 minutes. The process involved having to learn markup language and use it to produce my resume for submission. Ada is very selective, and I was selected for its intensive, six-month program.

As part of Ada’s training, you get placed in an internship at a Puget Sound company, and I was accepted by Zillow, starting on May 5, 2014. The best part of my Zillow internship was that I was added to the development of the Zillow Digs product as a real, contributing member and not separated from the actual development. I gradually took on more complex tasks that were critical to the overall development of Digs. As an integral (but considerably slower) member of the Digs team, I implemented some major features that improved our SEO and Google Analytics data, added richness to our image data, and most importantly, gave our users an even better experience. I have had an amazing Zillow internship experience, and the skills that Ada taught me continue to develop — such as agile methodologies, Git and JavaScript. I continue to actively build on my knowledge of algorithms and functional programming.

The Moral of the Story

My journey has been filled with heartache, amazement and finally, joy. I have been fortunate to land in an industry that is rewarding and fascinating. But, I’ve come to realize it’s hungry for more people like me. While there is outreach to girls, women and people of color to get excited about tech, there needs to be outreach to places outside urban centers, too. Rural kids don’t know what computer science is, and few people are trying to reach out to these kids who are dying of hopelessness.

The coasts put out knowledgeable students who went to computer camp at 10 years old, but passion comes from everywhere — even the “fly-over” states. Tech is for everyone. Tech is a pure and beautiful application of math, unlike life itself. Tell your daughters about tech. Tell your weird cousins in Alabama about tech. Be active in informing these marginalized and potentially very talented children, because the MIT-bound students are already made.

If you know a smart, but underemployed woman who wants to become a software developer, I highly recommend Ada Developers Academy. All 15 of the first group of graduates have left behind old jobs for this new career path. We are not quitters; we are high achievers who were willing to take a risk.

My Ada class graduated on Oct. 24, 2014 and so far, every single student received a permanent job offer, including me. Yes – I am now a full-time employee at Zillow, continuing my work on the Digs team as a full-stack software engineer. I am grateful to everybody here for making me feel welcome, buying me lunch and generally being awesome. Unofficial Karma points for everyone!

Understanding CSS Specificity

For two years, I have been conducting front-end engineering interviews at Zillow. While every interview is a little different, one thing stands out as common to all of them: hardly anyone understands how CSS specificity works (TL;DR including me).

The question I ask is this:  what is the color of the text in the following snippet of code?

#a .b .c { color: red; }
.d .e .f { color: green; }
.g .h #i { color: blue; }

<div id="a" class="d g">
    <div class="b e h">
        <div id="i" class="c f">What is the color of this text?</div>

If you said blue, you are correct. But what happens when I swap the first and last rule? What happens when I add an element to the first selector? Or what if the second rule had 1000 classes instead of 3? Usually at this point, the candidate starts to question everything they know about CSS.

Continue Reading…

iPhones & Widgets & Watches – Oh My!

I think we can all agree that Apple’s live stream reliability wasn’t the greatest, but the actual products: WOW. Here at Zillow we gathered around with bagels, then salivated and shouted at the screen as we watched the new iPhones, Watches and hotly anticipated capabilities unveiled.

Zillow Team Watching Apple Event

Zillow team watching Apple event

The rumors have been flying for months and those of us on the mobile teams have been busy preparing. Even though we’ve been working on some iOS 8 prototypes since Hack Week 7 it’s always a blast to make it to the finish line.

Continue Reading…

Women in Computing with Ada Developers Academy

The skyrocketing demand for highly skilled software developers in the past few years has created great hiring challenges for the computer science and technology industry.  This crunch is compounded by the fact that these fields are predominately male, thus under-representing half of the population.  To help battle this gender inequity in software development and to fill the need for developers, the Ada Developers Academy (Ada) has announced a brilliant program: a tuition-free, year-long intensive programming school for women.  The program provides six months of full-time classroom instruction and hands-on learning with the Ruby on Rails stack, along with up to six months of internship at a Seattle-area tech company.  In order to qualify for Ada, applicants must go through a rigorous interview process, demonstrating their passion for programming and a determination to make the transition to a career in computing.

Ada Zillow Visit

Continue Reading…

Automated Testing and the “Zon” Service

At Zillow, we like to release code as often as possible, because this lets us iterate quickly and get bugfixes and improvements to our users sooner.  Need a landing page because the president of the United States called and your CEO will be moderating a video chat with him in a few days?  You’d better be able to ship code quickly.  To support our fast releases, we need a testing system that can quickly gauge the quality of any given release.  This is easy with a small team, but becomes more difficult as one continues to grow and add developers. More devs means more changes merging together at an ever-increasing pace.  To ship safely, we need to be able to quickly determine if all this newly-integrated code is behaving in the way we expect it to.

Automated testing is certainly part of the answer, but we need to compile results from different testing frameworks into a single source that can quickly show us the quality of a piece of code.  Enter “Zon.” If you’ve read some other posts on the Zillow Engineering Blog, you’ll know that we like Z names.  The name “Zon” comes from Z-On.  It tells us when services are up or on. Ideally, all the time! Continue Reading…

Tile It Up!

My favorite feature of the Google Maps Android API v2 is the ability to quickly and easily add TileOverlays to a map. Google really opened doors for the Android community with this feature. At Zillow, it allowed us to display content on that map that is relevant to a home search such as property lines and school attendance zones. With Google Maps Android API v1 we would have had to implement our own tiling layer perhaps with a Canvas overlay, which gets expensive for those with low-end phones with limited memory resources and could become expensive to maintain.

Google Maps V2 with the Property Line Data Overlay

Continue Reading…

Specializing Cocoa’s NSOutputStream, or How ObjC Duck-typing Saved Me From Writing Redundant Code

Having experience with a wide variety of languages and tools can sometimes leave one in a frustrating situation: one knows an easy way to solve a problem using some language or toolset that’s not practical for the target platform. Recently, I was working on an iOS app with a library that generates a stream of data into an NSOutputStream. Seems like a reasonable way to design a library. Without looking closely, one could assume that it would be easy to add some manipulation to the stream of data on its way to a file, resource or memory buffer, perhaps to filter out unnecessary content. The first thing that comes to mind is to create a subclass of NSOutputStream that overrides the write:maxLength: method, but that turns out to be a rather onerous undertaking: it’s easy to overlook the statement in the NSOutputStream documentation: “you may have to implement initializers for the type of stream data supported and suitably reimplement existing initializers.”   The compiler doesn’t help, since it sees the initializers declared, so if your subclass (or its client) tries to use any of the initializers other than init, it will compile without any warning but trigger an unrecognized selector exception at runtime. That’s because the subclass of NSOutputStream isn’t “toll-free bridged” to the foundation class that implements those initializers.

One answer to this is to create a subclass that creates a delegate instance of NSOutputStream and implements the desired initializers by implementing all the methods of NSOutputStream as calls to the corresponding method on the delegate. That results in a class with a whole bunch of code (14 overridden methods) with no added value.

So I talked with my colleague, Sanjit Saluja, and he pointed out some code that does message interception. That led us to the idea that instead of creating a true subclass of NSOutputStream, we could create a class that creates objects that contain a delegate instance of NSOutputStream with some short and sweet message forwarding so that these objects act like NSOutputStream. That way, there’s only code to implement the new behavior (as one would expect when specializing a class), plus a couple of methods to tie the new class to delegate.
Continue Reading…