Oct 7, 2008

Code Complete 读书笔记 PART 7

Software Craftsmanship 软件工艺
Chapter 31. 布局与风格
Layout and Style
准确、一致、易读性、易维护性
Layout Fundamentals
好的布局凸显程序的逻辑结构。
人 != 计算机
经验和规矩是吻合的
Layout as Religion
Objectives of Good Layout
准确,始终如一地表现程序的逻辑结构;改善可读性;经得起修改
Layout Techniques
分组:空行,空格
空行:将不相关的语句隔开 8% ~ 16%
缩进:2 ~ 4 空格,显示逻辑
Layout Sytles
纯块结构:Basic
仿纯块结构:java
begin-end {}
行尾布局
Laying Out Control Structures
begin-end: 未缩进;两次缩进  ×
在程序中加入空行,有助于思考语句的从属
缩进策略应统一
goto:标号大写、上下空行;包含goto的语句单独为一行
Laying Out Individual Statements
空格:逻辑、数组引用、子程序参数
续行:续行需明显(“+ , && ||”);所有后续行按标准量缩进;
Using only one statement Per Line
易调试,易修改,能提供关于复杂度的正确印象,线性阅读
数据声明:一行一声明,靠近首次使用的位置,合理组织顺序
注释:缩进一致,注释前加空行
有约定比约定某个特定细节更重要
Laying Out Routines
用空格分隔程序各部分
参数按标准缩进
Laying Out Class
Class Interfaces: 头部注释(类及完整用法) 构造析构 public protected private
Class Implementations: 类文件内容 类数据 public protected private
子程序间:2~3行

Chapter 32. 自说明代码
Self-Documenting Code
好的注释才有价值
源码包含大部分关键信息,信息融入代码
好的代码本身是最好的说明
注释应用来说明代码无法说明的东西
注释应易维护
External Documentation
单元开发文件夹:UDF: uint-development folder  SDF: software-development folder
详细设计文档
Programming Styla as Documentation
良好结构、直率易懂的方法、有意义的名称、具名常量、清晰的布局、最低复杂度的控制流和数据结构
循环 -- 良好定义的子程序
尽可能采用问题领域的术语
To Comment or not to Comment
好注释 != (重复代码 or 解释代码)
注释困难 --> 代码差劲 or 没有彻底理解
代码复杂:改进代码 > 添加注释
Kinds of comments
repeat of code
×
explanation of code ×
marker in the code (fix before release?)
summary of code: good for other readers
description of the code's intent: 意图而非解决方法
information that cannot possibly be expressed by the code itself
Commenting Efficiently
采用不会被打断和易于修改的注释方法
用伪码编程法减少注释时间
1 comment per 10 lines
Commenting Techniques
行尾注释:代码块,数据声明
数据声明:数据单位、允许范围、编码含义、输入数据限制、位标志

Chapter 33. 个人性格
Personal Character
谦虚,求知欲,诚实,创造性,纪律,高明的偷懒
好性格 -->正确的习惯
软件开发:建造材料=个人才智;工具=自己,其实在研究人的智力、性格
20/80,10:1
Intelligence and Humility
理解一个程序,需要很强的吸取细节的能力并能同时消化
《The Humble Programmer》:大部分编程工作都是在弥补我们有限的智力。承认自己智力有限并通过学习来弥补
减轻脑力负担:
系统分解,复查、详查、测试,程序尽量短小,尽量高层,规范
Curiosity
在开发过程中建立自我意识
试验!学会制造错误-->收获;利用小程序
阅读解决问题的方法
在行动之前做分析和计划:分析<-->行动
学习成功项目的开发经验:Programming Pearls, The Mythical Man-Month
阅读文档,RTFM!^_^
向专业开发看齐
入门级:某语言的基本功能,运用语言特性
中级:多中语言基本功能,熟练使用一种语言
熟练级:对语言和环境有专业技能
技术带头人级:人
Intellectual Honesty
了解代码,了解进度,如实反馈
Communication and Cooperation
代码可读性,编程首先是和人交流,其次才是计算机
Creativity and Discipline
在非关键之处设立规范,从而在更重要的地方发挥创造性
Form is liberating.
Laziness
拖延:逃避思考,实在懒
迅速完成:用最少时间做完不喜欢的工作。开明懒
编写某个工作完成不喜欢的任务:一劳永逸的懒
Characteristics that don't matter as much as you might think
persistence: 固执己见 or 坚韧不拔 知道何时放弃
experience: 软件开发行业的经验比书本知识价值要小,工作10年,是得到10年的经验还是1年经验的10次重复
Habits
精神品德,编程品德
态度端正,积极思考 --> 习惯
不能用没有习惯来代替坏习惯
Additional Resources
《The Humble Programmer》
Dijkstra:编程的本质任务就是驾驭计算机科学的极端复杂性,编程是唯一一个需要掌握从最底层到最高层9个数量级细节差异的人类活动。

