Why did you choose to become a software engineer? What was it about software engineering that drew you in?
I think it chose me, actually. I played around with computers when I was younger and wrote small programs in basic and simple assembly. But I wasn’t the kid who “lived” on his computer at home: it was just something fun to do. When I got to college, I intended to study Astrophysics and Astronomy, but I kept gravitating to the computer lab.
My first few classes in computer science were fun because they weren’t standard programming classes. As I got more into it, the more exciting and interesting it became. In a geeky sort of way, the thrill of writing computer software hit me when I realized that I was controlling the flow of electricity through circuits with logic. I was totally hooked after building a solar car simulator at Berkeley to help calculate the most efficient angles for solar panels to collect while racing a solar car. It was a small graphical program written on a MacSE, but it allowed the engineers to change angles, pick the time of day and show electrical output.
How has software engineering changed since you started your career?
It has changed so much. My first video game had to run in 3-3.5 MB of memory because most computers only came with 4 MB. Because of that, so much was written in assembly and if you were lucky C. You had to really know how to get every ounce of compute out of the computers. That was really tough tinkering. It meant spending long hours trying to squeeze out all the performance and debug systems. So programming was not for the faint of heart.
Now the problems are still the same, but in some ways software engineering has become easier. IDEs and graphical debuggers have contributed to this. And, at some level, the languages we use today abstract away a lot of the hard core stuff you used to have to learn and understand to make your programs efficient. That said, a lot of aspects are still challenging, such as hardware/software integration and making things run efficiently at scale.
Do you have a work philosophy or a set of guiding principles that you follow to be successful?
Be respectful of everyone around you, no matter what the level. Always look out for your team, even if it means putting yourself out on a limb. Always strive to do the right thing even if it means taking a longer path or going against the grain.
In general, I have learned throughout my career that you rarely get the opportunity to go back and fix it. Writing software isn’t an exact science and many times people who rush to get the job done will pay for it later. I strive to get it right first — as much as you can.
At Shield AI, I learned a saying, “Slow is smooth, smooth is fast.” I subscribe to that. Patience and persistence can overcome any obstacle. Whether it is working on code or mentoring people, it is important to stay focused and understand that you might drop some balls along the way, but getting to the destination is more important, so you need to stick with it. Yoda said it best, “Do or do not, there is no try.”
You’ve worked on a number of cool projects over the course of your career: the first PowerPC Mac, the Xbox 360 Emulator, Apple Face ID, and the first Star Wars games. What stays with you most?
The importance of understanding the customer. On each of those projects, it really was about understanding what was going to surprise and delight the customer. Every one of those projects was all just about giving the customer what they wanted.
Our customers are unique, so it’s very fascinating to learn their perceptions and their input. At Shield AI, I think that, more than anything, is what has been the most interesting, especially since our products can have significant impact on their lives.
You used to perform for the circus. What was that like? And how, if at all, did it relate to your engineering career?
What I loved about the circus, more than anything, was how it complimented my engineering career. So much of software development is mental: I’d say it’s 90% mental and maybe 10% physical. Whereas the circus was 99% physical. I think anybody engaging in circus or acrobatics will tell you it’s about not thinking. You don’t want to think, because if you think, you’ll screw up. It’s more important to develop muscle memory by being properly trained, and then being confident that you can perform under any circumstances.
So, for me, I found that the synergy between mental toughness and physical toughness was very fulfilling. I was doing the circus while I was developing X-Wing and TIE Fighter video games. I would wake up at 6:00 a.m. to train until noon. Then I would hop on my motorcycle and I would drive to work, where I’d stay until midnight. Then I’d drive home and do it all over the next day. And throughout all of that, I never felt mentally or physically exhausted because of that synergy.
What did you learn from the circus?
There is a whole creative aspect of circus and there’s a whole creative aspect of software development. But in order to get to that creative aspect, there is a lot of grunt work and a lot of training. And training is bitter. That was a quote from my teacher, Master Lu Yi, and it’s stuck with me because it completely relates to software development. Bug hunting and crunch time is bitter: it always has been and it always will be. To get through it requires mental stamina, patience, and persistence.
I think any software developer will tell you that they will never forget their first hard bug and how long it took them to resolve. I’ve had many, but one of the ones that resonates in my mind is one bug on Virtual PC that literally took two months to fix. It was two months of me, by myself, sitting in that lab, day-in and day-out, looking at the same crash logs over, and over, and over again.
That sort of persistence is what many people don’t realize is fundamental to great software development. You have to be able to sit and look at the same problem over, and over, and over again. To think of every permutation, and then perhaps to ask for help. It requires grit and determination. But it’s that patience in problem solving that is really amazing because, once you’re through, the thrill of fixing problems or seeing the magic happen when development goes right is always really rewarding.
It’s the same type of grit required to become skilled at circus, or any other activity. You have to demonstrate the patience and perseverance to train through it. With the circus, I learned how to work through physical pain and exhaustion. I did a lot of my training with weights on — usually ankle weights of about 5 pounds and a divers belt with another 20-40 pounds. But the reward of applause from the audience after a great performance offered such a sense of euphoria.
Finally, I just loved the sense of family I had with all the people learning circus. No matter if they were professionals or people having fun, no one ever judged me or anyone else who was training because we all knew we were pushing our bodies and minds past our own limits. There was a lot of respect for each other and what we were pursuing. That’s the same kind of culture we work to develop here at Shield AI.