程序员修炼之道PDF+epub百度云下载-程序员修炼之道:通向务实的最高境界(第2版)豆瓣阅读

程序员修炼之道PDF+epub百度云下载-程序员修炼之道:通向务实的最高境界(第2版)豆瓣阅读

编辑点评:

程序员修炼之道:通向务实的最高境界(第2版)作者2011 年与前网易 COO 詹钟晖联合创办简悦(EJOY)游戏公司,兼任 CTO,现该公司已被阿里收购;在互联网、游戏界拥有较高技术影响力,常年发表博客文章,并著有《游戏之旅》及《Effective C++(评注版)》。

程序员修炼之道:通向务实的最高境界(第2版)豆瓣阅读

编辑推荐

适读人群 :无论你是一个新的程序员,一个有经验的程序员,还是一个负责软件项目的经理,都会通过本书获得个人生产力、准确性和工作满意度的提高,从中习得的学习技能、习惯和态度,都将是你在职业生涯中获得长期成功的基础。

屹立 20 年影响力大作,成功案例数以千万计,凌驾于任何语言|框架|方法之上。

面向未来重写全部内容,从程序员责任与职业发展,到灵活|易适配|可重用架构。

53个核心话题|99个高能提示,阐明软件开发走向卓越之路及途中各种典型陷阱。

编程界传奇人物云风操刀翻译,至理|奥义|案例|技巧之原著精微,无不掘至毫巅。

与“软件腐烂”做斗争

持续学习

避免知识重复的陷阱

写出有弹性、动态、适配性强的代码

驾驭基本工具的力量

避免依赖巧合编程

学习真正的需求

解决并发代码的底层问题

防范安全漏洞

建立务实程序员构成的团队

对你的工作和事业负责

无情而有效地做测试,包括基于特性的测试

组建务实的入门套件

取悦你的用户

内容简介

《程序员修炼之道》之所以在全球范围内广泛传播,被一代代开发者奉为圭臬,盖因它可以创造出真正的价值:或编写出更好的软件,或探究出编程的本质,而所有收获均不依赖于特定语言、框架和方法。时隔20年的新版,经过全面的重新选材、组织和编写,覆盖哲学、方法、工具、设计、解耦、并发、重构、需求、团队等务实话题的最佳实践及重大陷阱,以及易于改造、复用的架构技术。本书极具洞察力与趣味性,适合从初学者到架构师的各阶层读者潜心研读或增广见闻。

本书评价

这样的赞美一直不绝于耳:通过撰写一本书来推动整个行业,是 Andy 和 Dave 用《程序员修炼之道:从小工到专家》完成的一大壮举,无人可以超过。然而,有时两次闪电的确会击中同一个地方,这部名著的再版即为明证。其令人震撼的内容更新,足以确保自身在未来二十年里继续雄踞“精选软件开发图书”榜单之首,此可谓实至名归。

—— VM (Vicky) Brasseur

瞻博网络开源战略总监

如果想让自己的软件既领先于时代又易于维护,就在手边摆放一本《程序员修炼之道:通向务实的最高境界(第2版)》。本书充满实用建议,有技术方面的,也有专业方面的,无不能让你和你的项目受益多年。

—— Andrea Goulet

Corgibytes 公司 CEO

LegacyCode.Rocks 创始人

可以说,《程序员修炼之道》完全改变了我的职业轨迹,为我指明了软件领域的成功方向。正是这本书,开阔了我的视野,让我意识到自己不仅仅是庞大机器上的一枚齿轮,有朝一日也能藉由修炼成为匠师。它是我生命中重要的一本书。

—— Obie Fernandez

《Rails 之道》作者

初读此书的读者,在见识到那个软件开发实践的新世界时,立刻充满期待。而第一版图书,对塑造这样一个迷人的现代世界,的确厥功至伟。现在,第一版的读者将有机会在新版中重温旧梦,再次接受洞察力和实践智慧的洗礼,而《程序员修炼之道》当初正因此被奉为圭臬。更重要的是,经由两位专家亲手组织与更新的再版图书,业已因富含新知而重焕青春。

—— David A. Black

《Ruby程序员修炼之道》作者

旧版的《程序员修炼之道》一直驻留在我的书架上。从很久以前它改变我作为一个程序员的工作方式那一刻起,我读了又读。在这个全新的版本中,一切似乎都已改变,而一切又仿佛还在那里。虽然我们现在换用 iPad 阅读新版,其代码示例也改由现代编程语言实现——但是蕴藏其中的概念、思想和态度,亘古不变且通行宇宙。二十年过去,这本书的价值从未折损。现在乃至将来的开发人员,都有机会从 Andy 和 Dave 的深刻洞见中获益,正如当年的我一样,这让人备感欣慰。

