极客时间已完结课程限时免费阅读

07 | 职业规划二:程序员后来都去干啥了?

07 | 职业规划二:程序员后来都去干啥了?-极客时间

07 | 职业规划二:程序员后来都去干啥了?

讲述:白海飞

时长18:15大小16.73M

你好,我是白海飞。今天讲职业规划的第二篇:程序员后来都去干啥了。
我刚开始工作的时候,每次上下西二旗地铁站,看着那么多人背着电脑包,眼神炯炯,脚步匆匆,心里就想,每年都要有更年轻的人挤进来,我们这些程序员将来去干啥呢?
如今十多年过去了,稳中求进的西二旗都成了程序员神往的圣地,看看我身边的小伙伴们,有人跳到别的大厂发展成总监,有人去互联网创业做了 CEO,有人进了银行,有人改行做了餐饮,有人搞起自媒体成了大 V……
但是大多数人,都像我一样,还在程序的世界里摸爬滚打。以我们团队为例,十多年来,从十几个人,发展成 200 多人的全球跨职能团队。其中,我们的领队成了全球商务系统的总负责人,汽车制造专业的程序员成了资深架构师,测试出身的小姑娘成了业务大拿,还有更多的人,一直坚守在技术岗位上,成了所在领域的专家,推动着客户成功,带领着团队成长。
那么,对于没有选择创业、没有转行的这大多数程序员来说,在软件产品团队内部是怎么发展的呢?这些角色的发展空间如何?你怎样才能判断自己适合做哪个角色呢?
好,在前一篇我介绍了职业规划的愿景和小目标,今天我们就把眼光聚焦在软件产品团队的几类角色上,以便帮助你结合自己的情况,规划个人发展方向。

软件产品团队的角色划分

简单地说,软件开发的工作是编写程序为用户服务。如下图所示,在这个领域,一端是用户,另一端是技术、设备等资源,中间是产品团队负责连接。用户想满足自己的需求,就需要产品团队,把资源加工成可用的软件或者服务,递交给用户,甚至负责运维,满足用户持续的使用。
我们在上图中间画一条分割线,把软件产品团队除了管理人员,一分为二,靠近用户一端的这组角色,包括产品经理、业务分析师、业务运营等职位,作用是确保产品功能体现客户价值,也就是“做正确的事”,这组角色是业务角色;而靠近技术资源一端的这组角色,包括架构师、开发、测试和系统运维人员等,负责高效高质地做出产品,也就是“正确地做事”,这组角色是技术角色。另外,在这两组角色之外,还有一组管理角色,包括项目经理、部门经理等职位,负责业务战略、项目执行、团队管理等。这样一来,我们就把软件产品团队的角色分为三类:业务角色、技术角色、管理角色
虽然这三类角色的目标都是为用户递交高质量、高价值的产品服务,但各自有明显不同的关注点,他们的思维模式也不一样。为了让你更清楚地了解他们的不同,我举个例子。比如我们让这三类人分别解释一下“圆”这个图形:
技术人会说:拿一条绳子,按住一头不动,另一头转一圈,画出的轨迹,就是圆。(他在强调用什么工具技术来画圆。)
搞业务的人则会说:这个图形就像十五的月亮,每段线条都很光滑,很完美,生活中有很多地方用到它。( 他在用形象化的语言解释圆的外观、属性,以及应用价值。)
搞管理的人则会把技术和业务两人叫到一起,对技术人说:“你要用什么样的绳子?这么做费不费劲?”对业务的人说:“你的说法倒是可以验证他画得好不好,可是,十五那天要是阴天你就没法验证了。” (他不关注怎么画圆,但是关注画圆的资源,最终的质量、验证方法,还有风险。)
你看到了么,技术角色关注的是设计实现,业务角色关注的是功能价值,而管理角色关注的是质量、过程控制和风险。下面我们一起详细讲讲这三类角色。

1. 技术角色

