In dev.life, we chat with developers about their passion for programming: how they got into it, what they like to work on and how.
Today’s guest is Lindi Emoungu, a Software Engineer at Google, who has worked on the Google Search and Google Maps products. She has 15 years development experience, having made the leap to computing from her studies in Environmental Engineering and Urban Planning at MIT.
Location: Mountain View, CA, US
Current Role: Software Engineer at Google
How did you get into software development?
As a kid, my cousin taught me BASIC on a Commodore 64. I later learned LISP, mostly self-taught although I learned a bit in school. However, it wasn’t until I had an undergraduate research opportunity in Muriel Cooper’s Visual Language Workshop at the MIT Media Lab that I learned that you can make art with computers. I’ve been writing code ever since.
Tell us a little about your current role
Some of my most recent work has involved mentoring Junior Developers. Learning to teach is an especially rewarding challenge because I have to take off my headphones and explain stuff I know. I inevitably see things in new ways when I have to explain them. Mentoring also means understanding how people think differently than I do. I’ve learned to solve problems more effectively when I’m mindful that others think differently because I question my assumptions. Learning how others see things also means that I can more effectively leverage their strengths and encourage them in areas where they can improve.
When are you at your happiest whilst coding?
I love the “eureka” moment when I’ve gotten something to work, particularly when the solution was not obvious initially. Removing code when refactoring is always satisfying. I also love reading code that is beautiful and concise. And of course, I always relish getting tests to pass.
What is your dev environment?
I typically use whatever development environment is right for the project. I like Git because branching is cheap which makes it easy to experiment. I couldn’t live without Chrome dev tools. They’re great for lots of things, but especially for code sketching and trying stuff out. I recently got a standing desk, so now I can code standing up. I listen to music, unless I’m putting out a fire, and I especially like Chopin when I’m learning something new.
What are your favorite books or resources about development?
Anything by Bruce Eckel. I’ve learned quite a bit from his ‘Thinking In…‘ series. They’re wonderful, rigorous, insightful and free, which is awesome. Josh Bloch is also fantastic, of course. ‘Effective Java‘ is a staple. Overall, however, the books that have informed my practice aren’t about coding practice. Rather, they are books about Computer Science theory, practice, and history. So for example Knuth’s ‘Art of Computer Programming‘ volumes. David Eberly‘s various works published by Morgan Kaufmann are very good. I’m also currently reading James Essinger’s ‘Ada’s Algorithm‘.
What technologies are you currently trying out?
I’m currently working with Dagger, and I really like it. Obviously, one of the main benefits of dependency injection is eliminating the noise of manually wiring concrete objects to other concrete objects. In addition to helping make code more concise and scalable, I appreciate the way in which Dagger builds the dependency graph at compile time such that it can load only the parts of the graph you need at run time.
I also love DART. I once implemented the pseudo-code described in the chapter about online segment clipping in ‘Jim Blinn’s Corner: A Trip Down The Graphics Pipeline‘ as an exercise to learn DART and do some fun 3d visualization sketches. I just loved it. I love how concise and expressive the language is. So I’d love an excuse to try AngularDART.
When not coding, what do you like to do?
When I’m not coding, I like to get out of my brain’s way. I find that cycling and hiking are really good ways to allow my mind to make connections. Mindful meditation helps me train my attention and code more effectively. Getting off the grid completely (no internet, no television) is luxurious, particularly with Billie Holiday on vinyl.
What advice would you give to a younger version of yourself starting out in development?
I would say that the most important thing to learn to do is to learn to do. Technology changes rapidly, so it’s vitally important to be able to teach yourself. When you’ve learned something new, understanding how you arrived at this new insight is just as important as having gained it. Understanding how you learned something is effectively understanding how you innovate.
It’s also important to have a good understanding of Computer Science fundamentals. Understanding CS fundamentals gives you autonomy in the sense that it gives you the knowledge to understand how any given framework or tool is written. Also, that knowledge empowers you to be able to write your own frameworks and make your own contributions.
Finally, figure out what you’re passionate about and do it. That might sound obvious but focus and persistence are important for success, and both require passion.
Thanks to Lindi for taking the time to speak with us. Have someone you’d like to be a guest? Let us know @FogCreek.
Recent dev.life Interviews