
安晓辉
本书分为选择、修炼、面试和职场基本功四部分。第一部分有3章,分别是软件开发工程师一览,你适合做软件开发吗,选择适合你的方向。从职业规划和发展的角度,提供了一些工具、方法和模型,帮助我们解答是否要从事软件开发、干什么岗位、在什么样的行业和公司工作等问题。第二部分有2章。开发者的职场成长路径一章介绍了开发者的未来发展方向,让大家对自己的职场发展路径有所认识;技术成长指北一章提供了一种技术修炼的模板方法论,每个人都可以将其用到自己身上,变成自己的技术修炼道路。第三部分,讲述了如何打好面试这场硬仗,分澄清、准备、面试、复盘四个阶段,系统介绍了如何准备一次求职面试,善用之,能够大幅提高面试的成功率。第四部分,我们跳出开发者的技术性工作,精选了日常职场中频繁用到的10种职场基本功,包括结果导向的工作思维,结论先行的汇报策略,沟通中如何区分事实和判断,如何请求帮助,怎样给别人反馈,如何追随上司,怎样超越上司的期待,如何坚持计划实现目标,怎样突破成长困境,以及职业规划的3个锦囊。这些思维、方法、意识和工具,能够为技术之路保驾护航,让我们走得更高、更远。
我们的成长分两个维度:学习和行动。 学习指导实践,实践反过来促进学习,螺旋前进。 如果你一直不停地做事情但没什么提高,就停下来反思一下,看看是不是没有好好学习,没有看到大的格局,没有用正确的方法去做事;如果你一直不停地学习各种知识、各种方法,但解决现实问题的能力却没什么变化,那就停下来反思一下,是不是自己把学习当成了逃避的手段,缺乏必要的行动。
感觉自己读到这本书再早两年就好了。 在之前的位置已经茫然两年,两年的没有能找到合适的目标去成长。 而一场疫情让我跳出了圈子,否则我应该还在圈子中徘徊。 这本书给我以找到目标的方法。相信我会在2020年有新的改变。一切会更好的。 推荐给所有人阅读,不限于程序员,书中很多内容对所有人都会有帮助,越早看到收获会越大。 加油!
实用性极强,句句是干货,虽然我不是这个行业的,不是程序员,但是职场的知识很多都是相通的,给程序员看的书一般比较理性和具体,通俗易懂又实用。
真的是一本很好的书,早点读就好了,至少从思维上有所改变,现在回忆早点读能让自己少走很多弯路。此书不限于程序员,任何人都能读,站在不同的思维角度读一读更能有不同的效果。
摘录:“你在一个平台上做事情,一定要想清楚,哪些是平台的能力,哪些是你个人的能力,只有个人的能力才是你随时可以带走的,才是可以跟着你转战南北的。所以,你一定要想想,假如3年后你离开公司,你拥有什么?会变成什么样子?你靠什么找到下一个机会?”
大话程序员:从入门到优秀全攻略 安晓辉 ◆ 1.3 软件开发工程师的收入现状 >> 1.3 软件开发工程师的收入现状 本节的具体数据来自国家统计局官网(http://www.stats.gov.cn/tjsj/zxfb/201705/t20170527_1498372.html)。 2016年城镇非私营单位就业人员分行业年平均工资 ◆ 1.4 软件开发工程师未来十年还会有这么高的收入吗 >> 中国IT行业(信息传输、软件和信息技术服务业)的加速发展,大概从1997年开始,最早是PC互联网、产业信息化,后来是移动互联网,现在是互联网+,再接下来是物联网、智慧城市、智慧交通、人工智能,一路蓬勃发展,虽有小波折, >> 1.4.2 国家规划 信息技术和网络经济是国家战略规划的重点,国家层面将会提供各种政策、资金、资源的支持,保障它快速、广泛的发展。互联网+、大数据、人工智能将是重中之重。 ◆ 第2章 你适合做软件开发吗? >> 第2章 你适合做软件开发吗? 一个人可以做很多事情,但是一定有一些事情更喜欢做,做起来也更得心应手,当你做这些事情时,也更容易做出成绩。 这些事情所在的区域,就是你的甜蜜区—爱好、擅长、世界需要的交叉地带。 在甜蜜区做事情,人会更容易获得意义感、价值感、成就感。通过把时间和精力投入到你的甜蜜区,就可以让你真正精通某个领域,打造出自己的长板。 要给自己定位,找到自己的甜蜜区有很多方法,我们这里介绍几种常用的方法。 ◆ 工作的三种维度。 ◆ MBTI性格测评。 ◆ 五大职能定位。 ◆ HBDI模型。 同时我们还会介绍一些程序开发者必备的性格特征,给大家看看优秀开发者所需的能力。最终,希望大家借助这些方法,分析一下自己,看看自己是否适合做软件开发。 ◆ 2.1 工作的三种维度 >> 2.1 工作的三种维度 根据交互对象不同,工作可分为三类。 ① 数据和信息处理。 ② 人际互动。 ③ 事务型操作。 假如你发现自己更愿意围绕着人际交互来做事情,希望自己的工作中大部分时间都在和人打交道,那可能你更适合做管理、销售、市场、客服、咨询师等方面的工作。 假如你发现自己更愿意做事务性操作类的工作,例如修理计算机、组装计算机、搭建局域网、修理汽车等,那软件开发工作可能不太适合你,“运维”或者“网管”也许与你更匹配。 假如你觉得数据和信息很迷人,很享受与数据和信息之间这种确定性、一致性、可预期性较高的互动方式,也很享受通过组织、修改、整合、创造信息来解决问题的这种工作方式,那你现在正在做的开发工作,基本上和你的偏好是吻合的—因为开发者偏重与数据和信息打交道,以信息和数据为“输入”,也以信息和数据为“输出”。 >> 根据交互对象不同,工作可分为三类。 ① 数据和信息处理。 ② 人际互动。 ③ 事务型操作。 ◆ 2.2 MBTI性格测评 >> 从性格适应性上来讲,性格类型的中间两个字母是NT和ST的人与软件开发工作更为匹配,例如INTJ、INTP、ENTP、ENTJ、ISTJ、ISTP、ESTP、ESTJ。 从我身边的开发者群体来看,INTJ、ISTJ、INTP、ISTP这几种类型的人偏多,即内倾者偏多。 ◆ 2.3 五大职能定位 >> 需要特别注意的是,就软件开发领域来讲,很少有一进来就成为管理者的,大部分的技术管理人员都是先做了一段时间技术工作之后,再转型成为管理者的。要从开发者转型到技术管理者,有技而优则仕、打杂、降维、考取PMP证书等几种方法,具体可以参考我的另一本书《程序员的成长课》。 ◆ 2.4 HBDI模型 ◆ 2.5 程序开发者必备的性格特征 >> 杰拉尔德·温伯格(Gerald M. Weinberg)是我特别喜欢的软件专业作家和思想家,他的技术思想三部曲—《程序开发心理学》《成为技术领导者》《颠覆完美软件》,值得每一位想从事软件开发工作的朋友反复阅读。 ◆ 2.6 优秀开发者的必备能力 >> 例如我个人学习编程语言的模式为:“看书→练习→做实验→写文章输出→做综合性项目→回顾……”。 >> 总分(包含)关系、对比关系、主次关系、因果关系、时序关系、等级关系、并列关系、递进关系、循环关系等,都是逻辑关系。 >> 培养逻辑思考力的7大基本方法。 ① 使解决问题的过程透明化。 ② 三角逻辑(结论、论据、数据)。 ③ 归纳法。 ④ 演绎法。 ⑤ MECE。 ⑥ 逻辑树。 ⑦ 5W2H >> 分析问题时有很多常见的方法可以使用,例如排除法、类比法、极端法、试错法、鱼骨图分析法、SWOT分析法、5W2H分析法、六顶思考帽等, >> 从这个定义来看,漫无目的地闲聊并不是沟通;自上而下的命令也不是沟通;单方面的告知不是沟通;没有结果的对话不是沟通;旁敲侧击风格的领导谈话还不是沟通…… 因为它们都不满足沟通的三个关键点:目标、方式、共同协议。 >> ◆ 《沟通的艺术:看入人里,看出人外》。 ◆ 《关键对话》。 ◆ 《非暴力沟通》。 ◆ 《沟通圣经:听说读写全方位沟通技巧》。 ◆ 《所谓情商高就是会说话》(佐佐木圭一著)。 ◆ 《蔡康永的说话之道》。 ◆ 《影响力》。 >> 《OKR工作法》《只管去做:让你迅速实现增值的目标管理法》和《目标管理实务手册》。 >> 信息检索能力强的人,能够: ◆ 准确描述自己的问题,提取问题关键词。 ◆ 组合使用合适的工具来寻找答案,例如官方WIKI、论坛、文档、手册、邮件组、Google、Stack Overflow、CodeGuru、CodeProject、源码等。 ◆ 有效提问。 网络上有一篇名为“提问的智 ◆ 3.1 通用逻辑:选择大于努力 >> 选择大于努力,这于我是“多么痛的领悟”! >> ① 进入好的领域(行业),跟着大的趋势走。趋势对了,你什么都不做都可能比那个入错行的程序员发展得好。 ② 选择领域(行业)内领先的公司。行业内TOP 5的公司是引领这个行业发展趋势的,进入这样的公司你获得好发展的概率又高了很多。 >> 先选领域,再选公司” >> 综合以上3点,就是开发者职业选择的通用逻辑—先选领域,后选公司,再选岗位。 >> 目前我个人比较看好的领域有(不分先后): ◆ 互联网。 ◆ 大数据和人工智能。 ◆ 电商。 ◆ 医疗。 ◆ 教育。 ◆ 文娱(含游戏)。 ◆ 体育。 ◆ 旅游。 ◆ 金融和保险。 ◆ 智慧城市。 ◆ 高端制造。 ◆ 交通。 ◆ 3.3 根据场景对开发者的分类 >> 云、传、端的划分,对我们选择软件公司或开发岗位有非常大的帮助 3.4 根据应用层次对开发者分类 根据软件与硬件的距离,可以将其分为3个不同的层次。 ① 底层软件。 ② 系统软件。 ③ 应用层软件。 3.5 研究型与应用型开发者 我们在这里所说的研究型工程师,主要从事的方向有两类,一类是复杂产品或大型工程项目的研究、开发,另一类是算法和工程科学等基础性的研究。在软件开发领域,现在我们熟知的是与算法相关的研究。 与研究型工程师对应的是应用型工程师,主要从事软件产品或服务的设计与开发,其工作更多的是面向问题域,根据特定的业务设计做出相应的软件。 3.6 自顶向下的机会选择模型 领域相当于水域。 公司相当于船只。 、传、端三部分的开发工程师又可以分为应用型和研究型。研究型门槛高、难度大,但回报高,也更能抵抗年龄带来的价值衰减,这种类型的岗位往往要求有更高的数学基础和研究能力,有这方面倾向的人可以选择。应用型的岗位与业务接触紧密,其着眼点为如何用技术更好地实现业务,因而业务需求的变化会带来软件层面的连锁变化。应用型的开发工程师数量众多,竞争激烈,工作8年到10年的“老司机”,如果修为不到,做事情的效率和产出的质量往往和入行两三年的开发者类似,很容易被替代,这就是所谓的青春饭。应对的思路是,在编程能力、业务能力、软件设计能力和工程能力四个维度上打造核心竞争力,向技术专家、架构师、技术+业务或技术管理这几个方向发展。 在实际工作中,很多人往往持着技术决定论或唯技术论,觉得去哪里工作没关系,只要能用上自己掌握的某种技术即可。这种想法在刚入行的1~3年特别普遍,因为企业招募这个阶段的开发者时也会优先谈技术。 如果你处在这个阶段,面对的现实也是技术决定论,那么,请你在选择机会时,一面兼顾擅长的技术,一面考虑公司业务所处的领域和公司在该领域内的地位,因为这样的机会对个人的发展更有利。 4.1 全路径图 相当比例的人在高原期待上一段时间就会倦怠,觉得自己就这样了,不可能再有什么突破,于是就无所谓了,丧失了提升的动力,工作没那么积极投入了,有事儿干干,没事儿混混,成了被动型的、混日子的“老司机”。 另有一小部分人可能会走向管理岗位。走向管理岗位有很多方式,具体请阅读我的另一本书《程序员的成长课》。 4.2 普通程序员 具备软件设计能力的表现有以下3点。 ① 熟悉(诸如单一职责原则、开放封闭原则、里氏替换原则、依赖倒置原则、接口分离原则、迪米特法则等)常见的软件设计原则。 ② 熟悉常见的编程惯用法和设计模式(例如GoF的23种设计模式)。 ③ 能够主动地、有意识地在编程实践中应用软件设计原则。 4.4 精通技术和业务的高级开发者 大家提到Qt第一时间就会想到我,我也因此拥有了一个标签,显得“高级”起来。 4.6 技术专家 以卖油翁和庖丁来类比软件开发领域的技术专家,我们发现,他们至少要具备下列特征,才可能被称为专家。 ◆ 拥有某一细分技术领域完备的显性知识。 ◆ 拥有某一细分技术领域经验性的、只可意会不可言传的隐性知识。 ◆ 拥有自己的方法论,做事自有章法。 ◆ 内化了各种套路和知识,遇到自己熟知领域的问题时,反应敏捷,不假思索,一触即发。 ◆ 拥有高超的实践能力,可以运用显性知识和隐性知识,探寻更个性化、有创造力的解决问题的方法。 专家的要求相当高,专家的数量相当少。 可能获得“某种技术就他能完成”的标签。你在组织中建立了标签,才可能获得更多的机会。 《程序员修炼之道:从小工到专家》和《程序员思维修炼》 4.7 架构师 软件架构师要做的几类事情。 ◆ 理解业务。 ◆ 设计软件架构。 ◆ 选择合适的技术。 ◆ 执行架构。 ◆ 软件开发过程的管理与优化。 ◆ 培养员工。 ◆ 保障组织的技术先进性。 4.8 技术管理者 《代码之道》一书中说:“成为一名优秀的管理者,所有你要做的就是确保你的人能够工作,并且把他们当人(而不是资源)去对待。” 4.9 技术Leader:技术和管理哪个重要 最后,推荐4本书:《程序员的成长课》《成为技术领导者》《横向领导力》和《带人的技术:不懂带人你就自己做到死!》。 5.1 技术成长三阶段 技术领域内的成长分为三个阶段。 ① 专项能力的提升。 ② 技能体系的构建。 ③ 融合创新。 ◆ 能熟练搭建需要的开发和测试环境。 ◆ 熟悉所用编程语言的基础语法,有这门语言的知识地图,熟悉该语言本身的各种基础功能,了解这门语言的高级功能。 ◆ 能调用已有技术框架的API来实现特定功能。 ◆ 能在实现同一功能的多组API之间选择合适的那一组。 ◆ 能熟练使用开发环境和各种辅助工具进行调试。 ◆ 可以解决易复现的、逻辑简单的软件Bug。 ◆ 能自主学习某个新框架的基础API,能参考DEMO完成某个功能的基本实现。 是否拥有知识体系,可以把熟练开发者和普通开发者区别开。 5.2 专项能力修炼 有些你看不起的“笨功夫”一定不能省!对于编程来讲,你省去了记忆关键词这一步,你就: ◆ 不知道如何在IDE中输入开头那几个字母,就无法利用IDE的智能提示。 ◆ 不知道在网上搜索问题时用什么关键字。 ◆ 无法建立起关键词和功能特性之间的关联,在遇到问题时就无法第一时间反应并分析。 记住关键词和与它关联的功能特性,就是曾国藩训练湘军时的“结硬寨”,是硬功夫,绝不能省。 5.3 构建知识体系 理想的状况应该是:先在某个方向上持续积累,有了深度之后,再向外延伸做宽度。 所以,如果你想让自己的技术水平持续、有效、快速地提升,应当静下心来,选择一个方向深耕一段时间。 这也是我们在本章开始指出的:知识体系是熟练开发者和普通程序员的关键区别。 开发者如何构建自己的知识体系。用一句话概括是这样的:先场景辐射,再信息关联,然后梳理整合,构成以应用场景为中心的知识体系。分步骤来讲的话,有4个: ① 先定位,找到应用场景。 ② 以应用场景为中心,全面辐射,搜集和这个场景相关的知识。 ③ 对每一个知识做关联运算,找到相关知识。 ④ 梳理整合,形成以应用场景为中心的知识体系。 忽略了最重要的一个常识:技术是为解决问题而生的。 由此可见,在选择职业发展方向时,正确的决策顺序是: ① 我要做什么产品、服务,我要解决什么问题。 ② 这个产品、服务、问题需要什么技能。
有很多程序员工作了几年却基本没看过程序员相关的书籍, 如果你也是这样,那这本书适合作为第一本.它就像一个导览地图, 从多个方面指引你前进! 而当你学会了SOP, GTD, 微习惯, 金字塔原理, 非暴力沟通等作者附录中提到的书籍时, 再看这本书, 很多章节都可以一扫而过. 因为基本都是它们的程序员版本, 那时候的你, 甚至能做得比作者更好. 或许,正应了那句话 -- "当你有锤子,看什么都是钉子"
其实书中所讲的不仅适用于程序员,其他行业的就业人员也可以将其作为参考。因为走技术路线亦或是走管理路线是大多数从业者需要面对的问题。 其实在职场上,最重要的不仅仅是技术。更重要的是沟通。沟通包括但不限于阐述你的想法、汇报工作、当众演讲等等。怎么把你精通的技术和你的工作生动形象地描述给其他外行人听,并且让他们有一个大概的认识确实是一个技术活。 随着工作时间渐长,我也发现情绪管理是一个优秀打工人的必备技能之一。你总会遇到一些领导,一些同事,他们不太会沟通,然后做事也马马虎虎,不按规定的工作流程走,还很喜欢在你专心工作的时候打断你。这个时候,你该怎么面对?我的应对是要是有什么鸡零狗碎的任务让我马上去做,先不要一口直接拒绝。你可以先答应下来,直接阐明有空在做。或者你可以委婉拒绝,如果实在无法拒绝,只能参考上个办法。总之,不做是不对的,这是某位领导对我的“谆谆教诲”。从他“不做就走”的态度中,我也在思考怎么更好地把控情绪和职场策略。 在工作,家庭,社交等场景中,有效沟通和情绪管理都是很重要的学问。也正应了那句话,一法万法。
看到了未来,也收获了成长,调整了心态,也懂得了长期坚持的方式 我喜欢文中遇到的时间复利和引入变量的抽象思维 书的发力点在后半部分
本书内容跟我过去这些年经历的生涯生涯所形成的认知比较吻合,里面描述的一些工作场景对我来说很有既视感。书的内容也比较新,里面提及的一些工具和语言都是近年较主流的,包括996之类。刚入行没几年的新人自不必说,像我这样已经入行好些年的人读完之后也是有收获的,对于今后的路应该怎么走,要专注技术还是往管理发展,非常有启发。 书本附录收录的各种资料是干货。