Skip to content

四火的唠叨

一个纯正程序员的啰嗦

Menu
  • 所有文章
  • About Me
  • 关于四火
  • 旅行映像
  • 独立游戏
  • 资源链接
Menu

哎,写代码的时间真的越来越少了……

Posted on 04/26/202007/04/2022 by 四火

还记得在读书的时候,就对程序员有种坐在电脑前疯狂敲代码的刻板印象。工作以后,逐渐理解了软件工程师的工作到底是怎么样的,可是写代码,作为软件工程师最重要的本职工作,还是占据了相当比重的时间。在面试别人的时候,也经常被问到这样的问题——“平均你每天有多少时间花在写代码上?”,这个问题看似简单,却能反映出一个问题,软件工程师,能否有足够的时间专注在最本职工作——写代码上。毫无疑问,我完全理解这样的问题,并且,我也一直以来想保持着自己一个 “纯粹” 程序员的身份。我觉得我的职业通道也是一条纯粹的技术人的道路,因而写代码,是一个如同每天吃饭喝水一样的基本操作。

可是,随着职业生涯的进展,特别是近半年来的一系列变化,我已经明显感受到,这已经发生了变化,曾经的理所应当不再是理所应当。这个变化会带来什么,除去不断的思考,时间会告诉我更多。

团队的变化

在建立初期,OCI 更偏向于招纳更有经验的工程师,因为那个时候 “打地基”、“搭框架” 的工作潜在的影响力,和犯错的可能更为巨大,这样的工作不只是云服务本身的建设,还包括团队和流程体系的打磨。但是逐渐地,随着团队的扩张,招人的策略也发生了明显的变化:

  • 更多的初级职位,更多地吸纳经验较少的工程师,特别是毕业生;
  • 对于高级别的职位,需求量减少,要求的标准相对而言可能有所提高。

其实这也没有什么难以理解的,现在无论是技术人还是管理人,不管是 IC(Individual Contributor)岗还是 M(Manager)岗,大家都对级别和对应的能力和贡献的期望愈发清晰。换言之,就是很明确什么样的工作,交给什么样能力的人去做。这样一来,大多数团队对具备不同能力和经验的软件工程师的需求,也变成了塔状,即经验较少的工程师占较大(60% 以上)的比重。于是,在能够达成目的的基础上,使用这样的模式,可以更好地控制团队的薪酬成本,同时,不同的工程师也可以得到相对合适的挑战。

另一方面,团队负责的项目的规模还在逐渐扩大。团队重新划分过几次,如今我们也肯定是一个全栈式团队(对全栈式团队有疑惑的可以参见我在专栏中的解读),而团队拥有的产品里面,既有数据中心的数据服务,有分布式工作流引擎,还有内部使用的可视化工具网站,并且可以说是既有平台,又有业务。因此对于大部分计算机相关专业毕业的软件工程师,都可以在我们团队找到感兴趣的方向。(题外话,目前由于新冠病毒造成的影响,OCI 的招聘暂停,但是预计在数周后会逐步恢复,对我们团队感兴趣的可以和我联系,不过工作地点只有西雅图。)

这三个产品可以说每一个所对应的最大挑战都不相同,但是配合起来,大的目标是一致的,就是为数据中心,特别是新建数据中心服务,既包括流程自动化,又包括数据存取和展示。

我自己的变化

回想工作最初的几年,特性和功能开发是时间花费最主要的地方,也是最多的 “写代码” 的原因。如今,这件事情肯定已经跌出前三了。

这半年来,我自身的角色也发生了比较大的变化,现在除去一如既往地负责单个产品本身的主要项目,还需要牵线那些各个产品负责的子团队协作来完成的工作。而在项目和团队中实际做的事情,也有了明显变化。总的来说,下面这些事情,时间占用出现了大幅度的上升:

产品或特性的规划

