金尊和语录 (ZT)

来源:互联网 发布:js 抛出一个事件 编辑:程序博客网 时间:2024/04/25 08:17

“计算机和软件的发展很快,新的概念名词和技术手段层出不穷,可谓日新月异。停留于表面的现象,可以让人眼花乱,应接不暇。只有深入到本质,从哲学方法论的高度上看问题,找答案,才能如庖丁解牛,游刃有余。”

 

“软件人员要让计算机做事,首先自己要知道怎么去做,才能以软件的形式把它固定下来。在实际系统运行的时候,软件就成了软件工程师的影子,替人发号施令。从这个意义上讲,软件更是代码化的思维,是外化的思想。它和计算机硬件的关系相当于人类思维和大脑之间的关系。”

 

“从软件开发的本质来说,创造性成分很大,发挥的余地也很大,从这点上来看很接近于艺术。所以,它的归宿应该介于工程与艺术之间的某一点,并逐步向工程一段漂移,但很难发展到完全的工程化阶段。”

 

“软件工程的重心在方案世界,但开始于问题世界,最后又回到问题世界接受实践的检验。

 

从商业的角度看软件,就要把软件的经营按照商业的规律和商业的机制来运行,也就是说软件要产业化。只有产业化面向市场才能持续发展并参与市场竞争。

 

人既是软件的创造者又是使用者,是软件工程活动的主体。要提高软件项目的质量和效率,必须要从人的认知规律入手,在开发工具的设计、软件的编写、过程管理等方面适应和反映人的需要。

 

“比起建筑工程来,做软件项目更像是在滚雪球,两者之间有着惊人的相似性,把雪球滚大、滚好有一些规律性的诀窍同样适用于软件的开发。”

 

“在离散系统中一般要经过若干个时间间隔周期才能达到目标稳定状态。在这里,重要的是时间间隔的数量,而非每个时间间隔的大小。所以,在尽可能的情况下缩短每个时间间隔的大小,从而最大程度地缩短到达系统稳定的时间。对一个正常的软件工程的项目而言,需要缩短集成周期,每天都有集成版本比较合适。”

 

“软件工程由于有多人参与,有多个环节,所以又是一个多环控制系统。按照多环控制的理论,越在系统的内环出现的“震荡”越容易得到控制。联系到软件工程,要把问题尽可能地解决在内环中,越在内环的问题解决起来成本越低。”

 

“用像三十六计一样的软件兵法作为软件工程实践中的指导原则,应该比寻找“灵丹妙药”来得更切实可行,因而实际意义也更大。”

 

“在20世纪末,美国出现了一场网络‘大跃进’。其中的教训很多,但最重要的是网络新经济违背了一般经济和商业的规律。像当时多数的亏本的网站和新技术公司注定是没有生命力的,被淘汰出局只是个时间问题。”

 

“经济为本是所有的原则中最为基本的原则,讲经济就是要运用投入产出的概念分析和指导软件工程的各种活动和环节,克服各种非经济的误区。”

 

“如果在软件工程中的各个环节,遇到问题,要选择不同方案时,一定要记住‘经济为本’这个根本。虽然有时候不能直接地和经济挂钩或者短期的影响不是那么明显,但各种决定和方案最终总会以经济的形式表现出来。”

 

“软件系统是两头在外,不仅为人所造,最终目的还是为人服务,当然要把用户的需要放在第一位。”

 

“‘用户为先’绝对不是一句空话,要落实到实处,就要实施围绕用户的全过程管理,包括,用户的需求分析、软件安装和部署、用户培训、用户文档、客户支持和反馈等。”

 

“交互界面不是高科技,却难于高科技。科技的是准确和可重复性。而交互界面涉及到人,有人喜欢这样的方式,有人喜的,众口难调,有一个定。”

 

“需求是后续的各种设计和实现部署等活动的指南针,不同的需求相应地引出不同的技术设计方案。所以如果需求没有弄清楚,或者弄错了,对后面的设计负面影响很大,代价也是可观的。”

 

“需求并不是简单地重复用户的需要,还要反映并综合考虑市场和技术的走向。”

 

“在软件工程系统中,系统的最外环是以可发布的最终软件为反馈点的。因此,早一点集成,系统范围内的反馈才可以开始,系统也才能早日稳定。”

 

