编辑点评:
这就是软件工程师:用代码改变世界的人前途丛书,正是软件工程师,通过一行一行的代码,让这一切得以实现。本书就来带你认识这个改变了世界的职业。
内容简介
软件工程师是一群用代码改变世界的人。过去二三十年,互联网可以说改变了整个世界:我们的联络方式从延续数百年的写信,到后来发邮件,再到现在的即时通信;我们查询信息的方式从一本一本翻书,到现在随时随地使用搜索引擎;我们的购物方式从去商场超市到去亚马逊、淘宝、京东直接下单,再到一小时就能送达手上的盒马;我们的出行方式从站在路边拦出租车到坐在家里叫滴滴……可以说生活工作的方方面面,都发生了巨大的变化。而这些变化的背后站着一个职业,那就是软件工程师。
翻开这本书你会发现——
软件工程师不是只会搬砖的码农,而是一群简单务实、热爱创新的人
软件工程师薪酬高,但很多不是利益驱动型的,而是成就感驱动型的
996不是软件工程师工作的必需,而是行业特定发展阶段和公司管理不力的结果
35岁的坎儿不是年龄的坎儿,而是能力的坎儿
软件工程师不是一个可以“吃老本”的职业,终身学习是硬性要求
把代码写漂亮只是起步,真正的高手必须在抽象、设计、取舍等能力上下功夫
作者简介
本书系访谈而成,内容来自以下4位行业高手多年的从业智慧和心法——
郄小虎:前谷歌全球高级技术总监、谷歌中国研究院副院长、小红书CTO、滴滴出行副总裁,现任腾讯公司副总裁。主导设计的系统包括Google AdWords、滴滴出行交易平台等,曾两次获得谷歌创始人奖。
陈皓:网名“左耳朵耗子”。前阿里云资深架构师、亚马逊高级研发经理,拥有20多年互联网和金融行业从业经验。现为MegaEase创始人,致力于为企业提供Cloud Native和行业头部企业(亚马逊/阿里)标准的高可用、高性能和高并发架构的技术产品。
陈智峰:谷歌大脑首席工程师。曾参与开发谷歌搜索和邮件系统使用的大规模分布式存储系统;近年来参与设计并实现了被广泛应用的机器学习开源系统TensorFlow,以及谷歌的新一代机器翻译系统和语音识别系统。
鲁鹏俊:前谷歌主任架构师(因QueST项目获谷歌创始人奖)、百度高级总监、欢聚时代CTO,现任唯品会联席会CTO。
书籍目录
第一部分 行业地图
01 特质:简单务实,极致创新 4
02 薪酬:高薪职业里的“常青树” 7
03 底层:一个成就感驱动的职业 11
04 选择:一线和次一线城市,机会巨大 13
05 现实:为什么会有996 18
06 进阶:软件工程师的四大台阶 22
07 周期:是否存在35 岁的坎儿 25
08 挑战:持续学习是刚性要求 31
09 机会:工种多,且新工种频繁出现 33
10 趋势:软件工程师即将遍布各行各业 36
第二部分 新手上路
◎入行前
01 基本储备:入门必学的语言和工具 40
02 选择平台:去面向未来、技术驱动的公司 43
03 认识自己:找到适合自己的路线 46
◎编码
04 编码规范:不要逆着规范做事 50
05 公司差异:即使没有规范,也得自我要求 53
06 优质代码:好代码没有止境 57
07 整洁代码:不是写出来的,而是读出来的 60
08 代码注释:像说明书一样清晰 62
09 编程原则:教科书没有告诉你的“为什么” 65
10 解决问题:别把原则当教条 70
◎测试
11 全面思考:做测试比写代码难 71
12 程序测试:对软件工程师的基本要求 75
◎改Bug
13 执行任务:从改Bug 开始 79
14 定位Bug:像侦探一样发现问题 81
15 修复Bug:务必小心谨慎 84
◎成长论
16 拆分任务:动手工作前,先做任务分解 86
17 阅读代码:重要的不是写代码,而是读代码 89
18 找到捷径:通读牛人代码 91
19 追本溯源:多读文档,多读书 94
20 重在过程:学习牛人的方法,别抄答案 96
21 潜移默化:和优秀的人一起工作 98
22 亦师亦友:和身边的人搭伴学 100
第三部分 进阶通道
◎设计程序
01 需求分析1:避免X-Y问题 105
02 需求分析2:明确模糊不清的问题 107
03 设计程序:学会谋篇布局 109
04 高度抽象:设计需要抽象能力 111
05 原型设计1:从最难的做起 116
06 原型设计2:原型设计的关键是接口 118
07 架构设计1:分而治之,理清思路 120
08 架构设计2:考虑异常情况和极限情况 123
09 技术调研:寻找最优解决方案 125
◎项目管理
10 软件工程:不同的开发模式 127
11 流程管控:用火车头模式避免研发延期 130
12 验证效果:做A/B test,用数据说话 133
13 监控打磨:上线前做好监控与压测 135
◎团队合作
14 外部沟通:知道怎么“规训”业务 138
15 内部协作:平衡前台团队和中后台团队 141
◎学习进阶
16 直击内核:打牢基础,以不变应万变 143
17 搭建体系:用知识树系统学习 146
18 主动学习:提高你的学习效率 149
第四部分 高手修养
◎分岔路的选择
01 上升通道:技术路线和管理路线 154
◎业务上的精进
02 预见未来:软件工程师要有前瞻能力 156
03 权衡利弊:软件工程师要有取舍能力 159
04 攻克难题1:主动寻找技术难题 162
05 攻克难题2:尝试不同的解决方案 164
06 关键决策:技术选型的六大要素 168
07 代码评审:不是“做出来”,而是“做漂亮” 172
08 评审清单:代码评审怎么做 174
09 评审误区:代码评审是为了找Bug 吗 176
◎带团队的心法
10 实力服众:工程师宁愿被lead,不愿被manage 178
11 敢于放手:从工程师变成管理者 180
12 善于说服:相对于下指令,还是要讲道理 181
13 招聘面试:考察一个人的元能力 183
14 员工激励:让工程师更有成就感 185
15 团队建设:做好人才布局 187
16 布局长远:关注长期目标 189
17 平衡需求:判断紧急与重要 191
18 协同机制:保持公开透明的信息协同 193
19 团队合作:一加一大于二 195
20 合作共赢:找到利益共同点 198
第五部分 行业大神
01 丹尼斯·里奇:保持简洁 203
02 林纳斯·托瓦兹:只是为了好玩 206
03 吉多·范罗苏姆: 允许不完美、保持开放 208
04 玛格丽特·汉密尔顿: 拯救人类登月计划 211
05 杰夫·迪恩: 开创分布式系统 215
06 法布里斯·贝拉: 一个人就是一支队伍 219
第六部分 行业清单
01 行业大事记 224
02 推荐资料 231
03 行业术语 255
DevOps工程师不是你想做就做的,这下面8点技能你必须得掌握
DevOps是两个不同领域的混合体,即开发和运营。与传统的软件开发方法相比,这增加了更快地发布软件应用程序的能力,具有快速的改进和发展。它使团队能够更快地根据市场进行创新和适应,促进发布版本的增加,从而帮助轻松识别和修复错误,通过改进团队间的协作,鼓励可靠性、安全性和可伸缩性。
在目前的技术市场上,DevOps技术是需求最大的领域之一,市场规模将达到103亿美元。因此,需要拥有最有用技能的高技能DevOps工程师,以帮助组织实现其快速交付应用程序的目标。让我们看看你在2021年能学到的最需要的DevOps技能:
1.Linux知识
大多数组织已经使用基于Linux的操作系统作为主要的开发环境。大多数基于DevOps的操作都是基于核心Linux的。Linux最好的地方在于它是可定制的,这给开发人员更多的自由,可以根据自己的需要和需求修改Linux,从而确保灵活性。Linux也以它所提供的安全性和可伸缩性而闻名,因此拥有良好的操作系统体验是掌握DevOps的关键。像Linux发行版(如RHEL、CentOS、SUSE Linux)受到青睐,因为它们支持集成、适合关键性能操作、兼容性和安全性。
2.测试技能
尽管DevOps加快了应用程序的交付,但它所导致的是代码中的错误。由于交付的应用程序的质量是主要的焦点,所以测试就会起到识别和纠正它们的作用。因此,测试是DevOps的关键部分,如果申请DevOps工程师的角色,就需要精通测试。测试不仅意味着功能验证或功能测试,而且还包括性能测试、持续测试和操作测试。软件代码通常在开发环境中使用自动化测试工具进行测试。
3.软件安全
由于DevOps提供了快速的代码,因此经常会出现很多错误和漏洞,这些漏洞都是由于更快的交付周期而产生的。因此,DevOps工程师应该具备编写安全可靠的代码的技能,以保护应用程序免受不必要的攻击。他们还应设计一种方法,以确保防御机制积极监测和保护应用程序。
4.自动化技能
自动化是DevOps的核心。它在这一领域发挥着巨大的作用,因为自动化在整个DevOps管道的各个地方都有应用,如CI/CD、连续测试、配置、性能监控等。自动化是通过DevOps开发应用程序的关键。
5.编码和脚本编写
几种语言的工作经验使编码成为被称为DevOps工程师的关键技能。这些语言包括C/C++、Python、Golang、Ruby、JavaScript、Perl、Java、Bash、PHP等。这些语言是实现自动化所需要的最合适的语言。需要良好的编码技巧来代替手工过程,即使是最轻微的错误也会导致随后的巨大错误。
6.工具知识
了解DevOps中的工具非常重要,因为工具可以让您轻松地完成所需的任务。有数百种DevOps工具,如监视工具、测试工具、编排工具、版本控制工具、自动化工具、协作工具、包管理器等等。要交付的应用程序的成功在很大程度上取决于在实现的不同阶段选择和使用工具集来构建、管理和配置它。
7.云计算技能
云提供了一个集中的平台来测试、部署、调试和发布应用程序代码。它还提供资源共享和协作,以完善流程。因此,了解不同的云提供商、服务和平台对于成为DevOps工程师至关重要。一些领先的云提供商是谷歌(Google)、微软(Azure)和亚马逊(Amazon)。云还有助于使自动化变得更容易,如果在任何情况下丢失或损坏,总是可以检索所有数据和代码。
8.非技术技能
DevOps的工程师不仅要熟练掌握技术知识,而且还要有非常好的协作和沟通能力。良好的听力技能是必需的,因为你需要清楚地理解客户需要什么。拥有所有权、自我控制和积极的态度通常会给团队成员增加一个关键的价值,这最终决定了应用程序的成功。DevOps需要自信和专注力,以确定需要改进的关键领域,了解目标是什么。同理心对于理解和欣赏他人的话至关重要,并将有助于避免团队内部的冲突。通过积极、清晰和有效的沟通来实现团队成员之间的信任,将创造一个积极的工作环境,从而提高产品的质量。
如果你想在2021年成为一名DevOps工程师,这是你要学习的八大最基本的技能。这些技能不仅将帮助您掌握DevOps,而且还将使您成为业界的佼佼者。
Comments