前言
花了一周多的时间阅读完了《程序员成长课》,以下是我们在阅读《程序员成长课》记录下来的笔记,有时候发现一个人学习比较枯燥,但幸运的是,我有一帮朋友和我一起学习,一起成长。
最后欢迎大家加入知识星球“大前端交流”,我在星球内开展了读书打卡、健身打卡活动,加入我们一起见证属于我们的成长之旅。
如何选择技术方向
技术成长三阶段模型
我们在一个专业领域内的成长,基本上都会经历三个阶段:
- 专项能力的提升
- 技能体系的构建
- 融合创新
1、初级阶段:专项能力的提升
必须先具备某些基础能力,比如从事软件开发工作,要学会某种语言、某个IDE、某种技术框架。
让自己能够迅速搞定一些别人安排给你的事情,体现出你的价值。
2、中级阶段:技能体系的构建
拥有一组技能,围绕某个方向构建了自己的知识图谱,能够用自己的方式来解决问题。
3、融合创新
具有丰富的实践经验,具备了T型知识结构,形成了自己的思维框架和解决问题的框架,能够融合不同领域的知识,组合各种资源,创造性地解决各种问题。
进入这个阶段非常重要的一种标志就是,你遇到问题,不再从下而上去思考(即从技术实现细节来考虑问题好不好实现、拿技术去裁剪问题或重定义问题),而是从实现细节跳脱出来,站到更高的层面,自顶向下去思考、去分析,先运用框架、逻辑去分析真正的问题是什么、问题的目的、问题的现状、如何去解决。搞明白这些之后,你才会沉降到技术层面去考虑实现的选择,而且实现时,你也不会拘泥于某种技术,而是什么技术合适就用什么技术。
选择技术方向都要考虑哪些因素
1、就业机会
考虑的是哪种技术更容易就业,需要结合特定地区、特定行业来看,因为你找工作是面向地区和行业的。
这中间又有两种典型的策略,热门的和冷门的。
热门和冷门是相对的,根据开发者多少、市场需求而定。
2、自我感觉的难易程度
难易程度与人相关,所以最好的方法,就是把你感兴趣的语言,都学学试试,可能每种语言花上一到两个星期,你就可以做出判断。
3、兴趣
很多人做开发可能是出于某种兴趣。
4、薪水高低
大多数人选择技术的出发点是工作和未来发展前景,而选择工作时一定会把薪水作为参考因素,而且是非常重要的因素。所以我们在选择技术时,也可以考虑某种技术对应职位的薪水高低。
5、技术在将来的发展前景
选择技术时存在两种考虑:一种是选择稳定的、经典的技术,一种是卡位将来的市场缺口,选择将来可能需要用到的技术。
回顾历史,经典技术都是从新技术发展来的,展望未来,一定也有一些现在的新技术会发展成将来的经典技术。如果你能抓住它,就可以享受它带来的技术红利。
要抓住可能成为经典技术或热门技术的新技术,就要应用卡位策略。
卡位策略是指看到某种技术会在未来具有稀缺性,非常有价值,选择提前介入,让自己在未来具备竞争优势。
运用卡位策略时,有两种方式。
一种卡位方式是根据市场需求和未来预期。
还有一种卡位方式,是根据技术本身的发展程度。
6、你接触的人的推荐
我们是否选择某种技术,和我们看到的可能性有非常大的关系。只有看到它,它才会进入你的选择范围,如果你看不到它,它再牛,对你也没意义。
7、相近性
当我们已经掌握了一些技术,要学习新技术时,就可以根据一种技术是否和自己已经掌握的技术比较接近来选择。相近的技术,学起来会更容易上手。
8、互补性
和相近性类似,互补性也常用在拓展我们技术能力的情景下。它指的是,有一些技术可以和你已经掌握的技术互相补充,组合在一起,形成更完整、更系统的技术图谱,给你带来更大的竞争力。
9、团队的技术图谱
我们所在开发团队的技术图谱,也可能会影响我们的选择。
入行时怎么选择技术方向
为了明确自己的求职目标,可以问问自己下面的问题:
- 在哪个城市工作
- 想在哪些行业、领域发展
- 想去什么样的公司
- 想做什么产品
当你能够勾画出工作目标的大概轮廓时,对应的技术方向就会浮现出来。
当你可能在想做开发时并没有明确的职业目标,此时你考虑的是这些因素:
- 就业机会
- 薪水高低
- 难易程度
- 他人推荐
- 兴趣
构建技能树时选择技术方向
当我们过了专项能力提升的初级阶段之后,就应该开始构建自己的技能体系了。在为搭建技能树而选择技术时,通常考虑下面两个原则:
- 相近原则
- 互补原则
1、相近原则
相近原则指和你当前所用语言、技术框架比较接近的其他语言和框架。
2、互补原则
互补原则指那些组合在一起完成特定任务的技术。
技术转型时的方向选择
做了几年开发工作之后,你很可能会面临技术转型。通常有两种情况:
- 有新技术、新市场出现,你想试试
- 你掌握的技术的应用场景萎缩,前景黯淡,你想跳出来
有经验的开发者做技术转型时,通常有三种情况。
- 在原有技术的基础上做关联转型
- 抛弃原来所用技术
- 卡位,学习将来稀缺的新技术是非常不错的选择
方案选型
当你构建了自己的知识图谱、能够胜任比较复杂的工作后,在团队中就会越来越重要,就有机会参与到新项目、新产品、新服务的方案选型中来。
做方案选型时,目标是得出现实可行、成本可接受的方案,需要综合考虑各种因素。
1、某种技术适合解决某类问题
很多开发者容易犯“拿着一把锤子看什么都是钉子”的错误,用自己熟练的语言、技术来解决一切问题。
我们在为新产品、新服务、新项目选择技术方案时,一定要跳出自己已经掌握的技术,首先站在问题域去考虑,想想这个问题到底是什么、哪种技术更适合问题场景,这样才能选择好方向,后期开发、维护才会更顺利。
2、新技术的成熟度
做技术方案选型时,一定要考虑这种技术有没有顶级公司支持、有没有知名产品。
3、生态
4、团队的技术图谱
我们做方案选型时,也要考虑团队已有的技术积累。
5、技术引入的成本
引入一种新技术的成本,包括:
- 学习成本
- 招聘成本
- 时间成本
- 机会成本
如何在技术上持续精进
开发者的迷茫分两个层面:
- 方向上的迷茫,即自己到底是否做开发,是否要继续在开发的路上走下去。
- 执行层的迷惑,即自己继续做开发,该怎么找目标,学点什么,学到什么程度,如何能持续精进。
做开发还是转管理
有三种方法可以帮助你进行判断
- 工作的三种维度
- 未来的样子
1、工作的三种维度
根据交互对象不同,工作可分为三类:
- 数据和信息处理
- 人际交互
- 事务型操作
假如你发现自己更愿意围绕着人际交互来做事情,希望自己的工作中大部分时间都在和人打交道,那么你可能更适合做管理、销售、市场、客服、咨询等方面的工作。
假如你发现自己更愿意做操作性的工作,比如修理电脑、组装电脑、搭建局域 、修理汽车等,那么软件开发工作可能不太适合你,运维或者 管也许和你更匹配。
假如你觉得信息很迷人,很享受与信息和数据之间这种确定性、一致性、可预期性较高的互动方式,也很享受通过组织、修改、整合、创造信息来解决问题这种工作方式,那么你现在正在做的开发工作,基本上和你的偏好是吻合的,因为开发者偏重于和数据、信息打交道,以信息和数据为输入,也以信息和数据为输出。
- 回顾你做过的事情,找出那些让你情感反应强烈的,记录下来。
- 分析你的情绪底色,是快乐、高兴、振奋、愉悦、充实等积极情绪,还是沮丧、灰心、挫败、失落、空虚、失望等消极情绪。
- 挑选出带给你强烈积极感受的事件,它们就是你的成就感事件。
- 分析成就感事件,看看它们用到了什么知识、技能、软技能,看看在这些事件中,你印象深刻的交互对象是什么(数据、人、事务)。
3、未来的样子
问自己两个问题:
- 一直做开发,我会变成什么样子
- 如果转向管理,我会变成什么样子
找到激励你前进的动力
从倦怠期走出来,有两个方向:
- 为你的工作重新赋予意义
- 为你的工作引入变化
做软件讲究迭代,讲究热更新,我们个人也是一样的,要不断自我探索和更新,找到技术在不同阶段对自己的不同意义,只有找到开发工作对个人的意义所在,你才可能有动力去精进。
学习型心态
所谓学习型心态,指的是:有主动学习的意识,时刻以学习的眼光和心态来看待发生在自己身上的事情。
技术精进之道
1、对标管理法
对标管理法模型中有三个要素:
- 现状
- 目标
- 执行计划
要想日有寸进,必须要在日常的开发工作中找到努力的目标。
下图是实践对标管理法指导个人成长的基本过程。
角色转变
从技术岗位晋升而来的管理者,在他们刚开始做管理工作时,往往会顶着管理者的头衔做执行者的事情。
可能经常会拿自己的技术水平衡量团队的其他人,当一个技术领导因为担心下属会出错或不能按自己预期完成任务而收回这个任务自己做时,会让下属自己觉得自己无能,或是让下属觉得这个领导越俎代庖不干他该干的事,这就会产生严重的不良影响,不利于团队成员自己成长、自己解决问题。同时,这位技术领导也会因为过分关注技术细节而忽略其他的组织、领导工作,导致“只见树木,不见森林”,严重影响整个团队的效率和生产率。
技术管理者,除了管理自我之外,还要管理他人。团队需要你做规划、定目标、跟踪计划、协调资源,他人更需要你辅导而非代替他们做事情。
谨记,一定要把更多的精力放在人、流程、项目上,你的工作是保障别人的工作能够顺利开展,是创建一个可以让大家各尽所能、实现团队目标和个人成长的环境。
要顺利完成角色转变,下列事情可能有帮助:
- 和你信任的同级别小伙伴多聊聊
- 阅读,多读领导力和管理方面的书籍
- 培训,根据你所处阶段,持续接受适合你状况的领导力和管理技能培训
- 导师
被动管理
刚上任的技术管理者往往还习惯于做具体的事,把大部分精力放在设计、编码、解Bug等具体工作上,只留少部分时间和精力给管理,有问题了才需要管,没问题则不用管。
这种被问题驱动的管理方式,就是被动管理(消极管理)。
管理者应该以积极、主动的态度实施管理。
对一个项目、应该在前期花费更多的资源,明确任务的目标、资源、时间、反馈机制、沟通方式、风险、制定相应的计划和应急预案,同时在实施计划的过程中周期性地采集状态,根据项目状态动态调整计划,及早解决各种问题,确保所有项目参与者和干系人步调一致,最终顺利交付。
对一个人,应该在工作中经常性地和他沟通,无论是工作上还是生活上的事情,都要有所了解,要了解他为什么在这里工作,要帮助他制定成长计划,要让他感到自己是特别的、被重视的,让他愿意在这里工作。
弄不清职责
要想尽快搞明白你的职责,下面几个策略可以帮到你:
- 与你信任的、有经验的其他同级经理多聊聊。
- 和你的上司多沟通,
- 和支持部门(人事、行政、财务等)多沟通。
委派任务
要想比较好地委派任务,需要做到以下几点:
- 了解项目目标
- 做好项目任务的分解
- 了解团队成员的技术能力和个人意愿
- 分配任务时,遵循两方面的原则,既要让某位成员做其擅长的,还要给他一些超出能力范围带些挑战的;既要给某位成员他愿意做的任务,也要给他一些他可能不是特别乐意做的任务。
- 以交付为目标,以人人满荷为策略,统合不同成员的任务关系。
目标管理
作为技术管理者,首先要和自己的上级沟通团队的目标,然后再把团队目标拆解到每个人身上,形成个人目标。
资源管理
管理者的一个重要工作是保证下属能够开展工作,不要让任何资源阻碍开发者开始工作。
关于开发或者测试所用的资源,协调不来往往有客观原因——没钱、要审批、等待发货等等,但如果管理者不想办法尽快解决,不但会产生很多隐形浪费,还会大大打击开发者的积极性。
还有一种无形的资源——开发者的时间,也需要好好管理。这方面需要提醒几点:
- 不要把开发者的时间排满,到70%就可以了。
- 安排工作时不要把加班时间计算在内。
- 要遵循串行工作的原则,不要给一个开发者同时安排多个任务。
- 如果必须给一个开发者安排多个任务,也请做好时间规划。
压力管理
管理者要尽量避免用消极的行为应对压力,要努力积极地面对压力,勇于承担责任,一切以解决问题为目标。
可以从两个方面进行压力管理:
- 换个角度看问题
- 宣泄
冲突管理
作为管理者,冲突处理是必修课,只有恰当地处理冲突,才能维护关系健康,促进团队合作,塑造团队文化。当你再次面对冲突时,一定要先停下来想一想:
- 冲突的原因是什么
- 自己准备用哪种方式处理冲突
- 还有更好的处理方式吗
这样有助于你用恰当的方式解决冲突,避免给团队造成严重的不良影响。
绩效变差
从技术岗位晋升到管理岗位后,你往往是不能胜任工作的,在上任后到那个绩效评估周期内,你所得到的结果,大概率是比你做普通员工时差。
面对这样的时刻,你肯定会有情绪,这是自然反应,可以理解。但在情绪过后,你应该换个角度来看:其实技术领导岗位上,你是从0开始的,有一个爬坡曲线也是符合逻辑的。
担心失去技术竞争力
技术管理新人会陷入纠结中,一方面想提升整个团队的工作效率而不得不做很多的组织、激励、领导、协调等工作,另一方面,这些非技术方面的工作会占用他们大部分精力,导致无暇深研技术而产生焦虑感。
其实,此时更重要的是视野。你可能对技术细节了解得少了,但对技术方案选择、技术类别、技术的影响力等可能了解得更多,会形成更为广阔的视野,这足以弥补你在技术深度上的欠缺。而且,其实你之前达到的技术深度仍然存在,甚至会发酵,反过来滋养你的技术视野。
有效到反馈机制
有了反馈机制,就可以知道自己做得怎么样,哪些地方好、哪些地方坏,找到改进的方向。
在构建反馈机制时,可以从4个维度来考虑:
- 自我评估。这里有两个方面,一是项目评估,二是关键目标分析。
- 来自下属到反馈。
- 来自同级到反馈。
- 来自上级到反馈。
别人到议论
无论你做什么事情,都不可能符合所有人利益,总是有人会议论,为此而战战兢兢实无必要。
和下属进行一对一沟通
- 在开始时阐明目的,为沟通定调
- 分享事实经过和你的想法
- 征询对方的观点,鼓励对方作出尝试
注意在谈话过程中要保持尊重,不要批判对方的人品,不要随便打断对方的说话,不要随便批判对方的话。
怕犯错
其实犯错也是一种成长,没有犯错就很难成长,把错误当作练习和机会,错误就可能变为财富。
要想少犯错,从犯错中成长,请记得以下几点:
- 勇于承担责任。
- 时刻牢记公司目标、团队目标、项目目标。
- 因人而异进行管理。
- 重视思想和认知到改变。
- 建立反馈机制。
- 善用清单。
- 复盘。
时间管理
时间管理的重点就是:管理下属占用的时间。
管理下属占用的时间,重点是交办与授权。
激励他人
薪水是我们找工作的保障因素,是显性到,那些激励因素(有挑战性、获得认可、责任感、成就、个人成长)则是隐形到。
管理者如何创造隐形价值,可以从以下几个方面进行改善。
- 了解员工为什么在这里工作
- 让每个人都有参与感
- 改善分配工作到方式
向上管理
向上管理指为了给公司、给上级及自己取得最好到结果而有意识地配合上级一起工作的过程。
提升领导力和管理能力
领导的职责就是创造这样一个环境,每个人都能在其中发挥出更多到能力。
跳槽8问
回顾以下工作中让你感到不能接受的事情,一一列下来,形成一个“不能接受”清单,对清单中的每一项问三个问题:
- 我不能接受它是因为什么
- 我愿意因为它离职吗
- 采取哪些措施,可能会消除这一项
把你不愿意因为它离职的、可以通过做点什么事情来消除的事情,都从不能接受清单上划掉。重复做这一步,直到清单只有三项,那就可能是你离职的直接原因。
你如果因为无法忍受某些事情而想离职,那么一定是这些事情触动了你内心的某个原则或你认为很重要的东西,你认为很重要的这个东西,就是你的需求,也就是你的职业价值观。我们需要把它找出来,这样就把离职这件事彻底想明白了。
什么时候跳槽好
跳槽的最好时机就是:你觉得真的该离开了,一天也不愿意再待下去了。
有四种方法判断你自己是否真的该离开了:
- 消耗感
- 周末探视法
- 盖洛普的Q12
- 需求供给分析法
消耗感
你留在这个地方,一直用已经熟悉的技能、方法被动地完成事情,不再有成长,你处在营养流失阶段,一点点被消耗。
周末探视法
在周日的晚上,想到周一要去工作,你的心情是:沮丧、拒绝、低落、痛苦、担忧,还是期待、高兴、兴奋、还是无所谓/p>
盖洛普的Q12
盖洛普的Q12可以用来测试你对当前工作环境的满意度。12个问题如下:
围绕着这个核心,我们的简历优化可以分为下面几步:
1、明确你想要的工作特征
2、盘点你的价值和亮点
3、寻找机会
4、招聘信息分析
5、简历优化
明确你想要的工作特征
当我们更换工作时,心中都有期待。你对工作的期待,就是你希望这份工作具备什么特征。
只有你明确了对工作的期待,找到了你想要的工作必须具备的特征后,你才能有选择地、有效地寻找工作。
可以从两方面找出你想要的工作特征:
1、你想要什么样的工作
2、你对当前工作有什么不满
盘点你的价值和亮点
找到你的价值,对自己有个客观的认识,这对你撰写自己的简历非常有帮助,也是找到理想工作的关键所在。
个人的商业价值体现在5个方面:

