程序员的职业规划之路

前言

作为一名IT从业者,一直有在思考并规划自己的职业生涯,曾经因为讨厌数理而放弃过编程,而后又因缘际会的重新走上了IT研发道路,沉下心来每天垒代码的日子其实是可以十分享受的,思维的乐趣和解决问题的成就感持续了一段时间后,逐渐开始温水煮青蛙了,仿佛可以满足于一项开发技能重复N年的感觉,于是再次坠入了恐慌,恐慌的是自己仅限于用技术去思考问题,用一门语言去解决业务需求,尽管产品设计上还有缺陷,尽管功能模块还能更加编排的合理,但是自我满足了,看着自己写在这个产品上的几千行code,似乎没有任何的改进的想法,一到交付完的日子就端起手机和小说,这是很危险的状态,对现状不满,但职业不知道该如何发展?业余时间较多,不知如何充分利用?一线城市压力爆棚,该何去何从?

回顾现实也很残酷,尤其是每天的上班似乎过于被动,其实生活中的痛苦,有 90% 都可以通过钱来解决。前提是:你的价值能够不断提升,赚钱速度超越需求膨胀。消除了这些痛苦,幸福感就有生长的环境,就不那么容易被淹没。而赚钱的本质是什么呢?可以看这张图:

收入方式:
程序员的职业规划之路

从这张表里,可以看到对于时间的利用效率,根据收益来说有的是单次的、有的是可复利的,从时间上来说有的是长期的隐形的,有的是即时变现的。

一、技术方向的选择

程序员的职业规划之路

技术领域内的成长,基本上都会经历三个阶段:

1. 专项能力的提升

选择一门语言进行软件开发,初级阶段1-3年

2. 技能体系的构建

建立自己的知识体系和图谱,丰富技术树,面对专业问题能独立思考并解决,这个过程可能2-3年

3. 融合创新

原文作者说的太好了,直接引用

这个阶段遇到问题,不再从下而上去思考(即从技术实现细节来考虑问题好不好实现、拿技术去裁剪问题或重定义问题),而是从实现细节跳脱出来,站到更高的层面,自顶向下去思考、去分析,先运用框架、逻辑去分析真正的问题是什么、问题的目的、问题的现状、如何去解决。搞明白这些之后,你才会沉降到技术层面去考虑实现的选择,而且实现时,你也不会拘泥于某种技术,而是什么技术合适就用什么技术(你的目的不是“用 Java 或 Redis 解决问题”,而是“解决问题”)。简单说,就是你走出了被技术束缚和塑造的过程(前两个阶段),可以反过来回到问题本源来思考了。

就本人的实际情况而言,正在努力构建自己的知识树,丰富技能体系,可以依照两个原则:
1. 相近原则
它是指和你当前所用语言、技术框架比较接近的其他语言和框架。比如学了java,可以将并发上更有优势的go语言再掌握掌握,提高对高并发场景的解决问题的能力。
2. 互补原则
指那些能够组合在一起完成特定任务的技术。比如静态语言做核心业务开发,java即可,而动态语言负责编译流程、自动化部署、系统资源监控、日志分析、非核心业务处理、测试工具等工作,这个选择python就不错。
还有一个“卡位”思维
简单来说就是 趋势预判、持仓潜力股,能够提前看到市场在未来几年的红利和缺口,提前进行布局,学习将来会稀缺的技术,积极主动去探索。最好每年给自己定一个学习某种新技术的目标,在工作之外完成它。要实现这种过渡,比较现实的策略是:一边工作,一边学习。现在很明显的趋势就是VR,大数据,AI和区块链。这样的主动出击也是避免自己局限成为一个语言开发者,“拿着一把锤子看什么都是钉子”,只想用自己熟练的语言、技术来解决一切问题。

一般来讲,学习一门技术时,有三个阶段:

  • 第1阶段
    基础开发,了解 API,基于 API 开发应用。
  • 第2阶段
    熟悉内核及原理,主要是了解框架的设计原理,阅读源码,洞悉内在机理。
  • 第3阶段
    优化框架,主要是针对框架已有功能的不足进行完善、优化,或者使用框架提供的机制扩展框架功能,或者对框架进行定制,让它适合特定情境。

并不是每一门语言都需要到达第三阶段,根据自己的知识结构和 “ T ” 型发展路线,来选择深入的方向和需要铺开的技术面。

二、技术上的持续精进