首先说技术角色,它包括开发、测试、架构、系统运维等职位。这些职位有什么共同点呢?
技术人员的任务,是把定义好的功能做出来。因为长时间跟计算机打交道,而计算机按照算法逻辑运行程序,所以技术人员讲求逻辑,追求细节,探究问题的根源,有追根寻底的好奇心。优秀的技术人员,除了爱钻研深度,还爱探索广度。当对某个领域的技术深入理解之后,他们能抽象出方法和模型,用于掌握日新月异的技术本源,和变化的思想模式,从而在广度上对技术有更快更好的理解。这就是“T”型人才:纵向有技术深度,横向有技术广度,他们对新技术有敏锐的嗅觉,关注、掌握甚至引领技术发展的动态和趋势。
我理解技术角色有以下的四个发展阶段:
初级的程序员,拿到小的开发任务,能够运用团队中已经选型的技术和工具,编码实现功能,通过调试代码,理解技术的原理,训练自己的思路以便和计算机的运行逻辑同频,灵活运用编程模式,驽驾程序解决技术问题,也就是形成算法思维,这时他关注的是代码质量和技术问题。
随着开发任务的多样化,程序员解决的问题越来越深入和复杂,逐渐接触和掌握了完整的框架和技术,通过总结,对该问题域形成模块化、体系化的认知,可以独立设计和开发,也就是形成系统思维。这时他关注的是某一类系统的运行效率。
解决问题能力越来越强的程序员,把问题域不断拓展到新的领域,利用已经掌握的系统化知识和思考方法,能快速学习新领域的知识,掌握新领域的技术和框架,这是进行“T”型技术中广度的积累。每个技术模块都形成他知识体系中的一个节点,随着这个知识体系越长越大,他可以根据用户的需求,选择合适的技术模块,进行分拆组合,考虑成本和收益的均衡,来提供解决方案,也就是形成架构思维,我们称为架构师。这时架构师的他,关注的是业务和架构的最优匹配。
再以后,就是对技术前瞻性的把握了,结合市场的需求变化和研究人员的成果,依托整个软件生态的发展,引入或创造新的技术,提高应用效率,满足用户需求。IBM 有很多技术大神级的人物,我很希望能有机会跟他们深度协作,这样有了体会,就能补充完善这段了。
技术是可以一直做下去的,当然,这点取决于公司的技术成长空间和个人能力素质。如果条件具备,并非像某些人说的那样,35 岁以后就要转做管理。和年轻的开发者相比,你资深在对技术本质和广度的理解,以及技术和业务的融合上。
怎么衡量你适不适合走技术路线呢?我觉得,能不能做好技术,不在于你是不是计算机科班出身,不在于你是不是现在还处理琐碎的小任务,而在于你对底层细节的好奇心,以及是否愿意尝鲜钻研,扩充自己的知识体系。
比如,你在饭馆第一次看到“煤球炒饭”,有研究它的欲望么?这道菜上来的时候,还蹿着火苗,你能快速搞清其原理么?你是要自己先研究一番呢,还是去“朋友圈”问别人呢?乘坐电梯,你会不会纳闷电梯用的什么调度算法?你有没有折腾出过一些小程序,被别人“把玩”?你的技术博客,曾经被人称赞或引用过么?如果是,那你可以考虑一下技术路线。

2. 业务角色