—— Sandy Mamoli

敏捷教练

How Self-Selection Lets People Excel 作者

二十年前,《程序员修炼之道》的第一版彻底颠覆了我的技术生涯。这次的新版,也将对你有此影响。

—— Mike Cohn

《Scrum敏捷软件开发》

《敏捷估计与规划》

《用户故事与敏捷方法》作者

程序员修炼之道-通向务实的最高境界读后感

这本书很多年前读过一遍,当时就觉得如获至宝。如今读这本书第2版,书中提到的很多观点和方法如当年一样的触动着我,激励着我成为一名务实的程序员。

00

作者在前言中就列出了一个务实的程序员应该具有的五大特征。像能力陷阱里面所讲的那样,如果你想做出改变,首先要明确你想成为什么样的人,并像那样的人一样去做事。而这五大特征就是一个务实的程序员应该具有的。照着做,我也可以成为一名务实的程序员。务实的程序员的五大特征是:

要海纳百川。做早期的采纳者、快速的适配者,乐见新事物、快速学习,做一个多面手。

有好奇心。不懂就问、不耻下问。

有批判精神。思考自己的工作,做批判性的思考者。“听听你内心的蜥蜴”。不要依赖巧合,而是深思熟虑地编程。在编程时时刻注意你在做什么。做到可以向一个更初级的程序员详细解释一下自己写的代码。不要使用一个没有完全掌握的应用程序,或者使用一个并不理解的技术。只依赖可靠的东西,不要依赖假设,将假设文档化,而且不要只测试代码,还要测试假设。

要实事求是。保持现实主义。

关注技艺。

01

第一章从哲学高度讲述了一个务实的程序员应该具有的世界观或者是说思想框架,包括以下内容:

人生是你的,你有权选择。

提供选择,别找借口。对你的行为负责,诚实坦率地面对错误,依靠自己的专业性去解决问题。

不要放任破窗。不要搁置“破窗”(糟糕的设计、错误的决定、低劣的代码)不去修理,每发现一个就赶紧修一个。如果没有足够的时间完全修好,那么就把它钉起来(注释掉那些糟糕的代码,显示一行尚未实现的信息,或用假数据替代一下)。

不要打破窗户。如果身处一个健康的团队,你们项目的代码如此完美(编写清晰、设计优良、简洁优雅),你就要倾向于格外地小心,即使面临着截止时限、发行日期、销售演示等,也不要把它弄糟。

借鉴石头做的汤,做推动变革的催化剂;不做煮熟的青蛙,牢记全景。

够好即可的软件。将质量要求视为需求问题。

对知识组合做定期投资。

交流。说什么和怎么说同样重要。把文档嵌进代码去,而不要拴在表面。建议给模板和导出函数都加上注释,就能在其他开发者使用的时候给他们很大的助力。将非API的注释限制在只用来讨论其为何存在及其意图、目标。

02

第二章从方法的角度描述了务实的程序员所通用的一些技巧和过程,包括以下内容。

设计要灵活、易于变更。解耦、避免全局数据、尽量用接口表达多态、用委托提供服务、利用mixin共享功能、正交性、DRY(不要重复自己)、事件策略(有限状态机、观察者模式、发布/订阅、响应式编程与流)、变换式编程(所有程序其实都是对数据的一种变换)、使用外部配置参数化应用程序。

靠近问题域编程。构建内部语言花费的努力不要比节省下来的还多。建议仅当应用程序的领域语言开放给用户来写的时候,才选择外部语言。

用原型学习。任何有风险的东西、任何之前没有尝试过或对最终系统来说很关键的东西、任何未经证实实验性或可疑的东西以及任何让你不舒服的东西都需要原型,例如架构、已存在的系统中的新功能、数据结构或外部数据的内容、第三方工具或组件、性能问题、用户界面设计。

使用曳光弹找到目标。原型生成的是一次性代码,曳光代码是最终系统框架的组成部分。曳光代码可以让用户更早的获得能工作的东西,为开发者构造一个可以在其中工作的框架,这样你就会有了一个集成平台,有可以演示的东西,对进度有更好的感觉。

