1-3 工作体验
主要分成以下这几个部分:工作环境、工作的日常节奏以及简单说说新人体验。
工作环境
现在主流的互联网公司,工作环境比较类似的,关键词是舒适。因为程序员从事的是创造性的劳动,需要一个舒适的环境才能最大的激发他们的生产力。而公司一般也会把这种舒适的环境,作为吸引人才的重要宣传素材。
体现为几个方面:
一、生产设备。现在主流的互联网公司,公司会给新入职的同学们配备新款设备,比如在字节跳动,对于大部分技术同学来说,公司会配置新款的macbook pro,原因主要是系统稳定以及编程环境容易配置。这个电脑基本相当于是公司发给你的,自己想怎么玩都可以。三年期满还可以再换新的。同时,公司同时也会配备额外外接的显示器,这样可以多个屏幕办公,提升工作和代码开发的效率。
二、餐饮。大部分主流的互联网公司,都会有自己的食堂,员工的三餐,都可以在公司内部解决。伙食的质量都是很不错的,字节跳动的餐标据说是100/天。即使是那些没有食堂的公司,大部分公司也会提供餐补,给员工在外就餐提供一些补贴。此外,很多公司还有免费发放的零食、下午茶、咖啡等等,基本可以保证吃饱喝足,热量拉满。经常可以在电梯里等等一些公共场合听到一些自己完全不认识的同学,说道自己又胖了五斤。于是减肥成为很多同学的常驻目标。
三、其他福利。常见有,免费的健身房,满足对健身的日常需求;就近租房补贴:如果你租住的地方离公司很近,可能每个月要给你1500元的补助;日常也发一些文化衫或者玩偶以及生活用品;晚上加班回家打车可以公司报销;公司内部举行的一些文体活动,比如羽毛球赛等等;还有日常公司帮忙组织的一些日常必需的福利,比如例行的体检,商业保险等等,带薪的年假和病假等等。
总之基本上公司可以帮助你对日常生活的需求,你的衣食住行都多多少少可以帮助你解决。公司对你的预期只有一件事:你能安安心心的把本职工作做好。
在我看来,这些福利确实可以让公司里面的工作的同学感受到:公司确实是在为你着想,生活在其中可以感受到一定的幸福感。同时这些宣传通常会让家里的老人长辈感到非常的开心:他们通常会很担心衣食住行的问题。但我对这些东西的观感是,这些可以成为你选择一份工作的加分项,但不是唯一的理由:相对来说,做出有价值的事情才是更应该考虑的。
日常节奏
互联网公司现在成为“加班”奋斗的代名词,大家被996 007各种代号搞得晕头转向,可能还有一些担心害怕的的心态。那么一个日常的算法工程师的日常节奏是怎么样的呢?我以我个人的经历来简单聊聊。
为了讲清楚日常工作的节奏,前提条件是讲清楚我们日常在干什么。节奏就是,我们怎么安排自己的时间,去做这些日常的工作。
作为一个算法工程师,我们的日常工作主要包括以下这几个部分:
- 模型相关的迭代:这个既包括模型结构的迭代,也包括特征的迭代。这个可能是大部分同学对算法工程师的认知:算法工程师自然都是训练模型的。但实际上,可能模型结构实际上迭代的并不多。更多的模型工作发生在,新的场景需要模型(比如上了新的app或者支持新的活动),或者新的用户行为(比如点赞、评论)需要模型来预估,一些新的模型特征加入到模型里面等等。
- 推荐策略的迭代:因为推荐算法工程师,实际上也算是半个内容生态相关的产品;我们通常会根据产品的要求,做一些推荐策略的迭代。典型的迭代场景是,如果我们不对推荐系统做任何干预的话,大概率推荐出来的结果都会是一些比较偏低俗的东西(这是人类的本性),所以我们就需要对推荐系统做一些干预,这些干预通常会以损失推荐系统的效果来换取:因为这意味着不能推点击率最高的候选,只能推满足要求的候选。
- ab实验。在互联网公司,大家对在线的策略,一般都是怀有敬畏之心的。理论上线上所有的变更,都必须做ab实验,在取得明确的效果和结论之后之后,才可以上线。所以这个过程中涉及ab策略的代码开发,以及策略的实际结果的分析,通常涉及一些数据分析以及一些简单的统计中的假设检验。
整体上,公司内部的氛围是有比较强的空间和自主权,有实现自己想法的机会和空间。例如:你看到了一篇好的论文,觉得可能对当前的场景有帮助,那就可以自己尝试一下;比如你觉得当前的这个场景,有一个重要的特征目前还没有考虑到,那就可以跟产品和运营去聊,获取相应的支持。这一点可以说是非常开放的。
日常的工作节奏也相对来说比较轻松,没有那么刻板,体现在:
- 每天十点上班,但可能大部分同学都是十点半左右才到
- 晚上一般意义上是七点下班,但大部分同学是九十点左右离开
- 如果偶尔有事,要提前走,一般在群里说一声就行,也不需要特别注意什么
整体上,算法工程师日常的工作还是比较规律的,我常常觉得这个和读书的时候在读书馆其实没啥本质区别。可能偶尔会有一些特别紧急的项目需要赶,可能需要加班到十一二点。但绝大多数情况下,还是比较稳定的。
公司对你的要求就是,能干完活就行,其他的你可以任意安排。干完活的表现就是,每周会定期有一个周会,大家会讲一下自己这一周都干了一些啥,你只要能在这个会上能讲出有工作量的内容,就是达标的。
前段时间看的《奈飞文化手册》,里面有一点印象很深刻:现在大公司想招聘的员工,都是成年人。怎么定义成年人呢?可能每家公司定义都不太一样,但是基础的就是:不需要再像小孩子一样时时监督着你,让你打卡定义量表,而是相信你可以在基本的诉求得到满足的情况下,做持续稳定的输出。这一点在互联网公司就体现的非常淋漓尽致。
新人体验
上面聊到了一些工作的日常和工作节奏,大家其实可以看出来,其实整体的氛围还是相对比较宽松,且有一定的自主权的。那么新人入职的时候感觉怎么样呢?
坦率的说,如果新人想要加入,还是有一定的门槛的。这个门槛主要表现为代码的问题,以及工程实现瓶颈。我们分开来说。
代码的难度。在聊代码难度之前,我们其实讲的不是编程语言基础语法的难度,而是随着代码量的提升带来的复杂度的增加。这很容易会让没有大型代码经验的同学摸不着头脑。须知,几百行的代码和几万行的代码,其实是两个不同难度系数的东西。大型项目的组织背后通常涉及到一些设计的基本思路(通常意味着大量的业务背景)和代码组织的一些规范和方式(比如设计模式),无论是哪一种,都意味着大量的名词堆砌,这意味着短时间内要接触到大量的概念,这个一般需要时间,很难快速消化。一般来说,一个新人加入我们组,通常第一个月很难有效的产出。
工程实现瓶颈。当我们离线搞一个算法项目的时候,我们通常可以搞的非常的简单,搞一个训练集和测试集,随便写一些模型训练代码就可以了。但是,当一个模型在生产环境下在线部署的时候,背后的基础设施架构其实是面临着很多约束。这就会导致我们在离线训练模型用pandas随便搞一搞的事情,在在线环境下可能就会变得遥不可及,需要比较多的工程开发。比如怎样科学的部署一个强化学习的系统,其实相对就比较复杂,需要大量的工程开发。
不过这种客观的难度其实也意味着门槛。因为通常来说,对你来说难的东西,对其他人也通常意味着难度。而门槛通常也意味着,你一旦跨越过去之后,就可以帮助你拦下很多其他的竞争对手。所以大家不要因为难而却步。
我反而由衷的建议大家,在面临人生的选择的时候,如果在各方面都其他偏好都一致的情况下,尽可能选择那些难一点的道路。迈过眼前的难关之后,可能就是一片通途。
具体的新人应该如何适应算法工程师的职场,我之前的一篇文章其实讲了比较多,感兴趣的同学可以参考