业务就是用户遇到的问题和要做的需求。业务角色,包括业务分析师、产品经理、客户支持、业务运维等人员。这些人一方面跟用户打交道,另一方面跟技术人员打交道,把用户不明确的需求、痛点、问题,加工转化为技术人员可理解的、高确定性的需求说明和功能定义。进一步讲,业务角色把用户价值翻译成产品功能,保证产品团队做正确的事。
用户是多种多样的,其原始需求和痛点也是多样的、多变的,很多时候,甚至用户自己也不清楚需求是什么,到底痛在哪里。假如用户想要一种更快的交通工具,但是他没见过汽车,就只能指着满街的马车,说想要一匹更快的马了,然后还说最好不要拉臭臭,因为他的痛点之一是现在街上马粪太多太臭。产品经理如果只理解字面意思,最后的产品也许就是穿着纸尿裤的赤兔马了。
所以,优秀的业务角色能够换位思考,就是有同理心,能站在用户角度考虑问题,也能站在技术人员的角度理解问题。但这并不是说,业务人员是在用户和技术人员中间摇摆,他们要有很强的主导意识,否则在用户指明要赤兔马的情况下,就不会有汽车的诞生了。这正是业务人员关注价值的表现,这也是业务难做的地方。
我觉得业务人员的发展有如下几个阶段:
初级的业务人员,参与需求分析和产品功能设计,通过对用户心理和行为的调研,选用恰当的 UI/UX 元素和设计原则,并和技术人员沟通可行性,构建产品原型,同时满足技术成本要求,又提升用户满意度。这时,他关注的是交互设计和用户体验,即这样的操作设计能多好地实现既定功能。
产品经理则主导业务分析和负责整个产品设计,推动产品的实现和运营,参与产品 Idea 的产生过程,对市场分析和产品生命规划有一定的了解。贡献在于甄别真正有价值的问题,定义产品功能和优先级,确保解决用户问题,创造用户价值,并通过产品价值指标来衡量和验证。这要求产品经理具备价值判断能力和很强的沟通能力。
发展到产品总监级别,要主导市场分析和产品规划,掌握用户群体的属性,负责产品 Idea 的产生,进行产品全生命周期管理,要求有丰富的行业知识和深刻的市场洞察。此时已经兼具业务和管理职责了。
再往上就该是公司老总级别了,主抓公司战略,业务方向和市场布局。负责整个公司的运作。
这么看,业务角色的发展空间很大。即使你现在只是一个测试人员,你也可以朝着业务方向发展。我之前把测试归并到技术中去了,其实用来验证产品功能的测试工作,是在看界面行为是否符合设计,这是业务人员的职责之一。在积累了大量的功能操作经验之后,可以尝试参与功能设计和用户调研之类的初级业务工作了。
如果你对技术细节总是一头雾水,但是对用户体验倒是很有想法,你更关心别人的感受和使用习惯,有同理心,别人说很难交流的用户,你能轻松搞定。对于某款 App,你能体会到某点设计的好处,又能找出不当之处,并知道为什么。那么,说明你比较有产品意识,你真可以尝试一下业务方向。
这里提一下技术人员看待业务代码的问题。有些涉及业务开发的工作,比如前端 UI 实现、业务数据操作、业务逻辑处理等,某些开发人员,不愿意写这些业务代码,认为这部分更靠近用户,多变、琐碎、只是逻辑控制,没有技术含量,而更愿意编写底层的框架、事务处理机制等模块,这些模块有通用性且可复用,显得很有成就感。殊不知,这些底层技术,正是为了适应业务代码的需求而编写的。如果不了解业务代码的需求,你所理解的底层技术只是代码而已,而不会明白为什么用这种技术,不会明白它和其他模块是出于什么业务目的划分边界,进而不会明白各个产品团队为什么如此组织和协作。

3. 管理角色