对开发者来讲,在简历中,通常会重点体现知识、技能、经历这3个方面。
在投递简历时,可以优先考虑人脉推荐的方式,它的成功率是海投简历的好几倍。
寻找机会
寻找机会可以分为四步:
1、分析可能的职位
2、确认哪些公司提供这些职位
3、了解公司和职位信息
4、确定自己感兴趣的公司和职位
招聘信息分析
要想让你的简历在3~5秒的时间内抓住目标公司筛选人员的眼睛,就必须要细致入微地研究招聘信息。
一份好的招聘信息应该包括:工作内容、工作收获、工作成就、工作伙伴、工作认可与奖励、任职要求。
可以从6个方面提取招聘信息中的关键字:
- 学历
- 工作年限
- 知识
- 技能
- 项目经历
- 软能力
分析目标职位招聘信息的过程,逻辑上分为两步:
1、拆解关键词
2、对照自己的价值筛选匹配点
简历优化
当你筛选出招聘信息中和你匹配的关键词后,就可以有针对性地优化你的简历了。
简历优化主要分为两部分:
1、技能评价栏
2、项目经历
「技能评价栏的优化」
优化技能评价栏时,要瞄准招聘信息中的关键词,列出匹配的三五点足矣。
「项目经历的优化」
在简历中梳理呈现你的项目经历时,请遵循下面4点:
- 略去无关项目经历
- 突出项目过程中用到的与你目标职位匹配的技能
- 描述你做的事情
- 描述取得的成绩(显化、量化)
检验简历优化效果
有3种方法:
1、设想自己是HR或研发部门的程序员,根据招聘需求来评估简历
2、请他人担任简历筛选人员,让他根据招聘信息来评估你的简历
3、选取一些公司的职位,优化简历,投递实验
如何提高简历投递成功率
- 确立求职目标
- 梳理知识、技能、经历并记录在案,形成基础简历
- 筛选招聘信息,选择匹配自己目标的公司和职位
- 针对每个招聘信息进行分析,提取关键词
- 根据关键词,结合基础简历,优化技能描述和项目经验,生成一份有针对性的简历
如何在跳槽时获得想要的薪水
薪水不是谈判出来的,而是取决于双方的匹配度。
决定薪水的7大因素
薪水由下列因素决定:
- 市场行情
- 个人基于自我价值和市场行情的自我评估
- 公司的薪酬结构
- 公司基于需求和行情的评估(产生公司的预期薪水范围)
- 个人价值与公司需求的匹配度
- 公司需求的紧迫性
- 公司需求的重要性
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!