好书推荐:简单之美—软件开发实践者的思考_zxk @ sise_百度空间
试读:

内容简介

本书不是一本关于方法论的理论性书籍(尽管已经尝试在大量的思考上进行一些理论归纳),也不是一本关于具体技术的操作手册。本书为读者呈现的是作者在软件 开发实践中的思考和体验,目的在于探究实践中的问题的根源,并给出思想上的解决之道。

本书以软件开发的基本顺序为主线,以简单、想象和文化的开发思想为线索,以为软件开发实践提供指导价值为目标。本书力图做到传递经过组织的、可操作的软件 开发经验,使软件开发领域的新手在知识(软件开发思想)积累过程中少走弯路,也使软件开发领域的老手可以对照自己的经验把可能的困惑降到{zd1}。有一些有趣 例子为那些有价值的思考提供支持。

本书中,作者尝试对简单、想象和文化做一些形而上的思考。这些思考会比较抽象,但却是很多话题的基础。

作者

倪健,资深软件工程师、项目经理和架构师,拥有12年IT行业从业经验。从事过电气设计与装配、单片机开发、软件系统设计与开发、项目管理、软件架构、软 件培训以及性能调优相关的工作。精通汇编语言、VB、VC、Java和C#,自主设计过一些框架。12年的工作经验帮助他建立了一个完整的认识世界的思想 体系,这个体系的核心内容就是简单、想象和文化。他擅长想象,善于归纳,内心坚持,追求有意义的生活。
倪健技术博客地址:

前言

为什么写本书

19年前夏日的{yt},我正在宿舍里看一本关于禅宗 禅宗,又称宗门,汉传佛教宗派之一,始于菩提达摩,盛于六祖慧能,中晚唐之后成为汉传佛教的主流,也 是汉传佛教最主要的象征之一。汉传佛教宗派多来自于印度,但唯独天台宗、华严宗与禅宗,是由中国独立发展出的三个本土佛教宗派。其中又以禅宗{zj1}独特的性 格。禅宗祖师会运用各种教学方法,以求达到这种境界,这又称开悟。其核心思想为:“不立文字,教外别传;直指人心,见性成佛”,意指透过自身实践,从日常 生活中直接掌握真理,{zh1}达到真正认识自我。 的书。一位朋友走过来,他注意到了书的封面,然后好奇地问我禅宗是什么。当时我也说不清楚,只是觉得禅宗很像唯心主义者的一道逻辑题。

禅宗的心髓是悟,在禅宗思想推广的历史上,有很多具体生动的故事阐释了这个概念。最有名的是六祖慧能 慧能(638—713),俗姓卢氏,河北燕山人 (现今的涿州),生于岭南新州(今广东新兴县)。佛教禅宗祖师,得黄梅五祖弘忍传授衣钵,继承东山法门,为禅宗第六祖,世称禅宗六祖。唐中宗追谥大鉴禅 师。他是中国历史上有重大影响的佛教高僧之一。陈寅恪称赞六祖:“特提出直指人心、见性成佛之旨,一扫僧徒繁琐章句之学,摧陷廓清,发聋振聩,固我国佛教 史上一大事也!” 的偈句:“菩提本无树,明镜亦非台。本来无一物,何处惹尘埃”。“本来无一物”——说明了慧能在洞悉事物本质上的境界(后来这首诗的境界又被超越了)。

禅宗的历史就是种种境界被建立和被超越的过程。为了达到无法超越的{zg}境界,参禅者们发明了机锋公案、棒喝直指、扬眉瞬目、拳打脚踢、斩蛇杀猫这样一些辅 助手段,这些手段可以让人快速通过量变到质变的一刹那(没有可以解释的过程),直达内心顿悟。进入顿悟状态后,所有语言、文字和思想都成了阻碍。

