Archive for the ‘Book’ Category
软件测试读书列表 V2.0
列表格式为:图书分类、中文书名、英文书名、作者。排名不分先后,用红色标记出我推荐的书籍。
测试入门
软件测试(第2版)
Software Testing (2e), Ron Patton
一本测试入门的好书,较全面地介绍了各种测试领域和方法,为测试新手提供了正确的观念和宽泛的基础。
软件测试的艺术(第2版)
The Art of Software Testing (2e), Glenford J. Myers, Corey Sandler, Tom Badgett, Todd M. Thomas
一本“久经考验”的测试经典:1979年,第一版面试;25年后,第二版登场。平心而论,有些观点已经不能直接应用在测试实践中,但是仔细品味仍有所收获。毕竟,这是一本需要思考的书,而不是操作手册。
软件测试实战–测试Web MSN
蔡为东
以Web MSN为测试对象,形象生动地介绍了针对图形界面的黑盒测试技术,有很强的实践性。围绕一个实例,全面地的介绍各种测试方法,是此书区别于其他测试书籍的一大特色。附文《胶着》是作者一段开发经历的回顾与小结,有笑有泪,仅凭此文便值回书资。
软件测试工程师面试指导
蔡为东
面向初学者,介绍了软件测试行业、测试工程师素质要求、基本测试技术、求职策略、面试技巧、典型试题,对于测试新手或迈向测试行业的朋友有较高的参考价值。此书还收录了一些对读者来信的回复,内容涉及职业规划、大学生就业、测试学习、测试实践等,针对当前常见的困惑,做出了谨慎且深思熟虑的回答。附文《我在微软做软件测试外包》对于了解微软中国的流程与文化很有参考价值。
通用测试技术
计算机软件测试(第2版)
Testing Computer Software (2e), Cem Kaner, Jack Falk, Hung Quo Nguyen
一本值得反复参考的好书,"The bestselling software testing book of all time" 的美誉绝非浪得虚名。作者将多年的实践经验用平实的语言娓娓道来,内容涉及测试技术、测试管理、开发流程、思考方法、实践模式,可谓是一本测试典籍。部分内容看似有些过时,但是其思想和方法仍旧有很高的借鉴价值。
微软的软件测试之道
How We Test Software at Microsoft, Alan Page, Ken Johnston, Bj Rollison
微软的资深测试者审视微软当前的测试方法,并展望软件测试的未来发展。缺点是没有结合Windows或Office这样的著名且复杂的产品,详细讨论具体项目的具体技术。优点是提供了许多小故事,讲述了Windows、Office、Live等产品开发中的点滴。从经验传承、启发思路的角度,这些故事是全书的精华,具有很高的参考价值。
测试有道:微软测试技术心得
梁博, 许珊, 徐歆恺
内容由一系列技术点组成,每一个点都有精要的描述和作者的心得体会,力图以小搏大,以精粹胜广博。但是没有提供一个理论框架将这些点有机地联系起来,读起来有只见树木、不见深林之感,也缺少“授人以渔”的独到见解。最大优点是介绍了一批免费且实用的工具,可以放在案头备查。
软件测试基础:方法与度量
Software Testing Fundamentals: Methods and Metrics, Marnie L. Hutcheson
以风险分析为核心,讨论了测试计划、测试组织和测试设计。其中,关于“测试价值的可说明性”和“利用Office Suite来撰写、管理测试计划”的内容有启发性。适合有一定工作经验的测试人员参考。
软件测试(第2版)
Software Testing A Craftsmaj’s Approach (2e), Paul C. Jorgensen
将理论与工艺结合在一起的测试教科书。比较严谨地讨论了软件测试的基础理论,适合软件测试研究者研读。
面向对象的软件测试
A Practical Guide to Testing Object Oriented Software, John D. McGregor, David A. Sykes
介绍了面向对象软件测试的基本思路和方法。第7章“测试类的层次结构”比较有启发性,讨论了针对继承的测试设计和组织,相关内容在其他测试书籍中并不多见。
软件测试技术大全:测试基础、流行工具、项目实战
陈能技
该书由多位作者共同撰写,内容涉及测试理念、测试技术、测试开发、测试自动化、测试管理和常见的测试工具,不愧“测试大全”的书名。有些内容失之于粗糙,一些论述也不够严谨,缺乏参考文献更是此书的硬伤。瑕不掩瑜,此书理论和实践结合紧密,仍值得测试工作者学习和思考。
测试管理
笑傲测试–软件测试流程方法与实施
魏伟
以小说为体裁的测试管理书籍。通过令狐冲和风清扬的对话,从一个逐渐成长的新人的角度,介绍了测试管理的点点滴滴。全书轻松幽默,全无技术读本的枯燥乏味。附录所收录的文章“从新鲜人到新仙人”对于行业新人颇有帮助。
步步为赢–软件测试管理全程实践
蔡为东
以“管理就是负责人”为核心,介绍作者担当测试领导的切身经验:自我管理、自我成长、编写测试计划、编写测试用例、执行测试、沟通、测试计划/用例评审、测试总结、员工管理、测试思想等。也适合第一线的测试工作者阅读,所涉及内容皆和他们的日常工作密切相关。
专项测试技术
软件安全测试艺术
The Art of Software Security Testing: Identifying Software Security Flaws, Chris Wysopal, Lucas Nelson, Dino Dai Zovi, Elfriede Dustin
软件安全测试的入门书,用很短的篇幅涵盖了软件安全测试的多个领域,为测试人员提供了模型、方法和工具。对于Threat Modeling的介绍很精彩,为进一步的行动提供了良好的理论与实践基础。
Web安全测试
Web Security Testing Cookbook: Systematic Techniques to Find Problems Fast, Paco Hope, Ben Walther
一本实践性很强的Web安全测试手册。从网络安全的角度,介绍了一批免费的网络通信分析、监控、修改、调试工具;以条目为组织,介绍了的测试方法或策略;以实践切入,穿插介绍理论知识,通过精心选材和组织,降低了Web安全测试的门槛。
实用软件测试指南
How to Break Software: A Practical Guide to Testing, James A. Whittaker
软件测试专家编写的实战指南,指导测试人员从攻击的角度展开软件测试。介绍了一些实用的测试工具,对于压力测试、极限测试有较强的参考价值。
软件测试新技术与实践
于秀山, 于洪敏
介绍了组合测试技术在测试中的应用。适合组合测试研究者参考。
Web应用程序性能测试指南
Performance Testing Guidance for Web Applications, J. D. Meier, Carlos Farre, Prashant Bansode, Scott Barber, Dennis Rea
微软模式与实践(pattern & practices)团队的佳作,介绍了性能测试的正确观念、流程和实践。篇幅短小,内容深邃,值得在实践中反复参考和体会。
应用程序性能测试的艺术
The Art of Application Performance Testing: Help for Programmers and Quality Assurance, Ian Molyneaux
经验丰富的软件性能测试专家分享他的经验,内容包含性能测试的架构、模型、典型方法和结果分析。适合有一定经验的测试者参考。
测试自动化
.NET软件测试自动化之道
.NET Test Automation Recipes:A Problem-Solution Approach, James D. McCaffrey
该书讲解了在.NET平台上编写轻量级测试程序的实用技术。作者曾经在微软工作,该书与微软测试开发工程师的培训材料的契合度很高,实践性很强。对于Windows平台的测试工程师而言,此书的参考价值很高。
.NET软件测试指南
A Tester’s Guide to .NET Programming, Randal Root, Ary Romero Sweeney
严格来说,这是一本以测试为目标的讲解.NET编程的书。内容浅显、涉猎面广,适合没有太多.NET开发经验的测试人员参考。
集成测试框架–用Fit进行敏捷软件测试
Fit for Developing Software: Framework for Integrated Tests, Rick Mugridge, Ward Cunningham
Fit是一种编写系统测试的测试框架,作为一种业务交流工具,它深刻地反映出敏捷软件开发的若干特质。此书由Fit之父亲自编写,不但可以了解Fit的方方面面,还能从中体会大师的感悟与实践。
互联网单元测试及实践
陈卫俊, 赵璨, 周磊, 陈洪
介绍了常见的单元测试框架,并结合具体项目讲解了单元测试的基本理论和技术。对于Web测试的新手,有较高的参考价值。
Visual Studio 2005 Team System软件测试专家教程
Professional Software Testing with Visual Studio 2005 Team System: Tools for Software Developers and Test Engineers
介绍如何利用Visual Studio 2005 Team System进行有效的单元测试、数据库测试、Web测试、负载测试和代码分析。以介绍概念和流程为主,适合新手快速上手。
.NET软件测试实战技术大全:测试基础、流行工具、典型案例
陈能技
系《软件测试技术大全》的.NET版,在内容的深度和价值上,皆不及前者。胜在专注于.NET和Windows平台上的测试自动化,介绍了多种测试技术和工具,覆盖面广,且切合实践。适合.NET平台上的新手参考。
经验总结
软件测试:经验与教训
Lessons Learned in Software Testing, Cem Kaner, James Bach, Bret Pettichord
值得反复研读的经典好书。Tom DeMacro的赞美——“这些经验中的任何一个,都抵得上这本书的价钱”,所言非虚。
完美软件–对软件测试的各种幻想
Perfect Software: And Other Illusions about Testing, Gerald M. Weinberg
该书没有介绍具体的软件测试技术,它讨论的是软件开发中的人、他们对测试的认知、软件测试的目的、实现目的的社会学和心理学上的探索。它试图建立正确的软件测试观念、协调的心理情绪和有效的思考方式。这些要素最终会决定在具体的项目中采用何种具体测试技术的组合。
有效软件测试——提高测试水平的50条建议
Effective Software Testing: 50 Specific Ways to Improve Your Testing, Elfriede Dustin
测试领域的Effective C++,广受赞誉,所提供的50条经验有很强的实践指导意义。
软件测试求生法则
Surviving the Top Ten Challenges of Software Testing : A People-Oriented Approach, William E. Perry, Randall W. Rice
作者讨论了测试人员所面临的十大“人际挑战”。从具体案例出发,介绍了挑战的表现形式、产生根源、解决方法和可能遇到的问题。虽然,外企的文化氛围与中国企业有一定差别,但是分析问题、解决问题的思路仍值得借鉴。
赢在测试:中国软件测试先行者之道
蔡为东
介绍了一批测试先行者的个人经验的书。学习他人经验可以用较低的成本去扩大自己的体验,自然是他山之石可以攻玉,开卷有益。不过,个人经验非批判性地阅读与理解,不能有效,甚至有害,所以该书适合愿意学习且有能力学习的测试爱好者。不足是大部分被采访者都是管理者,没有真正的测试技术专家。
软件测试精要
董杰
作者分享他在测试领域的经验与思考,其热情和思辨跃然纸上。缺点是内容却有些散乱,即便是一章,其系统性也有些不足;对于测试工具背后的测试思想,挖掘得比较浅,没有上升到测试理论的高度。
读书列表更新
C++ 读书列表 (V4.1)
参考手册
1. The C++ Programming Language (Special Edition), Bjarne Stroustrup
裘宗燕(译), 机械工业出版社
C++始创者、一代宗师Bjarne Stroustrup的经典之作,仅次于C++标准的权威书籍。
2. C++ Primer 3e, Stanley B.Lippman, Josee Lajoie
潘爱民(译), 张丽(译), 中国电力出版社
C++元老Stanley B.Lippam撰写的C++语法、语义层面的百科全书,极具参考价值。
3. The C++ Standard Library : A Tutorial and Reference, Nicolai M. Josuittis
侯捷(译), 孟岩(译), 华中科技大学出版社。
专业C++程序员必备的C++98标准程序库的参考手册,也是新手学习标准库的良好教程。
语言入门
4. Essential C++, Stanley B.Lippman
侯捷(译), 华中科技大学出版社
Stanley B.Lippam为C++初学者撰写的入门书,可惜很多国人第一次学C++的时候没有这本短小精悍的教程。
泛型与STL
5. Generic Programming and the STL, Matthew H. Austern
侯捷(译), 中国电力出版社
另辟蹊径,揭示了泛型理论的基础,以及STL的实作规格。所有泛型编程的初学者(即使你不学C++)都应该阅读其第一部分。
6. C++ Standard Template Library,P.J.Plauger,Alexander A.Stepanov,Meng Lee,David R.Musser
王昕(译), 中国电力出版社
STL始创者介绍STL,学习STL的权威参考。(在下没有读过该书)
7. STL源码剖析 (The Annotated STL Sources), 侯捷
华中科技大学出版社
侯老师的力作,展现STL的实现细节,为进一步深入学习、品位STL实现提供了良好的基础。
8. Modern C++ Design: Generic Programming and Design Patterns Applied, Andrei Alexandrescu
侯捷(译), 於春景(译), 华中科技大学出版社
真正的眩技派力作,使所有对泛型一知半解的人瞠目结舌的编程实作。该书的核心—Loki库,已经被收入C++ Builder X。
9. C++ Templates, David Vandevoorde, Nicolai M. Josuttis
陈伟柱(译), 人民邮电出版社
真正的C++泛型教程,从基础的语法、语义到强大的解决方案都有详细论述,使泛型编程登堂入室,与OO平起平坐。译文不太流畅。
10. C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond, David Abrahams, Aleksey Gurtovoy
全面介绍了C++ template metaprogramming的概念、工具与技术,展现了模板元编程匪夷所思的威力。关于DESL(Domain-Specific Embedded Languages)的论述非常精彩,值得高阶程序员、语言研究者参考。
作者用精彩的实例讲解了如何以优雅的方式来解决现实世界的复杂问题。更可贵的是,通过代码展示了构建可复用程序库的思想和理论,值得非C++程序员参考。
专家经验
12. Effective C++ 2e, Scott Meyers
侯捷(译), 华中科技大学出版社
Scott Meyers的绝妙好书,人手一本的赞誉绝非浪得虚名。
13. Effective C++ 3e, Scott Meyers
Scott Meyers结合未来的C++09与社区的发展,对经典的《Effective C++ 2e》进行了“彻底”的改写。值得所有C++的学习者和实践者参考。
14. More Effective C++, Scott Meyers
侯捷(译), 中国电力出版社
较前作Effective C++单纯的工程经验,该书更多地谈论技术解决方案,同样精彩。
15. Effective STL, Scott Meyers
龚敏敏(译), 电子版
《Effective C++》和《More Effective C++》的姐妹书,值得注重实效的C++程序员阅读。
16. Exceptional C++, Herb Sutter
聂雪军(译), 机械工业出版社
C++大师Sutter与读者面对面的交心之作。关于“异常安全性”、“名字查找”的部分非常精彩。
17. More Exceptional C++, Herb Sutter
於春景(译), 肖翔(审校), 华中科技大学出版社
在看过Exceptional C++之后,没有理由错过更加精彩的More Exceptional C++。
18. Exceptional C++ Style, Herb Sutter
刘未鹏(译), 人民邮电出版社
Sutter再次与读者推心置腹,把C++的实作细节娓娓道来。对一些“历史典故”和现实问题的描述尤其精彩,有趣而实用。
19. C++ Coding Standards : 101 Rules, Guidelines, and Best Practices, Herb Sutter, Andrei Alexandrescu
刘基诚(译), 人民邮电出版社
两位C++世界级大师汇总全球C++社群经验,联袂著此力作(2005年Jolt震撼大奖)。内容翔实,引用完备,提供了C++团队制定编码规范的权威基础。适合所有C++程序员阅读(对C++新手的帮助尤其明显)。
20. Runminatios On C++: A Decade of Programming Insight and Experience, Andrew Koenig, Barbara Moo
黄晓春(译), 孟岩(审校), 人民邮电出版社
一对技术伉俪的“沉思之作”,从C++的表皮渐入机理,拍案叫绝之处不胜枚举。
21. C++ Strategies and Tactics, Robert B.Murray
王昕(译),中国电力出版社
英文原版发行于1993年,内容略显陈旧,不过作者在书中分享了他在实践中获得的宝贵经验和建议,仍有一定参考价值。此外,阅读此书有助于理解C++语言及技术的发展过程(此书涉及Pimpl等惯用法)。不建议C++老手购买。
22. Applied C++:practical techniques for building better software, Philip Romanik, Amy Muntz
陈学峰(译),杨健康(译),林琪(译),中国电力出版社
作为一本贴近实战的指导书籍,体现了C++对于工业级程序设计的强大作用。内容涉及模板、STL、异常、快速原型、单元测试、性能优化等。值得一线的C+ +开发者仔细阅读。
李师贤等(译), 中国电力出版社
作者系统的总结了开发大规模C++软件的经验与原则。虽然少量内容略显过时,但仍旧具有重要的参考价值。中译本的翻译质量不高。
24. C++ Common Knowledge : Essential Intermediate Programming, Stephen C.Dewhurst
荣耀(译), 人民邮电出版社
本书提供了C++程序员所必须具备的“常识”,对于降低C++学习曲线、快速掌握基本的开发技术,很有帮助。
陈君(译), 中国青年出版社
本书讨论了常见的C++编程陷阱,展示了如何使用正确的惯用法和设计模式在复杂的C++世界中快速航行。中译本的翻译质量较差。
27. C Traps and Pitfalls, Andre Koeing
高巍(译), 人民邮电出版社
本书总结了C语言编程中一些重要的经验教训。在第一版发行20年之后,这本浓缩了专家经验的“小书”历久不衰。
28. The Design and Evolution of C++, Bjarne Stroustrup
裘宗燕(译), 机械工业出版社
C++始创者谈C++语法、语义的来龙去脉,是程序语言工作者不能错过的最重要参考书之一。
29. Inside The C++ Object Model, Stanley B.Lippman
侯捷(译), 华中科技大学出版社
cfront(第一个C++编译器)的实作者之一Lippman谈C++底层机制的绝妙好书,用短小的篇幅揭示了C++运作的机理。
30. Multi-Paradigm Design for C++, James O.Coplien
鄢爱兰, 周辉等(译), 中国电力出版社
原理简单,内容艰深,对于共同性和差异性的论述非常精彩。其方法可以扩展到更多的范型,需要反复实践和思考。译文不太流畅。
31. The Art of C++, Herbert Schildt
曹蓉蓉(译), 刘小荷(译), 清华大学出版社
该书包括8个C++实战案例:垃圾内存回收器,多线程开发,译码器,Internet下载工具,财务处理程序,AI搜索,定制STL容器,Mini C++解释程序,展示了C++的强大威力。然而,其代码风格有改进空间,其设计也未能尽显C++之艺术,有些遗憾。
於春景(译), 华中科技大学出版社
适合C++初学者的程序调试手册。
34. boost, www.boost.org
Boost是C++09标准程序库的基础之一,提供了一系列功能强大的通用程序库,能够明显提升C++程序的开发效率。此外,Boost还充分展示了多泛型设计的威力,体现了“语言设计就是程序库设计,程序库设计就是语言设计”的精髓,值得程序员、语言研究者细细品位。
37. C++应用程序优化, 冯宏华, 徐莹, 程远, 汪磊
电子工业出版社
IBM的工程师总结C++程序性能优化的经验,相关内容覆盖Windows和Linux平台。对C++性能优化的入门有参考价值。
软件设计基础
38. Design Patterns: Elements of Reusable Object-Orinted Software, Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
李英军(译), 马晓星(译), 蔡敏(译), 刘建中(译), 吕建(审校)
这本不是C++书籍,但是做为OOP的十年经典,任何当代的程序员都“必须”阅读。
39. Agile Software Development: Principles, Patterns and Practices, Robert C. Martin
邓辉(译), 孟岩(审校), 清华大学出版社
世界级软件开发专家的力作(2003年Jolt震撼大奖),尽显极限编程、面向对象软件设计、设计模式、物理设计的真谛,值得所有软件开发者参考。
40. Design Patterns Explained: A New Perspective on Object-Oriented Design, Alan Shalloway, James R.Trott
熊节(译), 清华大学出版。
一本设计模式的入门读物,由浅入深,循循善诱,尤其适合初学者。该书采用实用、恰当的例子,展示设计模式的威力,即便是软件开发老手也能从中有所收获。
41. Refactoring: Improving the Design of Existing Code, Martin Fowler
侯捷(译), 熊节(译), 中国电力出版社。
该书使注重实效的程序员在技术、心理上具备进行软件重构的基本素质。此外,其另一贡献在于:建立起吾人对于“目前和未来之自动化重构工具”的基本理论和实现技术上的认识与信赖(侯捷)。
42. Refactoring to Patterns, Joshua Kerievsky
详细讨论了以模式为导向的重构技术,更重要的是阐述了安全、有效地进行软件设计的合理思路。值得重构和模式的学习者和实践者参考。(中译本已经出版)
读书列表
自寒假结束,Liang又浏览了一批书籍。列清单一份,排名不分先后。
0. C++标准程序库——自修教程与参考手册
The C++ Standard Library : A Tutorial and Reference,Nicolai M. Josuittis著, 侯捷、孟岩译,华中科技大学出版社。
专业C++程序员必备的C++标准程序库(ISO98)的参考手册。
1. C++ Coding Standards : 101 Rules, Guidelines, and Best Practices
C++ Coding Standards,Herb Sutter、Andrei Alexandrescu著, Addison Wesley。
两位C++世界级大师汇总全球C++社群经验,联袂著此力作(2005年Jolt震撼大奖)。内容翔实,引用完备,提供了C++团队制定编码规范的权威基础。适合所有C++程序员阅读(对C++新手的帮助尤其明显)。
2. C++编程惯用法——高级程序员常用方法和技巧
C++ Strategies and Tactics,Robert B.Murray 著,王昕译,中国电力出版社。
英文原版发行于1993年,内容略显陈旧,不过原作者在书中分享了他在实践中获得的宝贵经验和建议,仍有一定参考价值。此外,阅读此书有助于理解C++语言及技术的发展过程(此书竟然涉及计Pimpl惯用法)。不建议C++老手购买。
3. C++编程艺术
The Art of C++, Herbert Schildt著,曹蓉蓉、刘小荷译,清华大学出版社。
该书包括8个C++实战案例:垃圾内存回收器,多线程开发,译码器,Internet下载工具,财务处理程序,AI搜索,定制STL容器,Mini C++解释程序,展示了C++的强大威力。然而,其代码风格有改进空间,其设计也未能尽显C++之艺术,有些遗憾。
4. STL源码剖析
STL源码剖析,侯捷著,华中科技大学出版社。
侯老师的力作,展现STL的实现细节,为进一步深入学习、品位STL实现提供了良好的基础。2005年7月,侯老师在南京大学软件学院讲授范型编程,此书为教材(肥水不流外人田
)。
5. 敏捷软件开发:原则、模式与实践
Agile Software Development: Principles, Patterns and Practices,Robert C. Martin著,邓辉译,孟岩审校,清华大学出版社。
世界级软件开发专家的力作(2003年Jolt震撼大奖),尽显极限编程、面向对象软件设计、设计模式、物理设计的真谛,值得所有软件开发者参考。强烈推荐。
6. 软件再造:面向对象的软件再工程模式
Object-Oriented Reengineering Patterns,Serge Demeyer、Stephane Ducasse、Oscar Nierstrasz著,莫倩、王恺译,机械工业出版社。
作者从自身参与欧洲工业研究项目FAMOOS的实践出发,总结了对面向对象的软件系统进行再工程时的最佳实践,并把它们精炼成模式。对于软件开发者和软件再工程(重构)的研究者都有参考价值。
7. 重构手册
Refactoring workbook,William C. Wake著,林琪、江健译,中国电力出版社。
该书采用了实例手册的方法来组织全书,以介绍最为重要的重构手法,并将其应用于代码之中。每章之后的习题有一定练习和启发意义。
8. 设计模式精解
Design Patterns Explained: A New Perspective on Object-Oriented Design,Alan Shalloway、James R.Trott著,熊节译,清华大学出版社。
一本设计模式的入门读物,由浅入深,循循善诱,尤其适合初学者。该书采用实用、恰当的例子,展示设计模式的威力,即便是软件开发老手也能从中有所收获。
9. UML精粹——标准对象建模语言简明指南
UML Distilled: A Brief Guide to the Standard Object Modeling Language (2nd Edition), Martin Fowler、Kendall Scott著,徐家福译,清华大学出版社。
小巧的UML的入门读物,口碑甚好。只是,读者可能需要适应徐教授的翻译风格。
10. 极限编程的幻象与真实
极限编程的幻象与真实,雷剑文、陈振冲、李明树著,电子工业出版社。
该书以务实创新的思维,研究了极限编程的方法和经验,内容严谨思辨,立论有理有据。不但提供了有价值的结论,其展示的做学问的方法更令人获益匪浅。适合软件开发者和软件工程研究者阅读。
11. 人件
Peopleware: Productive Projects and Teams (2nd Ed),Tom DeMarco,Timothy Lister著,UML China翻译组译,清华大学出版社。
阐述软件开发根本问题的绝妙好书,时间只增加了它的光彩:“我强烈推荐你买一份人件给你或你的老板,如果你是一个老板,那么为你部门的每一个人买一份,并给自己买一份”。这建议在12年后依然有效,并且更加热烈 —— Edward Yourdon
12. 人件集——人性化的软件开发
The Peopleware Papers: Notes on the Human Side of Software,Larry L. Constantine著,谢超、刘颖、谢卓凡、李虎译,人民邮电出版社。
著名的《康斯坦丁人件集》的修订版,汇集了大量的专栏文章,以组织文化、更可用对象为核心,从多个角度探讨软件开发中人的因素。译文不太流畅。
13. 软件工艺
Software Craftsmanship, Pete McBreen著,熊节译,人民邮电出版社。
一本震撼性的读物(2002年Jolt震撼大奖),指出软件工程的局限性,提出向工艺学寻求解答。阅读此书,有助于引发在软件开发问题上的独立思考,适合软件从业者参考。
14. 程序开发心理学(银年纪念版)
The Psychology of Computer Programming,Gerald M.Weinberg著,邓俊辉译,清华大学出版社。
此书开创"以人为本"的研究方法的先驱,不乏真知灼见,许多想法和时下流行的敏捷软件开发不谋而合。只是时隔30年,许多内容已经过时,不过仍具备一定参考价值。
15. 软件开发的科学与艺术
The Science and Art of Software Development,微软亚洲研究院著,电子工业出版社。
此书是微软亚洲研究一系列讲座的汇集,凝聚了微软专家多年研究和工作中获得的宝贵经验。内容涉及微软的企业文化、软件开发过程和项目管理等,对于软件开发和研究人员都有一定的启发意义。
16. PowerPoint演说家(白金版)
PowerPoint演说家,王咏刚、周虹著,电子工业出版社。
技术宣讲是一个科技工作者应该具备的能力。作者借8个实战案例来展示PowerPoint制胜秘技,借13个专题解析来总结PowerPoint技巧和演讲规律,的确是一本动感十足、妙趣横生的进阶好书。
寒假读书列表
从1月23日开始,Liang浏览了一批书籍。列清单一份,按阅读时间排序。
1. C# Primer
C# Primer,Stanley B.Lippman著,侯捷、陈硕译,华中科技大学出版社。
Lippman撰写的C#入门书(类似于《Essential C++》),短小精悍,展示了C#编程的正确概念。
2. .Net本质论——第一卷:公共语言运行库
Essential .NET – Volume 1: The Common Language Runtime,Don Box、Chris Sells著,张哓坤译,中国电力出版社。
揭示了CLR的底层机制(类似于《Inside The C++ Object Model》),前半段畅快过瘾,后半段略显艰深。CLR2.0即将发布,该书的部分内容可能需要更新。
3. C++多范型设计
Multi-Paradigm Design for C++,James O.Coplien著,鄢爱兰、周辉等译,中国电力出版社。
原理简单,内容艰深,对于共同性和差异性的论述非常精彩。其方法可以扩展到更多的范型,需要反复实践和思考。
4. 范型编程与STL
Generic Programming and the STL,Matthew H. Austern著,侯捷译,中国电力出版社
重新阅读了该书的第一篇,为《Effective STL》暖身,收获良多。www.jjhou.com上有第一篇的繁体译文下载,值得一读。
5. Effective STL
Effective STL,Scott Meyers,龚敏敏译,电子版。
《Effective C++》和《More Effective C++》的姐妹书,值得注重实效的C++程序员阅读。
6. 重构:改善既有代码的设计
Refactoring: Improving the Design of Existing Code,Martin Fowler著,侯捷、熊节译,中国电力出版社。
该书的最大价值在:建立起吾人对于“目前和未来之自动化重构工具”的基本理论和实现技术上的认识与信赖(侯捷)。
7. IT大败局
In Search of Stupidity: Over 20 Years of High-Tech Marketing Disasters,Merrill R.Chapman著,周良忠译,电子工业出版社。
通过十个IT败局,指出避免成功意味着避免愚蠢,而避免愚蠢需要一个“完全理解和热爱技术的管理队伍,同时他们也必须更理解和热爱商业”。
8. 程序员修炼之道——从小工到专家
The Pragmatic Programmer,Andrew Hunt、David Thomas著,马维达译,电子工业出版社。
举重若轻,谈笑间尽显真知灼见,值得每一位注重实效的程序员阅读。作者的网站(www.PragmaticProgrammer.com)上有原书的Reference Guide,很有参考价值。
9. Word排版艺术
Word排版艺术,侯捷著,电子工业出版社。
重读一遍,回顾近来的Word排版作业,仍旧收获、感触良多。
10. 自我成功学——每天7分钟改变你的命运
What Winners Do To Win! The 7 Minutes A Day That Can Change Your Life,Nicki Joy著,曾凡奇译,汕头大学出版社。
励志读物,指出你和成功者之间的巨大差距,有些章节可以和《程序员修炼之道》相互参考。要想成功,Bruce Lee已经说了:Knowing is not enough; we must apply. Willing is not enough; we must do.
11. 测试驱动开发
Test-Driven Development By Example,Kent Beck著,孙平贫、张小龙、赵辉等译,崔凯校,中国电力出版社。
在《Refactoring(重构)》之后,重读一遍《TDD》,相互参照,对“测试/编译/运行/重构”的测试驱动开发循环有了更深的认识。
12. 单元测试之道C#版:使用NUnit
Pragmatic Unit Testing: in C# with NUnit,Andrew Hunt、David Thomas著,陈伟柱、陶文译,电子工业出版社。
《程序员修炼之道》作者的又一本著作,是《Pragmatic Stater Kit(程序员修炼三部曲)》的第二部,市面上还有Java的JUnit版,内容大同小异。书很薄,是.Net平台上单元测试的入门手册,可以与《Refactoring》和《TDD》相互参考。
13. 爪哇夜未眠:Java程序员的心声
Java夜未眠,蔡学镛著,电子工业出版社。
“前Java程序员”的散文集,文笔风趣幽默,畅快轻松,是软件开发者的床头书,部分文章收录于作者的Blog:www.csdn.net/develop/author/cxy/。现在更期待侯捷先生的《左手程序右手诗》。
14. 人月神话
The Mythical Man-Month,Frederick P. Brooks著,汪颖、UML China翻译组译,清华大学出版社。
图灵奖获得者关于软件工程的经典著作,历经30年仍旧备受推崇,适合软件从业者参考。
此外,还阅读了《程序员》05年第2期、《新电脑》05年第2期。
Refactoring: Imporving the Design of Existing Code
用两天时间浏览了《重构——改善既有代码的设计(Refactoring: Imporving the Design of Existing Code)》(Martin Foler著,侯捷、熊节译,中国电力出版社),写一份读书心得。
重构是“对软件内容结构的一种调整,目的是在不改变软件之可察行为的前提下,提高其可理解性,降低其修改成本”。作为一种实践技术,重构以往只流传于专家领域内,其原理、技术、经验并未系统地介绍给大多数专业开发人员。《Refactoring》最大贡献在于“把重构的概念和想法逐一落实在严谨的准则和严密的手法之中”。该书的前四章解释重构的原理和实践方式,并指出何时何地应该重构代码以求改善。第五章至第十二章是全书的核心,提供了一份完整的重构名录(catalog of refactoring)。这份重构名录一共包括72个条目,每个条目解释一种经过实证的代码变换手法的动机和技术,具体包括名称(name)、概要(summary)、动机(motivation)、作法(mechanics)和范例(examples)。与《Design Patterns(设计模式)》对面向对象程序设计的贡献相似,《Refactoring》系统地把一套的开发词汇和实作技术引入了程序开发,对于重构技术的应用与推广具有重大意义。因此,在书籍市场上《Refactoring》常常与《Design Patterns》并论。该书的最后三章是Kent Beck等高手撰写的“客串章节”,介绍他们对重构的心得体会,颇有参考价值。
其实不管有意无意,绝大多数程序员都有过重构的行为,只是未能及时积累和总结,让许多心得和技法从指间漏过。此书把作者的积累的经验系统化、形式化,并以严密的手法呈现出来。其基本原则有二。第一,重构以小步骤前进。一点一点慢慢解决问题,可以降低出错的风险,增强工作的信心。而且,这些平凡微小的步骤正是自动化重构工具的基础,“积跬以至千里”恰是大型重构的实现方式。第二,在每一个小步骤之后,立即进行编译(语法检查)和自动化测试(行为检查)。具有自检测能力的测试可以提高工作效率,增强重构信心,也使添加新代码的风险大大降低。为了使程序不会在很长一段时间内无法编译(自然也无法测试),重构的惯用技法是:为被修改的元素提供替代品,然后逐步用替代品取代原始元素,每一次的替换往往都伴随编译与测试。
重构成功的关键是:对员工进行培训、尽量获得短期利益、减少额外开销、安全引入新技术。这其中自动化重构工具将发挥关键作用。一个能够与集成开发环境(IDE)无缝集成的重构工具,可以明显提高开发效率,降低风险,使程序员愿意也有信心进行重构。重构工具的本质是程序分析器(program analyzer),需要词法/语法分析、解析树(Parse Trees)、类型推演、依赖性分析等技术的支撑。有理由相信,程序切片(Program Slicing)、系统依赖图(System Dependence Graphs)、符号演算(Symbolic Evaluation)、元数据(Metadata)等技术将有助于高质量重构工具的实现。此外,自动化单元测试框架(Test Framework)仍有改进的空间。虽然JUnit、CppUnit等测试框架已经获得极大成功,但是随着语言和开发形式的发展(GP和AOP的迅猛发展,并发程序日趋重要),如何测试新的语言元素,如何利用新的语言特征发展测试框架,仍旧充满挑战。
《Refactoring》对于顺序面向对象程序的重构具有重要意义,但是其局限性也非常明显。因为,这个世界不都是对象!第一,泛型编程(Generic Programming)终于势不可挡。C#面世之处,曾经有文献声称C#不包含模板是一个优点,因为模板只会“产生更多的麻烦而不是效益”。然而四年后,GP即将进入Java 5和.Net 2.0。为了引入GP而不影响JVM,Sun把Generic Java的语法弄得有些诡异,也未能从元数据的角度对GP进行全面支持——Java终于面临当年C++的困境:当语言发展到一定阶段之后,任何语言层面的巨大变更都是不可接受。相比之下,微软负担较轻,她对C#语言、库(.Net Framework Libaray)、元数据(Metadata)和CLR(Common Language Runtime)进行了彻底地扩充和修改,以全面支持GP。可以预见,GP的设计、测试、重构都将成为程序员关心的热点。特别是如何开展多种泛型的混合编程,将是程序员和研究者面临的首要问题。
第二,面向方面编程(Aspect Oriented Programming)的时代已经到来:Ivar Jacobson的《Aspect-Oriented Software with Use Cases》即将出版,基于动态代理和拦截器的AOP已经在Java和CLR中广泛应用,各种AOP的语言扩充纷纷出现等等。由于编织(Aspect Weaving)会改变Component代码的行为,部分针对面向对象程序的重构手段已经不能直接实施。更重要的是,如何利用AOP来实现关注分离(Concerns Separation)、如何重新整理横切关注(Crosscutting Concerns),都是全新的命题,需要进一步深入研究与实践。虽然已经有人做了部分工作,但是不经过大量的工程实践,相信很难得到令人满意的理论与方法。
第三,我们正出于一个伟大时代的黎明。这个时代就是并发(Concurrency)的时代,Herb Sutter已经在他的文章《The Free Lunch Is Over: A Fundamental Turn Toward Concurrency in Software》中敏锐的指出:Concurrency is the next major revoltuion in how we write software。2003年初,Intel已经拿出了主频为3Ghz的CPU。按照摩尔定律,现在我们至少可以用上6Ghz的CPU,但是P4停留只停留在3.8Ghz,4Ghz的发布计划已经终止。而Intel和AMD的双内核CPU却是箭在弦上(Intel的双内核CPU将在2005年第二季度发布)。今后,CPU将越来越普遍地采用多内核设计以提升性能。但是,按照现在编写软件的方式,应用程序将无法利用多内核CPU的并发处理能力。程序员将面临面向对象之后的另一次革命——无所不在的并发程序开发。多线程安全性,lock-free编程,并发算法等将从幕后走向前台,而这其中的技术难度超过了大多数人的想像。如何重构并发代码并保证安全性,如何测试重构后的代码以检验安全性,将成为棘手的难题。
PS. 《Refactoring》的中文版为熊节初译,侯捷统稿。中译本文笔流畅、中英术语并陈、确实能够在“阅读时间、理解时间和记忆深度上,较之英文版,能够为以华文为母语的读者提高10倍以上的成效”。
《软件开发的创新思维》
二十多年来,Alan Cooper设计并开发了许多消费类软件产品(最著名的成果是Visual Basic的可视化编辑用户界面),是一位经验丰富、思维敏锐的软件设计师。1999年,他撰写了《The Inmates Are Running The Asylum - Why High-Tech Products Drive Us Crazy and How to Restore the Sanity》一书。2001,中译本《软件创新之路——冲破高新技术营造的牢笼》出版;2003年,中译本第二版《软件开发的创新思维》出版。
《软件开发的创新思维》是一本介绍软件设计方法的“趣味”读物,虽然成书于上个世纪,所涉及的商业案例略显陈旧,但是Cooper的观念、方法的确令人耳目一新。首先,Cooper站在广大普通用户(不是发烧友或程序员)的角度,用大量事实,阐述信息化带来的种种消极因素和逆向文化。然后,他提出,软件设计应该分两部分:编码设计与交互设计,程序员负责编码设计,交互设计师负责交互界面设计。过去这两部分都由程序员来做。其实,程序员是擅长编码的“逻辑人”(与普通人截然不同),并不擅长与最终客户交互。因此,大多数软件虽然功能强大,但是交互界面却繁琐复杂。如果由专业的交互设计师来进行交互设计,情况将得到明显改善。
Cooper在书中举了一个精彩的交互设计实例。Sony需要开发一套软件系统,通过前排椅背后的液晶显示屏为飞机乘客提供视频点播(VoD)、游戏、购物等服务。原先的界面有些类似于Windows Media Center的分层菜单,Ada原以为不错,不料Cooper却指出这是一个“无任何满意度”的典型设计(看来Ada在错误的道理上已经走得太远)。然后,他虚拟出四个典型用户:丘克,一个商业旅行者;埃塞恩,一个9岁男孩;玛丽,一个双语旅行者;克利维斯,一个65岁不会电脑的老头。交互设计的目标是让他们都高兴。丘克和玛丽是乘飞机旅行的常客,只要系统不包含大量操作,他们很快就会上手,且发现适合自己的高级设定。埃塞恩精力充沛,会主动搜索到系统的各个角落,只要能玩上游戏,他就会高兴。而克利维斯则对高科技没有兴趣,让他感到满意是检验设计好坏的标准,他是“首要角色”。于是,庞大的用户人群缩小到一个怪癖的老头,整个系统只为他一个人设计。经过一系列交互设计,最终的系统界面的确非常友好,“易用性”不再是印在软件包装(或鉴定证书、用户证明之类文档)上的自欺欺人之言。
在象牙塔里呆得太久,在技术圈里陷得太深,很容易会变成“逻辑人”。但是,一个成功的软件却需要和普通人打交道,并赢得他们的忠诚,而客户的忠诚是企业的无价之宝。Cooper则用幽默风趣的语言,为整个软件产业的从业者(从CEO到程序员)指出了一个新希望。
下面这个笑话来自该书的“逻辑人”一章,指出了Ada这种人的特点(为了完整性,Ada修改了结局)。
从前有教士、律师和程序员三个人被依次执行死刑。第一个走上绞刑架的是教士,刽子手启动刑具,但什么事都没有发生,教士宣称是神来干涉并请求放掉他,所以他就自由了。第二个是律师,刽子手启动刑具后也没有什么动静,律师宣称如果他们要在试一次的话,将会是双重判决,于是要求将他释放,所以他也获得了自由。最后,那位程序员走近绞刑架。他饶有兴趣地对绞刑架进行细致的检查,并大叫:“啊哈,我找到绞刑架的故障了”,然后开始积极的修理。修理之后,刽子手对他启动刑具,但同样什么也没有发生。因为,程序员在修理第一个Bug的同时引入了一个更大的Bug。
在21世纪,能获得成功的专业人士乃是理解商业的技术人员或者理解技术的商业人员 ——Alan Cooper
Word排版艺术
用两天时间浏览了《Word排版艺术 The Art of Word – Write and Typeset Large Scale Document 》,写一份读书心得。
此书是侯捷先生(www.jjhou.com)的新作,简体版于2004年10月由电子工业出版社印发。作为两岸知名的资讯教育工作者,侯先生的著作、文章、译作可谓硕果累累。近七八年来,他以Microsoft Word为工具,亲自排版了数百篇文章、数十本书籍,其“侯式”风格的编排样式一直受到读者的广泛赞誉。次此,他把多年积累的美好经验整理成书,旨在与“希望以Word完成大型文档排版,或使用Word作为创作平台”的读者分享其中酸甜苦辣。
Ada于三年前开始用Word撰写大型文档(学士毕业论文),近一年来更是忙于撰写各种文字材料,所处理之文档往往格式繁多、长篇累牍,也积累了不少旁门左道的文字处理伎俩。不过这些dirty的手段终究费时费力,内心中始终希望有人能够指点迷津,但是市面上的Office书籍虽然汗牛充栋,但是几乎没有一本可以参考。侯先生一直是Ada敬仰科技工作者,听闻他的大作《Word排版艺术》即将在大陆出版时,不禁万分期待。不久前,终于在书店觅得此书,却又踌躇起来:第一,此书定价不菲(零售价48元人民币);第二,象Ada这样的二流写手、三流程序员到底需不需要这本书呢?于是仔细阅读“本书定位”一节,其中侯先生提到四种人可受益于此书:一、需要大型文档排版的人;二、需要进行大型文档创作的人;三、需要团队协同协作的人;四、需要制作PDF电子文档的人。嘿嘿,Ada几乎同时属于这四种人,遂购入!
经过两天的浏览,收获颇丰,侯先生所言非虚。此书虽然近400页,但是文笔流畅,图文并茂,制作精制(虽然被我发现一个“排版”的bug
),阅读时流畅、愉快,完全可以在“两天内认识排版领域知识,以及Word的能与不能”。对于大型文档的排版者和团队协同工作者确实具有应用价值,是一本可以随时翻阅的实用手册。其实,Ada对书中的大部分概念都有过接触,但是从未站在“创作平台”的高度对各项自动化功能进行全面总结、整理,到是经常被Word的“自作聪明”搞得狼狈不堪。排版确实是一项系统工程,大多数人通常在细节处纠缠不清,而对排版的系统性、架构性浑然不知。侯先生著作的可贵之处在于采用top-down的教学方式,一开始便开宗明义,透彻介绍了排版的基础知识,可以使广大Word使用者立即接受正确的观念,即便日后换了排版工具也能举一反三。至于各实用功能的讲授,侯先生也循循善诱、点面具到,特别是“宏、VBA、Word对象”一章让Ada这个以往对宏讳莫如深的菜鸟,也产生了跃跃欲试的冲动。
总之,《Word排版艺术》的实用性、适用性(适用于Word97及后续版本)俱佳,确实是由“实际实用这些软件于务实工作”的行业人士所写的佳作。
Test-Driven Development By Example
用两天时间浏览了《Test-Driven Development By Example》(Kent Beck著),写一份短小的读书心得。
此书的中译名是《测试驱动开发》(中国电力出版社),初看的时候以为是“测试驱动程序的开发”,读到内容才知道Test-Driven Development(TDD)不是一种测试技术,而是“一种分析技术、设计技术,更是一种组织所有开发活动的技术”。TDD一般可归纳为以下几个步骤:
(1) 快速增加一个测试程序。
(2) 运行所有的测试程序,发现某些测试程序不能通过。
(3) 做一些小的改动,让全部测试程序可以通过。
(4) 重构(refactor)代码,以消除重复设计(duplication),优化设计结构。
TDD是一种XP技术,采用快速的迭代(测试、编译、运行、重构)来进行系统开发,强调小步骤和具体反馈。通过不停的测试驱动的重构,TDD试图让系统逐渐获得良好的框架(framework),通过不停的实践使良好的设计“自动出现”,而这一切又为进一步的重构提供了基础和信心。从心理学的角度,TDD可以使程序员始终关注少量可控制的问题,从而使开发变得平滑。
此书包含两个TDD项目的实例(故名为“By Example”),都很详细,第二个关于xUnit开发的实例介绍了TDD、测试框架、Python,一举三得,比较精彩。书的第三部分介绍了“测试驱动开发的模式”,包含测试模式、xUnit模式、设计模式、重构等内容。从整体上看,作者用很短的篇幅(正文仅160页左右)介绍了TDD的方方面面,虽不深入,但言之有物,通俗易懂,启发性颇强。
Ada以前的编程方式其实和TDD有一点相似,也试图先建立一个可以立即运行的产品,但是缺乏测试驱动的迭代。这其实暴露了两个问题:一、没有对自己的方法进行改进和提升;二、缺乏必要的工程实践来广泛检验和精练已有的方法。今后可能会使用一些TDD技术,首要的工作是学习已有的测试框架(如CPPUnit Wiki),不过我能用于开发(及开发技术学习)的时间实在太有限了。
最后,摘录一句叔本华的话,这是本周我读到的最精彩的文字。
“把人们引向艺术和科学的最强烈的动机之一,是要逃避日常生活中令人厌恶的粗俗和使人绝望的沉闷,是要摆脱人们自己反复无常的欲望的桎梏。”