Logo
Section 1 / 6

了解你的同事

了解你的团队成员以及他们能够做什么。

导入

了解你的同事

了解你的团队成员以及他们能够做什么。

编程有时是一项独自完成的活动。但绝大多数情况下,它是多名程序员共同协作打造产品的过程,因此我们必须学会与他人合作才能高效工作。

角色

首先,我们来了解一下团队中的成员及其职责。这些角色因公司而异,可能还存在一些我们未提及的专业岗位,但通常大致如下:

程序员

当人们提到“程序员”时,脑海中浮现的往往是戴着厚眼镜、坐在电脑前埋头敲代码的人。敲代码只是其中一半——实际上,从产品构思到最终交付,还需要大量非编码工作:排查错误、测试、参加会议以及其他任务。这些工作的具体内容会因组织结构和产品所处的开发阶段而有很大差异。

Course Image

在管理成本较低的组织中,程序员可以将大部分时间用于设计和实现工作——这是一份非常有趣的角色。有些人甚至可以一辈子都从事这一角色。一些进步型公司会给予资深程序员与总监或副总裁相当的薪酬。

这类角色有多种称呼:程序员、开发者、软件工程师、固件工程师等。它们本质上差别不大。“工程师”这个头衔在软件领域并无特殊含义,因为软件行业并不存在工程师与程序员之间的资质门槛(这与需要执照认证的领域如土木工程不同)。而“固件工程师”通常指从事嵌入式系统或操作系统组件开发的人员。

如果你希望成为这类角色,但并非第一份工作,也不必气馁——这是完全可以实现的。新产品开发需要经验,因此通常需要先在其他岗位上证明自己。

技术负责人

技术负责人本质上就是一位拥有正式授权、能在技术事务上做出决策的程序员。一个拥有五名或更多程序员的团队,通常会设一名技术负责人,此人需具备该问题领域的专业知识或良好的领导能力记录。不过,技术负责人并非拥有雇佣或解雇员工权力的管理者。

由于这一角色通常是内部晋升而非外部招聘而来,因此技术负责人往往具备扎实的经验和可靠的判断力。他们也常担任新手程序员的导师,正如课程《寻找导师》中提到的那样。

要达到这一职位,必须付出长期努力。通常需要数年扎实的工作经验和非正式的团队领导经历才能获得。

架构师

“架构师”这一头衔有两种截然不同的含义。在某些公司中,架构师被视为分析师,负责收集产品需求,并撰写详细的设计文档供其他程序员实现,之后便收取高额咨询费离开。而在另一些公司中,架构师只是展现出卓越领导力和设计能力的团队负责人,他们会全程参与产品的开发过程。这种架构师没有“写完设计就走”的特权——他们必须跟进自己的设计成果。

类似的头衔还包括首席科学家、高级研究员等。这些荣誉性称谓通常只授予大型企业中的极少数人。

现在我们已超越技术领导范畴,进入管理层——即负责招聘、解聘和绩效评估的人员。

编程类管理者分为两种:一种是专职管理者,我们称之为“人事经理”;另一种则是曾经的程序员。两者各有优势。

  • 人事经理:他们可能不精通技术,但深谙团队运作机制,比如如何组建合适的团队,并让团队高效协作。

  • 程序员出身的管理者:他们曾是程序员,情况较为复杂。其中一些人其实更愿意继续编程,但因表现出优秀的技术领导能力而被提拔至管理岗位。这类管理者在技术问题上能提供有力指导,但在职业发展等长期规划方面,你可能需要寻求其他建议。

如果你想转向管理岗位,需清楚:你将不再直接编写代码,而是专注于项目规划、人员管理、预算控制等工作。这是一份完全不同的工作。然而,如果你具备人际交往能力,并希望在公司内获得更多话语权,那么管理岗位或许正是你的方向。

Course Image

测试人员

测试人员负责在产品发布给客户之前进行质量验证。然而,测试方式多种多样,因此测试人员的工作内容也大相径庭。最基础的测试包括阅读用户手册并检查用户界面。

在更高阶的层次上,测试人员会编写自动化脚本和程序来执行测试——这与程序员的工作几乎没有区别。

测试人员与程序员之间常常存在对立情绪。程序员可能会对测试人员发现的缺陷感到不满,但应记住:在内部发现一个缺陷,远胜于在真实环境中被用户发现。测试人员可以把发现缺陷视为一次胜利,但他们也必须明白,缺陷不是值得庆祝的成功,而是一种失败。双方都应意识到,你们属于同一支队伍,目标一致:交付高质量的产品。

测试是一个适合缺乏经验的新入职者的常见岗位,也有其独特优势。测试人员能够从终端用户的视角体验产品,这一点往往容易被程序员忽略。从公司整体收益角度看,只有用户价值才是真正的价值。

若想转为程序员,路径十分清晰:通过编写代码来突破现状——自动化手动测试、开发测试工具,做任何涉及编程的事情都可以。

构建与部署

规模较大的工程团队通常设有专门负责构建和工具的人员。这些人精通版本控制、自动化工具、打包工具和发布流程。一旦我们的代码破坏了构建流程,他们就会立刻感到困扰。

另一个相关专业方向是部署。运行在成百上千台服务器上的产品,需要高度精细的自动化和严密的运维保障。这些人员确保新代码能正确部署,分阶段上线,并处理可能出现的问题。表面看这像系统运维,但实际上技术要求更高。面对成千上万台服务器的分阶段发布(以及可能的回滚),所面临的挑战往往比应用程序本身还要复杂。

为了更好地理解这些专业技术岗位的重要性,不妨设想一家运营规模达到谷歌级别的公司。谷歌最前沿的许多软件,正是帮助程序员在集群间分配负载或处理海量数据(PB级)的工具。

我们在团队中的角色

我们最初的工作不会是某个新产品的首席架构师。一开始,我们会承担一些基础性工作——因为从零开始,必须从小事做起,才能逐步赢得信任,承担更重要的任务。这是与手工艺行业一样的自然规律:学徒必须一步步成长。

初出茅庐的程序员可能从测试岗位起步。我们需要耐心地摸索如何测试代码的不同部分,以确保其正常运行。当被调去编写代码(连同测试用例)时,我们会更有动力写出模块化、易于测试的代码。

Course Image

因此,当你满怀理想踏入职场,却发现被安排了一个看似不起眼的岗位时,请不要灰心。这只是暂时的。你需要一步步积累经验,最终走向自己真正向往的角色。

团队合作

了解公司的结构:第一部分