{wy}例外的词——想入非非——可以作为那种境界的缩影。想入非非的意思是说,那种至高无上的境界不是我们头脑中可以想到的,因为可以想到是一种阻碍;也不 是我们头脑中无法想到的,因为无法想到是指除了可以想到之外的。非非,表示否定了否定,这里的双重否定不代表肯定。想入非非,把没有边界的思想通过一种特 殊的方式表达了出来。

在这些年的软件开发生涯中,禅宗那种积极反思、不断追求xx境界的精神一直影响着我。凭着这种精神,我把软件开发变成了乐趣。有两个原因使这种转变成为可 能:{dy},我把想象力和创造力结合了起来;第二,我的软件开发思想已经比较成熟和完整了。这两点很重要。想象力和创造力的运用使人的精神得到了满足,而软 件开发思想则使任何事情在开始之前都有了一个合理的解释。合理与满足会给你带来乐趣。
我写本书的主要目的也有两个:{dy},回顾自己的软件开发生涯;第二,与读者朋友们分享我自己的体验和感受。我希望在你阅读完本书后,可以发现如何品尝软件 开发的乐趣,如何从千头万绪变得线索明朗,如何从复杂世界进入简单世界。

我还想在本书中表达以下几个观点。

首先,思想是解决一切问题(包括软件开发中的问题)的根本。Robert C. Martin Robert C. Martin是Object Mentor公司总裁,面向对象设计、模式、UML、敏捷方法学和极限编程领域内的资深顾问。他不仅是Jolt获奖图书《敏捷软件开发:原则、模式与实 践》(中文版)(《敏捷软件开发》(英文影印版))的作者,还是畅销书Designing Object-Oriented C++ Applications Using the Booch Method的作者。Martin是Pattern Languages of Program Design 3和More C++ Gems的主编,并与James Newkirk合著了XP in Practice。他是国际程序员大会上xx的发言人,并在C++ Report杂志担任过4年的编辑。 在Agile Software Development: Principles, Patterns, and Practices的中文版序言中表达了一个思想,即软件是美的(我喜欢阅读序言,因为那里通常是和作者心灵最接近的地方)。而我想表达的思想是,在你熟 悉的软件开发领域,软件不仅是美的,还是简单的。领悟到软件开发中的简单之美是解决软件开发问题的钥匙。在我看来,思想是一种坚定不移的信仰,并且是在经 过了足够的实践检验后形成的。在软件开发过程中,稳定的思想会使所有的力量汇聚到一个有效的方向。

其次,思想是一盏明灯,但有时也会成为一种桎梏。像参禅者一样不断追求xx的境界,使思想成为你自己不断成长的体验。

{zh1},思想必须转换成习惯。我不是个真正意义上的实用主义者(本质上是个追求内驱力的理想主义者),但是在实践中运用思想比停留在思考层面显然更有乐趣。

总之,构建一套完整的思想体系是软件开发能力成熟的标志。只有思想成熟,才会使你的一言一行、举手投足、细节决策等在复杂的实践中收放自如。

软件开发思想的成熟,还需要操作层面上的大力支持。我们不妨以方法论为例来看看软件开发中的问题。
很多软件开发人员在实践中经常处于一种混乱状态。所谓混乱状态,就是当出现问题的时候没有人知道怎么做才算{zh0},或者人们之间缺乏足够的信任和共识,或者 大家不断地讨论却得不到满意的解决方案。
对于软件开发老手而言,经验是帮助他们保持清醒并走出混乱状态的安全绳。可是,要想依靠经验来持续地造福一个团队就比较难。

事实上,造成混乱状态的原因有很多。本书中的所有内容都是在尝试从各个层面来谈论这个话题。如果单从方法论的层面来看主要有两个原因。

首先,没有操作性强的方法论的指导。

软件开发者的很多工作和努力都基于个人经验的积累。即便某些经验丰富的软件开发者掌握了一些必要的方法论知识,也不能在组织范围内有意识地推广,从而成为 有实用价值的共享体验。

其次,有经验的软件开发者获取知识和使用知识的方法无法系统地传递给软件开发新手。
无法传递知识,会使新手们在软件开发领域的成长起点变得很低。在这种情况下,软件开发项目的成功通常依赖于个人英雄主义、人海疲劳战和运气。