早些年我的理解,对于产品或特性的规划,应该是 TPM 或者产品经理这样的角色来完成的,但是其实这是不准确的。事实上,一方面,有很多工作确实是需要有足够技术背景的人去完成;而另一方面,本身对于多数项目来说这样的角色已经很模糊了,一个不深入理解业务和产品的 IC?不可能的。

对于我们团队来说,TPM 能够提供这样三个方面的帮助:业务、项目和客户。但是,有许多产品或特性的规划,基本上这三个都不相关,完全是工程师的活儿。比如说分布式工作流引擎,业务线和技术线是可以分得比较清楚的:下面的平台本身是业务无关的,而在其之上跑着的的业务工作流却相反。因此,对于其中技术层面的规划设计,也包括将业务怎样落地梳理清楚,只有工程师才能完成。

技术架构

这部分其实接近于我在读书时期对于架构师狭隘的理解。

事实上,我了解到,对于很多真正参与这方面工作的人来说,真正的纯技术架构工作,占比并不会非常大。这一方面是由于,并没有那么多产品长期处于 “初创期” 或者 “转型期”,需要大量的架构工作;另一方面,则是因为一切的技术架构都是建立在业务和需求清晰的基础之上,而做到这一基础已经需要巨大的时间精力投入了。

值得一提的是,这样的工作需要一些考察和探索,比如做技术选型和快速原型。有时候也会涉及一部分编码。总的来说,这其实是我比较喜欢的事情。

管理、沟通和协调

这部分我描述得很笼统,并且有一点像管理岗的工作了。或多或少,这是一个 IC 不可避免的职责。理想状况下研发经理理应承担更多这方面的工作,但是我们的团队人手方面,这样的角色数量不足够,因而 IC 需要更多地承担这方面的工作。当然,即便能做到理想状况,沟通和协调于我而言,依然会占据相当的比重。

对于我们团队而言,偏重技术方面的需求比较多,因此需要软件工程师更多的参与。事实上,我们每一个产品/子团队都有 lead,他们都会主导或重度参与每一个 Sprint 的任务规划。这也再一次印证了,对于 IC 来说,随着职业生涯的发展,角色定位就是会越来越 “模糊”。

Mentoring

在我们团队,目前工作经验较少的工程师比较多,因此 mentoring 是一件比较重要的事情(除此之外,这个状况也是对于 dev manager 需求比较强烈的原因之一)。当然,这部分时间开销,也可以归纳到上面的 “管理、沟通和协调” 当中去。

招聘

上面说的是团队内的时间开销,而在跨团队的 OCI 层面,有这样两项内容花费了显著的时间:一个是设计评审,另一个就是招聘。而对工程师来说,这件事基本围绕面试展开。对于这个话题,鉴于之前已经说过几次了(比如这一篇和这一篇),在此就不展开了。

对于角色上的变化,我依然在逐步适应中,寻找最适合自己的方式。而对于写代码这个事情,时间确实是越来越少了,不知道一个合适的解决方法是什么?当然,我并不想去狭隘和片面地追求编码时间,但是我知道,编码是一件常练常新的基本功。在工作中,到底应该怎样更有效地分配时间,平衡包括编码在内的各种各样的事情,希望我可以很快把这个问题考虑清楚……

文章未经特殊标明皆为本人原创,未经许可不得用于任何商业用途,转载请保持完整性并注明来源链接 《四火的唠叨》

×Scan to share with WeChat

你可能也喜欢看:

  1. 有趣还是无趣?
  2. 我眼中的工程师文化
  3. 代码的变与不变
  4. 进阶过程:程序员做项目的独立性
  5. 那些做了一半的项目

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

订阅·联系

四火,啰嗦的程序员一枚,现居西雅图

Amazon Google Groovy Hadoop Haskell Java JavaScript LeetCode Oracle Spark 互联网 亚马逊 前端 华为 历史 同步 团队 图解笔记 基础设施 工作 工作流 工具 工程师 应用系统 异步 微博 思考 技术 数据库 曼联 测试 生活 眼界 程序员 管理 系统设计 缓存 编程范型 美股 英语 西雅图 设计 问题 面向对象 面试

