Author: Kevin Yang

This summer, I had the opportunity to take my growing knowledge of computer science theory from school and apply it at Zillow. During my exciting 12 weeks on the Rich Data Team, I enhanced my practical software engineering skills and received incredible mentorship.

My specific project was to add Sun Number and building permit data to homes on Zillow and give users even richer information about homes. Sun Numbers data helps our users understand the feasibility of solar energy for a property. For context, here is an example of a Sun Number:

Also, below is an example of a building permit on a home. This gives our users more information on what upgrades and modifications have occurred on the home they are interested in.

To add Sun Number and Permit data to homes on Zillow, I needed to work with Zillow's full stack. I created SQL tables and stored procedures for the data, added API endpoints to access this data, and worked on the front-end to surface this data.

In order to give users access to building permits data, I helped build the Rich Data Aggregation Platform, which served as a general way to ingest, store, and process data. More specifically, I created API endpoints to create download jobs for data files, refactored code for ingesting data, and wrote an algorithm that matched building permit data to specific houses. During Zillow's Hack Week, I switched gears and worked with members of the iOS team to build a photo capture workflow.

Interning at Zillow introduced me to variety of new platforms and engineering processes. I experienced the way robust InDesign mockups are created and then tested via usability tests. I learned how to quickly write back-end services with the Flask microframework, create efficient SQL stored procedures, and configure AWS components. I also had the opportunity to observe how products are analyzed using Google Analytics and improved upon through AB testing.

These experiences at Zillow helped me develop many empowering insights on the process for quickly building a product and iteratively improving it.

The Spectrum of Computer Science

The skills I acquired during my internship contrast greatly with the theoretical aspects of computer science I focus on in school at Harvard. Rather than focus on design patterns or object oriented programming, Harvard's computer science program focuses heavily on exploring theory and understanding systems.

These topics are undeniably important for developing strong analytical skills, understanding the root cause of issues, and finding opportunities for efficiency improvements. Whereas software engineering frameworks and tools in industry change every year, computer science fundamentals truly stay timeless. Moreover, for many, college is the sole opportunity to learn computer science principles under direct instruction for the joy and challenge of pursuing knowledge.

As a tradeoff to engaging with the more theoretical aspects of computer science, students have fewer opportunities to receive exposure to modern frameworks and software engineering practices in class. Courses devoted specifically to developing skills for a particular platform, framework, or language are not offered.

This heavy focus on theory is not particularly uncommon among universities. Students at some schools have to choose between a more theoretical computer science program and a more practical software engineering program.

Additionally, within the top 50 national universities ranked by U.S. News and World Report, approximately 20 percent of schools do not offer a software engineering course, and an even larger proportion do not require a software engineering course for graduation.

The Push for More Practical Software Engineering Instruction

More and more universities, including Harvard, are trying to help students stay on top of the latest trends in technology. For example, Stanford has a particularly famous course on iOS app development, and MIT offers a robust software studio course that teaches how to build web apps with modern technologies.

For the new machine learning course at my school, our professor introduced practical skills to us by oscillating between assigning highly theoretical proofs and requiring participation in competitions using real data on Kaggle. Other schools like UC Berkeley offer student-led classes where more experienced students teach each other modern technologies. Outside of the classroom, successful clubs and student-run businesses interested in building a stronger online presence offer opportunities for students to leverage modern technology.

The heavy push to bring modern software engineering principles to the classroom seems warranted, given the seemingly insatiable demand for computer science graduates. Companies need to spend less time to ramp up a new hire who has garnered more experience in modern software engineering at their university.

Exposure to a variety of frameworks and tools during school helps a new hire get familiar with the evolving landscape of frameworks and tools more quickly. Developing a habit of writing reliable and safe code early in school is preferable to learning this skill through trial and error in the workplace.

Ultimately, though, an enriching internship is the best way to complement an emphasis on theory in college. A strong foundation in computer science fundamentals makes picking up frameworks and engineering principles easier. Rather than teaching frameworks that will quickly become outdated, a focus on the theoretical aspects of computer science rigorously prepares students in the best possible way for a dynamic profession of continual learning and adaptation.

Moreover, a tremendous amount of relevant practical skills can be learned through a well-structured software engineering internship. Contributing meaningfully to a massive code base teaches you skills that no college can replicate. Receiving mentorship from top-tier talent accelerates your ability to write clean and scalable code. Building features that will empower millions of users provides unparalleled satisfaction. A challenging computer science program with a theoretical focus complemented by meaningful internship experiences can help develop the perfect balance between practice and theory.

distributed by