“在物理学量子力学中有一条很著名的‘测不准’原理。它是说由于原子中电子的运动的波粒二象性,人们对于电子的运动速度和空间位置两个相关物理量的测量也有一定的精确度极限,说白了就是测不准。软件系统同样也是“测不准”,因为测试不能找出所有的问题。首先是因为软件的配置和应用情形的组合实在太大。没有任何人能够历尽所有的情况,盲点总是存在的。从理论上来看,测试的越多,没有什么坏处,然而是不是一定会有好处是另外一回事。具体来讲,有的测试情形之间非常相似,在软件中的处理路径是一样的,多测几个或者多测几回没有太大的好处。

 

“要在开发过程中有效地控制变化,首先要循序渐进,其次是同步协调,两者是相互联系、相辅相成的。”

 

“控制变化首先要做到循序渐进,用雪球式多回合的开发模式,先粗后精,先加功能,后专注质量的改进,一步一步积小胜为大胜。其次,要做好队伍的开发协调工作,在具体技术上要使用版本控制软件管理源代码,跟踪历史变化,并减少开发人员之间的相互影响。”

 

“在任何的双方对峙中,如果是一对一的单打独斗,也就不要什么排兵布阵了。但如果是很多人参与,那么总体性的方式方法就很重要。在一般的阵法中,对各类战斗人员、支持人员的角色的安排、责任以及之间的联络和互动都有详细的说明。软件工程的规范也是定位在这个意义上的,并和阵法有很大的相似性。”

 

“世界上本来没有什么理论,有的只是实践。理论的产生是实践进一步深化和发展的结果,反过来预测和指导实践。从一般的理论发展规律来看,理论产生并迈出第一步后,往往会过度发展,成为教条和本本。在经过多个回合的磨练后,理论才能趋于理智,和实践同步发展。软件流程理论的发展从某种程度上印合了这一点。”

 

“不管怎样,软件开发的规范只是手段,不是目的本身,更不是灵丹妙药。它针对的是管理上的问题,解决不了技术上的问题。同时,流程规范是把双刃剑,没有会乱,多了会死,结合具体的实际,灵活运用才是关键。”

 

“开放标准是一个产业成熟的标志和大规模产业分工的前提。软件开放标准的兴起反映了市场的诉求和软件产业发展的必然规律。积极推动标准化和支持标准化,对软件企业来说至关重要,不仅可以使“借鸡下蛋”成为可能,而且对软件企业的长期人才战略有很大的影响。”

 

“简单的设计说起来容易,但在设计的项目中并不是那么的容易,需要深入地了解问题的本质,才能做出恰到好处的抽象,把握住简单化和结构柔性之间的平衡。所以说简单的设计才真地不简单。”

 

“任何软件体系结构都没有绝对的柔性,任何设计都只能应对一些变化,而对其他的无能为力。”

 

“虽然在道理上和实际中,简单的设计是行之有效的,但在现实生活中,简单的设计让人一眼看到底,难免不为人所小看了。复杂的呢,一来没时间看完,而且也是看不明白,这时候‘皇帝的新衣’的效应就自然出现了。”

 

“面向对象不等同于软件复用,没有面向对象的时候,以函数库形式表现出来的复用也是行之有效的。在理论上面向对象可以让软件复用更容易,但在实践中,面向对象更容易被误用,‘偷鸡不成反蚀一把米’的情况比比皆是。所以,把软件复用和面向对象紧密相联甚至等同的说法有欠妥当。”

“软件的发展是个逐步渐进演化的过程,每个新的技术的背后都可以看到旧技术的影子,取其长,去其短,推出新的更好的技术。几乎没有一样软件技术是绝对全新的,完全脱离于过去的技术和经验积累。”

 

“在软件体系结构设计中,没有什么万能钥匙,是充满了辩证的各种矛盾。每种方案和方法几乎都有利有弊。只有把握设计系统的具体环境,明确设计目标,具体问题具体分析,合理平衡各种矛盾,找出其中的主要矛盾,才能产生出优化的系统设计。”

 

“软件一个最大的特点就是它一直处在变化发展之中。软件设计的最高境界是以不变或少变来应万变。”

 

“变化和静止是一对永恒的矛盾,在软件中没有一成不变的法宝可以应万变,软件设计是要在一定的变化下,尽量的够通用的又有柔性,同时兼顾系统的性能。具体地讲,就是要把数据参数从代码中分离出来,同时把通用的部分抽象集中在一起,而把变化的部分放在一起。这样可以最大化地克服变化带来的对软件系统结构的冲击,以少变来应万变。”

 