分类

  • Algorithm and Data Structure (30)
  • Concurrency and Asynchronization (6)
  • System Architecture and Design (43)
  • Distributed System (18)
  • Tools Frameworks and Libs (13)
  • Storage and Data Access (8)
  • Front-end Development (33)
  • Programming Languages and Paradigms (55)
  • Testing and Quality Assurance (4)
  • Network and Communication (6)
  • Authentication and Authorization (6)
  • Automation and Operation Excellence (13)
  • Machine Learning and Artificial Intelligence (6)
  • Product Design (7)
  • Hiring and Interviews (14)
  • Project and Team Management (14)
  • Engineering Culture (17)
  • Critical Thinking (25)
  • Career Growth (57)
  • Life Experience and Thoughts (45)

推荐文章

  • 聊一聊分布式系统中的时间
  • 谈谈分布式锁
  • 常见分布式系统设计图解(汇总)
  • 系统设计中的快速估算技巧
  • 从链表存在环的问题说起
  • 技术面试中,什么样的问题才是好问题?
  • 从物理时钟到逻辑时钟
  • 近期面试观摩的一些思考
  • RSA 背后的算法
  • 谈谈 Ops(汇总 + 最终篇):工具和实践
  • 不要让业务牵着鼻子走
  • 倔强的程序员
  • 谈谈微信的信息流
  • 评审的艺术——谈谈现实中的代码评审
  • Blog 安全问题小记
  • 求第 K 个数的问题
  • 一些前端框架的比较(下)——Ember.js 和 React
  • 一些前端框架的比较(上)——GWT、AngularJS 和 Backbone.js
  • 工作流系统的设计
  • Spark 的性能调优
  • “残酷” 的事实
  • 七年工作,几个故事
  • 从 Java 和 JavaScript 来学习 Haskell 和 Groovy(汇总)
  • 一道随机数题目的求解
  • 层次
  • Dynamo 的实现技术和去中心化
  • 也谈谈全栈工程师
  • 多重继承的演变
  • 编程范型:工具的选择
  • GWT 初体验
  • java.util.concurrent 并发包诸类概览
  • 从 DCL 的对象安全发布谈起
  • 不同团队的困惑
  • 不适合 Hadoop 解决的问题
  • 留心那些潜在的系统设计问题
  • 再谈大楼扔鸡蛋的问题
  • 几种华丽无比的开发方式
  • 我眼中的工程师文化
  • 观点的碰撞
  • 谈谈盗版软件问题
  • 对几个软件开发传统观点的质疑和反驳
  • MVC 框架的映射和解耦
  • 编程的未来
  • DAO 的演进
  • 致那些自嘲码农的苦逼程序员
  • Java 多线程发展简史
  • 珍爱生命,远离微博
  • 网站性能优化的三重境界
  • OSCache 框架源码解析
  • “ 你不适合做程序员”
  • 画圆画方的故事

近期评论

  • Ticket: TRANSACTION 1.922915 BTC. Go to withdrawal >> https://yandex.com/poll/enter/BXidu5Ewa8hnAFoFznqSi9?hs=20bd550f65c6e03103876b28cabc4da6& on 倔强的程序员
  • panshenlian.com on 初涉 ML Workflow 系统:Kubeflow Pipelines、Flyte 和 Metaflow
  • panzhixiang on 关于近期求职的近况和思考
  • Anonymous on 闲聊投资:亲自体验和护城河
  • 四火 on 关于近期求职的近况和思考
  • YC on 关于近期求职的近况和思考
  • mafulong on 常见分布式基础设施系统设计图解(四):分布式工作流系统
  • 四火 on 常见分布式基础设施系统设计图解(八):分布式键值存储系统
  • Anonymous on 我裸辞了
  • https://umlcn.com on 资源链接
© 2025 四火的唠叨 | Powered by Minimalist Blog WordPress Theme