用C语言编写一个双向链表。如果你有一定的C语言编程经验,这自然是小菜一碟。有的读者可能连一个小程序都没有写过,那也不用害怕,可以参考任何一本《数据结构》和C语言的书籍。先弄明白基本概念,把书上的代码看明白,再把代码抄到电脑里,保证编译过去,调试它到正常运行。反复这个过程,直到你能独立完成它为止。写第一行代码是很痛苦的,我培训过好几个同事,他们不是计算机系毕业的,开始在电脑前坐一整天,一行代码都敲不出来,我最早写程序时的情况也好不了多少,不过没有关系,迈出这一步就好了。
花1-3天时间,完成这个任务后,再继续往下阅读。
当你读到这里的时候,相信你已经独立写出了一个双向链表。恭喜你!迈出这一步可是值得庆祝的,现在你已经走在通往程序员的光明大道上了。不过你还是个业余程序员,那当然了,你才写出第一个程序呢!什么时候才能成为一个专业程序员呢?三年还是五年工作经验?其实不用的,你马上就可以了,我没有骗你,因为专业程序员与业余程序员之分主要在于一种态度,如果缺乏这种态度,拥有十年工作经验也还是业余的。
什么态度?专业态度!也就是星爷常说的专业精神。专业态度有多种表现形式,以后我们会一一介绍的。这里先介绍一下有关形象的态度,专业的程序员是很注重自己的形象的,当然程序员的形象不是表现在衣着和言谈上,而是表现在代码风格上,代码就是程序员的社交工具,代码风格可是攸关形象的大事。
有人说过,傻瓜都可以写出机器能读懂的代码,但只有专业程序员才能写出人能读懂的代码。作为专业程序员,每当写下一行代码时,要记得程序首先是给人读的,其次才是给机器读的。你要从一个业余程序员转向专业程序员,就要先从代码风格开始,并从此养成一种严谨的工作态度,生活上的不拘小节可不能带到编程中来。
代码风格有很多种,Windows 和Linux都有自己主流的代码风格,每个团队,每个公司也可能有自己的代码风格,争论哪种风格好那种风格坏没有什么意义。只要有助于其他程序员理解的代码风格都是可以接受的,因为遵循特定代码风格的目的就是为了便于交流。
这里介绍一下作者本人喜欢的代码风格,这种代码风格也在作者所在团队中使用。这里的命名风格与GTK+代码相近,排版风格Linux内核代码相近。
命名要展示对象的功能。
文件名:单词小写,多个单词用下划线分隔。
如: dlist.c (这里d代表double,是通用的缩写方法)
注意: 文件名一定要能传达文件的内容信息,别人一看到文件名就是知道文件中放的是什么内容。只把一个类或者一类的代码放在一起是好的习惯,这样就很容易给文件取一个直观的名字。业余爱好者常常把很多没关系的代码糅到一个文件中,结果造成代码杂乱无章,也很难给它取一个恰当的名字。
函数名:单词小写,多个单词用下划线分隔。
如:find_node
注意:同样,一个函数只完成单一功能,不要用代码的长度来衡量是不是要把一段代码独立成一个函数。即使只有几行代码,只要它完成的是一项独立的功能,都应该提为一个单独的函数,而函数名可以直观的反应出它的功能。如果在给函数起名时遇到了困难,通常是函数设计不合理,应该仔细思考一下。
结构/枚举/联合名:首字母大写,多个单词连写。
如:struct _DListNode;
宏名:单词大写,多个单词下划线分隔
如:#define MAX_PATH 260
变量名:单词小写,多个单词下划线分隔。
如:DListNode* node = NULL;
面向对象的命名方式:
1.以对象为中心,采用主语(对象)+谓语(动作),取代传统的谓语(动作)+宾语(目标)。
如:dlist_append
2.第一个参数为对象,并用thiz命名。
如:dlist_append(DList* thiz, void* value);
3.对象有自己的生命周期,都有create和destroy函数。
排版布局要美观大方。
合理使用空行:
1.函数体之间用空行分隔。
2.结构/联合/枚举声明空行分隔。
3.不同功能的代码块之间用空行分隔。
4.类似的代码放在一起,和其它部分用空行分隔。比如宏定义,类型定义,函数声明和全局变量放在一起。
5.使用空行时,一行就够了,不要使用连续多个空行,那样让人感觉空荡荡。
合理使用空格:
1.等号两边用空格。如:
如:int a = 100;
2.参数之间用空格。如:
如:test(int a, int b, int c)
3.语句末的分号与前面内容不要加空格。
如:test(a, b, c);
4.其它有助让代码更美观的地方。
合理使用括号:
1.用括号分隔子表达式,不要只靠默认优先级来判断。
如:((a && b) || (c && d))
2.用括号分隔if/while/for等语句的代码块,那怕代码只有一行。
如:
if(a > b){ return c;}合理的缩进方式:
每一级都正常缩进,用tab缩进取代空格缩进(Linux kernel也遵循此规则)。用空格缩进的目的是防止代码因编辑器的tab宽度不同而变乱,这个担心现在是多余的了,代码编辑器都支持tab宽度设置了。如果缩进的居次太多(比如超过三层),可能是代码设计上出了问题。
如:
if(a > b){ for(i = 0; i < 100; i++) { … }}遵从团队的习惯。这个是最重要的,一个团队就要像一个团队的样子,不管你的水平有多高,遵循团队的规则是一个程序员的基本素养。如果团队的规则确实不好,大家应该一起完善它。
做到这一点,你已经走近专业程序员了,重新做一遍练习吧。随着后面的学习,你就可以真正走进专业程序员这个行列了。