估算。通过估算来避免意外。挑选答案的单位来反映想要传达的准确性。估算要基于对问题的建模。估算的项目进度采用计划评估技术PERT(分为乐观的,最有可能的和悲观的估算)。当被要求做一个估算时说,可以回复“我等一下答复你”。

根据代码,不断迭代进度表。先完成初始功能的编码和测试,然后将其标记为第1次迭代的结束点。基于这个过程积累的经验提炼最终对迭代次数及每次迭代要做些什么的猜测。一次次的迭代下去,提炼出的东西会变得更好,对进度的信息也会随之增长。

03

第三章概括了务实的程序员用的称手的基础工具。包括以下内容。

纯文本。将知识用纯文本保存。

Shell命令。

编辑器。逐步游刃有余地使用编辑器。编辑时要自省,每次发现自己又在重复做某件事情的时候,要习惯性的想到或许有更好的方法,然后找到这个方法尽快把它内化成一种肌肉记忆,能做到这点的唯一方法,只有不断重复。

版本控制。

调试工具集。只是在解决问题并为此攻关。不要恐慌,去解决问题而不是责备。

一门文本处理语言。

工程日记。

04

第四章务实的偏执中指出务实的程序员连自己也不相信,他们会构建一系列的防御机制。这一章就是对这些防御性机制的描述。包括以下内容

契约式设计。通过契约进行设计。如果调用者满足了所有前置条件,则应保证在完成时所有后置条件和不变式都为真。

尽早崩溃。

使用断言去预防不可能的事情。

保持资源的平衡。有始有终,分配资源的函数和对象对释放资源应负有责任。局部行动。对于大多数应用程序,我们可以为每种类型的资源都做一个封装器,使用这些封装器去跟踪所有的分配和释放操作。

不要冲出前灯范围。小步前进,由始至终。

05

第六章针对并发这一具体问题梳理了一些技巧和方法,包括打破时域耦合,通过分析工作流来提高并发性;让资源具备事务性;随机故障通常是并发问题,用角色实现并发性时,不必共享状态,使用黑板来协调工作流。

第七章除了谈在当你编码时要不断思考、敏感注意到问题、深思熟虑地编程,以及重构、测试和测试驱动开发等方法和思想,更加强调了要保证系统的安全性。保证系统安全性的基本原则包括将攻击面的面积最小化、最小特权、安全的默认值、敏感数据要加密和维护安全更新等。

第八章介绍了令人头疼的需求之坑的解决方法。无人确切知道自己想要什么。程序员帮助人们理解他们想要什么。需求是从反馈循环中学到的,和用户一起工作,以便从用户角度思考。需求中的策略是元数据。记得维护一张项目术语表。

第九章作者讲了如何做一个务实的项目。

有一个小而稳定的团队。

用前面务实的哲学、方法和工具等。

取悦用户。用户真正要的不是代码,他们只是遇到某个业务问题需要在目标和预算范围内解决,他们的信念是通过与你的团队合作能够做到这一点。所以取悦用户,而不要只是交付代码。

自动化。不要使用手动程序,一切都要依赖于自动化。在匿名云服务器上构建项目自动部署。

如何成为一名务实、高效、多产的程序员?

程序员是什么?

问了身边同事,不同人不同答案。

一个做运维的小伙子说:"程序就是一段上千行的解决问题的代码,有时候为了维护它,痛苦地想打人。编写这段代码的程序员脑袋里装的都是些啥?"

一个发际线已开始后移的做架构设计的同事回答说:"程序员就是为了实现文档上指定功能,而搬运代码的高级搬砖工。

整个月不说一句话的做后台算法的同事说:"程序员,就是写一堆机器语言,让机器通过认识你的输入完成你想要的输出的高级人机译者。"

我们姑且不论他们的回答是否正确,因为每个人对程序员有着不同的看法与见解。

最近看了《程序员修炼之道:通项务实的最高境界》这本书,书中的许多观点可以为程序员,提供更加冷静的视角去重新审视程序员角色,并为程序员的工作提供一些思路与方法。

它告诉我们如何成为务实的程序员,更好地编写软件,探究编程的本质。这本书于2020年再版,与其说是第二版不如说是上一版的进化。书中覆盖了哲学、方法、工具、设计、解耦、并发、重构、需求、团队等内容。无论是初学者还是高级架构师都能从作者思想的洞见中获益。

作者Andrew Hunt,是一位软件开发类作家,同时也是一位冷科幻作家。这本书是他与David Thomas合著的具有开创性的书籍。除此以外,他还著有《程序员修炼之道》、《程序员思维修炼》、获奖作品《高效程序员的45个习惯:敏捷开发修炼之道》等书籍,还发表过许多文章。