刚开始工作的时候,新手对什么都保持着新鲜感,学习和接收新鲜事物的能力都比较快,但是一旦上手或者熟练自己工作内容以后,慢慢的进入了舒适圈,可能就会变得比较懒惰而不太愿意去挑战自己、走出舒适区。伴随而来的无聊、困惑、迷茫,进而丧失前进的动力,变成了“差不多”先生,成为办公室的老油条。身边就有很多这样的例子,满足于写业务代码和实习的开发,一旦活儿干完就掏出手机或者上网,谈不上技术的精进。这是一种危险的状态,要让自己走出来。有以下几个可以持续考虑提升的点:

1. 项目优化上

比如在项目上,很多开发者其实不太关心交付时间、Bug 率、冒烟测试通过率、并发用户支持、内存占用、CPU 占用、电池消耗等问题,往往是做完了,能跑,觉得就可以了。以这样的态度来应付开发任务,其实损失最大的是自己,因为你白白失去了锻炼和提升的大好机会。如果以项目指标来要求自己,把项目指标分解到开发工作中,并且在开发过程中贯彻执行,收获一定比被动完成任务多得多。

2. 参与开源项目

参与开源项目比阅读开源代码的要求高得多,你要能够理解已有的代码,找到你可以做贡献的地方(issue、feature 等),你的代码要符合该项目的规范,还会被项目 owner 或其他成员 Review,这些都是非常大的挑战,能让你快速成长。

3. 进行输出

写技术博客有利于写作、逻辑思考、讲授、设计等能力的提升,也有利于系统化你的知识。最好的学习方式是输出。讲给别人听,锻炼讲授、演讲、沟通、归纳总结、逻辑思考等能力,对知识的内化与系统化也很有帮助。当你能够把一个知识点讲到别人也能听明白时,你就是真明白了。

养成技术领域的4个精进的习惯

1. 对标管理

专业领域成长的三要素:
程序员的职业规划之路

这原本是用于企业管理的方法,同样可以延伸到个人管理身上,我们可以这样的去思考:评估工作现状、所用的技术、技术水平、薪水多少、职级、是否被领导认可、与人协作是否顺畅……有很多维度。这些问题都可以回答并写下来。
然后再思考自己的目标,因为我们过去的目标很可能随着旧目标的达成而消失,或者随着日复一日的编码、Debug、交付而褪色,或者随着每个月的薪水蒸发掉。一旦我们失去目标,就会陷入迷茫,被动工作,进而慢慢失去竞争力。
所以,要想日有寸进,必须要在日常的开发工作中找到努力的目标。这非常关键——很多人就是因为没有目标而放任自己随波逐流、被动工作,最终变得庸常而被组织淘汰。但是如果我们找到目标,对比现状,就可以找到差距和前进方向,有了方向,就可以制定计划,稳步前进,获得提升。

程序员的职业规划之路

2. 三个问题

参考《Scrum 实战——敏捷软件项目管理与开发》一书,在 Scrum 开发模型中,有个每日站会。每日站会一般早上开,站着开(坐下来会让会议变长),用时10到15分钟。在每日站会上,每个人都要回答三个问题:

  • 我昨天完成了什么。
  • 我遇到了哪些问题。
  • 我今天做什么。

回答完这三个问题,就可以更新看板上的任务状态,别人也都能了解到你的状态,如果有需要配合的,也都可以即时做出决定。这三个问题,不仅可用于开发过程,还可演化成个人的工作习惯,指导我们每天的工作。实际上我们每个人都可以据此来指定自己的一套总结和计划模板:

  • 到晚上睡前记录一下自己完成了什么、遇到了什么问题、明天准备做什么。
  • 每天早上正式开始工作前,根据昨天的总结情况来决定今天要做哪几件事(最好不要超过三件),今天就聚焦在这些事情上。

3. 刻意练习

推荐仔细阅读《刻意练习》一书。我们可以把刻意练习简单地理解为4个要素:目标、Focus、Feedback、Fix it

  • 目标,每一次练习,都要有明确的目标,而且这个目标要高于你现在的能力,需要跳一跳才能够得着。个人对标管理法可以帮助你找到练习的目标。
  • Focus,指专注地做事,所谓专注,就是方向明确,聚焦当下,心无旁骛,积极努力。
  • Feedback,指反馈。我们在练习时,需要有高人陪伴,需要找到教练,能够及时给予我们准确的反馈,让我们知道差距。
  • Fix it,指修正,改善。当我们获得反馈后,要根据反馈来改善自己的做法,这样才能进步。

程序员的职业规划之路

4. 复盘

参考陈中所著的《复盘:对过去的事情做思维演练》和成甲的《好好学习:个人知识管理精进指南》
所谓复盘,就是在头脑中对过去所做的事情重新 “ 过 ” 一遍。它通过对过去的思维和行为进行回顾、反思和探究,实现能力的提升。

塑造自己的核心竞争力

能力金字塔模型:
程序员的职业规划之路

