跳转至

36 An Interview with Cyril Mottier

Cyril is an avid lover of mobile platforms and a multi-skilled engineer. He is actively involved in the Android community and shares his passion writing blog posts, helping others on social networks, creating open source libraries and giving talks. His motto: “Do less, but do it insanely great.”

Cyril MottierCyril Mottier

Connect with Cyril

Twitter: @cyrilmottier GitHub: github.com/cyrilmottier LinkedIn: /in/cyrilmottier

Interview

Which do you prefer: podcasts or books?

When it comes to software engineering, I have to confess that I do prefer the good old books. Books’ main advantages are that they are generally more polished and in-depth. At the same time, podcasts are generally better when you want to have an overview of a subject or just want to know about the latest trends or great tools.

What are some books that have had a lasting impact on how you do your work?

Of all of the engineering books I have read, none of them are dedicated specifically to Android. They are generally more focused on global concepts that apply to software design in general. My top two? Effective Java by Joshua Bloch; I consider this book as a must-read when you start developing in Java. It gives so much of the dos and don’ts in Java and helps new developers write Java code that is clear, correct, robust, future-proof and maintainable. Java Concurrency in Practice by Brian Goetz is another great choice; concurrency is definitely hard. Concurrency issues are generally difficult to reproduce and understand. And the very first day you think you get it, you will actually discover the day after you are still off-track. I haven’t read this book for a very long time but I remember learning a lot with it.

I’m not sure I learned all of this thanks to a book in particular, but I remember spending a large amount of time reading about design patterns at the very beginning of my career. I would definitely encourage people to understand why/how they can solve design/architectural problems, and there are a lot of great resources to help you do that.

In terms of insight from an individual in the community, what is something you wish someone had told you at the start of your software development career that you had to learn the hard way instead?

I think it would be to never ever be afraid of deep-diving into the source code! Books and documentation are handy, but the one and only source of truth is the source code. Most of the things I have learned in school are actually based on the knowledge of my teachers. Sometimes they were telling me to read books and look at the documentation, but I never had the simple advice of looking at the source code (when available of course). I learned it the hard way because it’s always difficult to understand how a project is structured and organized. But, at the end, I learned something very important: The only source of truth for any library, tool, platform, etc. is its source code.

You are one of the most experienced Android developers. At the start of your career, you developed several libraries that were extensively used, covering some holes that the Android SDK was not serving yet (GreenDroid, Polaris). In what ways do you find the mobile development world has changed since you began your career?

It’s changed a lot, of course. Android development in 2009 is radically different from Android development in 2019. I actually started developing on Android with a pre-1.0 early look version. There are several aspects that changed, specifically.

First of all, regarding tooling, we have switched from an Eclipse, Ant-powered, dependencies-less world to an Android Studio, Gradle-powered, dependencies-aware world. Put simply, we now have a robust and extensible dependency-management system. For instance, at the time I released GreenDroid, there was no AAR file format. The only possibility to include dependencies was to add JARs directly into the project. At that time, I had to create a script to copy/paste resources to the appropriate directories in the project. On the tooling side, Android Studio and all of the included developer tools helped improve productivity a lot.

Secondly, Google released a lot of libraries helping developers create stunning user experiences and focus more on creating great products. I released GreenDroid—Android Support Library equivalent—and Polaris—Google Maps SDK equivalent—because none of these Google libraries existed or were nice to use at that time. Google did awesome working on that part; it’s nice to see third-party libraries are now generally focusing on very particular subjects that are not related to Android or Google.

Finally, the frsamework is now not as important as it used to be. A lot of the work that has been done in the past few years is to ensure none of the new features are tied to a particular platform version. While it wasn’t easy at the beginning because the platform wasn’t mature enough, this new paradigm has several advantages—mainly, it decouples platform updates from library updates improving the “time to production.”

What about the mobile development world has frustratingly not changed in your time in the industry?

There are always issues we’re not happy about. In the mobile development world, there is still one frustrating thing that hasn’t changed and has actually gotten worse: the build time. I’ve seen build time up to two minutes for a less than 10MB IPA/APK. It’s scary.

Similarly, I’m always frustrated to see a lot of apps continue to be slow and janky. Because devices are getting better and better, we could imagine everything that would create a jank 10 years ago would be completely unnoticeable today, but that’s not the case. Indeed, at the same time, there are more and more pixels to render on screen, applications do more and more, etc. All of this gives me the impression apps are not “more useful” or more “user friendly” than they used to be. They basically provide the same level of service but in a more graphical way.

