终于把 <Code Complete>.2nd 读完了,1000多页的量。由于是电子版的,因此没有那种一看到很厚的一本书就被吓倒的感觉,但也少了那种消灭完一本大书的成就感。
以下是自己对一些有趣的章节的简短的笔记流记录……
Guidelines about ADT
- 把常见的底层数据类型创建为 ADT 并使用这些 ADT, 而不再使用底层数据类型
- 把像文件这样的常用对象当作 ADT
- 简单的事物也可当作 ADT
- 不要让 ADT 依赖于其存储介质
Thinking about Class
Class is based on definition of ADT
Defensive Programming
- 检查所有非法输入数据
- 使用 Assertions
- Error-Handling Techniques
- 返回中立值
- 换用下一个正确的数据
- 返回与前次相同的数据
- 换用最接近的合法值
- 把警告信息记录到日志文件中
- 返回一个错误码
- 调用错误处理子程序或对象
- 当错误发生时显示出错误消息
- 用最妥当的方式在局部处理错误
- 关闭程序
- Compromise between Robustness and Correctness
- 隔离程序,使之包容由错误造成的损害
选择某些接口作为安全区域的边界,对穿越安全区域边界的数据进行合法性校验 当数据非法时做出相应的反映; 输入数据时将其转换为恰当的类型
- 使用调试助手(辅助调试的代码)
- 使用进攻式编程
- 避免过度防御式编程
以下是一部分整理的此书所推荐的书籍简短记录……
Fault Tolerance
- IEEE Software 2001.07
- Agile Database Techniques (Ambler 2003)
- On the design and development of program families (Parnas 1976)
Software Design, General
- The Object-Oriented Thought Process
- Object-Oriented Design Heuristics
- Programming on Purpose: Essays on Software Design (Plauger)
- The Art of UNIX Programming
Software Design Theory
- A Rational Design Process: How and Why to Fake it (Parnas)
- On the Criteria to Be Used in Decomposing Systems into Modules
- Designing Software for Ease of Extension and Contraction (Parnas 1979)
- The Modular Structure of Complex Systems
Design Patterns
- Design Patterns Explained
Design in General
- Conceptual Blockbusting: A Guide to Better Ideas (Adams 2001)
- How to Solve It: A New Aspect of Mathematical Method
- How to Solve It: Modern Heuristics
- The Sciences of the Artificial
- Software Creativity
Assorted
- Pragmatic Programmer
- Applied UML and Patterns
- Fundamentals of Object-Oriented Design in UML
- High Output Management
- Test-Driven Development: By Example (Beck)
- Software Engineering Metrics and Models
- C Programming Guidelines (Plum)
- The Elements of Java Style
- Professional Software Development
- Principles of software Engineering
- Design and Code Inspections to Reduce Errors in Program Development
- The Psychology of Computer Programming
- Managing the Software Process
- Refactoring: Improving the Design of Existing Code
- Rapid Development
- Code Reading: The Open Source Perspective
- Programmers at Work
Classes in General
- Object-Oriented Software Construction
- Effective Java Programming Language Guide
Defensive Programming
- Assertions
- Writing Solid Code(Maguire)
- Secure
- Writing Secure Code
Data Structure
- Introduction to Algorithms (Cormen,H.Thomas, Charles E.Leiseron, Ronald L.Rivest)
- Algorithms in C++ (Sedgewick, Robert), Parts 1-4, Parts 5
- Algorithms in Java, Parts 1-4
- Algorithms in Java, Parts 5
Software Complexity
- A Complexity Measure (Tom McCabe)
- Software Engineering Metrics and Models
Software Testing
- Testing Computer Software
- Lessons Learned in Software Testing
- Introducing Software Testing
- How to Break Software : A Practical Guide to Testing
- What is Software Testing? And Why Is It So Hard?
- The Art of Software Testing
- Test-Driven Development: By Example
- Bug Patterns in Java
Performance Tuning
- Performance Solutions: A Practical Guide to Creating Responsive, Scalable Software
- “Optimization: Your Worst Enemy” (http://www.flounder.com/optimization.htm)
- Writing Efficient Programs
- Web Performance Tuning
- Java Performance Tuning
- Java Platform Performance: Strategies and Tactics
Programming Tools
- www.sdmagazine.com/jolts
Program Style
- The Practice of Programming
- The Elements of Java Style
- The Elements of Programming Style
- Literate Programming
Personal Characteristics
- The Humble Programmer
- The Psychology of Computer Programming: Silver Anniversary Edition
- Tutorial: Human Factors in Software Development
Software Engineering
- Facts and Fallacies of Software Engineering
- Professional Software Development
- The Mythical Man-Month
- PeopleWare
- Software Creativity
- Software Engineering: A Practitioner’s Approach
- Software Engineering (Ian Sommerville)