关于我成为谷歌开发者专家(GDE)这件事

在本篇没有复杂的技术细节,完全讲述我作为一名开发者的故事。从一名小白到GDE(目前我是国内第11位Android方向的GDE),我的故事并不具备代表性,但是希望能够对你有所启发。

文章主要介绍:

  • 什么是GDE
  • GDE加入过程
  • 我的成长与认知

什么是GDE

GDE 全称是 Google Developer Experts 谷歌开发者专家。这个计划由谷歌官方发起,旨在筛选出有技术影响力的开发者,通过分享自己的技术经验、反馈技术落地情况、推广新技术方案,来建立完整、可连接的Google技术社区文化。 GDE是Google技术的种子用户,也可以说是试验田,当有新的Feature的时候,就会在GDE内先推广使用,通过反馈来完善。GDE可申请的领域有很多,比如Android,Flutter,机器学习等等。我的GDE方向是Android,这也跟我的职业有关。

GDE 的官方链接:https://developers.google.com/community/experts

加入GDE后,有以下福利

除了福利之外,我们能够更加深入与Google的交流,起码提Bug单的时候,有专人跟进(狗头),还有就是能够更加深入这个GDE这个圈子,这里能看到全世界的GDE的活动。

需要注意的是,成为GDE并不代表与Google建立雇佣关系。成为GDE大概有以下几个过程:简历筛选(维度为演讲,内容输出(博客|视频产出),开源项目),现役GDE面试(英文),Google产品/技术负责人面试(英文),文件签署。后面我会在加入过程,详细介绍这几个我在这几个场景的经验。

截止至今天,Android方向的GDE 共有11位,我是最后一位

加入过程

哪里了解到GDE项目

从我接触android开发的时候,就了解到了GDE项目,当时朱凯(扔物线)大佬是国内第一批推广GDE项目的,之后也有越来越的行业大佬加入,比如郭霖大佬,还有之后的很多位大佬,渐渐的,我也知道了有这个项目。

GDE项目类似于会员制,申请有至少一位Google员工或者现役GDE邀请,才能进入简历筛选流程。当然,那个时候的我并没有这样的人脉,也没有自信能够申请成功,因此我把GDE当作自己职业的一个目标来看待。

之后在一次偶然的机会,我在阅读《Jetpack Compose 从入门到实战》这本书中,认识到了第一位GDE,也是这本书的作者,王鹏老师fundroid,王鹏老师目前在字节工作,工作之余也输出了很多关于Compose的文章,这些文章对我来说受益匪浅。同时自己也有幸针对书中的一些章节,与王鹏老师进行了探讨。后面通过王鹏老师的分享,认识到了一名谷歌员工lily(现已离职),国内大部分GDE都是lily带出来的,通过lily老师的推荐,我有了很多对外分享的机会。

在lily的指导下,我了解到了很多GDE计划相关的知识,也通过了初次筛选加入了GDE成长计划,为了成为一名合格的GDE做准备,遗憾的是,因为一些原因,GDE成长计划在6月份已经没有再推进了。虽然lily老师已经离开了Google,但是她带给我很多宝贵的经验,同时在职期间也还帮我订正了简历的一些语法表述(英文简历)。因此我在经过了一些准备之后,最终在7月末发起了GDE申请

简历筛选

GDE的简历会进行一次筛选,可能大部分申请者会倒在这里,因为这里会由Google GDE项目负责人Ben去严格筛选申请者的信息,主要包括三个维度考察。

  • 对外演讲(3次以上)
  • 内容输出(博客|视频产出)
  • 开源项目

我在社区的活跃度还可以,通常会在掘金产出博客,去年还成为了掘金的签约作者。同时我自己的话,也喜欢倒腾各种各样的技术,也在Github上发布了不少自己的开源库,因此在内容输出上与开源项目上,没有太大问题,同时早期我自己也会在一些活动上分享,比如社区说,Google相关的的一些活动。

我的过度磨皮照如下:

因此审核力度最大的演讲,我也没有什么太大问题。三个维度都还可以,所以我的简历很快就得到通过,当然,因为申请的时候一名GDE引荐,这里我找到了王鹏老师!王鹏老师也很乐意当我的引荐人。

一面(现役GDE面试)

英文面试,对我们国内开发者来说,是一个重大难关!对我也毫不例外,即使我从小学就开始学习英语,然后到大学本科低分飘过CET6级。英语依然对我来说是一个难题,因为这么多年学的都是"哑巴英语"。连日常外国人问路我都会结巴的英语水平,就更谈不上英语面试了。

幸运的是,我知道自己这个弱点,因此在申请GDE面试之前,我每天都会花30min与外国教师交流,进行口语训练,也把手机上的抖音换成了Youtube,方便我日常时候的英语积累,同样是刷视频,但是在这个玩乐过程中,我积累了一定的语感。经过一个多月的训练,也让我的表达有一定的提高。

我的一面GDE是一位目前在新加坡的GDE,Hassan


因为新加坡与中国处于同样的时区,因此我们约了一个周末,进行了我的一面。

