如何写出美的程序 --《编程修养》-- 总结与读后感

今天推荐一本关于编程修养的书,注意这些你就能写出美的代码,把程序写成艺术当成一种信仰。

总结如下:

一、程序员应该有以下几方面的素质

1、有专研精神,勤学善问、举一反三。

2、积极向上的态度,有创造性思维。

3、与人积极交流沟通的能力,有团队精神。

4、谦虚谨慎,戒骄戒燥。

5、写出的代码质量高。

二、使程序变得优美的32个素养(自注:自己的收获和理解)

1、版本和版本号。(自注:给每个文件、函数加上,使程序功能一目了然)

2、缩进、空格、换行、空行、对齐。(自注:增加程序的易读性和美观,换行主要是用在区分功能段上使用,主要是划界)

3、程序注释。(自注:注释要表达的是干什么,是意图。如果注释需要嵌套,使用#if和#endif预编译也可以实现注释)

4、函数的[in][out]参数。(自注:对函数的输入输出参数(当然输出函数在外部检查)进行合法性检查,可以使用断言(assert),不然可能会给系统带来致命的错误,but个人觉得这得分场合,如果不考虑内存和效率,这种检查是有效且安全的,但是对于一些资源吃紧的产品,比如低端的8位单片机,则努力把逻辑做好就好了,毕竟这种类型的代码量自己能够掌控) 

5、对系统调用的返回进行判断。(自注:尤其是一些获取指针的操作)

6、if 语句对出错的处理。(自注:很难解释,所以照抄原文,见下文备注1)

7、头文件中的#ifndef。(自注:在头文件前后增加如下头尾,可避免头文件被多个文件引用后造成大量的声明冲突)

如何写出美的程序 --《编程修养》-- 总结与读后感

8、在堆上分配内存。(自注:栈 stack"和"堆 heap"的区别是:stack 上分配的内存系统自动释放, heap 上分配的内存,系统不释放,哪怕程序退出,那一块内存还是在那里。 stack 一般是静态分配内存, heap 上一般是动态分配内存。由 malloc 系统函数分配的内存就是从堆上分配内存。从堆上分配的内存一定要自己释放。用 free 释放,不然就是术语--"内存泄露"(或是"内存漏洞") -- MemoryLeak。)

9、变量的初始化。(自注:对于全局变量或者静态变量,尽量初始化时就赋初值,因为有可能你会不知道在哪就使用了这个变量,而你忘了初始化,可能会有些严重的后果。重点:指针一定要初始化。。。)

10、h 和 c 文件的使用。(自注:.h用于声明,.c用于定义)

11、出错信息的处理。(对重要的错误进行统一的编码(宏定义实现),而不是直接使用printf输出一串硬字符,不同的人可能会有很大的不同写法,统一使维护变得简单)

12、常用函数和循环语句中的被计算量。(自注:有一些不变的量在循环中不断地被赋同样的值,这样会使效率变差)

13、函数名和变量名的命名。(摘抄如下:)

我看到许多程序对变量名和函数名的取名很草率,特别是变量名,什么a,b,c,aa,bb,cc,还有什么 flag1,flag2, cnt1, cnt2,这同样是一种没有"修养"的行为。即便加上好的注释。好的变量名或是函数名,我认为应该有以下的规则:

1) 直观并且可以拼读,可望文知意,不必"解码"。
           2) 名字的长度应该即要最短的长度,也要能最大限度的表达其含义。
           3) 不要全部大写,也不要全部小写,应该大小写都有,如:
                     GetLocalHostName 或是 UserAccount。
           4) 可以简写,但简写得要让人明白,如:                                                                                                                                                       ErrorCode -> ErrCode,ServerListener -> ServLisner, UserAccount -> UsrAcct 等。
           5) 为了避免全局函数和变量名字冲突,可以加上一些前缀,一般以模块简称做为前缀。
           6) 全局变量统一加一个前缀或是后缀,让人一看到这个变量就知道是全局的。
           7) 用匈牙利命名法命名函数参数,局部变量。但还是要坚持"望文生意"的原则。
           8) 与标准库(如: STL)或开发库(如: MFC)的命名风格保持一致。

14、
 

备注1:

如何写出美的程序 --《编程修养》-- 总结与读后感