资源,对于程序员来说可能就是编程技能,还可能是知识,人脉和金钱等等,具有显性的,外在的可考察的特征。
所谓应用流程,指的是解决问题的方法、思维的框架、分配资源的方式、自我管理的模式等。

应用流程,内在的,容易被人忽略,但它却是解决问题的真正能力,当你拥有应用流程能力之后,才能很好地利用资源来解决问题,创造价值。放在开发者身上,自主学习、逻辑思维、数据分析、价值判断、优先级排序、框架设计、想象力等能力,就是应用流程方面的能力。应用流程这类能力,是可迁移的能力,是核心竞争力。有了这些,你才能快速地学习新知识新技能,才能更好地整合自己的知识、技能来解决实际的问题。
所以在工作当中,需要多多的去抓住应用流程领域,多去刻意练习这些方面的能力。

价值观指的是,你觉得什么是重要的,你要什么、不要什么、如何做决策。一个人的行为价值观,是其最根本的能力。价值观决定了你在哪个方向做、以什么原则去做。没有价值观,你就会像浮萍一样,东飘西荡,很难做出有长远意义的选择,就很难形成有效的应用流程,也很难积累能被社会感知的资源。

软件开发有两个层次:体力化的代码打写(编码)与思考层面的创造。现在流行说软件开发是吃青春饭的,其实更准确的来说就是太多人仅局限于第一层次上的体力化编程阶段,缺乏持续的去思考和锻炼更高维的能力。

软件开发的层次:
程序员的职业规划之路

三、技术管理之路

常见的5大职能定位:

  • 专业技术者
  • 自由职业者
  • 管理者
  • 创业者
  • 投资者

常见的技术管理者类型如下:

  • 技术主管(经理)
  • 项目经理
  • 研发部门经理
  • 研发总监
  • 研发副总裁
  • CTO

从技术走向管理的路线通常有:

  • 技而优则管。
  • 从打杂到管理。
  • 从大公司跳入小公司。
  • 获取PMP证书,切换到有需要的环境。

1.技而优则管

技术能力很强,在某些技术方向上有深厚的积累,能够解决复杂的问题,在项目中做出了成绩,那么你往往会被领导注意到,会让你带一些新人或者不如你资深的同事。这是走向技术管理的发端,第一步。

你带人带得不错,小伙伴们跟着你能够快速成长,你就可能被安排带项目,带着你的小伙伴一起做项目,此时你因为技术能力强,又有带人的经验,一些项目管理、人员管理的事情就会由你来完成。这是走向技术管理的第二步。

当你带着一个小团队,完成了项目,并且结果还不错,符合领导的预期时,你就在领导那里留下了“某某可以带团队做管理”的印象。如果你持续带人、带项目,就会不断加强领导心中的这种印象。

最后,若有做管理的机会,你就会顺理成章成为技术经理或研发经理。

2.从打杂到管理

要打破一个错误观念:技术管理者都是技术大牛,只有技术出众才能领导众人。真正决定你是否能做好管理的,并不是技术是否出色,而是你是否能把杂打好,即:

  • 能否准确传达需求并分配任务
  • 对项目组成员足够了解,并进行因材施任务
  • 协调各种资源,确保项目进展的顺利
  • 开会,培训以及组织活动

如果决心要走管理路线了以后,那么开发做到一定程度,跳出你的职责范围,不要怕麻烦,从打杂开始,走向技术管理,也是一条现实可行的道路。

作为开发者,要想转向管理岗位,如果你的技术能力卓越,远超他人,那么你有极大可能通过“技而优则管”这种方式自然而然地走到管理职位;如果你的技术能力一般,就必须努力通过别的方式让别人(尤其是领导)意识到你是有管理能力的,这种方式就是跳出职责范围去打杂、去为领导分担他不愿做又必须完成的工作。

技术转型的路线:
程序员的职业规划之路

3.从大公司跳入小公司

在大公司工作,技术能力卓越的人很多,打杂打入化境的人也很多,如果不是特别优秀或机缘巧妙,就很难有出头之日,想成为管理者非常难。转换下思路用大公司的大平台为自己背书,跳到小公司做技术管理也是不错选择。

4.获取 PMP 证书

考取 PMP 资格证书。
在实际开发工作中,把自己放在项目经理的角度上去看待项目,使用 PMP 的理论、方法、工具等来复盘所做项目的管理过程,提升项目管理能力。

5.机会青睐于有准备的人

要成为有准备的人,关键就在于:你还没负责某事时,就做好了相关的方案;你还不是某个角色时,就准备了它所需要的能力。因此也可以这么说,不是当了管理者才做管理者的事情,而是在成为管理者以前就已经具备了管理者所需的能力。