当你经常对软件开发中的某些现象,如无休止地加班、返工、资源紧张等产生迷惘时,应该停下来认真思考;当你认真思考后仍然没有明确的解决之道,不妨看看 别人的想法。

好,还是看看本书里写了些什么吧。

本书不是一本关于方法论的理论性书籍(尽管我已经尝试在大量的思考上进行一些理论归纳),也不是一本关于具体技术的操作手册。本书为读者呈现的是我在软件 开发实践中的思考和体验,目的在于探究实践中的问题的根源,并给出思想上的解决之道。

本书以软件开发的基本顺序为主线,以简单、想象和文化的开发思想为线索,以为软件开发实践提供指导价值为目标。本书力图做到传递经过组织的、可操作的软件 开发经验,使软件开发领域的新手减少知识(软件开发思想)积累中的弯路,也使软件开发领域的老手可以对照自己的经验把可能的困惑降到{zd1}。有一些例子为那 些有趣的思考提供支持。

在本书中,我会尝试对简单、想象和文化做一些形而上的思考。这些思考会比较抽象,但却是很多话题的基础。

本书面向的读者

每个人的一生都在获取知识。有些知识来自于被动接受,有些知识来自于主动学习。知识有不同的类型,而学习知识又有不同的方法。

显然,本书也会提供一些知识。

在推荐谁应该阅读本书之前,了解本书提供的知识类型是很有用的。同时,在获取知识之前对知识本身进行一些思考也有助于学习效率的提升。很多领域内的行家都 善于此道。

李敖 李敖(1935年4月25日—),字敖之,吉林省扶余县人,祖籍山东省潍县,出生于黑龙江哈尔滨。台湾作家、中国近代史学者、时事批评家、思想 家。被称作台湾{dy}狂人、斗士、“文化顽童”。 就是一位获取知识的大师,我非常欣赏他的学习方法。来看看他获取知识的特点:

目标简单、稳定;

围绕目标思考和行动(持续不断地收集历史资料);

享受内心自由乐趣,不盲从xx;

经过特训的大脑,善于知识归类和检索。

他一生都在阐述一个论题,论据的丰富程度达到人生的极限。你可以从主观出发不赞同他的思想,但是却无法对抗那些论据。

李敖是一位历史学家,他所学习的知识类型与软件行业不同。事实上,即便在软件行业内部,知识也有不同的类型。知识类型的不同,决定了学习方法的不同,最终 对人的能力和培养提出不同的要求。

下表列出了软件开发中各种工作类型的要求。所有的定义都是非充分性的和非全面性的。它们表达出了我个人的一些偏重。xx这些偏重,对于实现我们最终的目标 (成熟的软件开发能力)是有意义的。

工作类型 知识类型 能力及培养
需求获取与分析 说明型 理解能力和归纳能力
软件设计 创造型想象 能力和创造能力
软件实现 逻辑型 抽象能力和探索能力
项目管理 情感型 沟通能力和服务精神
软件决策 综合型 构建系统思想的能力

在后续的章节中,读者可以体会到这些定义形成的思路。如果仔细阅读,你还会发现,有很多的文字都在间接地解释——这些能力在软件开发中应该是怎样的,以及 为什么有助于软件开发工作。

本书提供的知识类型与上表中的知识类型有千丝万缕的联系。但是,本质上又不同于其中的任何一项。相较于务实的软件开发工作,本书提供的知识更接近于虚。所 以,我把本书提供的知识类型称作思想型。

当你追溯一切问题的根源时,哲学总是追溯的源头。而当你从事软件开发工作时,当你面对软件开发中的迷惘和失败时,当你寻求解决问题的途径时,你也许会在追 溯的过程中用到本书提供的知识。

所以,本书的读者,主要是那些在实际工作中陷入迷惘或存在困惑的软件开发者、管理者和企业经营者。