“牛顿曾经有句名言,‘如果说我看得比别人远些,那是因为我站在巨人的肩膀上。’好的软件平台就是这样一个巨人的肩膀。”

 

“大型的软件系统的开发应该认真考虑分层设计方法,即使是中小型的软件开发活动中使用同样的概念,会帮助我们更好地模块化。不管是何种的软件,在分层时候要遵从三个原则:实现和接口分离的原则;逻辑依赖单向性原则;服务粒度提升原则。”

 

“软件代码的模块化和模块化封装是软件发展的一个自然趋势。模块化的好处是有利于对软件在各个层次上的分块管理。合理清楚、正交化地分割静态模块是一个关键。在静态模块的基础之上,封装粒度适当的动态模块可以方便地组合配置软件系统,犹如软件芯片一样。”

 

“接口是软件世界中的‘合同’,是实现服务标准化的一个重要手段。对于编程接口来说,要点是简洁明了、直来直去、类型基本、输入笼统、返回具体。在多进程环境和分布计算环境中,注意接口中不能传递指针或类似的参考值。除了表面的形式外,还要注意接口的言行一致和减少隐含规则的影响。”

 

“面向对象的技术反映了普遍和特殊的辩证关系,是软件设计思想方法和组织结构方式上的一个飞跃。面向对象的抽象父类方法,归纳了一批子类的共性,利于软件代码的重用和接口的一致性。”

 

“面向对象针对的是在逻辑关系上的共性,而模板针对的则是在空间上的共性。这种空间上的共性可以是代码上,也可以是非代码的。在时间上的共性也可以转化为空间上的共性,实际上代码上的共性在软件执行时是时间上的共性。”

 

“软件系统的伸缩性,主要是扩展性,是大型软件系统设计必须要考虑的一个重要问题。设计阶段的决策对于系统伸缩性的影响最大,因而,‘伸缩性设计要从设计抓起。’”

 

“俗话说,‘它山之石,可以攻玉。’在软件设计中也是一个道理。软件设计的成解包括有定式和框架。”

 

“软件的设计是为最终的软件实现服务的,最终体现在软件系统本身。它自身并不是一个交给用户的产品。从实际的角度出发,软件设计以简单、够用为基本原则,过分追求软件设计的完美,只能为相应的实现造成人为的障碍。”

 

“设计的结果不是一层不变,在项目进行的过程中可能会发现原有设计的不足甚至错误的地方,只有在滚雪球式的滚动开发中不断地迭代演进发展。”

 

“软件本身是专门对付重复性的。追本溯源,把重复性的思想用软件的形式固定下来是软件解决重复性的脑力劳动的一个基本方法,也是软件的拿手好戏。在软件实现的所有问题中,重复是最大的问题之一,也是首先要解决的问题。”

 

“写代码有四大误区:

飞流直下三千尺,疑是银河落九天为人性僻耽佳句,语不惊人死不休

千呼万唤始出来,犹抱琵琶半遮面爱上层楼,为赋新词强说愁

 

“‘回炉改造’就像是大扫除,其目的是为了清理环境,为后续开发创造良好的条件。在一般开发过程中,或多或少地会有一些重复、冗余、和晦涩难懂的代码。有一点是‘良性债务’,但过多后会严重影响开发的顺利进展。”

 

“性能优化过程是在系统功能正常的前提下寻找和尝试不同的方法来缩减运行的时间。其最主要思想是以空间换时间,一般的方法有算法优化、经典代码方法、并行计算方法、体系结构方法,和一些不是‘办法’的办法。”

 

“任何性能优化本质上都是用开发时间来换取运行时间,用经济这个尺子量一量,过了一定的程度都会得不偿失。”

 

“为了真正地掌握软件开发的技巧,‘临帖’是个不错的起步方法。但是没有引起足够的重视。培养软件人才的学校习惯了科学分解分析的思想方法,“大胆假设,小心求证”,锻炼了思维,却对培养我们做事的习惯没有足够的重视。另外,科学强调刻意求新,往往忽略了基本功的培养。”

 

