15个编程好习惯

  编者按:这是国外程序员Al katib总结的一些编程习惯。

  1. 动手编码之前,你需要对要编码实现的解决方案有一个正式的或粗略的设计。永远不要在没有任何设计的前提下就开始编码,除非所编代码不重要。

  2. 优秀的代码文档跟编程语言知识一样重要。在代码源文件中,为每个主要的代码段添加注释,解释代码的基本逻辑。最好注明程序的构建和修改日期,以及修改的原因也是非常有必要的。

  3. 维护程序的各个版本同样重要。当前有些编程工具都自带一个版本管理工具。无论你什么时候改变自己的程序,它们都会将其保存为.bak文件。

  我的方法是为每个程序维护三个不同的版本。比如说,我有一个名为program.c的文件,这个文件同时也被其他项目组成员使用。我把这个文件复制为 program.c.old作为备份文件,并且当我修改时,我会备份另一个名为program.c.wrk的副本文件。当成功完成修改时替换 program.c.wrk文件。

  你还可以给自己的程序版本添加一个日期或一些注释,像program260505.c或programReadFnWrking.c。

  4. 如果工程包含多个源文件,则声称一个README文件,注明每个源文件、数据文件、临时文件以及日志文件(如果有的话)的作用。你还可以注明编译和运行步骤。

  5. 有时候,你一定想知道为什么IF语句没有得到预想的结果。可能你使用的是等号,也就是“=”,而不是条件判定符号“==”。一个比较好的办法是用相反的顺序写条件语句。因此,你的条件语句应该如下:

  if(10==i)…因此,如果你错误地写成了单个等于号,在编译的时候也能检查出来并报错。

  6. 使用循环和条件语句时,先把左右括号对应起来,然后再在里面写其他语句。也就是:

  代码:

  for(int i=0;i<10;i++)

  {

  printf(“i=%dn”,i);

  }

  注:每一行开头的数字表明写循环代码的顺序。

  7. 避免使用幻数(magic numbers)。例如,不要写

  代码:

  circleArea = 3.14 * pow(radius,2);

  而要使用如下代码:

  代码:

  #define PI 3.14

  circleArea = PI * pow(radius,2);

  8. 使用有意义的变量和函数名称。例如,使用‘radius’来代替圆的半径,而不是用‘r’来表示。同样,函数名‘calculateArea’要比其他任 何隐晦的缩写要好得多。匆忙之下,我们也许会使用缩写的变量名,但一开始节省时间的话,之后会浪费更多的时间,去猜测缩写变量名代表什么。(编注:)

  9. 为后面的调试使用打印语句,这是个好习惯。但是,当完成最后代码后,去掉这些语句,有时也是一项危险的任务。添加一个方法,用于输出调试信息。当最终版本生成时,只要把这个方法注释掉就行。因此,只在一个地方做修改就可以了。

  10. 代码编写完之后,开始优化代码。之前声明的一些变量,现在可能没用了。同样,并不依赖循环的一些声明可以移到循环模块之外去。扎实的编译知识同样会对以后的代码优化有所帮助。

  11. 对自己的操作系统和硬件要有足够的了解,你可以从资源占用等方面提升程序的性能。

  12. 编写代码时要合理使用缩进,以使代码清晰可读。

  13. 把项目文件放到SOURCE、HEADERS、MAKE、EXES等不同的文件夹中。

  14. 研究别人编写的代码。这可以让你学习到新的编程技术,以及他们解决和你相同的任务时所使用的方法。

  15. 最后一条(但不是最不重要的一条),备份源代码文件,这样当硬盘出错或相同的问题发生时,不至于前功尽弃。

  附加:补充一条,坚持使用一种命名模式。如果你打算用匈牙利命名法,那就坚持并广泛使用,否则将适得其反。参见微软资深工程师 Eric Lippert 的这篇文章《阅读代码不简单》。

时间: 2024-10-17 00:12:30

15个编程好习惯的相关文章

【转载】15年编程生涯,资深架构师总结的7条经验