对于软件开发者来说,他们已经有了一定的软件开发技能,但是还没有或很少有成功的软件开发经历;他们对于软件开发工作存在着抱怨,有一些模糊的或零星的改 革想法;他们热爱软件开发工作,但是感觉工作缺少乐趣;他们希望有一个明确的方向、一段可以借鉴的经历、一个行之有效的方法和一种超越以往的境界。

对于管理者和企业经营者来说,他们不满组织生产能力的现状,他们有着变革的决心,对于不成熟的软件开发能力带来的成本也有着切肤之痛,但是对于如何构建一 个合理有效的软件开发环境没有思路。

本书主要是为以上三种人准备的。

遗憾的是,世上不存在可以供你直达目标的操作手册。每个人实现目标的方式都是不同的。除了{zh1}一步的领悟之外,有效信息收集和经验积累是必需的基础。

什么样的信息是有效的呢?
简洁明确的思想表述;
层次清晰的分类信息;
令人信服的论证过程。

我一直在努力尝试,希望能为读者提供这样的有效信息。

另外,本书是我的经验之谈和人生体验。我的想法是,也许本书会让你产生共鸣,也许不会。但是有一点我可以许诺,本书的内容是前面表述的各种想法的实现,是 独特的和真实的。

就软件开发而言,我根本不顾忌什么,没有任何让我盲从的xx。本书中所有的想法都是自己的真实体验,借鉴来的想法也都经过了自己的“咀嚼”。

本书中的所有内容基本上都以思想讨论为主,伴之一些验证有效的技术实践。思想讨论的内容往往会超出专业和行业的范畴,所以我期望有更多的人来参与这种形式 的思想交流。

总而言之,如果你乐意,你可以阅读本书。

如何阅读本书
对于读者而言,没有什么比知道如何阅读一本书更重要的了。很多书都是有价值的,从书店中得到它只是{dy}步。如果不清楚如何阅读这本书xxx,书的价值就不 会轻易地转移到读者身上。这一小节将会告诉你如何阅读本书。

可以想象,得到一本书时,有些读者因为缺缺领域经验而需要点拨,有些读者由于相同的体验而产生共鸣,有些读者可以站在更高的层次上对书的内容进行批判。无 论哪一类的读者,都期望快速清晰地获得作者的写作思路。

从作者的角度,最诚实的做法就是直白的交流。我认同一种精神,全力表明自己的想法,直到某些读者可以清楚地认识到自己是反对这种想法为止。当然,我也相信 另外一些读者会赞同它。基于这种精神,本书中所有问题的表述都是断言式的,不留有任何引申和狡辩的空间。

本书中大多数章节的{dy}部分是实践场景,场景中包含了虚构的情节和虚构的人物。你可以把这些场景单独挑选出来,当作一篇描写软件开发者生活的文学作品。你 也可以忽略这些场景,这不会影响你获取本书中的知识。

场景是一个理想中的美好故事,它不能传递明确的知识信息。写作这个场景故事的主要目的,是想说明现实中的软件开发活动比本书中涉及的讨论要复杂和生动得 多。例如,一个人的些许想法可能会给软件开发带来极大的影响。我不是一个不可知论者,即便在复杂多变的现实场景中,简单的原则同样能产生有效的影响。

我一直在考虑一个问题:
业界有很多流行的方法论,也有很多大师的软件开发思想,可是在实践中,好像还是有很多组织找不到方向。比方说,敏捷开发 敏捷软件开发又称敏捷开发,是从20世纪90年xx始逐渐引起广泛xx的一些新型软件开发方法,是应对快速变化的需求的一种软件开发能力。它们的具体名 称、理念、过程、术语都不尽相同,相对于“非敏捷”,更强调程序员团队与业务专家之间的紧密协作、面对面的沟通(认为比书面的文档更有效)、频繁交付新的 软件版本、紧凑而自我组织型的团队、能够很好地适应需求变化的代码编写方法和团队组织方法,也更注重软件开发中人的作用。