我从事软件开发工作八年有余,从一开始的"hello World!"入门,到现在的算法设计、架构设计、方案设计,虽没有大牛们服务亿万级用户的经验,但是也编写运行了5年的代码,大大小小的项目也经历过十多个,一路走来小有收获。

直到看了这本书后,才意识到自己很多时候违背了一些原则、犯了完美主义的错误。比如,还没有等到完善功能就重构代码、各个模块耦合度极高,致使出现了牵一发而动全身的情况等等。

一开始很难发现这些错误,直到经历了足够多的项目。这或许就是成长的代价吧。如果能早点遇到这本书,就可以一定程度上避免工作中一些不必要的坑,成为更务实、更高效的程序员。

正如书中所讲:"如果遵循我们的方法,你将快速获得经验、提高生产力,并且更好地理解整个开发过程。最终,你会写出更好的软件。"

01.务实的哲学

务实的编程源于务实的思考哲学。

务实的程序员在面临问题时有着怎样的态度、风格及理念呢?从大局着想,越过表面问题,以更宽的视角综合考虑并结合实际,做出明智的妥协和合理的决策。

比如书中提出够好即可的理念,给了我很大的启发,这也是程序员常犯的错误。

为了追求更好,我们损毁了原已够好的。—莎士比亚《李尔王》

我几年前参与一个十分重要的十三五升级改造项目,自己承担后台计算部分,与其他同事合作完成一个较为大型的项目,有的同事负责UI,有的同事负责硬件的信号处理,有的同事负责日志处理,有的同事负责数据库部分。

我在项目的开发中,遇到了这本书上讲到的几乎所有的问题。一开始我们总想把软件做的无懈可击,总想以高屋建瓴的姿态去完成该项目,于是在项目过程中一遍又一遍的修改着自己的设计方式。在整个项目开发中,自己查阅了200多篇中外文文献,看到一篇别人做了很好结果的方法总想移植到该项目中。结果导致在项目节点的交付中,虽然完成了所列的功能,但并没有彻底地解决问题,更多的是以一种掩盖问题的方式交付了第一版。

作者指出,“够好即可”这个词并不意味着草率或糟糕的代码。所有系统必须达到基本的性能、隐私和安全标准。你做的东西,从用户需求角度来说是否够好?最好还是留给用户来参与评判。

正如本书所讲的,现实世界不会让我们生产出完美的产品,完全无bug的软件。

整个过程我们缺少让用户(甲方)参与的机会,很多时候细化的需求都是我们小组自己头脑风暴出来的。其实,我们应该倾听用户的需求,因为他们比我们更加理解作为用户的需求是什么。

完成软件项目的过程,更应该像是完成一副绘画作品。从一开始明确整个作品的基调,绘制作品的框架,而不是一开始就去扣作品的细节,比如用什么设计模式,什么算法去实现某些功能。一开始应该明确整个项目的架构,整个项目所用的交互方式,所用数据库等基本问题。

"艺术家会告诉你,如果不知道什么时候该停止,那么所有的努力就都白费了。如果你不断地在画布上层层叠加,用细节盖细节,最终的作品就会迷失在各种颜料中。"

02. 务实的运筹

没有作家,故事不会被写出来;没有演员,故事无法获得生命。—Angie-Marie Delsante

作者用并发来描述可以并行处理的问题与技术,似乎是讲给小白们听的,老鸟们对并发、并行、多线程、多进程应该再熟悉不过了。对于复杂的程序软件来说,若存在大量可并行的程序模块,起先还是应该采用活动图来确定。一个朋友说,世界上最复杂的软件除了操作系统就是浏览器了,这也就是为什么至今国内还没有一个完全意义上自主的操作系统或浏览器内核。

浏览器说简单点,就是字符串形式的html的格式解析。假如你写出了这样的内核,而且通过你的界面已经渲染出来了。你还会遇到性能问题,为什么别人的浏览器如此流畅,而你的浏览器可能连一个google搜索栏显示都卡得要命。这也就是并发的重要性,它涉及到太多可并发的模块与模块间的纵向与耦合编程。

图中,倒数第二列为线程数,一共有7个进程,几乎是一个网页一个进程。

这也是我们经常遇见的问题,当你编写一个软件后,你以为似乎完成了所有的功能。可是系统一旦有异常值或边界值的输入,你的软件就crash了。接着你查资料,换了一种方法解决了这个问题。然而在进行其他测试时,程序又crash了,你就会在不断的crash之中崩溃掉。

