我们邀请了算法、前端、后端三位工程师,来看看他们的工作日常。
01推荐算法工程师的日常
阅谦
大家好,我是来自大淘宝技术的一名推荐算法工程师。
Chrome
查看业务数据报表
每天到公司,我的第一件事情就是查看最新业务数据报表,这包括大盘的数据、AB的数据和各个细分维度的数据。了解最新数据情况可以指导我们下一步工作的展开。算法的优化是一个不断迭代试错的过程,及时获得反馈并进行调整是非常重要的一环。
进行数据分析和建模
业务方案和算法模型的部署和发布
推荐算法工程师是需要面对线上流量的,而所有的业务逻辑和算法模型从离线到在线都需要经过一个发布的流程,通常是先灰度,再小流量,然后逐步扩量最后全量。公司的中台团队开发了诸如TPP,BE,RTP等平台,算法工程师可以聚焦于算法和业务本身,工程性的工作由平台完成。在这些平台的网页端,我们可以快速完成业务方案和算法模型的发布工作。
学习充电
DingTalk
PyCharm
PowerPoint
IntellijIDEA
IntellijIDEA是一个javaIDE。除了算法模型和数据处理外,整个推荐系统的链路从用户请求到来到诸如画像获取,召回,排序,重排等模块的串联也是需要算法工程师来实现的。公司里一般通过编写java代码实现,所以给即将入行推荐算法的同学们的建议是除了Python外再学一下java或者cpp吧!
02前端开发工程师的日常
时川
加入阿里第6年,目前负责集团内用户量最大的页面搭建平台:斑马。用户在淘宝浏览各种商品活动页面的时候,中间有很多页面就是通过这个平台发布上线的。我的日常的主要工作就是围绕淘宝的搭建服务能力建设展开。
严格意义上来说,我是一个“围绕前端工作”的工程师,或许叫做“面向运营交付前端页面解决方案工程师”更合理一些,日常工作总的来说可以分为两部分:
1.搭建平台服务支持
2.产品建设和技术探索
搭建平台服务支持
大白话讲就是答疑,解决使用平台产品的技术研发同学和业务运营同学遇到的问题,一般会基于自己负责的系统链路,或面向业务运营,或面向技术开发。由于我负责的平台比较特殊,这两部分都有涉及。
面向研发的服务支持
一般从业务的技术选型阶段就会开始介入,提供基于搭建体系的专业技术方案支持,包括基础的前端框架方案、页面的渲染服务(SSR、CDN等)、面向个性化场景的数据网关服务能力等,涉及的面会比较多,因此必须了解整个技术生态和服务体系。
运营服务支持
产品建设和技术探索
作为一个平台的产品、技术负责人,从产品的整体发展规划,到面向内部运营的搭建平台研发、面向终端用户的基础渲染方案架构都需要参与,真·全(省)栈(钱)工程师无疑了。
1.产品规划及演进。基于用户业务场景和需求,不断演进搭建服务的能力,让平台上的业务能够更快的交付上线,同时作为淘宝搭建服务的重要组成部分,斑马也是搭建基础服务和上层业务的桥梁,这期间会持续把业务能力做剥离和抽象,推动底层的基础搭建服务能力进行迭代。大白话翻译就是:我兼职PD~。当然整个项目组的同学都会参与到这项工作中来,因为都是前端线的技术研发,我们建立了一套基础的产品方案评审流程,从基础的技术方案实现,到产品交互流程优化,按照双周的节奏进行评审、研发、发布。
3.消费者端渲染方案探索。这是一个技术侧比较纯粹但是关联链路比较多的部分。核心目标是让终端用户更快地访问到页面,目前主要是和大促会场的同学共建,将双十一等大促活动中通过考验的极致方案通用化,覆盖到更多的业务,关键词:Rax/Weex(没错)/FaaS/EdgeRoutine/CDN
除了工作还有什么?
2.奶娃。工作日会争取在6点左右下班回家,常规陪玩陪练(我不会告诉你我家学的二胡,每次开练都怕楼上楼下的邻居打进来),双休日条件允许的话一般会周边一日游(家住杭州但是基本不去西湖那种),比较喜欢去野外探索,不仅环境好,还人少,小朋友们也能更多接触大自然;
3.折腾鱼缸。几年前迷上草缸,后来又添置一个原生缸,虽然缸都不大,偶尔坐在草缸前面看水草冒泡泡其实挺解压的,家里小朋友也喜欢缸里的小鱼小虾,放个照片吧;
03后端工程师的日常
松香
我的具体工作内容如下——
开发工作
广义的开发工作的内容非常复杂,涵盖的范围也非常广,从最基础的开会讨论环节(例如需求评审或设计评审)到狭义的开发环节即代码Coding实现到测试和上线都是属于开发工作的一部分,详细来说开发工作包含了如下内容:
需求评审
在项目中,需求分析是最开始的工作,同时也是最重要的工作。在这一步骤中,开发人员需要和产品经理,测试等人员就项目目标、需求理解、系统原型、术语定义等达成一致。
系统设计
在理解项目的目标之后就可以开始做系统设计,其中包含了技术选型(项目使用什么语言,使用什么框架,数据持久化选用sql/nosql,数据库又该选用什么),模块拆分(大到网关/入口/功能/基础设施的架构分层设计,小到具体功能间的耦合拆分设计),细节设计(通过诸如时序图,类图等描述某个功能或者设计的关系与流程,定义交互协议的数据格式),设计评审(通过团队内外评审的方式查缺补漏看看设计是否有错误或者是不恰当的地方)。
这一步在整体开发工作中有着至关重要的作用,一个好的系统设计可以非常有效地减少编写代码时的思考和工作量。
代码实现
在完成系统或者是方案设计后,就可以按照预先定义的流程进行代码编写和实现,在完成编写后需要邀请1位以上同学进行CodeReview评审代码的质量与逻辑的完备性。
测试回归
对于开发人员来说,测试主要是代码层面和功能实现层面的测试,前者主要是编写unittest单元测试以方法或者类的维度验证代码的正确性,后者是功能编写完毕后进行全链路的测试从入口开始编造流量看整体效果是否和预期一致,通常这步也需要专业的测试人员介入,在出现异常问题时,需要进行debug和问题修复。
功能上线
任何一个功能或系统上线都是复杂的,引入流量前需要配置关键业务节点上的监控,发布过程中最开始先beta灰度并进行功能验证,确认功能正常,指标监控平稳后可以开始作分批发布(如果是大规模的系统集群),在发布过程中与完成后需要实时紧盯监控指标以防止出现线上问题。
效果验证
项目上线后就可以通过服务端的埋点日志数据进行筛选统计,查看上线后整体功能是否满足预期的目标。
文档记录
写文档是一个开发人员工作的本职工作,上述的每一个开发步骤都应该在项目文档或者是系统文档中予以记录。
运维工作
运维工作包括日常运维,包括系统容器的状态的管理(重启/置换/扩容/缩容),大促运维(预算申报,预案管理与演练,重保节点配置等)
答疑工作
每个人负责的系统应该都只是一个系统链路的一部分,这种时候对于你的业务方就需要提供答疑工作:帮助完成系统接入,帮助排查问题,解答功能细节等等,现在在阿里巴巴内部这部分工作逐渐转为由自动化答疑和排查工具来完成,但免不了出现疑难杂症需要开发人员介入解决。
工作外的充电
对新人的建议
新人做的第一件事情就是熟悉环境,包括同事间的相处风格、公司技术栈、中间件等等。在适应完成后一般主管会给你分配一些简单的任务比如一个模块功能的实现,新人就需要通过这样一个任务去落地,包括功能效果的实现,团队和上下游业务的熟悉了解等等。
最后给新人的一些建议就是要在工作中要多沟通交流,刚入职的时候对整体的业务和技术栈甚至包括自己担任的职责和负责的范围等等都会有疑惑,这是非常正常的一件事情。这种时候多和主管或者是mentor作沟通交流不断明确你的工作的目标和当前的进度情况,这样新人落地也会更加顺利一点。有时候新人在技术实现上会遇到困难,这种时候除了需要靠自己多思考学习外同样需要多和同事讨论,向资深员工学习请教也会让你工作更加顺利。
工程师的工作日常,没有那么多的轰轰烈烈,大多时候是日拱一卒,反复且平淡。因为拥有目标,拥有方向,所以只需保持认真与专注,然后心无旁骛,一往无前。