我真的没有看到多少成功的案例。我知道的是,大家在不断地缩减Scope,不断地提升Schedule评估的时间,从而来适应传统的管理方式。我也听到 很多管理者在议论哪种方法论是{zh0}的,好像实施了某种方法论就可以解决所有的问题,可是问题仍然在那里没有变,只是换了个形式。

所以我想,问题的根源也许不在这里。我觉得,无论方法论也好,管理理论也好,都是技术层面的。这些技术层面的东西来自于很多大师长期的总结和提炼,本身是 非常好的,但是它们有复杂的上下文,例如在敏捷开发中没有提到或者强调的——注重个体文化、专业化思想以及多元化价值认同等。所以,一旦割裂上下文,机械 来运用这些方法论,效果就总是不好。

在本书中,我想从实践者的角度来强调这一点,通过强调软件开发思想和文化来尝试连接实践和方法论。
场景故事也是在这个想法上产生的,我很想反映现实的复杂性,在这种复杂性场景中,读者可以发现自己熟悉的人和事,我希望可以产生共鸣。然后,我想推荐用简 单的思想和一些文化反思来应对它,至于效果如何,那肯定是仁者见仁智者见智了。

在大多数章节场景故事之后的第二部分,我会首先列出作者写作本章节的中心思想。这些中心思想是断言式的、概括式的。读者需要通过阅读本章节后续展开论述的 内容来了解中心思想的具体含义。

本书想要传递的思想是,用简单的原则、富于想象的精神、文化的视角来认识软件开发。请在阅读时始终xx这个核心思想。

媒体评论

正如本书所说,这是一本为那些在实际工作中陷入迷惘或存在困惑的软件开发者、管理者和企业经营者准备的书。当你面对软件开发、管理和架构中的迷惘和失败 时,你也许会在追溯问题根源的过程中用到本书中的知识。
——Java开发者社区

在IT技术领域,中国缺少技术大师,但中国不缺少热爱技术、热爱思考的人,本书的作者便是其中的一个典型代表。他用自己的思考和经验带领读者朋友一起去探 讨软件开发的本质——大道至简。如果你也是一位热爱技术和思考的人,本书决不容错过。
——架构师社区

这是一本充满智慧的书,它让我们看到了一位在软件开发实践中善于观察、总结和思考的智者形象;这是一本富含哲理的书,它将软件开发的一切问题的本质都归于 简单、想象和文化,耐人寻味;这是一本饱含经验的书,它系统地论述了作者在软件开发的整个过程中所总结的大量有价值的观点,引人深思;同时它也是一本充满 趣味、非常耐读的书,书中的场景故事既让我们读起来心情舒畅,又能体会到其中蕴含的软件开发哲学。建议所有从事IT工作的朋友都收藏这本书,常读常新。
——中文Java技术网( www.cn-java.com)

本书站在一个较高的角度对软件开发的各个环节和层面(需求分析、架构、实现、测试、维护、团队和项目管理等)都进行了详尽的阐述,尝试着去探讨软件开发的 本质和方法论。作者将自己多年的从业经验融入本书中,希望使得无论是新手还是老手,都可以从本书中获得有价值的经验和技巧。
——PHPChina( www.phpchina.com)

本书也许会让你产生共鸣,因为很多问题也是你在实际开发中曾经遇到并认真思考过的;本书也许会让你有些疑惑,因为有些观点只有当你的经验足够丰富时才会悉 心领会;本书也许会让你拍案叫绝,因为有些问题你百思不得其解,而它却一语“道破”天机。强烈建议反复品读本书,它值得你拥有。
——Ajax中国(www.okajax.com)

我们始终相信,最简单的也就是xxx的,一个好的idea往往都都能通过一些简单的技术实现,从最早的IM的成功,到SNS的火爆;从AJAX旧瓶装新 酒,到jQuery改变JavaScript的书写习惯,莫不是如此。事实证明,简单才是王道!本书用简单的原则、富于想象的精神xx我们悟透软件开发的 本质和奥义。
——jQuery中文社区()