Chapter 34. 软件工艺的话题
Themes in software Craftsmanship
编程的目的之一是管理复杂性
过程对产品有深远影响
团队:广泛沟通;单人:自我交流
编程应基于问题域而非解决方案
注意警告信息
迭代:软件质量
丰富的工具箱

Conquer Complexity
降低复杂度几乎和衡量程序员成果的最重要依据
方法:划分子系统,类、接口,保持接口抽象性,避免深层次的继承,避免深层的循环、条件判断,不用goto,不滥用异常(需以系统的观点使用),不让类过度膨胀,子程序短小,使用不言自明的变量,子程序参数尽量少,规范和约定
Pick Your Process
团队成员 --> Process --> 质量。
避免不成熟的优化
坏的过程损耗脑力
Write Programs for People First, Computer Secon
目标:算法精准,结构紧凑,性能好,注释清晰得体
Program into your Language, Not in It
要什么 --> 怎样用工具实现。
Fous Your Attention with the Help of Conventions
规范是一套管理复杂度的质量工具
规范能精确地传达重要的信息
规范能免除各种风险:禁止,要求 --> 防范
规范能增加对低层工作的可预见性
规范能弥补语言的不足之处
Program in Terms of the Problem Domain
尽可能工作于最高的软件层次
顶层代码:说明解决的问题
Separating a Program into Levels of Abstraction
Level 0: Operating-System Operations and Machine Instructions
Level 1: Programming-Language Structures and Tools
Level 2: Low level of implementation Structures 粘结层
Level 3: Low level Problem-Domain Terms 提供框架
Level 4: High level Problem-Domain Terms 基于问题域的术语
Watch for Falling Rocks
艺术  工艺(craft) 科学
良好的个人判断
玄机代码 maybe 差劲代码
设计的度量 反映 设计的质量
警告信息
重复,“不自在,不惬意”
不容易写注释,不易命名变量,不易将问题分解
难以理解,不安,猜测
找不到错误的原因仅仅因为是忽视
Iterate, Repeatedly, Again and Again
反复评估 --> 精确
开发:逐步精化,实证而非证明
迭代的代码调整
Thou Shalt Rend Software and Religion Asunder
software Oracles & Eclecticism
Experimentation
基于实验结果改变思路
“试图没有错误”是最大的错误
设计是仔细规划小错误以避免更大的错误
试验可用在很多层次上


Chapter 35. 更多信息

Software Construction
Pragmatic Programmer
Programming Pearls
Extreme Programming Explained: Embrace Change
Writing Solid Code
The Practise of Programming
Topic Beyond Construction
Facts and Fallacies of Software Engineer
Professional Software Development
The Psychology of Computer Programming
Software Engineering Overviews
Software Engineering: A Practitioner's Approach
Software Engineering 6th
Periodicals
Software Development www.sdmagazine.com
Dr.Dobb's Journal www.ddj.com
IEEE Software www.computer.org/software
Communications of the ACM www.acm.org/cacm/
A Software Developer's Reading Plan
Introductory Level
Conceptual Blockbusting: A Guide to Better Ideas
Programming Pearls
Facts and Fallacies of Software Engineering
Software Project Survival Guide
Code Complete
Practitioner Level
Software Configuration Management Patterns: Effective Teamwork, Practical Integration
UML Distilled: A Brief Guide to the Standard Object Modeling Language
Software Creativity
Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and the Unified Process
Rapid Development
Software Requirements
Professional Level
Software Architecture in Practice
Refactoring: Improving the Design of Existing Code
Design Patterns
Principles of Software Engineering Management
Writing Solid Code
Object-Oriented Software Construction

2 comments:

Anonymous said...

你这个是考的还是自己敲上去的,这麽多,还有e文...

Sunix.Xu.许一尊 said...

自己敲的啦,打字比做笔记总快些吧。