书籍作者:于君泽 | ISBN:9787121373770 |
书籍语言:简体中文 | 连载状态:全集 |
电子书格式:pdf,txt,epub,mobi,azw3 | 下载次数:4198 |
创建日期:2021-02-14 | 发布日期:2021-02-14 |
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板 |
我们都有一个共同的梦想——成为更棒的程序员,但是如何做?如何学习和精进自己的技术?如何做业务分析和架构设计?如何做技术管理?本书就广大程序员都很关注的问题提供一些思路和方法。
《程序员的三门课:技术精进、架构修炼、管理探秘》内容分为三大篇:第1篇介绍程序员的技能成长路径,介绍如何通过学习来加速成长,并讲解非常重要的业务分析和设计知识;第2篇详细介绍了架构修炼中的必备架构思维模式、架构设计过程,还通过真实案例剖析了架构设计的核心要素及关注点,以及如何通过架构设计来把控质量和风险;第3篇总结了做技术管理的诀窍,揭秘如何从准备做技术管理到实现自我管理再到实现团队管理。
《程序员的三门课:技术精进、架构修炼、管理探秘》适用于即将或者正在从事IT相关开发工作,却不知如何提升自己,希望通过适当的学习方法精进技术的初级程序员;也适用于具备一定架构设计经验,想进一步系统化提升架构设计能力的中级程序员;以及有一定技术积累,想从事技术管理却不知如何着手的高级程序员。
于君泽
某互联网公司技术专家,在分布式系统架构设计、高并发系统设计、领域建模、研发管理、内建质量等方面有较多心得,乐于交流和分享,曾创立技术社群“中生代技术”。
维护技术公众号“技术琐话”。
李伟山
现任某人工智能公司技术总监,江湖人称“山哥”,在分布式系统架构设计、高并发系统设计、系统稳定性保障等方面积累了丰富的实践经验,擅于利用数据分析解决实际问题,对新技术有浓厚的兴趣,乐于分享。
个人技术公众号:技术方舟。
张洪亮
网名Hollis,知名技术博主,个人技术博客(http://www.hollischuang.com)阅读量达数百万。90后程序员,2015年毕业于哈尔滨理工大学,现任某互联网公司技术专家,专注于Java研发、技术架构及程序员的成长等方面。
个人技术公众号:Hollis。
彭首長
熊猫优福联合创始人,聚美优品前技术总监。在团队管理、领域设计、分布式架构、高并发设计、IoT架构等方面有丰富的实践经验,擅长行业分析,对新技术高度敏感,热衷于技术实践且乐于分享。
刘朋
高绩效团队教练,教练型领导,中生代技术社区联合创始人,北京大学理学学士、工学硕士。现就职于中国移动(成都)5G产业研究院,曾任诺基亚通信(成都)有限公司研发经理。在敏捷实践、高绩效团队教练技术、技术团队管理等方面积累了丰富的经验,并总结出一套特别适合程序员突破自身瓶颈、快速成长的领导力模式
有很多程序员刚进入职场时自己的职业规划几乎为零,一心想着怎样尽快学习更多的技术和积累更多的业务经验,但现实是每天都深陷永无止尽的业务需求开发中。
也有些程序员因为长期埋没于代码世界的浩大分工体系中,无法看清从业务到系统架构的价值链条,无法清晰定义自己在分工体系中的位置,处理不好自身与技术、业务的关系。
更有些程序员在到了35岁之后,发现工作瓶颈已到,对未来的发展感到迷茫。
要是能有人帮他们规划,他们可能进步得更快。
《程序员的三门课:技术精进、架构修炼、管理探秘》作者均有扎实的技术功底和十分丰富的工作阅历,已经摸索出相对清晰的职业发展路径。他们把自己的亲身经验总结和踩过的坑总结成这本书,以帮助和他们一样致力于在IT道路上走得更远的人。
推荐序1
世界需要什么样的程序员
不想当工程师的程序员不是好民工。会编程不代表会工作,工程能力包含软硬技能,面向的是实际应用。从程序员变为工程师,得先“入门”,然后才是“上道”,从而成为“工型人才”。有人工作几年还没入门,只会简单开发;有人开发技能娴熟,却找不到进一步成长的路径,陷入迷茫之中;更有不少人自诩为IT精英,却不了解行业格局、发展趋势,很快就遇到职业发展瓶颈,蹉跎了岁月,虚度了青春。
在我看来,好的程序员应该是“工型人才”。所谓“工型”,是指从下到上的能力提升过程。具体来说,就是先要具备完成完整应用的能力,包括:线上运维,成为熟手,这是下面的一横;在某些领域足够深入,成为高手,这是中间的一竖;在达到更高的水平之后,兼通很多领域,比如业务、产品、项目管理、测试、运维、团队组织,成为驱动者和领导者,这是上面的一横。
每个人的成长都是不断打怪升级的过程,既要掌握技术和工具,又要学习方法和理论、积累实战经验,更要思考和沉淀。先进技术只是工具,最终目标是解决问题。经验丰富的工程师就像MMA(Mixed Martial Arts,综合格斗)高手,精通综合技巧,活学活用,不拘泥于流派。在勇猛、精进之外,踏实、靠谱更为重要。踏实,是有自己的方向,知道差距;靠谱,是能把活儿干好,值得大家信赖,大家都乐于和你合作,放心把有挑战的任务交给你。
从程序员到工程师,读这本书就够了!本书非常实用,可称作程序员入行手册。市场上的各类“21天学会XXX”和“XXX编程宝典”书已经太多了,能够传承工作中实践技巧的书依然太少。本书汇聚了多位资深技术老炮儿压箱底的傍身秘技,兼顾软硬技能,贯通了程序员从基础到进阶再到突破的各个阶段,道出了成长的真谛,更手把手地指引我们前行。
有道是“师傅领进门,修行在个人”,徘徊在门外或者迷茫在路口的新同学,从此不必再上下求索、苦苦寻觅。一书在手,夫复何求?希望你能通过本书,提升程序员的大局观,在成为“工型人才”的路上迈出坚实的一步,并穿越众妙之门,通达三千世界。
微信公众号“IT民工闲话”作者 史海峰
推荐序2
程序员的工作是将从现实或者虚拟世界中抽象出来的逻辑以代码的形式实现,需要凝神静气才能完成一段有质量的代码。但不得不承认的是,程序员这个职业在很大程度上是吃青春饭的,如何充分把握自己的青春年华做一名优秀程序员?如何为未来的职业发展打下良好基础?这是每个程序员都应该认真思考的问题。
非常遗憾的是,程序员这个职业所需要的知识、技能和经验,并不能完全从学校获得,更多地来自工作实践。本书系统且循序渐进地介绍了如何从菜鸟程序员成为高级研发人员或者架构师,以及如何积累知识和经验成为技术管理者,对于程序员在编码过程中需要用到的工具、模式、测试、沟通和架构知识,作者也给出了亲身实战经验总结。
本书应该成为程序员的案头手册,对程序员的快速成长意义重大。读了这本书,相当于同老一代程序员深入交谈,他们也把自己的酸甜苦辣、成功与挫折、心得与秘密悄悄地告诉了你。这不仅仅建立了你的大局观,也让你有机会有赢在起跑线上。
易宝支付 陈斌
序1
本书的素材主要来源于我的多年公众号积累,并邀请了李伟山、张洪亮、彭首長、刘朋这几位专家共同完成本书的写作,杨彪老师也在本书写作前期贡献了不少想法。
我一直都是一个“笨孩子”,但我不以笨为耻。小学三年级时要写一篇关于柑橘树的作文,那时自己肚子没货、下笔万难,父亲知道后教了我两招:一是从整体到局部观察事物;二是阅读,看看别人是怎样写的。
有朋友问,写书的时间从哪里来?其实,因为热爱,不觉疲惫!写作是让自己梳理思路的一个机会。古人说,有三类人,一类人深沉厚重,一类人磊落豪情、一类人聪明才辩。聪明才辩是学不了了,磊落豪情在骨子里有几分,愿学深沉厚重,下笨功夫。
中国的软件业发展短短几十年,在思想构建、方法体系乃至实践上仍有很多需要我们努力的地方,每一年都有人在问十年前就被问过的问题,说明有些路必须走过才知道,也说明如果能在走路的过程中给后来者一点点益处,也算是一桩好事!
特别感谢自己读高中时的班主任何老师,何老师教给我了独立思维,教我在写作功力扎实的基础上探索更有新意的内容。有一次作文课,何老师念了其他同学的两篇文章,课后跟我说到,其实我写得也不错,但也要给其他同学机会。我感受良多,也渐渐地学会了包容。
感谢同事、朋友的帮助,愿我们共同成长!
感谢我的妻子小娜对我的支持和帮助,感谢你不断鼓励和支持我去做新的尝试。我们的一对可爱的儿女也带给我很多欢乐。所谓幸福,大抵如此!谢谢你们!
于君泽(右军) 于成都
序2
为什么要写书呢?这要从我的切身体会说起,刚进入职场时自己的职业规划几乎为零,一心想着怎样尽快学习更多的技术和积累更多的业务经验,但现实是每天都深陷永无止尽的业务需求开发中。因为长期埋没于代码世界的浩大分工体系中,我无法看清从业务到系统架构的价值链条,无法清晰定义自己在分工体系中的位置,处理不好自身与技术、业务的关系。
我想,要是能有人帮我规划,我可能进步得更快。好在自己总能给自己打气(总觉得自己很棒),经过这么多年的摸爬滚打,终于摸索出相对清晰的职业发展路径。为了帮助和我一样致力于在IT道路上走得更远的人,我参与了本书的写作。
写书是一个重新梳理自己的知识体系的过程,也是重新梳理自己的逻辑思维的过程。写书和写公众号不一样,公众号只是分享一个知识点,而写书是分享一个相对完整的知识体系,需要思维逻辑更加缜密。当然,还要做好时间安排,我写书都是先在路上梳理思路,再回家写。
幸运的是,2018年有了儿子嘟嘟,当嘟嘟好奇地想摸电脑时,我会暂停写书陪他,假模假样地给他讲爸爸在干什么。当然,儿子也是自己写书的动力。
感谢右军、刘朋、彭首長、张洪亮,很荣幸和你们一起合作,虽然素未谋面,但我从字里行间可以感受到你们对技术的热情和真知灼见,希望我们能有更多的合作。
最后,郑重感谢妻子小何同学为我们的家庭做出的贡献。
李伟山 于南京
序3
我在2015年离开校园,现在还依稀记得当初刚刚入职的时候,公司里的高管和我们新入职的员工一起交流,他说:“一个程序员工作的前3年,肯定是他成长最快的3年”。我当时对这句话的理解还不够深,但随着自己慢慢地走过第一个3年,回首过去,发现在这3年里,自己确实经历了一个飞速成长的过程。但是,自己也曾迷茫、困惑。所以,我特别想把自己在这3年里总结的经验分享给其他人。
其实我很早就开始写博客了,有很多出版社的编辑找过我,也有很多读者问我能不能写本书,但都被我婉拒了,因为我始终觉得自己还需要沉淀一段时间。直到2018年,在我工作满三年,正有向其他人分享自己的工作经验想法的时候,右军找到我,说他想出一本关注程序员成长的书。我们一拍即合,马上就投入到了这本书的创作当中。
在写这篇作者感悟的时候,我简单回顾了自己的人生,觉得自己还是挺幸运的。初中升高中时压线升入一所省重点,高中升大学时压线考入自己想学的专业,大学毕业时也幸运地加入自己梦寐已求的公司。我在工作的这几年里一直积极跟进技术的发展,所幸丝毫没有耽误自己的成长,而且能坚持更新博客和公众号,收获了很多读者和粉丝。这可能就是所谓的“越努力越幸运”吧。
特别感谢本书的发起人右军的邀请,并感谢本书的其他几位作者:李伟山、刘朋、彭首長,还要感谢本书的责任编辑张国霞,以及为本书的写作做出很多贡献的杨彪,很荣幸能和大家一起完成这样一本书的写作!
感谢我的博客和公众号上一直支持我的读者和粉丝,是你们的每一次阅读和每一条评论给了我坚持创作的动力!
感谢我的女朋友对我的理解与支持!
感谢我的爸爸妈妈在我的成长道路上给我的包容与支持!
张洪亮 于杭州
序4
在刚收到右军的本书写作邀请时,其实我是拒绝的,因为当时的IT圈遍布裁员和996的消息,几乎所有人都在认真对待自己的工作,希望以更多的输出稀释空气中的那份压抑,我也希望把更多的时间和精力留给工作。
但是,人生总是有那么多的偶然性,一位已步入中年的员工在离职之际向我倾诉了他的迷茫、焦虑和无助。他在经历了多年的职业生涯后还是没能找到自己的职业方向,将大量的时间消耗在了十字路口的彷徨中,也没能让自己高效成长。风雨之中,这位中年男人疲惫地带着梦想蹒跚前行。他的倾诉也让我陷入了深深的沉思中,总觉得自己应该做些什么。于是,我加入了本书的写作团队中,与其他作者一起,把我们在互联网行业里走过的路、踩过的坑和做过的思考以文字的形式呈现给大家,希望对正在路上的朋友有所帮助。
特别感谢本书的几位作者:右军、李伟山、张洪亮、刘朋,我们齐心协力完成了本书的写作,我在该过程中也受益颇多,在技术和认知上都得到了提升。感谢本书的责任编辑张国霞,以及为本书的写作提供过很多帮助的朋友,特别是那些在百忙之中帮我找错别字的小伙伴:何宇、潘晨、杨笑美、赵元舒,大家辛苦了!
彭首長 于成都
序5
在一堂培训课上,关于领导力,一位技术管理者说:“领导力就是心存善念、劝人向善”,大家都在短暂的沉默后,被这有点“佛系”的说法逗乐了。但我认为,“心存善念、劝人向善”这八个字,不仅适用于技术领导者,还适用于程序员的成长。
例如,在下班之后,把刷微信的时间用在为GitHub上的开源项目贡献一些整洁的代码。也许你只是希望自己在用了这么多年开源项目之后,能够回馈社区。但你没有想到,在自己做技术面试时,面试官突然抛开你的简历,关注起你在GitHub上的技术贡献。
又如,当团队中的大多数人只关注项目进度,忽略了新增的代码是否让整个系统的架构变得愈发复杂时,你出于团队不要被“腐烂”的代码拖慢进度的想法,自告奋勇地用刚学的“整洁代码”技能,小心翼翼地把系统做了一次重构。当大家都觉得你“另类”时,你却发现自己不经意间提升了架构的技能,也进入了老板的后备架构师人才库。
对我来说,能够出版自己的第1本书,是因为右军推荐我在2016年的TOP 100大会上做分享;能够参与出版这第2本书,是因为自己不断参与社区的活动,与其他贡献者在不经意间碰撞出火花。
感谢技术社区的小伙伴们,以及我的同事和朋友们,和你们在一起,是我最快乐的时光!感谢本书的责任编辑张国霞,她对我们的延迟交稿表现出足够的耐心,在多次不厌其烦地审阅和校对过程中,都展现出极高的专业性,为本书增色良多。
特别要感谢的,是我的妻子和父母,没有你们的爱、支持和理解,这本书是不可能完成的。在所有的风景当中,你们都是最美的!
刘朋 于成都
第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
书写的很扎实,由浅入深。
2019-10-14
从技术到架构,从事到人,从业务到管理,本书为技术人员,提供了一条可复制的进阶之路。
2019-10-01