Do you currently see any missteps or shortcomings in the software development world that are not being dealt with properly?

There are two things I would point out. First, mobile development is getting harder and harder because the frameworks and libraries evolve. For instance, you have to deal with retro-compatibility, dependency versioning, more and more system services, etc. I’m always wondering how a beginner can really understand how to kickstart a new project. Second, as platforms evolve, some of the decisions that were made cannot be discussed or changed. For instance, the fact that way too much stuff happens in the UI thread—especially animations—on Android that needs to be tackled.

Are there any other current industry trends that you think are just plain wrong?

To be honest, I don’t think any of the current or past industry trends are “plain wrong.” I’ve never seen things as black or white; they are always shades of gray. It’s rather a matter of weighing the pros and cons. That being said, there are some trends that, to my mind, gather a lot more cons than pros. Everything that tends to enlarge the distance between the machine and the developer, for example. I clearly understand that’s the trend, in general, to relieve the developer from the burden of having to write low-level code. But I’ve seen several approaches considering, for instance, the web as the only viable option. This has given us some tools like “Electron” (115MB for a “Hello world,” runtime/libraries duplication per app, etc.) and tools built on top of it: text editors, messaging clients, IDEs or command-line terminals.

Another thing I am not a fan of—but this is less and less true thanks to server-side rendering—are heavy web applications requiring long loading times. To my mind, it breaks the central idea of the web which is everything can be accessed instantly.

What would you suggest is a better alternative to this trend?

Use a modern language that can scale to large projects and stop adding layers and layers of runtimes and indirections; for instance, I expect my text editor to be written in a language that compiles to native.

What else would you recommend to the freshly graduated student to do in order to boost his or her career?

First, I’d say attend conferences because you can learn a lot there. They should also read source code to go deep into the internals and learn from the past. They’ll have better success if they are passionate: computer science is very demanding and living it with passion is the best way not to live it as a pain. Finally, keep experimenting; the best way to learn and evolve is to keep coding.

“Lead by example to show your team the path they need to take. Be transparent and honest. Trust people. Finally, be human—listen to people, communicate, be emotional.”

At Captain Train, you played the role of Head of Mobile and Web. What are the traits of a good leader? How do you successfully lead a team?

Being the Head of Mobile and Web at Captain Train was really challenging. I don’t think there is a finite list of traits to being a good leader. I really consider it depends on the person. I would sum up my personal point of view with a few key ideas. First, lead by example to show your team the path they need to take. Next, be transparent and honest. You also need to trust people. If you expect them to trust you, you need to trust them first. And, finally, be human—listen to people, communicate, be emotional.

For your own work, how do you start your day off with a bang? Do you have any secret morning routines that set you up for success?

Some people like the evening, some like the morning, and some others like neither! In a more serious way, I’ve read some studies about this and it looks like it’s something you can decide or change. Personally, I’m a morning person. I just love mornings because, to my mind, it’s the moment by moment in a day to enjoy nature, like the awesome light when the sun rises up, the freshness of the air, the peacefulness of the flora and fauna, etc. It’s really a moment in which you can enjoy calm and quietness both outside and at work.

I don’t think I have a secret routine and to be honest I don’t like routine as it’s boring. In general, I wake up pretty early though and always take this time to do something that is not related to work: go out for a run, read something, get to the bakery to prepare a nice breakfast, etc. Having those kinds of peaceful moments in the morning is the best way to start a successful day.

How do you stay highly productive for long stretches of time?

I think the easiest way to stay highly productive is to find a job that acts both as a job and a passion. If you match both, you have your ideal job. In a more practical way, I don’t follow methodologies at all when it comes to productivity for long stretches of time. I spend a lot of time ensuring I’m productive such as tweaking my dev environment, learning shortcuts, installing or developing tools, etc.

Lastly, tell us a little about your Twitter handle, where you describe yourself as a “devsigner.” What does this mean to you exactly? Do you believe there is a role in IT that covers both development and design?

Not sure there’s a role for that. My personal point of view is that I don’t consider technology is useful when taken alone. Technology is a tool that can be used to fix problems users have. Because of that I have never considered development and UI/UX design independently. Both of them are needed to solve issues. I think I noticed this pretty rapidly and even though my school background is mainly about development, I rapidly self-taught myself with design in general.

Cyril’s Recommendations

  • Effective Java | Joshua Block
  • Game Engine Black Book: Wolfenstein 3D | Fabien Sanglard
  • The Design of Everyday Things | Don Norman