最后我们看看管理角色,它包括项目经理、业务主管、技术经理、部门经理等等(不同的公司可能用不同的名称,而且可能一人担任多职)。这些管理角色的侧重点有所不同:项目经理,负责项目的成败;业务主管,负责业务开拓和发展;技术经理负责技术开拓、技术培训;部门经理负责人员绩效、部门发展……但他们的共同目标都是优化人、财、物等资源的配置,用最小的投入,获得最大的价值产出。
这里有必要区分一下管理和领导的概念。以上说的是管理(Management),是有具体头衔的职位,管理具体事务或者人;而领导(Leading),是从管理中分离出来的影响他人的行为,不一定有具体头衔。也就是说,即使你是一个技术人员,不是部门经理,也可以在团队中具有领导力(Leadership),你的技术权威,可以影响他人的决定和行动。关于领导力的话题,我在后面的文章中会详谈。
说回到管理。管理的角色很多,我这里单说项目管理。传统项目管理者的关注点是过程和质量控制,从而达到预期的成本、范围和进度要求。在敏捷管理中,项目管理的关注点放到了人上:更注重团队成员的自我管理,项目经理转变为协调者和服务者的角色,产品经理负责价值递交,因而产品交付不再是项目经理一个人的责任,有的团队把产品经理和项目经理合并为一个角色,让同一个人承担;透明化、可视化的沟通手段,也使项目经理的沟通工作变得简单直接;团队的开放性和自主性,使创新意识和主人翁意识得到很好的发挥,项目经理不再做监工;项目经理需要开放思想,承认项目范围是可以按迭代调整的,容忍快速试错,拥抱变化,提醒和促进团队正确地做事。
尽管管理者们的管理风格多种多样,但是有一个基本的特质是:有条理(Organized),也就是善于安排事情的优先级和组织过程,目的是保持秩序,使过程可控。一个 Organized 团队中,角色分工明确,工作先后有序,大家配合默契,资源随用随取,流程清晰简洁,成功率很高,能够最大限度地降低不确定性。
所以想想自己,即使还没有管理的头衔,就日常的事情来说,你是否趋向“有条理”呢?比如,你习惯把常用的东西放到固定的位置么?你会按照使用场景优化它们的位置么?你正忙的时候接到一个新任务,是否先衡量一下轻重缓急,再决定要不要切换任务呢?如果是,说明你比较有条理,可以发展下管理意识。

角色融合

当我们刚开始工作的时候,会着力在一种角色上发展。但是发展到越高的阶段,越会发现只有一种角色的眼光和技能是不够的。拿架构师来说,如果眼里没有业务和用户,即使采用的技术再好再新,不能解决用户问题,也不是好的架构师。另外,如果架构师没有管理思维,无法在团队中发挥技术影响力,就不能把设计的精华落实到产品中去,也不能带出精兵强将来。
下面这个图,包含技术、业务、管理三个维度,我们每个人都在每个维度上有一定的能力,承担一定的职责。这样,在三个轴上围出一个三角形,这个三角形就代表了你的角色融合程度和角色跨度。尽量按照你的能力和愿景去拓宽这个三角形吧,它展示了你的能力多大、责任多大,以及对公司、对社会的价值多大。

总结

谈到这里,相信你已经了解了软件产品团队的三种角色,以及它们的关注点和特质。
技术角色:关注技术和逻辑实现,可发展为“T”型人才,需要有对技术的钻研和敏感性。
业务角色:关注用户和价值,有同理心。
管理角色:关注过程质量,有条理。
技术、业务和管理的角色,本身没有好坏之分,只是关注点不同,你需要根据自身特点,选择适合的发展方向。
如果你觉得自己是普通人,不相信自己能发展成大牛或者大神,不要紧,先别下结论。让我们先做个有“饥饿感”的普通人吧。保持这种“饥饿感”,一步一个脚印地走下去。
走着走着,你会发现身边多了很多优秀的人;
走着走着,你发现你也可以给别人营养了;
走着走着,你发现别人开始仰视你,跟随你了;
走着走着,你发现头发掉光啦(好无奈呀)……

思考时间

根据上文介绍的技术、业务、管理三种角色的特质和发展阶段,请你想一下自己具有什么特质,适合发展哪类角色,当前处于哪个发展阶段呢?
欢迎在留言区分享你的想法,和大家交流互动,共同进步。
最后,感谢你学习今天的内容,如果你的朋友也在困惑职业发展的事情,欢迎把这篇文章分享给他。
分享给需要的人,Ta购买本课程,你将得18
生成海报并分享

赞 23

提建议

上一篇
06 | 职业规划一:你真的想好要怎么发展了吗?
下一篇
08 | 如何让你的简历更受青睐
unpreview
 写留言

