听林斌的《如何编写优秀的程序》总结
一、写好程序的两大要素:
1、设计
(1)系统结构设计:由一些经验比较丰富的、经验比较足的工程师(架构师)来做
(2)详细的开发设计:
2、编程
二、设计文档的编写
1、文档本身怎么写不是关键,关键是文档的内容
2、最关键的一个部分是:design goals 影响着后面文档的编写,从而间接影响着后面的编码
三、一流代码可能需要很多特性,如鲁棒、简洁、高效等等。在林锐的《高质量程序设计指南C++/C语言》(第二版)里面曾经提到十点也就是
十大,在这里作者指出其实满足这些都可能不是问题,最难的就是在于如何取得一个平衡。比如,当你改善代码使其更高效的时候可能牺牲了
代码的可读性、清晰性。还有,开发的要求在各个开发阶段是不一样的,最初可能只是简单要求系统可以work,接下去就会考虑性能、鲁棒等
四、讲座中举了一些例子来说明了写代码所犯的一些错误
1、不要定义自己的“语言”,怎么理解呢就是很多人喜欢定义一些宏来代替原来的语言格式,
如在C/C++里面,如下
define isnot !=
define or ||
define is ==
还有一些从pascal转过来的人可能会喜欢定义BEGIN和END来代替{和}
如:define BEGIN {
define END }
这种习惯很不好,人家语言本身其实很好的,你这样做以后,别人可能看不懂你的程序了
2、函数的代码行应该在143行以内(1991年的研究结果,在86年IBM研究结果是在500以内,林锐的《高质量程序设计指南C++/C语言》(第二版
)里面的建议是在50行以内)
3、枪杆子的道理-Learn API32 seriously from MSDN ;Understand the ones you use,read the SDK doc in MSDN 。尽量使用库函数
4、使用指针的地方一定要判断指针是不是为NULL(当然,你声明指针的时候一定要初始化指针否则成为野指针就麻烦了),永远不要相信客户
给你的承诺(疑心重重写代码),比如:放心啦,我们永远不会给你传一个NULL的(这种你可不要相信,哪天可能就给你了哦,这时出问题就
查找起来就很麻烦了)。若是构造函数的多个参数需要指针的话,可以另外设定一个函数专门来做这个参数的指针的检查。
5、code review:主要的方式是找一个同事或者同学,然后把你的代码解给他们听,关键不是要让他们听得懂帮你修改或者提意见,关键是可
以使你自己回忆了一篇代码的思路。
6、小心把==写出=,作者提到他在微软工作的犯了这个错误。所以有时也把非左值写在==的左边,如NULL==sign
7、注意代码的复用,把相同功能的代码抽象出来,不要使用:Ctrl-C、Ctrl-V 这样代码修改一起就麻烦,维护不方便
五、系统开发和应用开发的区别
1、系统开发,你需要对系统很了解的,对代码强调鲁棒、效率
(1)鲁棒:就是你的系统如果出了问题的时候,系统不能崩溃啊,应该有自己矫正的能力,比如以前Wins 98的健壮性就比较不好,因为一出现问题就可能造成死机,但是现在的XP就不一样了,应用程序出现问题的时候只要把这个程序的进程关掉就行了
(2)效率
2、应用开发:
(1)强调UI,
(2)对能够跑起来的系统要求和硬件要求要最小,或者说起来的速度要很低,因为面向的很多不同的客户,要让尽可能多的用户可以使用,但是这个系统开发一般不要考虑,因为系统开发一般假设客户可以承受这些要求的
六、中间讲到的部分推荐的两本书
1、design pattern ,推荐的就是那本经典的《设计模式可复用面向对象软件的基础》
2、《Inside windows NT》(主要是推荐给那些需要研究NT的人,作者使用了“非常非常好的一本书”来评价)
七、微软招人的考虑的基本因素和作者的建议
1、数据结构和算法,特别强调数据结构,算法要看各个人,一般只要对基本的算法可以理解就行了
2、考虑你的潜力,当然你要证明,比如虽然你现在不懂什么……,但是你提供证明说你可以在多长时间内可以上手
3、懂得一个语言然后充分利用起来基本上就足够了,当需要其他语言的时候,只要你已经“精通”(指很熟悉)一种语言,那么学起来也不难
八、有关Windows代码的公开(2001作者作这个讲座的时候说的)
1、window CE的代码会经过修改以后公开
2、把NT的一些内部函数打包以后留出接口,然后公开,让大家可以通过这个接口来模拟Windows的开发
3、作者的观点:公开windows CE可能更好一点,因为NT太复杂了,公开也可能看不懂,不助于学习
最后、其他还有一些值得参考的,比如对scalable(可扩展,就是通过加CPU可以使速度翻倍)的理解,但是表达出来比较麻烦,大家有机会自己找来看看,不过比较老了,是2001年的。
评论