“不是每一个软件人员都要有从头到尾跟踪一个项目的经验,但是一个合格的设计师应该有这样的经验。这样的能力不是简单的时间累计或者从书本上能够得来的。在实际的生活中,不管一个干部的能力如何,如果缺少‘一把手’独当一面的经验,在背景上是个缺陷。‘麻雀’项目,正是短平快地培养项目技术“一把手”的经验和决策感觉的捷径。”

 

“软件代码中的漏洞虽然是主观思维的产物,但是它的客观存在却是一个不以主观意志为转移的事实。我们可以有针对性预防和防范这些漏洞,但是很难从根本上消除它们。多数的漏洞是由于不了解和疏忽造成的。在了解相关的技巧之后,习惯就很重要。好的习惯坚持了,就慢慢成为一个自然的行为,预防为主的目的就算达到了。”

 

“软件的开发是个连续不断的滚雪球式的演进过程,其中的代码发展轨迹要记录下来。使用版本控制工具不仅可以记录软件的发展史,同时也为并行团队开发提供了技术上的保障,更为多种配置和多版本的产品发布提供了可能性。”

 

“软件工程本身是个充满了重复性的过程,在新型开发理念如雪球式滚动开发中,重复性更是层出不穷。使用软件支持软件开发,去除重复性的劳动是理所当然的。可以自动化的软件开发活动有代码生成、软件系统建造、软件质量测试和日常维护等。在实现单个活动自动化的同时,要注意不同活动间的集成,以及和其他系统的集成。”

 

“软件过程部分活动的自动化,并不以为着不用人工的参与,而是减少重复性的简单劳动,并把它转化成自动化过程的软件支持开发和维护。人的主体地位没有削弱,反而是要求更高了。”

 

“软件的设计开发离不开工具的支持,掌握常用的工具可以使开发工作事半功倍。具体来讲,必须的工具是编辑器、编译器、调试器或者一体化的集成开发环境,版本控制软件和缺陷跟踪管理系统。锦上添花的工具五花八门,涉及到软件开发的项目管理、建模、测试等各个部分,解释型的脚本语言也是一个有力的工具。”

 

“在软件开发项目中的分工合作是软件开发技术和项目复杂化的一个必然结果。从管理上来看,管理有三条主线,即人员、技术和项目计划,相应地有不同的组织建制模式。不管怎样的分工建制模式,都要围绕项目这个主题,分工不分家,并做到责权合一。”

 

“软件项目本身的滚雪球式的发展从某种程度上决定了开发队伍的成长最好也是滚雪球式的成长壮大,这样不仅从人员安排还是管理制度上都容易处理。”

 

“人才是软件企业中最重要的财富,是决定项目成败的最重要因素。了解人才的需要,并通过多种途径发现和培养人才是最高决策层的首要任务之一。”

 

“交流是软件开发中占时间最多的一项活动,大大超过严格意义上的软件开发活动本身。交流能力的高低在很大程度上决定职业发展的未来。”

 

“软件的高度竞争和滚动式的开发模式不仅在员工的体力上还是在精神上都是一个很大的压力,因此要‘有张有弛’。在每个发布结束以后,应该有一个发布聚会,并有一小段的调整期。与此同时,不妨让员工换换口味,如休假,或者尝试不同的工作岗位。这种换工作岗位的做法不仅让员工有成长的机会,对于内部的技术交流和岗位认同都有好处。”

 

“过去项目发生的事情已经过去,成为经验的一部分。过去的项目和技术不会简单地重复出现,照抄照搬是行不通的。必须把经验上升一个高度,以指导应用于将来的实践是必须的。一般来说,越具体的越局限,越抽象的适用范围越广。”

 

“透过软件工程36计的表面,这个体系其实都是常识。所有这些常识中最为重要的也是笔者在书中反复强调的是“经济为本”。软件开发总体上是个商业实践,长期来看效益和效率是成败的最关键的因素。“经济为本”是个核心问题,有了它等于有了评判的标准和努力的目标。可以说,本书中所有的策略都围绕这个核心来展开的,也是为这个核心服务的。”

 

“有关软件工程的学问只有在软件工程的实践中去真正掌握。”

 

“软件实践是不断地发展变化的,充满了未知和挑战,对它的追求也是永无止境的。”

 

“大诗人陆游曾在《冬夜读书示子》一诗中写道,‘纸上得来终觉浅,绝知此事要躬行。’把它用在软件开发中是再合适不过了。”