原文:15年编程生涯,资深架构师总结的7条经验 前言: 这是一篇应InfoQ之邀写的文章, 首发在InfoQ微信公共号上. 大家有空可以多看看InfoQ 网站和公共号 , 是个很有深度的优秀社区. 我和很多人交流过一个有趣的现象,那就是刚毕业到30岁这段时间,会觉得时间过得很慢,总觉得自己还很年轻,但是一旦过了30岁,时间就如白驹过隙,一年又一年飞逝而过. 我自己也是,眼瞅着毕业快15年了,15年间从一个刚毕业的菜鸟,成长为技术骨干,做到架构师的职位,回头看看,当年听取亲戚的一句话,误入计算机行

GitHub连击500天:让理想的编程成为习惯

尽管之前已经有100天.200天.365天的文章,但是这不是一篇象征性的500天的文章.对这样的一个事物,每个人都会有不同听看法.有的会说这是一件好事,有的则不是.但是别人的看法终究不重要,因为了解你自己的只有你自己.别人都只是以他们的角度来提出观点. 在这500天里,我发现两点有意思的事,也是总结的时候才意识到的: 编程的情绪周期 有意图的练习 那么,当我们不断地练习的时候,我们就可以写出更好的代码. 500天小结 我想你也听过一万小时天才理论的说法:要成为某个领域的专家,需要10000小时.

软件工程网络15结对编程作业

Deadline: 2018-3-25 10:00PM,以提交至班级博客时间为准. 请在两周时间内完成结对编程练习,注意时间的合理安排. 参考来自http://www.cnblogs.com/xinz/p/7417960.html 题目要求: 1.改进现有代码 分析网络14部分现有程序代码(请选择其中一个) 个人博客地址1:http://www.cnblogs.com/weihui-01 ,源代码:https://coding.net/u/weh/p/software-testing/git 个

软工网络15结对编程练习(201521123007谭燕)

链接 学号:201521123006:博客链接: http://www.cnblogs.com/KimHeechul/p/8644402.html 学号:201521123007:博客链接: http://www.cnblogs.com/ty1213/p/8644960.html 码云地址: https://gitee.com/KimHeechul/pair_programming/commits/master 题目要求: 1. 改进现有代码 1.1 分析网络14部分现有程序代码 个人博客地址4

软工网络15结对编程练习 201521123056 吴剑通

0.结对编程成员: 吴剑通博客地址:https://www.cnblogs.com/wjt960310/ 杨均宇博客地址:http://www.cnblogs.com/GOB8023/ 码云地址:https://gitee.com/jmu201521123056/four_operations 源代码:https://coding.net/u/Belong033/p/java-third/git 原题目要求 http://www.cnblogs.com/happyzm/p/6472120.htm

软件工程网络15结对编程作业(201521123062)

0.结对编程成员: 吴剑通博客地址:https://www.cnblogs.com/wjt960310/ 杨钧宇博客地址:http://www.cnblogs.com/GOB8023/ 码云地址:https://gitee.com/jmu201521123056/four_operations 源代码:https://coding.net/u/Belong033/p/java-third/git 原题目要求 http://www.cnblogs.com/happyzm/p/6472120.htm

SQL Server 要避免的编程坏习惯

摘自 <SQL Server MVP Deep Dives Vol.2> 使用select * 会返回不需要的列,增加磁盘和网络开销 如果view的定义里用了select *, 而底层的表有列名的变化的时候,view仍然会返回原来的列 IF OBJECT_ID('tb1') IS NOT NULL DROP TABLE tb1 GO CREATE table tb1(id int) GO IF OBJECT_ID('v1') IS NOT NULL DROP VIEW v1 GO CREATE

2016.9.15 黑客编程之无限启动

1.涉及的编程工具是:VS2013:可以在windows环境下,编写web,JavaScript,C++,C等等程序: 2.第一个需要掌握的函数是:ExitWindowsEx(EWX_REBOOT, 0);该函数用来重启,关闭,注销电脑: 3.使用该函数必须先,包含windows的API: #include <windows.h> 4.权限问题,代码解决: BOOL MySystemShutdown(){ HANDLE hToken; TOKEN_PRIVILEGES tkp; // Get

编程好习惯-类型检查

公司一款手持终端,是在老产品代码的基础上研发,经常发生死机问题,死机原因很大部分是代码不严谨导致,今天排查遇到一个整型溢出导致的死机问题: 在foo.c文件中定义有 char g_sds_length = 0; 在foo.h文件中声明为 extern char g_sds_length; 但是在bar.c中有定义有     void api_sds_rec_handle()     {         int rec_sds_length;         g_sds_length = rec_