精选留言(36)

  • 小踏
    2019-02-18
    虽然我秃了,但是我变强了

    作者回复: 这叫能力 上不封顶。

    共 2 条评论
    62
  • 静静聆听
    2019-02-18
    职业规划是一个人必须做的事情,但是没办法的是“许多时候计划赶不上变化,一次家庭的变故,一次职场不愉快的经历”,这些不在自己的计划内的变化也在左右着一个人的成长与发展。 我现在的方式是以技术为主,业务与管理并行,我就不相信敲代码到35就不行了,我要敲到60岁,70岁。

    作者回复: 👍💪 我觉得能一直敲代码有两个环境条件: 一是公司技术职业路径保障上升通道,二是团队技术氛围保障尊重和成就感。

    共 2 条评论
    15
  • 夜空中最亮的星
    2019-02-18
    走着走着,你发现头发掉光啦...... 好吓人啊 结合这篇文章,自测自己更偏向管理,但遗憾的是目前还是一名运维,😂

    作者回复: 哈,写着写着,成了恐惧片儿。 运维做好不容易,技术业务都要看,还要有条理。一边发展一边调整方向吧。

    14
  • 米Venus
    2020-03-14
    很感谢白老师的课,让我更加清楚自己的选择。分享一下我的经历,广而不精,仍然热爱这个行业,读完这篇更确定我是要做项目经理哒。 2010年硕士毕业开始入坑是因为不喜欢自己的专业电气自动化,反倒是大一学的C语言选修课一直念念不忘。 做了一年自动化测试,发现自己coding能力不足,也没那么喜欢深入,但是喜欢配置测试环境。 于是转了手动测试,手动测试做了一年,觉得手动测试没有价值感,工作中但是经常被同事拉着处理测试环境配置问题。 于是以为自己的兴趣点是技术支持,于是又转。技术支持又做了一年,期间生了孩子,又没有老人带,自己技术能力也不够,技术支持时效要求有很强,于是又转。 这次转的是产品反馈分析 (分析技术支持做的case, 为产品文档和后续升级做数据支撑。) 由于孩子小,这个岗位一下子做了4年,期间几次想升管理,领导以我带孩子风险大为由驳回。 想想其实从工作第二年(手动测试)就想转管理,一直想着这个行业做什么岗位都需要技术,但对技术实在没那么大的兴趣。现在年龄大了,做管理又没经验,需要系统提高,于是2017年考了PMP证书。 后面机缘巧合,其他部门在招项目协调员,前岗位的领导就推荐了我。也就是我现在的岗位,做了2年多了。 最近思考孩子大了,可以将更多精力转回到事业上了。就思考怎么才能从现在项目协调员达到项目经理?需不需要学习技术/产品(近期还学过云和Python)?需要提升什么软技能?如何准备简历?如何准备面试? (因为从工作经历来看将近10年工作换了好几个岗位,现在还是项目协调员这种基础岗位,会显得对自己认识不清,不够努力或者能力不够。) 通过白老师这篇文章,我努力检测每个岗位需求/特点,我自己符合和不符合的地方,前几次为什么会换岗位 (底层原因还是不够喜欢那些职位),发现我最大的特点就是有条理。真是太棒了,这坚定了我的职业选择,不会再迷茫,而是会分析项目经理需要的技能,自己哪些方面需要提高,加以行动。
    展开
    10
  • 行者
    2019-02-24
    我秃了,也强了。 要成为复合型人才,这样路才能走得更稳。

    作者回复: 👏 💪

    9
  • Eleven
    2020-01-21
    老师你好,我由于老家拆迁,离职休息了一年,再去工作怎么解释好一点?
    共 1 条评论
    8
  • -Helen怪物
    2019-02-20
    文章对管理的理解,给了我提醒;但是我还是希望能获得更多对于管理的方法、能力、实践的讨论!

    作者回复: 嗯,篇幅所限,管理部分没像技术和业务部分一样展开。更细致的技术领导力,可以看刘建国老师的技术管理实战36讲。

    7
  • Feng
    2019-03-08
    老师您好,这边重温这一章节的文字,个人收集到来自同事朋友的评价或者自身的职业人才测试,都偏向于业务;但是个人目前是技术岗位,对于问题会有好奇心,对事物保持新鲜感,但是更偏向于交互体验方面,技术是推动力,那么目前业务没有接触,基础不够的情况下,继续做技术,并且在过程中发展自己的综合能力是否是正确的选择呢,所有角色都很想像轮岗一样的,都体验一遍,迷茫的方向,体谅,同理心是个人测试出来的优势,但是没有找到那个准确的自我定位。与大家共勉
    展开

    作者回复: 谢谢分享。 稍微澄清一下,文中说的某个特质,并非那个职业方向独享,只不过比较而言,会更重要一点而已。 轮岗是个好方法,但是公司不一定允许。先把当前工作做好,然后基于当前工作,找找有没有关联到业务的工作,有倾向性的学习和接触下。当你表现出业务的能力时,老板就可以放心交给你更多业务内容的工作了。—— 还是要看你们公司的情况,允不允许这样的发展路子。

    共 2 条评论
    3
  • 井中月
    2021-01-23
    赤兔马这个梗,评论区居然没人点赞。
    2
  • Joseph
    2019-06-24
    老师你好,目前的我是一名工作一年的后台开发,平时对技术是有一定的兴趣,但仅限于它给我带来的便捷性,除了硬性要求了解底层实现,不然也不会刨根问底。平时对业务也有了解,但是时间有限,平时有接触就认真学习。这样的习惯导致我好像啥都喜欢,但是并不精通一个领域,您觉得对于像我这类人,该怎么调整?
    2
  • 高鹏0409
    2020-05-03
    后来人指着我的背影说,他变秃了,也变强了。
    1
  • 我在时光机里找回忆
    2019-07-17
    我还只是初级程序员而已。看了这篇文,才发现原来这些角色都可以深入。想做一个“有饥饿感”的普通人。加油!
    1
  • wadecha
    2019-02-24
    我以前一直以为自己一定会在技术路线上越走越远,后来才发现业务更适合自己,这次分享给我的感触很大,职业的每一个阶段都写清楚,走着走着头发就没了,这个很应景,哈哈,谢谢海飞分享

    作者回复: 其实只是脂溢性脱发。有效果的洗发水,多推荐哈。:-)

    2
  • humor
    2019-02-18
    初级程序员->中高级程序员->架构师->技术总监or CTO 程序员的一般成长路线大概是这样的吗?听说做了架构师以上的职位就不用写代码了,那做了技术管理之后,做程序员的时候学的写代码的技能还有用吗,比如计算机基础,算法,编程语言,中间件等,如果没有用了的话,那现在这些知识技能是不是就可以不用费脑子学习了呀~

    作者回复: 1. 这个路线只是技术路线之一,程序员也可以一直做下去,在深度上继续发展,比如我见过国外很多白头发的程序员写产品底层代码的。 2. 技术基础对技术管理者非常有用。没有实操就不能精准抽象,没有实感就缺少技术味道/嗅觉(scense)。和技术人的沟通、管理缺不了技术味道。否则就是外行管理内行了。 3.所以有的架构师也会亲自写关键代码,为的是保持技术味道。

    1
  • 腾挪
    2019-02-18
    我适合技术角色。从很小的时候接触到 WIn2k 时,就很好奇这东西怎么做到的,十几年依然保持着对技术的兴趣。很多技术人都希望发展成为“T”性人才,既有技术深度,也有技术广度,保持技术钻研的热情和对新技术的敏锐嗅觉。撸起袖子加油干,我还是一个小白😏~

    作者回复: 技术是推动力!加油!

    1
  • 苏成
    2022-06-07
    总结: 目前来看,自己比较适合技术和管理方面,喜欢技术,喜欢研究底层的原理然后进行应用,平常做事喜欢仅仅有条,还没工作目前的打算是主攻技术,也希望一直可以在技术这条路上越走越远,在工作之中如果有管理的机会主动承担,锻炼自己,积极尝试
  • andy
    2022-05-12
    正在秃顶的路上,当然,我也会想办法不要走到那一步
  • James
    2021-07-24
    国内中小公司还是技术业务都要。。
  • Richard
    2020-12-06
    1.好奇心有,专研劲不足,因为有太多事情要做 2.同理心有 3.调理性有 感觉大多数人是复合型的吧
  • 连边
    2020-10-22
    老师的文章是值得二刷的,那么问题来了,请问你用的什么工具画的图?