要在工作中发现管理相关的机会,关键在于你要跳出工作内容和岗位职责的范围,放眼全局来思考。分三个方面:
第一方面,是产品或项目本身,多想想自己要做的软件到底要解决什么问题,给用户带来什么价值,为什么要做成这个样子,它是怎样被用户使用的;
第二方面,是工程实践,思考整个项目,从立项、需求、开发、测试、交付、运维、项目生产工具,分析哪个环节做得不好,哪个环节改善之后效果可以被看见,主动去做这些事情,主动成为衔接不同环节、不同人员、不同部门的桥梁;
第三方面,发现领导的目标是什么,他看重什么,他在为什么困惑,自己能不能帮到他,因为从某种意义上讲,你的工作,就是为了让领导的工作更顺利,你的工作目标,就是实现领导的目标。

义无反顾地跳出职责范围,抓住各种可以做事的机会,锻炼自己管理方面的能力。具体来说就是可以从4个方向上去努力:

  • 1.站在项目管理角度看问题
    站在项目管理角度看问题,琢磨现在的项目是怎么管理的,有哪些问题,怎么改善。给自己定一个目标,争取每天挑出一个问题来琢磨解决之道。
  • 2.主动承担与组织、协调、沟通、管理相关的事情
    比如组织会议、跟踪计划、分派任务、推动多干系人协作等。这方面如果你有心,就会发现很多可以发挥的机会——因为大多数开发者都嫌麻烦,不想把事情揽在自己身上。
  • 3.从技术管理角度考虑问题
    站在管理者的角度思考,向身边的管理者学习,复盘身边的管理者,看他们哪里做得好、怎么借鉴,哪里做得不好、怎么改进,设想如果自己是管理者会怎么做。
  • 4.找一位职业楷模
    假如你想成功地走向技术管理岗位,自己学、自己琢磨是一方面,另外还有一个非常重要的提升途径:在组织内找一个从事技术管理岗位的人作为自己的职业楷模。寻找这样的职业楷模时,要考虑他实际的管理水平、团队的状态、他个人的行事风格是否与你的价值观相符。他一定要是你想要成为的那种人。

四、关于跳槽的几点

1、首先要想清楚目的,为什么需要动,这个目的和动机需要从长远上有益。为什么跳槽、你在追求什么,它们就可以作为你选择新工作的标准。

2、什么时机跳槽比较好?
“‘金三银四’跳槽会好一些吗?”“六七月份是不是不好找工作?”“年底想换工作,是不是很不明智啊?”
我们是先有了跳槽的想法,才有了时间选择的问题;而不是因为时间到了,才准备跳槽。从这一点上看,跳槽的最好时机就是:你觉得真的该离开了,一天也不愿意再待下去了。

3、什么是好的跳槽和坏的跳槽
考虑清楚自己的职业目标,划分几个时间尺度(1-2年的短期,2-3年的中期,4-5年的长期)。定期审视、更新自己的规划,即便处于一个安稳的环境,也要考虑——“3年之后我在做什么”,这样才可能避开随波逐流的职场大坑,把你自己的成长目标融合在工作目标中,积极主动地去工作。
如果方向感强烈,每次跳槽,都沿着职业目标进行,就是好的跳槽。反之,绕开了目标的都是在背离方向,不能算是一个好的选择。去看《通信十年》,作者作为一个在通信领域工作了十多年的专家,决心跳出衰退的行业走上管理咨询道路,转型期所做的职业规划非常值得学习。

好的跳槽:
程序员的职业规划之路

【一位小米前员工的财务告白:期权如何处理让我纠结】有的人以不断跳槽获得了最优结果,但并不是每个人都有赶上时代与公司风口的洞察力,或者是运气,如果频繁的跳槽或者追逐浪潮,从长远上来看也是没有在一个方向上持续的精进效益大。再比如参考曾宪杰的案例,也可以看到,虽然也有多次跳槽,但是品牌和核心竞争力的塑造是在淘宝的黄金7年度过的,两者也构成了一个鲜明的对比。

跳槽容易陷入追薪的短期盲目行为,没有看到长远方向上的一个持续积累;而卧槽则容易陷入温水煮青蛙的安逸享乐,经验重复而停止生长。

持续性积累非常重要。追薪式的跳槽不可取,不管是跳槽还是卧槽,我们都要以自己能否在某个方向建立积累为原则。符合你职业目标的跳槽,能持续为你在某个方向带来积累,能让你的职业生涯更上一个台阶,就是好的选择。

《程序员的成长课》

来源

作者:YitaiCloud
链接:https://www.jianshu.com/p/7af47a140dc2
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!