Hassan是一位经验非常丰富的GDE,他成为GDE已经6年了,同时也是一位CTO(youtube看到)。因为近期我的活跃领域在Android native 开发与性能优化,他问了我很多性能优化相关的问题,比如crash监控,OOM发生原理。当然,他也问了很多架构的知识,比如MVI架构的优势与旧架构的区别,同时也问了我一些关于native hook与字节码相关的东西,我的回答也让他有一定的兴趣,因为国外不怎么卷这些,最后他也提供给了我很多宝贵的意见。当然,面试过程中,用英语表达是特定领域的东西,对我来说挑战非常巨大,幸运的是,我提前做了很多准备与口语练习。

二面(Google员工面试)

一面过后,过了差不多两个星期,我收到了二面的通知,来自于Google的产品经理Yuichi(日本人),

谁能想到,Google产品经理写代码也非常溜,这是Yuichi在youtube分享的compose动画相关的视频

相比于一面,二面的时候我反而不怎么紧张,因为我本身日语已经过N1级了,同时之前玩游戏的时候,也认识很多日本的朋友,因此我反而不怎么紧张,我们在一个工作日晚上,开始了二面: Yuichi首先问了我很多开源项目的事情,比如Signal,信号机制,这也让他非常感兴趣,因为国外通常用Firebase,通常不需要关心太多底层的东西。同时他也问了很多新技术,比如Compose,KMM相关,同时他也着重问了Compsose的重组,也问了很多Compose在国内的落地情况。有趣的是,在面试期间我还向他抱怨Compose没有像MotionLayout一样的适合制作复杂动画组件,他也笑着回复我说,Compose现有的动画的情况以及后续规划,后续部分特性会迁移至Compose 的ConstraintLayout。同时他也告诉我当前日本的移动互联网迁至Compose的情况,非常多,Compose活跃情况比国内要好得多。后续Google也会继续发力Compose与KMM。期间遇到了一些记不起来的英语表述,我都用日语圆了过去,还算是好事哈哈哈。

认证签约

二面没多久我就收到了最后的反馈信息,因为在二面我的表现还可以,因此结果是第二天就同步给我了。之后有个邮件发给我,签好相关的保密协议,加入了Slack,我就正式成为了一名Android GDE了。结果同步也非常快,第二天我就在Google官网上看到了我的信息已经被录入。

我的成长

关于工作

本科毕业后,我就加入了货拉拉。这里面的技术氛围很不错,有很多技术分享,同时也有很多机会发表博客与开源,也欢迎大家关注货拉拉技术。同时也特别感谢身边的大佬,给了我很多技术落地的机会。幸运的是,工作之余我一直保持着较高的技术敏感度,会去深入了解一些更深层次的知识与应用。

关于博客

在大学的时候,我有养成写博客的习惯,当时主要是为了记录一些自己遇到的问题。后面加入了掘金,发现这个平台的文章质量都很高,我也后续在掘金发表了很多文章,主要是自己在工作中会遇到的一些技术,以及一些Google近期推的一些新技术,比如Compose。同时由于性能优化逐步进入了深水区,我也决定深入了解一些Jni相关的知识,包括jni,native hook等等,近期主要输出的文章也是性能优化中关于native相关的知识。后面随着时间的积累,我的文章也被转载到了很多知名的公众号,比如鸿洋大佬大佬的公众号。后面在去年掘金公开招募签约作者的时候,我也顺利通过,成为了掘金的签约作者之一。

社区建设

随着成为签约作者,我也认识到了很多行业大佬,比如超哥yechaoa鸿洋大佬,曹大(曹立成),彭旭锐强哥等等。同时这些大佬也创办了Bagutree社区(由于掘金不能发布二维码,大家可以公众号搜索Bagutree),我也在大佬们的邀请下,成为了Bagutree分享大军的一员。

在Bagutree中,里面几乎有着行业内所有知名的大佬,大部分GDE都在里面,偶尔我们也会吹吹牛逼聊聊技术,同时这个组织也会定期邀请嘉宾分享自己的工作心得,还有技术等等,这里算是我对外分享的种子地,通过在Bagutree分享,我得到了很多锻炼,在后面更大的分享中,比如GoogleIO extended相关的活动,我也更加得心应手。除此之外,我的公司,货拉拉内部也十分鼓励分享,我也参加了很多个topik的演讲,最近是在货拉拉开发日中演讲了关于App耗电相关的主题。

关于性能优化

对于我来说,性能优化是我一直比较感兴趣的一个方向之一。随着移动端的发展,性能优化也逐步进入了深水区,我个人认为,大厂中字节是做得比较出色的。性能优化方向从最基础的java字节码相关的优化,逐步转化为了native层虚拟机的优化,同时随着got/plt hook 与inline hook的稳定与发展,native层的"定制","工具集",系统能力应用化会逐步变得热门。

这里我简单讲一下系统能力应用化,随着Android的发展,Google的开发者们也意识到,随着系统逐渐变得复杂,数据流传递也非常复杂,比如ART本身,还有各种SystemService。Android中在每次更新的时候,都加入了很多新的优化工具,比如针对FD问题的fdtrack,针对内存访问问题的GWP-ASAN。这些能力往往都只能给系统进程使用或者使用起来不太方便。

