我们继续撰写一系列有关那些用自己的双手进行项目的人的文章。 与
Stepan Goncharov一起,我们讨论了如何有机地改变专业活动的方向,同时又将我们的技能从Android开发人员转变为DevOps。 他们询问了
Grab的
发布周期和流程 ,该公司只有40个人在为Android开发。 他们讨论了从何处获得游戏创意的方法,询问了Stepan
Archetype和kOptional有关开放源代码项目的问题。
关于来宾 :Stepan Goncharov(
stepango )自2008年以来一直在为Android开发应用程序和游戏,当时远古时代还没有发布Android SDK。 在他的职业生涯中,他设法担任了质量检查,经理,市场营销人员,博客,分析师,顾问等许多角色。 他参与了未知应用程序的开发以及全球数百万用户的应用程序开发。 他目前在Grab工作,广泛使用Kotlin和Rx,并为OSS投入了更多时间。
这是
运行循环播客的文本解码。 主讲人:Ilya Tsarev,Alexey Milyaev和Roman Busygin。
Ilya:告诉我Grab直接参与了什么,您的角色是什么。 您是在编写代码还是其他?
斯蒂芬:最初,Grab是一个乘车隐藏服务。 您可以订购出租车,他们会来找您,接您并接您。 但是最近,该公司越来越多地获得其他服务,例如送餐和支付系统。 来到Grab时,我领导了驱动程序应用程序开发团队。 然后他切换到乘客应用程序。 我最近的项目之一是
对乘客应用程序进行
彻底的重新设计 。 现在,我要进行更多的DevOps-设置CI,优化构建时间等等。
开发者
Alexei: Stepan,如果不是秘密的话,您为什么决定切换到DevOps和CI? 我经常听到一个故事,当移动开发人员来到该平台时,热情高涨,跃升至令人难以置信的高度,然后决定突然去做一些非生产性的任务。
斯蒂芬:实际上,我想说的是一切都是
有机的 。 在重新设计应用程序的过程中,由于CircleCI实例不再能够构建我们的项目,因此我们紧急迁移到了GitLab。 事实证明它太大了,吃了很多内存,但是没有合适的CI实例。 不知何故,我被困了几个星期,试图迁移我们的流程,并且通常将所有与CI相关的东西都迁移到GitLab。 然后,在项目结束之后,我们成立了一个新的平台团队。 当我花了三个星期的假期时,所有其他任务都被执行了,所以当我返回时,他们告诉我:“
就是这样,您正在优化构建速度和CI。”不同的角色和活动
伊利亚:我们也有鸟儿-不是那些麦克风成圈的鸟儿,但仍然尾巴上它们告诉您您曾作为经理,
营销人员,博客作者和分析员访问过质量检查-一般来说,我经历了许多不同的活动。 请更详细地告诉我们,您是如何担任所有这些角色的,您在这些角色中待了多长时间,您喜欢每个角色,也许不喜欢什么? 也许您现在想回到博客作者那里?
斯蒂芬:原则上,在这些角色中的每一个都以某种方式有机地从一个人流向另一个人。 一切始于我在Android
上发布第一台设备之前就对Android开发产生了兴趣。 我对这个想法本身很感兴趣-Java操作系统-有点不寻常。 结果,在大学里读书时,我没有在C或其他无聊的大学问题上从事实验室工作,而是逐渐将一切简化为Android。 老师并不反对,他也对学习新东西感兴趣,我编写了Android应用程序。
到我毕业时,我已经有了一些经验。 我编写了第一个应用程序,然后将其发布到市场上,这
开始了我对市场营销的热情 。 我有自己的应用程序,我不得不以某种方式对其进行推广。 我开始乱七八糟,写博客。
在2010年,我找到了一位Android开发人员的作品,那几乎是不可能的-没有市场,没人知道Android。 我进入一家外包公司,
不得不招募一个只有六个月经验和2个已发布申请
的团队 。
因此,从市场营销和博客撰写起,我又回到了开发领域。 然后他从地方法院毕业,搬到圣彼得堡-也将其外包。 在那里,我开始涉足自动化测试,结果证明,我在公司中发展了
Robotium的发展方向,并教给质量检查人员
如何编写自动化测试,直到我
离开新加坡 ,在那里我再次聘请了我的团队加入新加坡的一家初创公司。 之后,他开始进一步开发Android开发。 现在我进入了Grab-首先是经理,然后是DevOps。
罗曼:斯捷潘,请告诉我,您这次任务的变化已经足够大了,您是否错过了这次? 现在,粗略地说,每天您都在喝DevOps-是吗?
斯蒂芬:实际上,还没有。 我最近完成了一个大型项目,原则上仍然有足够的任务。 当然,它们看起来可能是相同的-也就是说,目标是一个目标,但是我要做的
事情很多很多 ,包括内存配置和CI的使用。 现在,我看一下S3上的Amazon Analytics。
到目前为止,这对我来说都是新的 。 我认为我不会长期从事CI和装配时间的优化。 例如,最有可能在下个季度我将切换到其他位置。
罗曼:例如,我
从一个方向到另一个方向的过渡周期约为2-2 .5
年 。 我从测试开始,然后切换到负载测试,然后成为开发人员。 您多久更改一次兴趣和工作领域?
斯蒂芬:在1.5到2年之间的某个地方。 但是最近,结果证明了六个月。
游戏
阿列克谢:您最想做什么? 理想情况下,也许您想离开开发项目,而不是用手触摸任何东西? 或者,也许您恰恰相反,想深入研究一些本机的东西? 您最想要什么?
斯蒂芬:这是一个好问题! 我实际上没有决定。
我仍然对很多事情感兴趣 。 我无法接触到的最有趣的事物之一就是游戏的开发。 在大学学习期间,我喜欢写各种游戏。 我在Flash上有项目。 我的第二个Android应用程序也是游戏。 我什至在一家游戏公司工作了一个月,但不知怎么对我不起作用。
原则上,
我想尝试游戏设计 ,但这仍然很困难。 我花时间在Android上进行开发的时间越长,这种转换就越困难,如果它真的发生的话。
Ilya: Styopa,如果我们涉及游戏主题,那么问题是-您的第一款游戏是什么?
斯蒂芬:那是2010年,所以非常简单。 这是一个逻辑难题,必须旋转激光和反射镜,以使激光击中目标。 不幸的是,此游戏当时是由我的雇主代管的。 该帐户已被删除很长时间,游戏不存在。 但是我真的很喜欢她。 它完全是在Android View上编写的,当然,我很遗憾,但是体验非常好。
伊利亚:现在您在花时间开发游戏吗?
斯蒂芬:不。 现在绝对没有时间进行游戏了。 除了在公司工作外,我还在
新加坡组织Kotlin会议并在会议上发言。 即,空闲时间已完全满。 也许有一天我会回到这一点。 最近,我在有时间的时候购买了Google VR来尝试Unity,但到目前为止还没有实现。
罗曼:请告诉我,您从哪里获得游戏创意? 他们是怎么想到您的?
斯蒂芬:关于游戏的想法通常来自于技术创新。 我通常看一些技术演示,例如,在2008-2010年间,物理引擎流行。 您会看到一些很酷的技术或新的时尚着色器,并且
想法本身会根据您看到的内容出现。
罗曼:您制作游戏的爱好是否与您自己是游戏玩家有关?您在PC上的Switch中插入了PlayStation,是否有关联?
斯蒂芬:是的,我认为有。 小时候,我有Sega,然后是PC,我花了大量时间玩游戏。 现在我既有PlayStation也有Switch,但是现在
我花在游戏上的时间更少了 ,我什至不必玩。
罗曼:您最记得哪些游戏? 还是您最喜欢哪种游戏? 例如,我更喜欢射手或某种幸存者恐怖片。
斯蒂芬:我不知何故不能与射手一起锻炼。 我小时候玩过《反恐精英》,但没有。
我最喜欢的游戏之一是《太空游侠2》 ,当然,第一部分也是史诗级的。 然后令人难忘的是
自由职业者 。
亚历克斯:自由职业者是一个游戏吗? 这是一种生活方式!
斯蒂芬:实际上,这是一个太空模拟器,从广义上讲,它非常接近太空游侠,但是从第三方角度来看。 巫师,奥术会和辐射就是这样。
伊利亚:在我看来,
开发游戏是大多数程序员的梦想 。 在我看来,人们通常只是去开发游戏。 这太酷了! 我的第一个iOS项目-顺便说一句,它也是一个游戏。 您如何看待?
Alexei:我听说对于许多人来说,编程之路实际上始于他们想要制作某种游戏,喜欢玩游戏,想了解如何做的事实。 由于某种原因,我没有这个。
我对程序的工作方式更感兴趣 -单击Windows中的Windows会发生什么。 但是到了某个时候,我意识到我不知道如何制作游戏。 我了解如何在手机上编写该应用程序或在PC上编写该程序,我不知道如何制作游戏。 莫名其妙地把我放在YouTube频道上。 在那里,一个用Java和Canvas编写的家伙从头开始写了他的玩具-一些RPG游戏的克隆版本,类似于《暗黑破坏神》和《最终幻想》的混合体。 这真的很有趣。
我建议大家在业余时间尝试使用它 ,以了解它的一般编写方式以及工作方式。 这是一个非常酷的经历。 然后我以某种方式进入了相同的课程,在那家伙看到了Unity上的一些简单游戏。 当您开始编写引擎时,以及已经准备好Unity之类的东西,并且以某种方式对其进行调整以制作自己的引擎时,比较这些方法非常有趣。 我强烈建议您尝试这样的操作,因为它非常有趣。
罗曼:我也有类似的经历。 我喜欢玩游戏,但我不是一个狂热的游戏玩家,但是与此同时,我主要对理解程序的制作方式感兴趣。 然后我得出的结论是,我喜欢什么,我喜欢什么,我想尝试自己动手做。 但是就游戏而言
,一切都从一个想法开始 。 我正在等待一个可以在任何空闲时间实施的想法,或者是为了腾出时间制作这款游戏。
斯蒂芬:关于想法,我想到的最后一个想法与
自动生成地图有关 。 现在,这可以说是一种趋势,有些游戏利用巨大世界的产生使它们与真实世界非常相似。
有一整套算法可让您生成地形。 可以建造景观,以使山海相望。 原则上,如果将某人显示在Google地图的顶视图和生成的景观中,则几乎没有人能够区分它们。 这非常有趣,因为您可以自己创建游戏内容,而无需占用大量资源,因为这是最困难的部分之一。 至少我是这样认为的。
工作日
Alexei: Stepan,您通常每天工作时间如何? 您醒了,去了办公室,还是没去-您在做什么,你在做什么?
罗曼:我仍然对您上班前发生的事情感兴趣。 也许您有一些最喜欢的咖啡馆或您最喜欢的传统:例如,您是否喜欢沿着办公室前的公共花园漫步? 您的一天真正开始了什么?
斯蒂芬:最近,我的一天从50个俯卧撑开始。
阿列克谢:尊重!
斯蒂芬:在某个时候,我意识到
我需要花更多的时间进行体育锻炼 ,现在我试图强迫自己在业余时间去做。 原则上没有什么特别的。
由于公司的主要业务是躲车,即订购出租车,所以公司为我付费了一辆出租车。 因此,早餐后我早上要做的第一件事是订购出租车并上班。
我在一个不错的办公室工作,可以欣赏海湾的美景。 对我们大多数人来说,
第一件事当然是一杯咖啡 。 通常,我们只是和同事一起去同一个大楼的地下室,走进一个咖啡屋,喝咖啡,
然后讨论一些新闻,计划 。 尤其有趣的是,在美国的这一天晚上发生了什么:发布了一些新消息,一些有趣的消息,一个新的框架。 我们将讨论所有这些,然后我们可以开始工作。
然后一切都和其他人
差不多 :您去
吉拉(Jira )看票。 在过去的几周里,我一直在待命。 这是一个开发人员,所有生产问题都落在了这个开发人员上,您必须以某种方式解决或委托或说-这不是问题,而忘了它。
由于团队非常庞大(
已经有40多个人在处理乘客应用程序-这些是负责不同领域的不同团队),因此有时很难找到需要解决此问题的合适人员。 我们有这样的轮换-
每个星期都有一个开发人员从事耙生产问题 。 具体而言,本周我正在准备发布,这是测试产生的问题,并再次找到合适的人员来最快地解决此问题。
Roman: 40个人只是Android,还是整个团队都在开发移动应用程序?
斯蒂芬:这只是Android。
罗曼:哇! 当我
听到 Uber有多少移动开发人员时,我感到不安。 但是您的团队证实了这一趋势。 您提到,大致来说,您负责执行错误报告。 告诉我,您的发布周期如何?
应用发布周期
Stepan:原则上,我认为这是大型应用程序尝试遵循的一个或多或少的普通过程。
我们有一排固定的火车 。 这是当前的一周。 也就是说,每个星期二我们都有一个发布。 选择了本周的发布工程师,到本周初,应该准备好发布中包含的所有功能。
如果某些功能尚未就绪,则将其丢弃,并用标志将其关闭-采取一切措施以防止其退化。 一旦准备好所有功能的构建版本交给QA,就开始进行发布工程流程。 也就是说,
必须尽快修复所有打开的错误 ,并给予它们最高的优先级。 即使开发人员正在开发下一个功能,该功能将在下一个版本中发布,但是仍然存在他最了解的错误或某些问题,并且他有最少的时间来解决它,因此将其提供给他。
这一直发生到星期五。
在星期五,我们尝试结束回归 ,关闭所有回归错误,并在周末保持冷静。 如果突然发生了什么,在星期一您可以快速修复它,并且已经在星期一晚上或星期二早上悄悄发布并推出-先是10%,然后是更多,更多,更多。 一个星期以来,我们正努力接近100,并发布下一个版本。
测试与更新
Roman:快速撰写和布局-但是测试过程如何? 特殊人员测试人员会在什么时候进行检查?
斯蒂芬:有很多测试人员,他们很及时。 我不知道肯定有多少人。 原因是大多数团队不在新加坡。 我不记得我们有多少个办事处,但是至少还有五个办事处,那里有开发团队以及质量检查人员。 在功能开发过程中,这些团队与质量保证人员一起调试这些功能并进行测试。
到发布周期开始时,功能应该没有公开的错误 。 回归的发生过程如下:所有团队中有一个,或者两个QA脱颖而出,他们根据自己的特点进行回归。 就在本周,在查找错误时,回归已修复。
Ilya:事实证明您有一个每周的更新周期,并且用户有时间在这样的时间进行更新? 例如,我们面临的情况是iOS用户有时间更新,而Android用户却没有更新。 我们的版本直接差异了几个星期。
阿列克谢:是的,在我看来,这一周很快就感觉到了。
斯蒂芬:是的。 一周很快,但是
我们并没有为所有用户更新的目标 。 为了减少回归过程中QA的负担,我们从两周的发布周期切换到了每周的发布周期,因为在两周内积累了大量功能。
40人可以做生意! 然后,在第二周结束时,由于采用了这些功能,我们曾经遇到了相当严重的错误,并且很难解决它们。 事实证明,我们每周进行分解,并更均匀地分配此测试负载。
Ilya:您的用户群中大约有百分之几使用最新版本?
斯蒂芬:这取决于我们在谈论什么时间段。
伊利亚:此刻。
Stepan:您只有在进入重新加载计划一周后才能使用最新版本。 也就是说,100%的重新加载将在星期五或星期一进行,因为已经在星期二发布了新版本。 它已经取决于好运了。 但是我们的目标不是用户始终使用最新版本。 我们仍然需要考虑的唯一问题是最低支持的版本。 当至少90%的用户使用的是受支持的最低版本(大约3-4个月)时,我们会定期强制用户强制更新。
团队合作组织
Alexey: Styopa,我有一个问题。 您说40个人使用Android-是吗? 40位开发人员正在做某件事真的正确吗?
斯蒂芬:是的。
阿列克谢(Alexei):有这样一个时刻,随着员工人数的增加,尤其是在公司的某个领域,特别是在Android开发方面,
通信成本呈指数增长 。 所有业务流程都致力于解决这一现象。 您如何解决? 这台由40名开发人员组成的机器的组织结构是什么?
斯蒂芬:实际上,我们的解决方案很简单。
这40个开发人员没有做相同的事情 ,并且他们基本上不需要相互之间进行强有力的沟通。 事实证明,不同国家/地区的团队具有不同的功能。 基本上,您不需要与其他团队进行沟通。 您主要与经理沟通。 结果,由于
团队是5到6人 ,因此沟通的成本并不是很大。 1-2人组成的团队:例如,仅出现了一些新的业务领域,只有一名开发人员,而他只有一名工程负责人,负责所有事务,包括后端,iOS等。
事实证明,我们只有几个小组,一个小组在一个代码库中工作。开源项目Archetype和kOptional
罗曼:我建议继续下一个问题。我发现您有OpenSource项目。我始终尊重开发人员如何设法在OpenSource上寻找时间,对用户诚实等。请介绍一下您的两个受欢迎的项目-这些是Archetype和kOptional。这是什么
: kOptional . ,
Optional . - Null, . . , Java8 .
, . , , — , , . , -.
Archetype — . - , 90
Seconds . - : , , , . , : , — .
, - .
. . , , : "
". 为什么不呢
— , - , . , 90 Seconds , NDA . , , 90 Seconds: , - , - .
,
- , 90 Seconds. , , , , . , , , Rx. , , Kotlin, legacy.
, , , … .
: ,
OpenSource- . , , , , , . , !
.
AppsConf . , , ?
AppsConf
: , AppsConf.
, , : « ». , , , .
, , . , , . , , , , .
. , , . , . — , .
, . , , -, , -, , .
, . , , , . Mobius, . .
-, , ,
- , , - WorkManager, .
,
Kotlin ,
,
, - .
: , ?
: , . -, , , , . , , , .
, , — , , , subscribe. - , , . .
: , - OpenSource , ?
: . production-ready, , , GitHub.
:哦,很有趣!对于所有属于同一类别的人,我提醒您,Stepan将于10月8日至9日在莫斯科举行的AppsConf会议上。AppsConf即将推出,日程安排非常繁忙,有很多有用的报告,您仍然可以预订票并参加。