How to be a better software engineer

My advising professors' advice and reading notes for "The Friendship That Made Google Huge"

After graduation from my Master’s, I decided to get some advice from my advising professors before I embark (again) on a journey to be a better software engineer. Here are his advice that I feel are words to remember:

  • Know the full stack, not just how to build applications

    The article I will refer to later had a few perfect examples: a bug in web indexing was ultimately traced to faulty hardware. Jeff Dean’s’background in compilers helped him to optimize code performance in applications that he helped to build later.

  • Do more than what you’re asked

    If you do the same kinds of work as your next-level seniors, you would have more chance to get promoted to the next level.

  • Know the big picture, not just the piece of work that you are assigned to

    There are people in every team who know the overall application architecture with a good amount of details, and everyone else depends on them whenever a new feature needs to be added or a bug needs to be ironed out. Be one of those people.

  • Present your work in an easy-to-understand manner

    Most people can’t follow a presentation that is convoluted and complex, no matter how good the idea that was presented is. Presenting the same idea multiple times to different people can help you to improve the presentation.

  • Learn from other people’s experience

    Participate in CMU alumni events. Talk to other people.

  • Keep learning

    It’s probably scientifically known that an active brain dies slower, and learning helps to the brain active. The subject of learning doesn’t have to be academic. Learning a new language can be fun. I wanted to learn Japanese more systematically after watching anime.

  • Join a paper-reading group for a certain conference

    Since I’ll be doing NLP-related work, it’s probably a good idea to find such group for NeurIPS within Google, which likely exists.

  • Be prepared for outages in California

    Store 7 gallons = 26.5L of water per person (1 gallon = 3.78L per day) in the household in case of water outages.

    Get an Iridium-capable Garmin InReach and subscribe to a text-message-only plan in case of power outages that also take down cellular and wired network. It also comes in handy during trekking.

    Get a good power bank

A professor recommended “The Friendship That Made Google Huge”, which is long but well-written and insightful. It writes about the friendship of Jeff Dean and Sanjay Ghemawat, and how they they transformed Google, from the early days of debugging web indexing code, to building the scalable and fault-tolerant distributed computing framework MapReduce, and deep learning framework TensorFlow. Here are my notes on this reading:

  • Jeff’s Ph.D. focussed on compilers, but he ended up working on application frameworks unrelated to the field that he was trained on. Yet, what he learned was still helpful in certain ways. I learned that the concept of map and reduce came from Lisp, and knowing details close to the hardware helped him to write more efficient code. It probably also helped him to understand TPU chip designs.

  • Barbara Liskov, who is Sanjay’s advisor, studied the the management of complex code bases. She believes that best code is like a good piece of writing. It needs a carefully realized structure; every word should do work. Programming this way requires empathy with readers. Code files should have the right balance of information density on a single screen. Hooks can be placed in code for future additions of new functionalities (perhaps instead of simply optimizing for simplicity at the time of coding).

  • Latency Numbers Every Programmer Should Know: an L1 cache reference usually takes 0.5ns; reading 1MB sequentially from memory takes 250ms.

  • Pair programming, not for redundancy but for collaboration, worked really well for Jeff and Sanjay. François Jacob wrote: “Two are better than one for dreaming up theories and constructing models, For with two minds working on a problem, ideas fly thicker and faster. They are bounced from partner to partner … And in the process, illusions are sooner nipped in the bud.” This practice is common in the field of Physiology or Medicine, but still rare in programming.

  • Jeff has a restless nature: a problem becomes less interesting to him once he can see the shape of its solution. In 2011, he started working on AI in collaboration with Andrew Ng and ultimately proved that AI can work for Google given its sufficient scale of data. I feel that this attitude is important in making Jeff always a leader in the waves of technology revolutions.

  • Google’s career levels as of 2018. Level 1 are the I.T. support staff. Level 2s are fresh out of college; Level 3s often have master’s degrees. Getting to Level 4 takes several years, or a Ph.D. Most progression stops at Level 5. Level 6 engineers — the top ten percent — are so capable that they could be said to be the reason a project succeeds; Level 7s are Level 6s with a long track record. Principal Engineers, the Level 8s, are associated with a major product or piece of infrastructure. Distinguished Engineers, the Level 9s, are spoken of with reverence. To become a Google Fellow, a Level 10, is to win an honor that will follow you for life. Google Fellows are usually the world’s leading experts in their fields. Jeff and Sanjay are Google Senior Fellows — the company’s first and only Level 11s.

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy