推荐一些好的编程习惯

有一句老话叫:正确的结果只有一种,错误的现象千奇百怪。

对于高手程序员来说,他们并不是不写 bug,而是通过良好的编程习惯在开发阶段避免了百分之八十的 bug。所以一些良好的编程习惯非常重要。

这里我列举一些:

1. 写代码前先想好思路,先规划框架,再到局部实现

这点很重要,很多同学拿到工作内容后,上来就开始写代码,尤其是在设计一些关键步骤时,最后写出来不是有偏差,就是考虑不全。举个例子,我们可以利用 TODO 标记在开始写代码之前,确定我们代码的逻辑步骤。例如:

//TODO: 1. 处理定时器逻辑
//TODO: 2. 利用IO复用函数检测socket上的读写事件
//TODO: 3. 处理socket读写事件
//TODO: 4. 处理其他任务

再比如,我们要设计一个 HttpServer,我们可以先规划一些类,例如 HttpServer 类,HttpSession 类,HttpSessionManager 类,HttpConnection 类以及用于客户端的 HttpClient 类等等。

那从哪里可以学习到这些知识?

  • 学习设计模式

  • 学习面向对象思想

  • 学习常用的一些编程范式或者惯用法,如 C++中的 PIMP 。

设计模式的书推荐《大话设计模式》和《图解设计模式》:

《大话设计模式》

链接: https://pan.baidu.com/s/1NfAObPc9jtYAExCvT40a1Q 提取码: jev3

《图解设计模式》

链接: https://pan.baidu.com/s/1H0-9i3lDjYVRlTYCXvjRQQ 提取码: 8nuy

关于系统设计的推荐《大规模 C++ 程序设计》《C++ API 设计》《重构 改善既有代码的设计》等经典书籍:

《大规模 C++ 程序设计》

链接: https://pan.baidu.com/s/12LmOGotS66ea7byw39L-Wg 提取码: 6sqb

《C++ API 设计》

链接: https://pan.baidu.com/s/1ZGWv4_V2qQCbppgW6cF-cA 提取码: ipcv

《重构 改善既有代码的设计》

链接: https://pan.baidu.com/s/134mTlILgv_jRDFclXVqnBw 提取码: ypnr

2. 注重代码风格

代码风格很重要,例如和团队或者已有的风格保持一致。

变量、类和函数等命名要清晰,例如表示名称的变量一般用名词或者形容词、动词过去式修饰的名词等,函数一般用动词或者动词加宾语的结构等。加减乘除等运算符左右各一个空格,有良好的缩进(将 IDE 的 Tab 设置为插入四个空格而不是一个 \t),变量命名以业务背景描述,而不是无意义的字面意思。注释量不少于代码总量 20%,在关键算法或者关键逻辑出给出详细的注释,对于一些存在意外情况暂时不修复的代码加上 TODO 或者 FIXME 标记,对于一些不直观或者很绕的逻辑,加上详细的注释,以方便他人或者之后自己回顾或者 review 代码。

这里涉及的点太多,也最琐碎,推荐基本经典书籍。

  • 《代码整洁之道》

链接: https://pan.baidu.com/s/1_m6dRPY0b9I9flF4yEnjdQ 提取码: dg9q

  • 《程序设计实践》

链接: https://pan.baidu.com/s/1BYGDfiiBZScf-SCTs3kGgQ 提取码: ti9e

这两本我强烈推荐一下,尤其是对于应届生和写代码年限不长的同学,这两本书的特点是从基本的变量命名、注释、宏定义到一大段代码的设计,详细地给出了最佳代码风格实践。

  • 《Google C++编程风格指南》

链接: https://pan.baidu.com/s/12mcbF89o6_Cf2OZ3yqeCFg 提取码: ndxx

3. 注重代码执行效率

例如,查询时使用效率更高的数据结构和算法,减少遍历;循环之前,将循环累计计数先计算出来,而不是每次都计算;减少内存拷贝,减少对象构造等等,使用池化技术(内存池、对象池、连接池等等)。

这一点的话,需要不断的积累,和对一些原理性的东西的理解,例如学习 C/C++ 可以学习下汇编,知道编译器将 C/C++ 代码编译成什么样的机器指令等等。

推荐 :

  • 《程序员的自我修养—链接、装载与库》

链接: https://pan.baidu.com/s/1CPv6khHh3ad93w-XN0YXdA 提取码: 8dbu

  • 王爽《汇编》

链接: https://pan.baidu.com/s/1YhweuJmYEIMR5rJ_xGYXiw 提取码: fe45

  • 《老码识途 从机器码到框架的系统观逆向修炼之路》

链接: https://pan.baidu.com/s/1Aenuk7LY8eVEJ86jqYPHOw 提取码: embr

  • 《C++反汇编与逆向分析技术揭秘》

链接: https://pan.baidu.com/s/1eZPw6OlciGHRWNimIHpJXw 提取码: svj9

4. 掌握一些编码原则

例如,定义变量时尽量给一个有效的初始值,释放指针对象指向的资源时,尽量将指针设置为 NULL(对于 C/C++ 程序排查一个空指针问题远比排查野指针问题要容易得多),使用 RAII 技术保证资源在每条出口路径上都会被释放,多线程加锁时,尽量减小锁的粒度,加多个锁时,锁的方向一致,避免死锁等等。

5. 解决问题时,对于原理性的问题,不要面向搜索引擎编程。

很多同学在遇到问题时,习惯上去百度等搜索引擎上去寻找答案,解决问题后,就直接过去了,下次遇到同样的问题,可能又去搜索引擎继续搜索,这样日复一日,功能做了一个又一个,技术毫无长进。建议当我们通过搜索引擎解决了某个问题,如果是原理性的问题,一定要在之后去搞清楚其背后的原理。要记住,解决业务问题,可以帮老板成长,掌握技术原理,才能帮你成长。

6. 多写博客,多总结技术流程和原理

写博客不仅可以锻炼你的表达能力,同时也是在梳理你的技术思路,如果一个技术问题,你不能清晰地给别人讲明白了,说明你也没掌握好。

推荐阅读

我的书单

计算机必看经典书籍(含下载方式)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值