世界上需要什么样的程序员
不想当工程师的程序员不是好民工。会编程不代表会工作,工程能力包含软硬技能,面向的是实际应用。从程序员变为工程师,得先“入门”然后才是“上道”,从而成为“工型人才”有人工作几年还没入门,只会简单开发;有人开发技能娴熟,却找不到进步成长的路径,陷入迷茫之中;更有不少人自诩为IT精英,却不了解行业格局、发展趋势,很快就遇到职业发展瓶颈,蹉跎了岁月,虚度了青春。
在我看来,好的程序员应该是“工型人才”。所谓“工型”,是指从下到上的能力提升过程。具体来说,就是先要具备完成完整应用的能力,包括:线上运维,成为熟手,这是下面的一横;在某些领域足够深入,成为高手,这是中间的一竖;在达到更高的水平之后,兼通很多领域,比如业务、产品、项目管理、测试、运维、团队组织,成为驱动者和领导者,这是上面的一横。
本书使用人群
有很多程序员刚进入职场时自己的职业规划几乎为零,一心想着怎样尽快学习更多的技术和积累更多的业务经验,但现实是每天都深陷永无止尽的业务需求开发中。
也有些程序员因为长期埋没于代码世界的浩大分工体系中,无法看清从业务到系统架构的价值链条,无法清晰定义自己在分工体系中的位置,处理不好自身与技术、业务的关系。
更有些程序员在到了35岁之后,发现工作瓶颈已到,对未来的发展感到迷茫。
要是能有人帮他们规划,他们可能进步得更快。
《程序员的三门课:技术精进、架构修炼、管理探秘》作者均有扎实的技术功底和十分丰富的工作阅历,已经摸索出相对清晰的职业发展路径。他们把自己的亲身经验总结和踩过的坑总结成这本书,以帮助和他们一样致力于在IT道路上走得更远的人。
作者简介
本书内容分为三大篇
第1篇介绍程序员的技能成长路径,介绍如何通过学习来加速成长,并讲解非常重要的业务分析和设计知识;
第1章 程序员技能与成长 2
1.1 如何学习新的编程语言 2
- 1.1.1 重点学什么 3
- 1.1.2 学习方法 3
1.2 代码规范与单元测试 6
- 1.2.1 编码规范 6
- 1.2.2 单元测试 7
- 1.2.3 测试驱动设计 9
1.3 使用静态代码分析工具 18
- 1.3.1 什么是静态代码分析 19
- 1.3.2 静态代码分析工具 19
1.4 代码审查 24
- 1.4.1 什么是代码审查 24
- 1.4.2 代码审查的好处 24
- 1.4.3 如何做代码审查 25
1.5 清单和模板 29
- 1.5.1 清单实践 29
- 1.5.2 产品需求文档模板 31
1.6 程序员的工作法则 33
- 1.6.1 工具化法则 33
- 1.6.2 自动化法则 38
- 1.6.3 关于文档的问题 40
- 1.6.4 关于YAGNI 40
1.7 程序员的工具箱 41
- 1.7.1 可帮我们提升工作效率的硬件 42
- 1.7.2 可帮我们提升工作效率的操作系统 43
- 1.7.3 可帮我们提升工作效率的软件 43
- 1.7.4 在线工具 50
第2章 加速成长与学会学习 56
2.1 程序员如何加速成长 56
- 2.1.1 积极主动 56
- 2.1.2 空杯心态 57
- 2.1.3 选择合适的平台 57
- 2.1.4 别怕犯错 58
- 2.1.5 注意细节 58
- 2.1.6 时间管理 58
- 2.1.7 打破边界 61
- 2.1.8 写业务代码中的成长机会 61
2.2 学会学习 66
- 2.2.1 高效学习的方法 67
- 2.2.2 高效学习的途径 69
- 2.2.3 舒适区与小步子原则 72
- 2.2.4 两个著名的学习理论 72
- 2.2.5 终身成长 74
第3章 业务分析与设计 75
3.1 黄金圈法则 75
3.2 UML建模工具 77
- 3.2.1 用例图 78
- 3.2.2 类图 79
- 3.2.3 对象图 80
- 3.2.4 状态图 80
- 3.2.5 活动图 81
- 3.2.6 序列图 82
- 3.2.7 协作图 82
- 3.2.8 构件图 83
- 3.2.9 部署图 84
3.3 业务分析与设计的方法 85
3.4 系统分析与设计的三个发展阶段 87
- 3.4.1 面向数据驱动分析与设计 87
- 3.4.2 面向对象和服务分析与设计 88
- 3.4.3 面向问题域分析与设计 89
3.5 面向对象分析与设计 90
- 3.5.1 什么是面向对象 90
- 3.5.2 面向对象的特征 91
- 3.5.3 面向对象设计的原则 91
3.6 面向服务分析与设计 93
- 3.6.1 Web Service模式 93
- 3.6.2 ESB模式 94
- 3.6.3 微服务架构 95
3.7 领域驱动设计 97
3.8 领域模型实践 102
- 3.8.1 什么是领域模型 102
- 3.8.2 领域模型的作用 102
- 3.8.3 如何进行领域建模 104
第2篇详细介绍了架构修炼中的必备架构思维模式、架构设计过程,还通过真实案例剖析了架构设计的核心要素及关注点,以及如何通过架构设计来把控质量和风险;
第4章 架构思维 110
4.1 分解 110
- 4.1.1 分解的作用 111
- 4.1.2 分解的原则 111
- 4.1.3 分解的时机 112
4.2 集成 112
- 4.2.1 常见的集成方式 112
- 4.2.2 集成的难点 115
4.3 动静分离 120
4.4 复用 121
- 4.4.1 系统复用的分类 122
- 4.4.2 可复用性和可维护性的关系 123
- 4.4.3 可维护性地复用的设计原则 123
4.5 分层 126
4.6 模式 127
- 4.6.1 分层模式 128
- 4.6.2 客户端-服务器模式 131
- 4.6.3 主从设备模式 132
- 4.6.4 管道-过滤器模式 133
- 4.6.5 代理模式 133
- 4.6.6 P2P模式 134
- 4.6.7 事件总线模式 135
- 4.6.8 MVC模式 136
- 4.6.9 黑板模式 137
- 4.6.10 解释器模式 138
4.7 抽象 139
4.8 结构化 139
- 4.8.1 结构化的原则 140
- 4.8.2 结构化分析工具 140
- 4.8.3 结构化思维的7个环节 141
4.9 迭代 141
4.10 勿做过度设计 141
注意:需要免费领取的朋友,帮忙一键三连,看文末即可~
第5章 架构设计 143
5.1 架构设计概要 143
- 5.1.1 业务架构 143
- 5.1.2 应用架构 145
- 5.1.3 技术架构 147
- 5.1.4 数据架构 149
5.2 架构设计的流程 151
5.3 架构设计的核心要素 153
- 5.3.1 性能 153
- 5.3.2 可用性 153
- 5.3.3 伸缩性 154
- 5.3.4 扩展性 154
- 5.3.5 安全性 154
5.4 高性能设计 154
- 5.4.1 主要的性能测试指标 155
- 5.4.2 性能测试方法 156
- 5.4.3 性能优化策略 157
5.5 高可用设计 159
- 5.5.1 高可用性的度量与考核 159
- 5.5.2 高可用的架构 160
- 5.5.3 高可用质量保证 164
- 5.5.4 系统运行监控 165
5.6 可伸缩设计 166
- 5.6.1 架构的伸缩性设计 166
- 5.6.2 应用服务的伸缩性设计 167
- 5.6.3 分布式缓存的伸缩性设计 169
- 5.6.4 数据存储的伸缩性设计 169
5.7 可扩展性设计 169
- 5.7.1 通过消息降低系统的耦合性 170
- 5.7.2 通过分布式服务提供可复用的业务 170
- 5.7.3 建立开放平台 170
5.8 架构设计的典型案例——订单系统 171
- 5.8.1 订单的基本概念 172
- 5.8.2 订单流程 174
- 5.8.3 订单系统设计中的挑战和实践 178
- 5.8.4 数据库优化 182
- 5.8.5 小结 185
第6章 架构的保障:质量与风险 186
6.1 内建质量体系 186
6.2 从黑天鹅事件到墨菲定律 189
- 6.2.1 黑天鹅事件 189
- 6.2.2 蝴蝶效应 191
- 6.2.3 墨菲定律 191
6.3 软件质量稳定性之殇 192
- 6.3.1 业务高速发展带来的变化 193
- 6.3.2 问题域的复杂性 193
- 6.3.3 系统的复杂性 194
- 6.3.4 技术债问题 194
- 6.3.5 人、流程、文档的博弈 195
- 6.3.6 采用不能掌控的工具和框架 196
- 6.3.7 质量意识 196
6.4 从康威定律和技术债看研发之痛 197
- 6.4.1 康威定律 197
- 6.4.2 通过3个案例来看研发之痛 197
- 6.4.3 架构方案和业务形态息息相关 204
6.5 求解质量熵 206
- 6.5.1 运用敏捷思想 207
- 6.5.2 运用系统化思想 208
- 6.5.3 技术债偿还计划 209
- 6.5.4 抓住合适的时机做架构升级 209
- 6.5.5 内建质量 210
- 6.5.6 不迷信,不唯新、不唯上,实践是检验真理的标准 210
- 6.5.7 复杂的问题域:专项突破 210
- 6.5.8 领导者的意识 211
- 6.5.9 创新解决方案 211
6.6 踩过的坑和经验总结 212
- 6.6.1 简单的数字改动导致电商网站搜索功能失灵 212
- 6.6.2 应用竟然被外部系统拖垮了 212
- 6.6.3 HashMap与并发 213
6.7 故障复盘流程及模板 215
- 6.7.1 什么是故障复盘 215
- 6.7.2 为什么要做故障复盘 215
- 6.7.3 如何做故障复盘 216
- 6.7.4 故障复盘模板 219
6.8 监控与告警 221
- 6.8.1 监控的重要性 221
- 6.8.2 监控哪些内容 221
- 6.8.3 告警 224
- 6.8.4 监控的架构 224
6.9 应急处置 226
第3篇总结了做技术管理的诀窍,揭秘如何从准备做技术管理到实现自我管理再到实现团队管理。
第7章 为成为技术主管做准备 232
7.1 构建自我阶段性目标 232
7.2 体验自己的目标身份 234
7.3 勇于抓住机会 235
第8章 从自我管理转为管理团队 236
8.1 什么是领导力 236
8.2 如何构建领导力 237
- 8.2.1 维度1:提供清晰的领导力风格,并以信任感作为基石 238
- 8.2.2 维度2:了解业务,并带领团队达到高绩效 240
- 8.2.3 维度3:发展自己和团队成员 240
- 8.2.4 维度4:塑造未来 241
8.3 让自己成为T型人才 242
8.4 高效时间管理 243
- 8.4.1 确定该做的事情符合自己的目标 244
- 8.4.2 随时应用80/20法则 246
- 8.4.3 创造大块时间 247
8.5 遇到“不服管”的员工怎么办 249
- 8.5.1 每个人都是不错的 250
- 8.5.2 建立亲和与信任感 251
- 8.5.3 从绩效评估到建设性反馈 255
8.6 如何处理冲突 261
- 8.6.1 了解产生冲突的原因 261
- 8.6.2 正确看待冲突 262
- 8.6.3 处理冲突 263
8.7 引导员工主动工作 264
8.8 如何从带10个人到带100个人 266
- 8.8.1 在管理上面对的挑战 267
- 8.8.2 从管理1.0到管理2.0 269
8.9 如何对上管理 276
- 8.9.1 做好对上的预期管理 277
- 8.9.2 及时汇报 277
写在最后
以上就是程序员必修的三门课程,需要朋友,帮忙一键三连,扫码即可~