此时,我们应该停下来想一想,这种打补丁的方式是否存在问题,可否跳出来,用图的方式让我们更加明晰问题的关键节点所在,或者是否可以通过优化程序处理的线程方式与并发来提高工作效率……

笔者在开发过程中也遇到了作者所讲的问题,比如共享数据队列怎么处理、共享资源怎么做、信号量、资源锁、原子性等问题。这些问题都是实实在在的。

我的想法是,遇到类似问题的开发人员,可以自己编写出适合于自己的通用模块。能自己封装出适合自己的信号量、共享队列、资源锁,那就再好不过了。

因为几乎所有并发资源共享问题,都可以使用自己编写的模块来解决。为什么使用自己编写的模块,而不是使用现有的模块呢?一是你可以提升自己对于底层实现的理解;二是一旦对共享资源队列有什么特别的需求,你就可以修改,甚至可以提升效能。一开始可能比较痛苦,但是你会发现你付出的努力是值得的。

03.务实的依靠

在L组里,斯托弗管理着六个一流的程序员,这在管理上的挑战与养猫差不多。——《华盛顿邮报》杂志1985年6月9日刊

在软件开发团队中,合作精神的重要性不言而喻,团队可以只有几个人,也可以有成千上万人,持续时间也可以是一年或者几十年不等,比如Linux内核团队。在大多数开发任务中,根据不同的功能点,把团队划分为若干个小的团队,人员也比较稳定,充其量也就是10-12人左右。团队之间相互信任,相互依赖。

团队交流协作

团队是一个整体,团队成员之间的磨合极为重要。能保持合作的默契和沟通的顺畅再好不过了,实在不行还可以通过条约来约束。

团队是一个整体,遇到小问题要积极地修补处理。团队必须对产品的质量负责,质量的保障有赖于团队每个成员的自发的贡献而不是来源于质量管理人员的监督。

团队的交流,包括对内交流与对外交流。大多时候程序员,喜欢埋头根据需求文档在自嗨的高潮中写代码,就像自我陶醉于一个人的摇滚。

然而交流是整个开发中的重中之重,自我陶醉于技术,容易忽略客户的需求,忘记了客户至上的理念。软件开发并不是炫技。客户的需求才应该是我们所追求的,不要认为客户什么都不懂,而是要耐心的听他们讲完,与他们多多沟通,与客户协调。因为只有沟通协调才能让我们技术得以落地。

团队内部的交流与沟通,是落实需求的重要手段。我们不能认为小白就比老鸟菜差,软件开发涉及方方面面,我们也不可能对所有领域都了如指掌。应该养成不断学习的习惯,秉持谦虚谨慎的态度。

团队本就应该是一个整体,若有什么想法,要及时沟通协调。劲往一处使,早日做出满意的产品。把问题留在团队内部消化解决,以最好的状态去完成软件开发,鼓励每个成员积极监控环境变化。保持清醒,对任何有风险的东西,都要留心。积极度量新需求,不要抗拒变化。

结语

读了这本书,我感到它将会给我的职业生涯以有力的指导。

它不仅仅提示了软件开发中需注意的地方和要规避的风险点。其务实的思维方式有着更广阔的适用边界,其他职业的人也可以迁移借鉴。

尽管我已经经历过若干项目,但依然认为这本书上罗列的99个提示,需要多加注意。我期望通过对这本书的研读,好好地总结自己这些年的得失,更好地面向未来,以更加积极的心态与状态去工作。

程序员修炼之道:通向务实的最高境界(第2版)豆瓣阅读截图

程序员修炼之道PDF+epub百度云下载-程序员修炼之道:通向务实的最高境界(第2版)豆瓣阅读插图(1)程序员修炼之道PDF+epub百度云下载-程序员修炼之道:通向务实的最高境界(第2版)豆瓣阅读插图(2)程序员修炼之道PDF+epub百度云下载-程序员修炼之道:通向务实的最高境界(第2版)豆瓣阅读插图(3)程序员修炼之道PDF+epub百度云下载-程序员修炼之道:通向务实的最高境界(第2版)豆瓣阅读插图(4)程序员修炼之道PDF+epub百度云下载-程序员修炼之道:通向务实的最高境界(第2版)豆瓣阅读插图(5)

评分及评论

无用户评分

来评个分数吧

  • 5 分
    0
  • 4 分
    0
  • 3 分
    0
  • 2 分
    0
  • 1 分
    0

Comments