前言第一章 如何选择技术方向1.1 选择技术方向要考虑的因素1.2 不同时机选择技术方向的方法1.3 工具推荐第二章 如何在技术上持续精进2.1 做开发还是做管理?2.2 找到激励你前进的动力2.3 学习型心态2.4 技术精进之道2.5 目标的设定与执行2.6 精进的4个习惯2.7 习惯养成指南2.8 超越技术层面的核心竞争力第三章 成为技术管理者什么是管理者:优秀的管理者应做到以下4点常见的技术管理岗位技术管理的职责技术管理需要的能力走向技术管理的4种方式怎样为成为管理者做准备第四章 技术管理新人面临的挑战第五章 跳槽8问盖洛普的Q12可以用来测试你对当前工作环境的满意度:第六章 简历优化指南明确你想要的工作特征盘点你的价值和亮点寻找机会招聘信息分析简历优化
前言
个人收入 = 每天可售时间数量 x 单位时间价格 x 单位时间出售次数
结合开发者的具体情况,可以找到多种提升收入的方式,参考下表:
第一章 如何选择技术方向
技术成长三阶段:提升专项技能 → 构建技能体系 → 融合创新
学习资源 http://tutorialspoint.com,各种入门教程 http://www.w3school.com.cn,教程 http://codepad.org/,在线代码编辑和调试 http://ideone.com,在线代码编辑和调试 http://www.icourse163.org/ 慕课网、网易云课堂等等
1.1 选择技术方向要考虑的因素
- 就业机会
- 自我感觉的难易程度
- 兴趣
- 薪水高低
- 技术的发展前景
- 选择稳定经典的技术(基于林迪效应:对于不会自然消亡的事物,生命每增加一天,则可能意味着更长的预期寿命),例如C、C++、Java等
- 选择将来可能需要用到的技术,卡位将来的市场缺口
运用卡位策略抓住可能成为热门的新技术,一种卡位方式是根据市场需求和未来预期可能要用到的技术;还有一种是根据技术本身的发展程度,可以采用高德纳曲线的数据。
- 他人推荐
- 是否和已掌握技术接近(相近性)
- 是否可以和已掌握的技术互相补充,组合在一起形成更完整、系统的技术图谱(互补性)
- 团队的技术图谱需要
1.2 不同时机选择技术方向的方法
入行时怎么选择技术方向
看招聘网站的职位搜索情况
构建技能树时选择技术方向
相近原则、互补原则
技术转型时的方向选择
转型原因:
- 有新技术、新市场出现,你想试试
- 你掌握的技术的应用场景萎缩,前景黯淡,你想跳出来
转型方式:
- 在原有技术的基础上做关联转型,如安卓转Java
- 抛弃原有技术
- 卡位,学习将来稀缺的新技术,推荐一边工作,一边学习
方案选型
- 某种技术适合解决某类问题
- 新技术的成熟度(有没有大公司支持、有没有知名产品)
- 生态(这方面的开发人员多不多、框架多不多、遇到问题有没有交流的人)
- 团队成员技术图谱(新招募?成员现学?)
- 技术引入成本(学习成本、招聘成本、时间成本、机会成本)
1.3 工具推荐
- stackoverflow,看语言排行榜、开发者年龄分布
- GitHub各种语言、技术的活跃程度统计(https://octoverse.github.com)
- 招聘热度挖掘(以职位关键字在招聘平台搜索查看招聘需求情况)
- 薪酬报告(搜索互联网人才流动报告、开发者薪酬报告、互联网薪资调查、程序员薪酬报告、互联网薪酬报告,或直接在招聘网站看职位需求的薪酬范围)
第二章 如何在技术上持续精进
2.1 做开发还是做管理?
判断的三种方法:
- 工作的三种维度,根据交互对象不同工作分为三类,数据和信息处理(适合开发)、人际互动(适合管理)、事务型操作(适合运维),看自己更适合做那一类工作
- 成就感来源,寻找成就感来源遵循以下步骤:
- 回顾做过的事,找出情感反应强烈的,记录下来
- 分析你的情绪底色,是快乐、高兴、振奋、愉悦、充实等积极情绪还是沮丧、灰心、挫败、失落、空虚、失望等消极情绪
- 挑选出带给你强烈积极感受的事件,它们就是你的成就感事件
- 分析成就感事件,看看他们用到了什么知识、技能、软能力,看看这些事件中,你印象深刻的交互对象是什么(数据、人、事务)
- 未来的样子,问自己两个问题:
- 一直做开发,我会变成什么样子?
- 如果转向管理,我会变成什么样子?
也可以看看身边的开发或者管理,观察、了解、搜集他们的工作状态、生活状态、个人风貌等方面的信息,看看是不是你想成为的,或者反过来是不是你讨厌的
2.2 找到激励你前进的动力
- 问一问自己为什么要做软件开发,找到几个理由,记录下来。例如:它可以带给你丰厚的薪水和优裕的生活;它能让你成为自己想要的样子;它可以不断给你挑战;它让你有成就感;它让你获得认可;它让你觉得自己有价值等等。
- 工作三五年后,会进入”有事不想做,没事又无聊“的倦怠期,这是危险的状态,有两个方向可以帮助自己走出来:
- 为你的工作重新赋予意义。
- 为你的工作引入变化。
- 这个理由是否还存在?
- 为什么这个理由还在但是无法激励我了?是不够量化,不够可视化,还是太遥远?
- 有哪些新的工作内容可以去尝试?
- 有哪些新的职位可以去尝试?
- 有哪些新的方法、工具可以提升开发效率?
- 当下,软件开发对我的意义在哪里?
- 三五年后,我会变成什么样子?
- 我希望自己变成什么样子?
- 该怎样才能变成我想要的样子?
具体可以像下面这么做,想想之前记录的做开发的理由,问自己几个问题:
2.3 学习型心态
遇到问题时,应静下来好好分析:
- 哪里不对?该怎样调整才符合需求?
- 这个“不对”是在何时被引入的?
- 以后如何避免开发过程中的走样?
- 沟通机制是否存在问题?如何改进?
2.4 技术精进之道
对标管理法:即评估自己的现状,找到贴合自己的目标,对比现状,找到差距和前进方向来指定计划并执行。
具体执行步骤:
- 个人现状分析
自己在做什么、用什么技术、技术达到了什么程度、拿多少薪水、是什么职务、是否被领导认可、与人协作是否顺畅...
- 选择标杆
- 从优秀者身上找目标,按下面的问题清单有序、系统地分析标杆:
- 一般性规律,对于开发者而言,可参考专业能力成长的一般性规律:
- 技术本身的知识层次,学习一门技术有三个阶段:
- 项目指标,包括Bug率、延期时间、并发用户数、持续运行时间、单元测试覆盖率、安全性、冒烟测试通过率、内存占用、CPU占用、电池消耗等等
- 拿来即用的自我提升方法
- 尝试用同一技术的不同模块或API来实现,让你更了解所用技术。
- 看看你正在用的技术,想想你处在知识层次的哪一层,找到继续提升的空间去学习、实践。
- 了解和当前所用技术相关的技术,拓展你的知识图谱。
- 尝试用不同的技术来实现,加深对问题的理解,淬炼新的技术。
- 看看别人用的技术点、技术栈,尝试了解,拓宽视野。
- 看看同一项目内他人的设计和代码,有助于理解整个项目。
- 尝试新的设计,能加深对问题的理解,锻炼自己的架构和设计能力。
- 看看整个项目的需求、设计文档。不要局限于自己负责的模块,这样可以提升全局观和系统观。
- 迭代式重构老代码,迭代式重构可以解决时间不够用的问题。
- 阅读优秀源码
- 参与开源项目
- 写作技术博客,有利于写作、逻辑思考、讲授、设计等能力的提升,也利于系统化你的知识。
- 讲给别人听,锻炼讲授、演讲、沟通、归纳总结、逻辑思考等能力。
- 与优秀的人和团队在一起,见贤而思齐焉。
可以从四个方面来寻找标杆:
(1).他在什么事情上做的突出?是怎么做到的?
(2).他有哪些知识、技能是我不具备的?
(3).他有哪些提示效率的工具?
(4).他有哪些好的工作习惯?
(1).第1阶段,专项能力的提升
(2).第2阶段,技能体系的构建
(3).第3阶段,融合创新(工作八年要到这个阶段)
(1).第1阶段,基础开发,了解API,基于API开发应用。
(2).第2阶段,熟悉内核及原理,主要了解框架的设计原理,阅读源码,熟悉内在机理。
(3).第3阶段,优化框架,针对框架的不足进行完善、优化和扩展。
- 分析标杆并列出差距清单
- 选择提升方向
- 制定提升计划
- 执行
- 效果评估
- continue
2.5 目标的设定与执行
主要考虑两个问题:
这个目标适合自己吗?
如果只能在一个技术方向上做到出类拔萃,你的选择是什么?这个选择将是你的主线。
设定目标时要理性结合自己的长远目标,是否和自己的职业规划一致?是否能和当下的工作关联起来?
如何完成目标?
两个关键点:有效目标(符合SMART原则,Specific具体的、Measurable可量化的、Attainable可实现的、Relevant有相关性的、Time-bound有明确截止期限的)、下一步行动(分解目标为能三个立刻的行动,动词+内容+结果+开始时间、周期、最后期限)
2.6 精进的4个习惯
- 对标管理
- 三个问题:我昨天完成了什么?我遇到了哪些问题?我今天做什么?
- 刻意练习:Target → Focus → Feedback → Fix it
- 复盘:事件触发型复盘、周期性复盘
- 事情预期目标是什么
- 现状如何
- 执行过程分析
- 决定是如何做出的,有没有其他可能
复盘框架:
2.7 习惯养成指南
- 找到内在驱动力
- 降低改变的难度
- 让改变可视化
- 奖励
- 允许例外
2.8 超越技术层面的核心竞争力
人的能力分为三类:
- 资源:知识、技能、时间、金钱、人脉、天赋等
- 应用流程:解决问题的方法,思维的框架、分配资源的方式、自我管理的模式等
- 价值观
第三章 成为技术管理者
什么是管理者:
常见的5大职能定位是:专业技术者、自由职业者、管理者、创业者、投资者。
从开发者到管理者并不是简单直接的职位晋升,而是转型。很多技术人员初任管理职位时,往往转不过弯来。他们会继续紧抓技术,企图用自己的技术优势来奠定自己的领导力,凡事都要亲力亲为,反倒是对领导、组织、激励这些人相关的事能躲则躲,能拖就拖,往往到了不得不做时才被迫去弄一下,这样的结果往往是团队没带好,领导对你也不满意,而你觉得自己这么认真做事,付出这么大的努力,却没好结果,心里感到委屈。
其实这是角色意识转换的问题。作为管理者,要把更多的精力放在”人“身上,通过他人来完成事情。
管理者通过他人完成工作,这是管理者的定义。管理者有两大任务:完成工作目标、培养下属。
优秀的管理者应做到以下4点
- 下属可以各尽所能,都能得到成长,个人目标可以在实现团队目标的过程中得以实现。
- 了解每个人的性格、能力、知识、技能、优点、缺点,还有他们为什么在这里工作,在这里求什么。不要把他们当资源,要当做伙伴对待,多与他们沟通。
- 拆解团队的目标,形成颗粒度较小的任务。
- 结合团队成员的个人能力和目标,把任务匹配到个人,形成个人的绩效目标管理表(MBO)或者OKR表。
- 及时给予下属反馈。
要做到这点,需要你做到以下4方面的事情:
- 下属信任你,愿意跟着你干。
- 实现团队目标。
- 上司信赖你,愿意把团队交给你管,愿意把复杂的事情交给你的团队去做。
常见的技术管理岗位
- 技术主管
- 项目经理
- 研发部门经理
- 研发总监
- 研发副总裁
- CTO
技术管理的职责
- 技术管理职责
- 技术方案评估和选择
- 关键技术决策
- 工作量评估
- 任务分解
- 委派任务
- 代码规范管理
- 代码审核
- 技术风险识别与控制
- 团队技术能力管理
- 关键代码实现
- 技术督导
- 技术培训
- 售前或售后技术支持
- 项目管理职责
- 项目中的人员管理和调配
- 项目计划制定
- 研发任务管理
- 项目进度管理
- 协调沟通
- 教练指导
- 复盘总结
- 组织间接口协作(测试、产品、需求、市场、销售、售前、售后、客户)
- 人事管理职责
- 招聘、面试
- 解聘
- 人员调配(包括调度、任免、角色安排)
- 资源协调
- 绩效考评
- 职级评定
- 薪水调整
- 管理制度评估
- 人员预算
- 财务预算
技术管理需要的能力
- 共情:换鞋子走路
- 委派任务
- 能明确区分哪些事情你必须做、哪些事情其他团队成员必须做
- 能顺畅的把其他人必须做的事情委派给他们去做
- 了解项目目标
- 做好项目任务分解
- 了解团队成员的技术能力和个人意愿
- 分配任务时,遵循两方面原则:既要让某位成员做其擅长的,还要给他一些超出能力范围的、带些挑战的;既要给某位成员他愿意做的任务,也要给他一些可能不是特别乐意做的任务。
- 以交付为目标,以人人满荷为策略,统合不同成员的任务关系。
管理必须能做到两点:
要想比较好地委派任务,需做到以下几点:
- 沟通
- 反馈
- ”感谢“,向成员的努力工作表达感激和赞许,满足对方情感上的需求。
- ”建议“,为成员的出色工作做出表扬,指出哪些行为应坚持,哪些行为应改变。评价工作而非人。
- ”评估“,周期性一对一沟通,帮助改善工作方法,做出评价
- 激励
- 目标统合:公司的目标、团队的目标、个人的目标,三者一致才能产生协力。把上一层的目标合理地转化为自己团队的目标,清晰明确地解释给团队成员。找到团队目标对于每个个体的意义。
- 向上管理
- 时间管理
- 绩效评估
- 知人善用
- 规划
- 计划
- 组织
- 协调
- 管理
- 选择:明确公司的目标、团队的目标、自己的目标,围绕目标进行任务选择
- 责任
- 辅导:放下告知、命令、强迫的管理方式,转向通过提问让团队成员自己明确目标、导出计划、达成目标的教练式管理。《高绩效教练》提供了一组有帮助的问题:
- ”还有什么“,在大多数回答之后使用,激发更多思考
- ”如果你知道答案,它会是什么?“,让对方越过障碍向前看。
- ”它对于你或是他人造成的结果/影响是什么?”
- “你使用的是什么标准?”
- “对你而言,这件事最难/具挑战的部分是什么?”
- “如果你的朋友面临你现在的处境,你会给他什么建议?”
- ”想象和最智慧的人(认识或者想象中的)对话,你认为他会告诉你该怎么做?“
- “我不知道下一步该怎么办,如果是你,你会怎么办?”
- “如果有人对你说/做了这些...你会有怎样的感受/想法/行动?”
- 讲授
- 演讲
- 复盘:管理者必须在每个项目(里程碑)交付后回顾总结:
- 这次项目的目标是什么?
- 现状是什么?
- 现状和目标之间有哪些差距?
- 项目管理哪里做得好?是怎么做的?是否可在类似背景下应用这次的经验?
- 项目管理哪里做的不好?为什么?有什么办法可以改进?
- 团队里谁做得好?好在哪里?他做了什么关键事情导致了好的结果?
- 团队里谁做得不好?哪里不好?是能力、方法、态度等哪些方面有问题?改善哪方面可以让他更高效?
- 自己在领导、管理方面,哪些做法取得了好的效果?是怎么做的?是否可以类似背景下应用这次经验?
- 自己在领导、管理方面,哪些做法带来了不良影响(对团队成员、对事情推进、对最终结果、对自己成长)?是能力、方法、态度等哪方面的问题?有什么可以改善的?
- 上司对项目结果满意吗?满意哪些方面?他为什么对这些方面满意?
- 如果上司对结果不满意,是哪些方面让他不满意?他为什么对这些方面不满意?
- 在和上司的沟通协作中,有哪些地方做错了?有哪些地方可以改进?有哪些地方做的好?能不能固化成经验?
- 承压:做好团队的隔离墙,让团队集中精力处理关键要务
- 勇于挑战
走向技术管理的4种方式
- 技而优则管。
- 从打杂到管理。
- 准确理解需求并传递给程序员。
- 了解每个人擅长什么、想要什么。
- 合理安排任务,让每个人既能做擅长的,又能遇到一些新挑战。
- 协调资源,让程序员顺利开展工作。
- 屏蔽高层、需求、产品、市场、售后等相关干系人的干扰,让程序员可以在一个时期专注地做一件事。
- 做好项目计划并跟踪执行。
- 做好团队或部门规划。
- 给程序员创造成长的机会。
决定你是否能做好管理的不是技术是否出色,而是你能否把杂打好,如:
项目中开发之外的杂活:组织会议、讨论需求、讨论UI、制定开发计划、开发计划执行与跟踪、开发者状态搜集/更新/同步、项目状态更新、编译版本、送测、培训客户/售前/运维/售后、为新成员介绍项目、培训新成员、问题搜集、不同模块开发者之前的协调、文档撰写
- 从大公司跳到小公司
- 获取PMP证书,切换到有需要的环境。
怎样为成为管理者做准备
管理书籍介绍
现代管理:《管理的实践》、《卓有成效的管理者》、《管理:任务,责任,实践》、《巨变时代的管理》、《创新与企业家精神》、《21世纪的管理挑战》
技术管理:《人月神话》、《成为技术领导者》、《人件》
项目管理:《项目管理知识体系指南(PMBOK指南)》
软件工程:《软件工程》、《软件工程:实践者的研究方法》
设计模式:《项目百态:深入理解软件项目行为模式》
专项技能书籍介绍
沟通和说话方面:《所谓情商高就是会说话》、《关键对话》、《内向者沟通圣经》
委派任务方面:《交办的技术:职场晋升第一课》、《别让跳回背上》
带人方面:《带人的技术:不会带人你就自己做到死》
目标管理方面:《目标管理实务手册》
辅导能力方面:《高绩效教练》
演讲、表达能力:《高效演讲》、《金字塔原理》、《演讲的力量》
感染力和影响力方面:《影响力》、《横向领导力》、《你的团队需要一个会讲故事的人:用故事思维解决问题》、《认同感:用故事包装事实的艺术》
时间管理方面:《小强升职记》、《搞定》
高效工作方面:《高效能人士的七个习惯》、《做事的常识:事情依赖,马上就知道怎么做》
第四章 技术管理新人面临的挑战
- 角色转变
你的工作是保障别人的工作能够顺利开展,别顶着管理者的头衔做执行者的事情,拿自己的技术能力衡量团队成员。
- 被动管理
别出了问题才管,主动跟进,经常性跟成员单独沟通、了解,让他感觉自己被重视
- 弄不清职责
确保任务交付和培养成员
- 委派任务
管理者只是个任务的分拣员;不要过分担心成员做不好某个任务,要给机会
- 目标管理
SMART原则
- 资源管理
硬件资源(电脑、手机、显示器、服务器...)、时间资源(只排工作时间的70%、遵循串行工作原则)
- 压力管理
托马斯-基尔曼冲突模型(2003年提出)
- 冲突管理
- 绩效变差
- 担心失去技术竞争力
具有原本技术时的技术深度基础上扩展视野的宽度
- 有效的反馈机制
自我评估、下属的反馈、同级的反馈、上级的反馈
- 别人的议论
但行前路
- 和下属进行一对一沟通
- 希望为自己实现什么目标?
- 希望为对方实现什么目标?
- 希望为我们之间的关系实现什么目标?
- 要实现这些目标,自己该怎么做?
- 开始时阐明目的,为沟通定调。
- 分享事实经过和你的想法。
- 征求对方的观点,鼓励对方做出尝试。
谈话前问自己四个问题:
谈话过程参考如下:
- 怕犯错
- 时间管理
时间被切成5个部分:老板、组织、外界、下属、自己
- 激励他人
任务池自己挑
- 向上管理
让上级、领导、老板知道你在做什么
- 提升领导力和管理能力
- 多沟通,了解和关心他们的工作、生活
- 了解什么能够激励某个人,用他喜欢的方式激励他
- 和大家一起做事,信任和关系是共同经历出来的
- 目标感强
- 勇于负责
- 能承压,且不给下属不必要的压力
- 直面冲突,解决冲突,而不是回避、推卸责任
- 足够了解公司,理解并接纳公司的愿景,知道公司的价值观,知道什么对公司最重要,熟悉公司的产品,了解行业信息,熟悉公司所在市场情况...
领导的职责就是创造这样一个环境,每个人都能在其中发挥出更多的能力。
第五章 跳槽8问
盖洛普的Q12可以用来测试你对当前工作环境的满意度:
- 我知道公司对我的工作要求吗?
- 我有做好我的工作所需要的材料和设备吗?
- 在工作中,我每天都有机会做我最擅长做的事吗?
- 在过去的7天里,我因工作出色而受到过表扬吗?
- 我觉得我的主管或同事关心我的个人情况吗?
- 工作单位有人鼓励我的发展吗?
- 在工作中,我觉得我的意见受到重视吗?
- 公司的使命目标使我觉得我的工作重要吗?
- 我的同事们致力于高质量的工作吗?
- 我在工作单位有一个最要好的朋友吗?
- 在过去的6个月内,工作单位有人和我谈及我的进步吗?
- 在过去一年里,我在工作中有机会学习和成长吗?
第六章 简历优化指南
明确你想要的工作特征
可以从两方面找出你想要的工作特征:
- 你想要怎么样的工作(薪水、通勤时间等等)
- 你对当前工作有什么不满(薪水低、加班多、技术落后、行业衰落等等)
盘点你的价值和亮点
个人商业价值体现在5个方面:
- 知识
- 技术
- 管理(领导力、组织、协调、制定计划、委派任务、辅导、目标整合、规划)
- 通用(演讲、协作、授课、沟通、共情、反馈、时间管理、目标管理、激励)
- 技能
同知识
- 经历
学习、工作、生活
- 人脉
亲戚、同学、同事、技术好友、社群、同好
- 天赋
物理属性(身体上的)、软属性(性格等)
寻找机会
招聘信息分析
简历优化
撰写项目经历参考STAR原则:
- 情境(Situation),项目描述或背景
- 任务(Task),项目目标或职责目标
- 行动(Action),对应你做的事
- 结果(Result),项目结果,尤其是你做的事情所产生的结果