大道至简,软件行业也是如此。书中一位饱含经验和善于总结的智者xx我们去思考与领悟软件开发的本质,发人深省。这是一本值得开发者反复阅读的书,历久弥 新。
——AIRRIA 艾睿网()
.
品位本书仿佛是在聆听一位智者将他多年积累下来的宝贵经验娓娓道来,也仿佛是在欣赏一个精彩的外企白领故事。本书蕴含大量软件开发和管理的哲理,而且极具 趣味性。
——一起Ext()

当你手持武器带领着你的兄弟们披荆斩棘、一次又一次穿越了障碍的时候,你们有没有回头远望并深思过?你们所做过的一切,所使用的一切,所创造的一切,都深 思过么?来,拢个火堆,围着坐下来聊聊、想想。当太阳再次升起的时候,你们是不是还会保持原有的队形,是不是依旧穿着厚重的盔甲,肩扛战锤,像以前一样前 进?这本书深入讨论了如何巧妙地“丢盔弃甲”,让你穿着休闲装一样能站在胜利之巅!
——51CTO.COM读书频道()

与它的名字一样,本书的内容也在简单、朴实中给读者一种至上的美感。本书为国内的开发者奉上了一顿丰盛的精神文化大餐,赶紧享受吧!
——CSDN读书频道()

目录

场景故事人物关系图
本书赞誉
前言
为什么写本书
本书面向的读者
如何阅读本书
第1章无极生太极
1.1创造的根源
1.2本质的把握
1.3简单的追求
第2章关于软件开发方法论的思考
2.1方法论的实践场景
2.2CMM的精髓
2.2.1过程定义
2.2.2成熟之路
2.3敏捷软件开发的精髓
2.3.1人与实践
2.3.2海岸灯塔
2.4{zh0}的软件开发方法
2.4.1中庸
.2.4.2聚焦
2.5方法论的执行
2.5.1关于执行
2.5.2约束与习惯
第3章关于需求的思考
3.1需求的实践场景
3.2需求开发
3.2.1准确表达
3.2.2信息传递
3.3需求管理
3.3.1变化之道
3.3.2应对之道
第4章关于软件架构设计的思考
4.1架构设计的实践场景
4.2软件架构的本质
4.3软件架构的设计
4.3.1业界技术成果
4.3.2软件框架
4.3.3隐喻的价值
4.3.4架构模式
4.3.5软件架构师的素质
第5章关于软件实现的思考
5.1软件实现的实践场景
5.2模型的设计
5.2.1领域模型
5.2.2计算模型
5.3软件开发
5.3.1写给新手
5.3.2掌握编程
5.4负责制度
5.5软件决策
5.6质量保证
第6章关于软件测试的思考
6.1软件测试的实践场景
6.2软件测试的本质
6.3破坏的意义
6.3.1软件测试的{dy}个原则:聚焦
6.3.2软件测试的第二个原则:积累
6.3.3软件测试的第三个原则:自动化
6.3.4软件测试的第四个原则:目标一致
6.4一个典型的破坏:性能测试
6.5其他
第7章关于团队的思考
7.1团队的实践场景
7.2湘江战役
7.3团队建设
7.3.1思想准备
7.3.2如何组建团队
7.3.3现实与理想
7.4团队管理
7.4.1论人
7.4.2稳定的价值
7.4.3团队文化
第8章关于项目管理的思考
8.1项目管理的实践场景
8.2项目管理的本质
8.3关于项目经理
8.4计划的本质
8.5风险的问题
8.6管理的境界
第9章关于软件维护的思考
9.1软件维护的实践场景
9.2软件维护的本质
9.3组件化开发
9.4版本依赖
9.5妥协的方案
第10章关于组织发展的思考
10.1组织发展的实践场景
10.2知识积累
10.3行业成熟
10.4知识资产


郑重声明:资讯 【好书推荐:简单之美—软件开发实践者的思考_zxk @ sise_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——