由于此商品库存有限,请在下单后15分钟之内支付完成,手慢无哦!
100%刮中券,最高99元无敌券,券有效期7天
活动自2017年6月2日上线,敬请关注云钻刮券活动规则更新。
如活动受政府机关指令需要停止举办的,或活动遭受严重网络攻击需暂停举办的,或者系统故障导致的其它意外问题,苏宁无需为此承担赔偿或者进行补偿。
[湛庐店]软件设计的要素 麻省理工学院 计算机科学和人工智能实验室副主任 丹尼尔·杰克逊全新力作
¥ ×1
“卓越工程师”系列
为什么有些软件设计得如此成功、
而有些却很失败
麻省理工学院
计算机科学和人工智能实验室副主任
丹尼尔·杰克逊全新力作
《软件设计的要素》
(平装)
微软(中国)公司首/席技术官韦青
倾情作序!
CSDN高/级副总裁李建忠
利默里克大学Lero首/席科学家巴沙尔·努塞贝
莲花公司创始人米切尔·卡普尔
《计算机程序的构造与解释》作者哈尔·阿伯尔森
马里兰大学计算机科学系教授本·施奈德曼
谷歌用户体验总监伊丽莎白·丘吉尔
《看见并解决数字医疗问题》作者哈罗德·莱姆布莱比
《人月神话》作者小弗雷德里克·布鲁克斯
联合推荐!
l 分类:管理/工程师思维
l 书名:《软件设计的要素》
l 作者:丹尼尔·杰克逊(DanielJackson)
l 译者:何雯 赵丹
l 定价:99.90
l 开本:16K
l 页码:248页
l 字数:236千字
l 印张:15.50
l 出版时间:2024年6月
l 策划编辑:安烨
l 责任编辑:王春雨
l 出版社:湛庐文化/浙江教育出版社
l 图书品牌:湛庐文化·心视界
l ISBN: 9787572279195
l CIP: 图书在版编目(CIP)数据: I. 1软... II. 1丹... 2何... 3赵... III. 1软件设计 IV. 1TP311.5
这是一本从概念的角度理解软件的书。一直以来,概念从未被放在软件设计的中心位置,而本书作者丹尼尔·杰克逊试图用概念来描述软件以及软件设计,从概念的角度来解释软件形成一个整体的方式,并通过概念来呈现软件成功或失败的原因。
这本书包括三部分。第一部分介绍了概念的含义以及作用;第二部分从概念的结构、目的等要素详细介绍了概念的含义;第三部分解释了在软件设计中使用概念的原则。
可以说,这本书关于软件设计的哲学,不管是专业的软件设计师还是业余的软件使用者,都可以从这本书中获得理解软件的新视角。
l 为什么有些软件设计得如何成功,而有些却很失败?为什么概念对伟大的设计很重要?
l 对于软件设计师而言,哪些设计原则有利于创造一个好软件?
l 我们常用的软件如苹果电脑中Mac系统的废纸篓,其本质是什么?
l 机票预订软件往往会用什么潜规则来牟取更多利益?
在《软件设计的要素》中,丹尼尔·杰克逊向读者展示了一些精彩和常见的软件案例,不管是软件架构师、程序员还是使用软件的普通读者,都可以从这本书中看到潜伏在日常软件界面之下的底层概念,从而更好地设计、使用软件。
丹尼尔·杰克逊
l 麻省理工学院(MIT)计算机科学系教授,计算机科学和人工智能实验室(CSAIL)副主任。美国国家研究院(National Academies)关于软件可靠性研究的负责人。因其对软件研究做出的贡献,获得美国计算机协会(ACM)颁发的“影响力”奖和“杰出研究”奖,
l Alloy软件建模语言的首/席设计师,与美国国家航空航天局(NASA)、哈佛大学麻省总医院(MGH)以及丰田公司开展过软件项目合作。
1.设计思维可以独立于任何特定领域,这可能是其具有广泛吸引力和适用性的关键,但这也是它对软件设计这种特定领域面临的深层挑战没有任何洞见的原因。
2.在开发软件时,成功的决定因素不在于使用了蕞新的编程语言和工具,或者遵循了管理流程(敏捷或其他方式),甚至不在于如何构造代码,而在于知道自己想要做什么。
3.任何关于设计的讨论都必/须围绕基本概念,并评估概念采用的行为模式是否符合它的目的。
1.设计需要看起来像是一个人的作品,哪怕它是由一个大型团队共同完成的。
2.设计中潜在的复杂性要让位于简单的作品形象。
3. 一个概念复杂或烦琐的软件不太可能带来良好的用户体验,不管它的形式多么出众。
4.确保安全蕞好的方式不是没有安全漏洞,而是通过设计保证即使存在安全漏洞,系统仍然是安全的。
5.要针对用户真/正的需求进行设计,而不是以一种更容易的方式进行设计。
推荐序 像工程师一样思考 韦青 微软(中国)公司首/席技术官
中文版序 概念,一种全新的软件设计方式
前言 为什么有些设计如此成功,而另一些却如此失败
引言 一场富有成效和愉快的对话
第一部分 概念,设计引爆与出圈的核心
01 概念就像分子,成功的软件不可或缺
02 掌握概念起作用的原则,做出更好的设计
第二部分 概念与要素,系统构建起成功设计的框架
03 概念的结构,从样式概念到预订概念
04 概念的目的,以用户需求为中心
05 概念的组合,造就意想不到的力量
06 概念的关系,让设计的顺序更合理
07 概念的映射,从底层概念到物理界面
第三部分 谨记概念的原则,让好设计源源不断
08 概念的特性,概念与目的一一对应
09 概念熟悉性,好用的概念常常可以重用
10 概念完整性,一旦违反需要努力修复
结语 厘清概念的迷思,让你的软件设计更出彩
致谢
附录与参考文献
韦青
微软(中国)公司首/席技术官
《软件设计的要素》很好地概括了软件行业专业人员走向卓/越的核心要素。随着生成式AI的快速发展,整个科技行业将迎来范式转换。在面对像大型软件这样的复杂系统时,那些凝聚人类顶/尖工程智慧的结晶,对于人类如何与AI进行协同创新,更显得弥足珍贵。
李建忠 CSDN高/级副总裁
很难抑/制我对这本书的兴奋。它的思想新颖而朴实,激进而清晰,深刻而简明。在未来的几年里,我会反复阅读它。这是我们学科中的里程碑。
巴沙尔·努塞贝
利默里克大学Lero首/席科学家
多少赞美之词也不足以表达我对这本书的喜爱。对关心软件设计的人来说,这是一本必/备读物。其实用的框架为思考和进行软件设计提供了一种普世、有用的方法。
米切尔·卡普尔
莲花公司创始人
丹尼尔·杰克逊的概念是计算机系统设计的突破,将软件工程与人机交互相结合。概念是我们都应该使用的框架,不管是学生还是蕞有经验的软件行业从业者,都可以从这个框架中获益。
哈尔·阿伯尔森
《计算机程序的构造与解释》作者
丹尼尔·杰克逊的这本书将成为《人月神话》那样的经典,成为制作优/秀软件产品和工具的有影响力的指南。在这本书的帮助下,软件设计师将以更开放的心态、更清晰的思想和更优/秀的能力来工作。
本·施奈德曼
马里兰大学计算机科学系教授
这本书创造性地将软件开发看作一门设计学科。杰克逊采用真/正以人为本的方法,通过许多丰富的例子,为我们提供了重新思考软件设计的工具,使其更加有用和实用。
伊丽莎白·丘吉尔
谷歌用户体验总监
无论你使用什么系统或语言,无论你是新程序员、资/深程序员还是研究人员,本书新颖而深刻的软件概念将改变你对设计、软件和编程的看法。这是一本具有里程碑意义的书,将使数字世界变得更美好。
哈罗德·蒂姆布莱比
《看见并解决数字医疗问题》作者
丹尼尔·杰克逊的《软件设计的要素》是一部不朽的作品。它为我们思考软件设计提供了一种新的概念角度。本书使用了绝大多数读者知道的现代案例,每位软件工程师都会在其中找到一些有价值的东西。
小弗雷德里克·布鲁克斯
《人月神话》作者
像工程师一样思考
韦青
微软(中国)公司首席技术官
何为工程师?首先我们要理解何为工程。按照《说文解字》的解释,“工”有巧饰的意思。南唐文字训诂学家徐锴说:“为巧必遵规矩、法度,然后为工。”“程”有路程、过程、步骤或者规程的含义。“工”与“程”二字结合起来,就是按照一定的流程、标准和规则精巧地创造有价值的器物和培养能力的 过程。再加上一个“师”字,强调的就不仅是做这件事的过程与结果了,还强调做这件事的人。
中国是一个工程师大国,依靠着千百万名勤勤恳恳、任劳任怨的工程师,为人类做出了众多伟大的工程成就,为百姓福祉、社会进步、民族复兴和国家 兴盛做出了巨大的贡献。但我认为,工程师作为一种极具专业性的职业,并未得到应有的关注和尊重。
人们很容易凭表象把工程师理解成一群只知“苦哈哈”埋头工作、缺乏情趣之人。同时,由于社会,甚至包括工程师群体自身对工程师这种职业的偏 见、轻视或者抵触,人们经常不重视工程师这种伟大职业的终身能力培养,过 多地把心思放在对工程师职称的计较上,有时甚至会为应该称某人为工程师还 是高级工程师而争得面红耳赤。殊不知,工程师是一种值得一个人终身追求的 “职业”,为人类做贡献则是这种伟大职业的职责。一名工程师可以因为对社 会做出的贡献而获得应有的“职称”,但是反过来,如果有了职称而没有实现 对社会的贡献和自身能力的终身培养,那么这种职称反而会成为阻碍自身发展 甚至破坏自身职业成长的枷锁。
“卓越工程师系列”的两位作者,一位是来自优步、雅虎等顶尖企业的工程主管威尔·拉森(Will Larson),他是享誉世界的工程师,他通过《技术领导力的要素》(Staff Engineer)与《工程管理的要素》(An Elegant Puzzle) 两本书告诉我们,一名工程师的成长路径是怎样的。一名优秀的工程师,绝不会仅靠努力工作就能实现自己的追求;一名优秀的工程领导,也绝不会仅凭拥有一个看似耀眼的头衔就能够管理好工程项目与团队。
对一名工程师而言,对技术的掌控力和对技术趋势的洞察力是其最基本的技能。除此之外,所有人应有的“软实力”,比如待人接物、组织建设、协调沟通、推广交流和应对复杂与不确定性的本领与实践,也是一名工程师不可或缺的基础能力。为什么?因为工程师也是人,或者说,工程师首先是人。
在本系列的第三本书《软件设计的要素》中,作者丹尼尔·杰克逊向工程师们提出了一个尖锐的问题:为什么有些软件设计得一鸣惊人,而有些却一败涂地?软件是一个复杂的巨系统,这本书以系统化的视角和以人为本的价值观,为软件设计者提供了一个全新的变革性视角。
在我看来,要想成长为一名优秀的工程师,首先要学会如何做人。人都做不好,如何做好一名工程师?
其次,要有科学精神和技术能力。想要高效解决复杂系统性问题,预见尚不存在的“结构”,做到跨越性创新,工程师思维是一个可以安心依靠的利器。
工程师不只要做事,而且要务实且有效地做事。工程方法与科学精神和技术能力构成一个有机的整体,相辅相成,唯一的不同是侧重点不同。科学重在永无止境地探索,不怕犯错,永远在改错的路上;技术重在能力的提高,不断利用科学知识的进步和工程实现的结果拓展技术能力的边界;而工程方法则是在有限的条件下灵巧、务实地实现人类的共同目标。
那么如何“务实”,如何“探索”,如何“提高”,如何“灵巧”?这就是湛庐文化“卓越工程师系列”图书希望给读者带来的答案。
要是由我来总结,我可以说这套书是由两名始终在工程一线的工程师写下来的实践之学,不是让我们照搬照抄的,而是拿来借鉴和体悟的。如同近来大火的《奥本海默》电影中的一句台词:“······理论只能把你带到这么远······” 剩下的都是工程的实践,但实践是最难的,因为它要变成一种习惯。
悟性就在你的脚下。
[中文版序]
为什么有些设计如此成功,而另一些却如此失败
概念设计是一个简单的理念,你无须掌握任何复杂的技术就可以将其应用在软件的使用或设计中。我举的很多概念示例都是生活中常见的。因此,如果你在阅读本书后认为概念是一种自然而然甚至显而易见的用以思考软件的角度,并且认为你学到的只不过是实现设计想法的一种系统框架,那么这本书就达到了它的目的。
但是,即使这本书的主题看起来很常见,并且引起了你的共鸣,但我猜想对于许多读者来说,这种思考软件的新方式也会让他们感到迷惑,至少一开始会这样。尽管软件设计师几十年来一直在谈论概念模型及其重要性,但是概念从未被放在软件设计的中心位置。如果采用概念来描述每个软件或者系统,那么设计将会是什么样子?这些概念到底是什么?它们是如何构建的?软件设计师又是如何将它们组合在一起形成一个整体软件的?
我对本书进行了特别的编排,以便抱有不同目的的读者可以在书中经历不同的旅程。有些读者可能希望尽快用本书的内容指导实践;其他一些想要更深入了解的读者则可能愿意跟随我暂离主路,略微绕行。这个前言可以帮助不同的读者规划自己的路线。
如果你也对软件设计感兴趣
简而言之,本书的目标读者是任何对软件、设计或可用性感兴趣的人。你可能是程序员、软件架构师或用户交互设计师,也可能是顾问、分析师、项目经理或营销人员,还可能是计算机科学专业的学生、教师或研究人员,或者只是像我一样,喜欢思考这些问题:为什么这样设计,以及为什么有些设计如此成功,而另一些却如此失败。
本书不需要读者具备计算机科学或编程的知识。虽然书中的许多原理可以用逻辑语言更精确地表达出来,但并不需要读者具有数学背景。为了尽可能吸引更广大的读者,我从各种广泛使用的软件中寻找案例,不管这些软件是文字处理软件还是社交媒体平台。因此,每个读者都可能遇到一些易于理解的案例,也可能遇到一些需要付出一定努力才能明白的案例。
我希望阅读本书能为你带来另一个好处:更扎实地掌握那些你正在使用但还未能完全理解的软件。
软件设计令人兴奋,也需要智力
本书有三个相互关联的目标。第一个目标是介绍一些简单的技术,软件设计师可以立即运用这些技术来提高设计的质量。本书可以帮助你确认并厘清基本的概念,阐明这些概念并使它们变得清晰和更具健壮性。无论你处于设计的什么阶段,是最初想象和塑造软件的战略设计阶段,还是已明确软件与用户交互的每个细节的晚期阶段,这本书都能帮助你更好地设计软件。
第二个目标是提供一个看待软件的全新视角,这样你不仅可以将软件视为大量功能交织的组合,还可以将其视为概念的系统组合。其中有一些概念是经典且易于理解的,而另一些则是新颖且独特的。有了这个新的视角,软件设计师可以更有效地专注于他们的工作;用户可以更清晰地理解软件,这样双方都能够更充分地挖掘软件的全部潜力。
第三个也是最后一个目标,这个目标更具一般意义,也许因此更容易实现,那就是为了让从事软件应用和开发的研究人员和从业者相信,软件设计是一门令人兴奋且需要智力的学科。
在过去的几十年里,尽管人们越来越认识到软件设计的重要性,但对它的兴趣已经减弱了,尤其是在面向用户的方面。这种现象的部分原因是人们存在一种误解,认为内在的设计对软件几乎没用。这样的判断是主观的,或者我们可将其视为心理或社会问题,该判断更多的是关注用户,而不是软件本身。
在我看来,经验主义在软件实践中的兴起,是由于人们认识到,即使是最好的设计,也会存在某些只有通过用户测试才能发现的缺陷。这削弱了我们对设计的热情,也让很多人开始怀疑设计专业的价值。但我相信,在绝大多数时候,我们对软件设计缺乏敬意和认知,是由于我们关于软件可用性的想法更多地基于不可靠的经验,而不是基于丰富的理论。我希望通过这本书能证明这样的理论确实存在,并鼓励他人进一步发展和完善这些理论。
如何选择适合自己的阅读方式
根据你的目标,你可以采用不同的方式阅读本书。这里将帮你了解本书的结构以及每部分的内容。
引言解释了我为什么写这本书,以及我感兴趣的这个问题为什么在其他领域,如在人机交互、软件工程和设计思维领域中还没有得到解决。第一部分包含两章。在第 1 章,我们将看到第一个概念案例,以及概念对可用性的影响,我还将说明概念设计在用户体验中的首要地位。第 2 章列出了概念对软件差异化和数字化转型的关键作用。
第二部分是本书的核心。其中第 3 章明确阐述了什么是概念以及它的构成。第 4 章介绍了概念目的,它是软件设计的动机和标准。第 5 章展示了如何将软件或系统理解为通过简单但强大的同步机制组合在一起的概念,解释了同步机制的过度与不足对可用性的影响。更微妙的是,有一些我们在传统上认为复杂和不可分割的特征,可以理解为不同概念的协同组合。第 6 章展示了 将概念映射到用户界面并不总像想象的那样简单,并且有时设计的问题不在于概念本身,而在于用户界面的实现方式。第 7 章介绍了一种方法,可以从高层次上将软件结构视为相互依赖的概念集合。概念的有效运作需要的不只是概念之间的相互关联,因为某些概念组合只有在软件中才是有意义的。
第三部分介绍了概念设计的三个关键原则:概念应该是具体的,与目的一一对应;概念应该是人们熟悉的;概念应该是完整的。
从第 1 章开始到第 10 章,每章都由内容的预览来引入。你可以提前阅读这部分,以便快速了解每章的内容。
如果你想直接深入了解本书的主要内容,可以从第二部分开始阅读,第一部分也可以作为结论来阅读,这一部分总结了本书可以应用的思想。每章末都有可以立即应用的练习。
[内文]
一个软件,从运行于手机上的最小程序到大型的企业系统,都是由概念组成的,每个概念都是独立的功能单元。尽管概念为一个更大的目标协同工作,但我们也可以将它们视为相互独立的个体。如果将软件视作一种化学混合物,那么概念就像是分子:虽然相互结合在一起,但无论在哪里出现,它们的属性和行为都是相似的。
你对很多概念已经很熟悉了,并知道如何与它们进行互动。你知道如何打电话或预订餐厅,如何在社交媒体的论坛中为评论点赞,以及如何在文件夹中整理文件。一个包含常见概念且设计良好的软件会更加易于使用,只要软件设计师可以将这个概念在用户界面中忠实地呈现出来,并通过编程正确地实现这个概念。相比之下,一个概念复杂或烦琐的软件不太可能带来良好的用户体验,不管它的呈现形式多么出众或算法多么高明。
概念没有可视化的形式,它们非常抽象,这也许就是概念直到现在还没能成为人们关注的焦点的原因。我希望本书的内容可以让你相信,通过从概念的角度进行思考,并通过“看穿”用户界面背后的概念,你能够更深入地理解软件,从而更有效地使用它、更好地设计它、更精确地诊断缺陷,并在设计新的软件时更有重点,也更有信心。
我们通常不会去想正常运转的东西是如何工作的,除非它出了问题。你本以为家里的热水器可以源源不断地产生热水,直到有一天,家里有人洗澡的时间过长,轮到你洗澡时水变凉了,此时你可能才会意识到热水器是一个容量有限的储水箱。
同样,要想了解概念,我们需要看看当它们出问题时会发生什么。因此,本书的大部分内容都是失败的概念案例,这些案例发生在看似不可能的场景中,或者难以理解。在本章中,我们将看到关于概念的第一批案例,以及它们如何解释软件一些意想不到的或令人惊讶的复杂行为。
但你不要因此就排斥概念,或者认为概念的思想是模糊的、复杂的。相反,概念的思想简单明了,采用概念能够帮助你设计出比我们现在使用的大部分软件更简单、更强大的软件。
令人困惑的备份
为了避免我的工作遭受磁盘损坏或意外删除的影响,我使用了一个很棒的备份软件 Backblaze,它可以将文件复制到云端,并在用户需要的时候恢复文件的旧版本。它在后台持续运行,“监视”着电脑里的每个文件,如果文件发生变化,它就会即时将其复制到云端。
最近,我编辑了一段视频,我想在删除旧版本以腾出存储空间之前,确保新版本已有备份。我检查了备份的状态,它显示“你已备份:今天下午 1:05”。因为我确实是在下午 1:05 之前编辑了这个视频,所以我认为它有了备份。但当我试着从云端恢复这个视频时,才发现那里并没有它的备份。
我联系了Backblaze 的技术支持人员,他们跟我解释说,Backblaze 并不是持续备份文件的,而是通过定期的扫描,汇总出新的或修改过的文件列表;当下一次进行备份时,只有该列表上的文件才会被上传到云端。因此,两次扫描之间发生的文件变化,得在下一次扫描时才会被发现。
他们告诉我,我可以单击“立即备份”按键来强制 Backblaze 重新进行扫 描。我听从了这个建议,然后等待扫描和后续备份的完成。这时我相信新视频一定会出现在上传云端的列表中了!然而我并没有这么幸运。我已经完全糊涂了,于是再次请求帮助。原来,我的视频已经上传了,但只是上传到一个特殊的“暂存”区域,文件要每隔几小时才会从这个区域移动到恢复区域。
我的问题在于误解了Backblaze 中关键的备份概念。我曾设想文件是持续上传的,并直接移动到恢复区域。但实际上,Backblaze只上传最近一次扫描生成的列表上的文件,并且在从“暂存”区域传输到恢复区域之前的一段时间里,用户仍然无法下载这些文件。
这只是一个小例子,但它表达了我的关键要点。我并不是想说明 Backblaze 的设计存在缺陷,尽管我认为它的确还可以得到改进。当然,如 果我只按照表面的意思去理解备份,而不知道有扫描这样一件事,我可能就会丢失一些重要的文件。
我想表达的是,任何关于设计的讨论都必须围绕基本概念(在这个例子中就是备份概念),并评估概念采用的行为模式是否符合它的目的。用户界面也很重要,但在一定程度上用户界面只是服务于概念,并将概念呈现给用户。如果我们想让软件更好用,就必须从概念着手。
亲,大宗购物请点击企业用户渠道>小苏的服务会更贴心!
亲,很抱歉,您购买的宝贝销售异常火爆让小苏措手不及,请稍后再试~
非常抱歉,您前期未参加预订活动,
无法支付尾款哦!
抱歉,您暂无任性付资格