近期抖音基础架构的内容,很多都讲系统的能力进行了一定程度的复刻或者是能力增强,比如fd的double close工具,通过native hook 关键的系统函数,能够让应用自身的fd也能加入到检测中。还有给予GWP-ASAN思想的内存访问检测工具,这都证明了国内大厂都有向系统能力应用化这一方向去靠近。

还有就是随着native hook发展,很多黑科技也逐步被大厂们开发使用,比如GC抑制,内存海绵,还有各种监控,比如btrace,等等,这些黑科技都有一定的门槛(ART虚拟机细节 & native 层)。应用按需更改ART,可能是以字节为首等大厂们未来会继续深入的一个方向。

关于C与C++

C与C++,可能也是后面android工程师需要进修的方向,前面也说过,native层虚拟机的优化在近期的技术分享或者方案发布都占据了一定的地位。在招聘上看,对于大厂从事基础架构Android开发工程师要求,也逐步从java/kotlin上逐步附加上Jni相关经验的要求(抓狂.jpg)。

学习C/C++ 这里都推荐《C prime plus》 与《C++ prime plus》这两部书,我的话一开始想买C++ prime plus结果卖家发货错了变成了C prime plus,所以至今我大部分native代码还是用c在写。如果大家有余力的话,我非常推荐学习C/C++。

关于跨平台

加入GDE后,我也向Google的产品经理/Flutter GDE等大佬咨询了很多关于跨平台的见解。首先Flutter毫无质疑,会保持一定的增势,国内/国外逐步迁移至Flutter的公司也不少,,目前国内大厂大部分使用混合原生与Flutter/RN等方式进行开发。从市场招聘上看,Android开发依旧是Flutter开发的主力。

关于Compose Multiplatform,目前国外切换成Compose的企业非常多,国内也有不少大厂进行了尝试,总的来说,Compose在国内接受度比国外接受度要低,未来Compose Multiplatform也会继续推进完善多平台计划,目前来说,相比于Flutter 跨平台社区,Compose Multiplatform还是处于非常雏形的状态

关于Kotlin Multiplatform(KMP),这算是跨平台中有潜力的新星,虽然KMP还没发布release版本,但是在国内他的接受度比我想象中要高,比如阿里,百度,快手等,都有在这方面的落地与实践。KMP 非常适合跨多个平台共享,而不仅仅是 iOS 和 Android。KMP + Compose,这两者模式结合,说不定是未来技术选种的一匹黑马。

关于移动端

近期的移动端大新闻就是,鸿蒙Next系统决定移除AOSP,这也意味着原本的Android应用不能运行在鸿蒙Next系统中了。目前鸿蒙Next还处于开发版中(未上线),移除AOSP,这也意味着开发者们需要适配,这个适配成本还是有的。

目前适配方式大概分为:

  • 基于Flutter/RN/uniapp,添加适配鸿蒙Next的分支。
  • 基于Ark-UI,重新开发适用于鸿蒙Next的App。

两种方式都有大厂开发在跟进,当然,大部分还处于观望态度。

个人角度来说,鸿蒙Next有利有弊,弊端是社区生态与开发成本,让很多厂商处于一个抉择状态,未来可能会增加多端维护的成本,但是如果不适配,也意味着有可能丢掉这部分市场。

当然,有利的地方也有,鸿蒙Next适配大概率也会落到Android开发者们头上,毕竟,有活的地方就有产出~

Ark-UI,声明式的ui,也让Flutter开发者与Compose开发者有较为低的上手成本,至少感觉不会太陌生,总之,让我们期待未来的变化吧!

写在最后

希望我的经验能对你有所帮助!无论未来怎么变化,保持一定的技术敏感,这都是作为开发者们最基本的要求!未来我也会多产出一些资讯内容,帮助大家更好了解Android!完结撒花!

相关推荐
一枚小小程序员哈1 小时前
基于Android的随身小管家APP的设计与实现/基于SSM框架的财务管理系统/android Studio/java/原生开发
android·ide·android studio
百万蹄蹄向前冲1 小时前
Trae分析Phaser.js游戏《洋葱头捡星星》
前端·游戏开发·trae
stevenzqzq2 小时前
android data 文件夹作用
android
2501_915918412 小时前
iOS 应用上架全流程实践,从开发内测到正式发布的多工具组合方案
android·ios·小程序·https·uni-app·iphone·webview
朝阳5812 小时前
在浏览器端使用 xml2js 遇到的报错及解决方法
前端
GIS之路2 小时前
GeoTools 读取影像元数据
前端
ssshooter3 小时前
VSCode 自带的 TS 版本可能跟项目TS 版本不一样
前端·面试·typescript
Jerry3 小时前
Jetpack Compose 中的状态
前端
dae bal4 小时前
关于RSA和AES加密
前端·vue.js
柳杉4 小时前
使用three.js搭建3d隧道监测-2
前端·javascript·数据可视化