Computer Science Alumnus on Work at Google and Teaching Programming at UCLA
After graduating from UCLA Samueli in 2005 with a bachelor’s degree in computer science, Josh Hyman (’05, MS ’08, Ph.D. ’10) accepted an offer to work full-time at Google upon completing a software engineering internship in spring of his junior year. He has been with the tech giant ever since. Hyman continued at UCLA after his undergraduate work for his M.S. and Ph.D. in computer science while working at Google. Today, he works as a principal software engineer on projects such as Google Assistant. He also teaches CS130 at UCLA, which covers scalable software engineering practices and emphasizes practicality in the form of web server-deployment in C++. We caught up with Hyman for an update.
Q: What are you currently working on at Google?
A: I am the Technical Lead for the team that builds the infrastructure for Google Assistant.
Q: What parts of my Google search and user experience have you worked on?
A: I worked on image and video search from an infrastructure perspective. My work on Google Assistant has been focused on building things like natural language understanding infrastructure and infrastructure for speech recognition. I also work on the feature developer platform that allows people to add new features to Assistant. For example, with the recent California fires, people can add a function for air quality or weather reports. My team lays the groundwork for the platform’s expansion, which is similar to how the roads and plumbing are the foundation of a city’s infrastructure.
Q: How do you foresee your work evolving in the near future?
A: Well, I’ve been on the Google Team for a bit more than 15 years and I’ve worked on the Google Assistant infrastructure for about two years. I expect I’ll probably be working on Assistant Infrastructure for at least another two years, and after that who knows? I like to lead large teams to solve complex and challenging problems. My current team has about 200 engineers, and I really enjoy the scale of challenges we can tackle together. I hope to get the opportunity to keep working at this scale for years to come.
Q: What made you decide to teach at UCLA and how do you balance a busy career of working at Google and teaching?
A: A friend and I got a chance to teach software engineering (CS 3) at Caltech several years ago when they were trying to reboot the class using lecturers from industry. When the chance arose to teach at my alma mater, I jumped at the opportunity. I really enjoy teaching, both in the academic setting and at work, to help people grow and learn. Balancing work and teaching is pretty challenging during the quarter I teach. I try to lighten my load at work by delegating aggressively, which also helps to grow those on my team. I try to lean on our TAs and my co-lecturers to spread the teaching and grading load. It’s a lot of fun, but it’s also a lot of work.
Q: If you could teach another class at UCLA other than CS130, what would it be and why?
A: I think I would teach CS111 at UCLA, which is a course on the principles of operating system design, or a distributed systems class like CS188 because the domain of expertise I’ve developed is around building large scale distributed systems.
Q: Generally, what is the goal for the students who are taking CS 130? And can you elaborate on why it concentrates on C++, versus other programming languages?
A: The big takeaway for CS130 is exposure to professional software development. The type of software that students usually build in class is often disposable — you write the code for one project and then never touch it again after it’s turned in. We try to give students the opportunity to work with code that simulates change over time and the evolution of a project a professional developer would work on in real life. The goal is to provide students with the tools they need to think about and manage that change over time so it’s less like a coding assignment and more like something they’d see at work.
The reason why CS130 concentrates on C++ instead of perhaps more modern programming languages is simply because the professors are most familiar with C++. We use it every day at work; in fact, the majority of code at Google is written in C++. The truth is, programming languages don’t really matter, practically speaking. The techniques in software engineering that matter are generally applicable across languages. When I recruit team members or participate in hiring processes, the candidate’s primary coding language doesn’t factor greatly into my decision.
Q: You started as a research assistant at UCLA and completed software engineering internships at Universal Studios and IBM before working at Google. What was the career-search process like after UCLA?
A: I attended a career fair at UCLA during the fall quarter of my junior year and handed someone my resume, which got me my internships at Universal Studios, IBM and Google. During the winter quarter, I developed security analysis and remediation tools for Universal Studios as a software engineering intern. After finishing that up, I arranged my spring quarter classes so I could start working part-time at Google in April where I worked on compilers. I then left Google for the summer to intern at IBM Extreme Blue in the Bay Area working on linux deployments. IBM Extreme Blue was a fantastic internship; I really enjoyed my time there. My career search was a bit of a whirlwind — I tried to do everything at once — but these internships really helped me hone in on what type of work I wanted to do and what type of company I wanted to work for by the time I graduated with my bachelor’s in the Spring of 2005.
Q: You’re a triple Bruin! What made you choose UCLA for your B.S.? And why did you decide to continue here for graduate study?
A: Well, I grew up in L.A. and almost everyone in my close family attended UCLA — my parents, younger sister, uncle, nephews … the list goes on. We even grew up attending Bruin Woods so UCLA is in my family’s DNA. I am also a weekend warrior athlete and a long-time fan of UCLA Sports — returning to UCLA just made sense.
Q: How did your UCLA education impact your career? Is there a particular class that you found most helpful and why?
A: It’s hard to overstate the importance of my education at UCLA. My undergrad work gave me all the fundamentals for how to reason about engineering problems and how to build software. My graduate work helped me become more independent through self-directed research and taught me how to read and write at a professional level. I put all of these tools to use daily at work. Classes like CS 111, 118, 130, 132 and several graduate classes on systems were the most helpful and enjoyable. It probably isn’t a surprise that my professional focus on systems and infrastructure was born from some of my favorite classes. These classes gave me a map for how the most basic system components are built and gave me an appreciation for how to encapsulate complex problems within simple interfaces.
Q: Do you have any advice for students who are considering grad school or applying to internships/jobs?
A: When I first got my internships at Google and IBM, I had no pre-existing internship experience or connections. So, it is possible to just attend career fairs, get to know the recruiters there and land a job. With software engineering, you can write code from your laptop without an active job so I recommend just finding ways to play with your own projects. Find a problem you’re passionate about solving and go for it. That can also be a story you can then share in interviews or with recruiters. It makes you stand out as a candidate to have taken initiative and show that you have a real interest in the field beyond the required school work. And this is why CS130 focuses on real-life projects — our classwork is very similar to what we do in the industry so the hope is that these skills can translate seamlessly into students’ future jobs.
Sarah Wang contributed to this story.