30 多年的软件经验,总结 10 个最佳妙招。

那么,何以敲出一手好代码?

好代码可以定义为易读、易懂、易调试、易改,最重要的还要少缺陷。显然,要想敲出一手好代码,是要花不少时间,但这在长久来看是有意义的,因为你可以花更少时间及精力去维护和复用你的代码。

事实上,我们可以将好代码等同于可复用的代码,这也是下面提到的重要原则之一。代码可能只是完成了编程工作中短期目标的特定功能,但如果没人(包括你自己)愿意复用你的代码,这代码在某种程度上可以说是不足且有缺陷的。要么太复杂、要么太具体、要么在不同情况下极有可能崩掉,或者其他程序员可能不相信你的代码。

下面无论你的经验水平如何,如果你始终如一地将下面的妙招应用到你的代码中(包括你的实验或者原型),那么一手好代码随手可得。

1、 遵循单一责任原则

函数在程序员的库中是单一最重要的抽象形式。可以被复用的机会越多,你要写的代码就越少,这些代码就越可靠。遵循单一责任原则的小小函数更有可能被重新使用。

2、最小化共享状态

应该将函数之间的隐式共享状态最小化,无论它是文件作用域变量还是对象的成员字段,这有利于显式地将所需的值作为参数。当明确函数实现所需结果时,代码变得容易理解和重用。

对此可以得出一个结论,你应该优先选择静态无状态变量而不是对象的成员变量。

3、本地化副作用

理想的副作用(例如打印到控制台、记录、改变全局状态、文件系统操作等)应该放置在单独的模块中,而不是分散在整个代码中。功能上的副作用往往违反了单一的责任原则。

4、优先选择不可变的对象

如果一个对象的状态在其构造函数中设置一次,并且不再次更改,则调试变得容易得多,因为一旦构造正确就保持有效。这是降低软件项目复杂性的最简单方法之一。

5、多用接口少用类

接受接口的函数(或C++中的模板参数或概念)比在类上操作的函数可重用性更强。

6、对模块应用良好的原则

将软件项目分解成更小的模块(例如库和应用程序),以实现模块化重用。模块的一些关键原则是:

  1. 最小化依赖关系
  2. 每个项目都应该有一个单一明确的功能
  3. 不要重复

你应该努力让你的项目保持小巧和明确。

7.避免继承

在面向对象编程中,继承,特别是虚拟函数在可重用性方面往往是一个死穴。我很少能成功地使用能覆盖类的库。

8.同设计和开发一样进行测试

我并不是测试驱动开发的铁杆拥护者,但在你开始编写测试代码时,编写测试自然遵循了许多指导方针。它也有助于早点将错误暴露出来。避免编写无用的测试,良好的编码意味着更高级的测试(例如,单元测试中的集成测试或功能测试)在显示缺陷方面更有效。

9.优先选择而不是手写标准库

我无法告诉你需要多久才能看到一个 std :: vector 或 std :: string 更好的版本,但它几乎总是浪费时间和精力。除了一个显而易见的事实,那就是你正在把 bug 引入一个新的地方。(见技巧10)其他程序员不太可能重用您的代码,而不是那些被广泛理解、支持和测试的代码。

10.避免写新代码

最重要的一点是,每位程序员应遵循:“The best code is the code that isn’t written”(最好的代码是不用被复写的代码)。你的代码越多,缺陷就越多,找到并修复 bug 就越困难。

在编写一行代码之前先问问自己,有没有一个工具,函数或库已经做了你所需要的功能?你真的需要自己去实现这个功能,而不是调用另一个已经存在的功能吗?
总结
编程就好比是一种艺术形式或者一项运动,你只有通过不断地练习,不断地向他人学习,才能不断地提高代码的质量,这些都将有利于你成为更加高效的程序员。

原文:10 Tips for Writing Better Code
作者:Christopher Diggins
翻译:陈云龙

30 多年的软件经验,总结出 10 个编写出更好代码的技巧相关推荐

  1. 经验分享:10个简单实用的 jQuery 代码片段

    尽管各种 JavaScirpt 框架和库层出不穷,jQuery 仍然是 Web 前端开发中最常用的工具库.今天,向大家分享我觉得在网站开发中10个简单实用的 jQuery 代码片段. 您可能感兴趣的相 ...

  2. 10 个牛逼的单行代码编程技巧,你会用吗?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 「程序猿DD」星球活动第一期进行中!点击了解详情! 翻译 ...

  3. 超酷炫技:10 个牛逼的单行代码编程技巧

    翻译 | 飒然Hang 来源 | https://www.rowkey.me/blog/2017/09/09/java-oneliners/ 原文 | https://github.com/aruld ...

  4. 有着 30 多年经验的程序员最终被辞退了

    [编者按]试想这样一个问题:如果有一种终身职业,你愿意从事吗?本文主人公已经65岁,在建筑行业工作9年后开始转行做程序员,在他看来,只要愿意,这个职业就可以一直干下去-- 作者 | AP Carpen ...

  5. 硬核软件开发者 30 多年的 11 条经验教训

    从非专业编程到专业的开发者,从 BASIC.C++ 到 Rust,在本篇文章中,已在软件开发行业摸爬滚打 30 年的老兵将带来自己最为深刻的 11 个经验教训. 作者 | Dean Roddey 译者 ...

  6. 30多年程序员生涯经验总结(成功源自于失败中的学习;失败则是因为容忍错误的横行)...

    英文原文:Lessons From A Lifetime Of Being A Programmer 在我 30 多年的程序员生涯里,我学到了不少有用的东西.下面是我这些年积累的经验精华.我常常想,如 ...

  7. 30多年程序员生涯经验总结

    本文是码农网原创翻译,转载请看清文末的转载要求,谢谢合作! 在我30多年的程序员生涯里,我学到了不少有用的东西.下面是我这些年积累的经验精华.我常常想,如果以前能有人在这些经验上指点一二,我相信我现在 ...

  8. rds基于什么开发_元王RDS--让H公司的10多年的设计经验重获新生!

    提起H公司,估计没有人不知道,他是中国优秀民族企业的代表,是国人的骄傲.现在十个人总会有五个人是在用他们的产品,近些年H公司之所以能有如此大的成就,小编认为与H公司非常重视研发和知识管理密不可分.仅2 ...

  9. 循环队列,定义循环队列长度为10,编写初始化队列、入队、出队、求队长,实现10,20,30,40,50,60,70,80入队,10,20,30出队,56,67入队的算法功能。

    循环队列,定义循环队列长度为10,编写初始化队列.入队.出队.求队长,实现10,20,30,40,50,60,70,80入队,10,20,30出队,56,67入队的算法功能. #include< ...

最新文章

  1. 在VS2017中用c#编写程序执行python遇到中文不能处理出现乱码的情况
  2. Gamebryo实例学习之二BackgroundLoad
  3. C#实现反射调用动态加载的DLL文件中的方法
  4. Requst Servervariables
  5. 微信一键设置“姓氏头像”,学起来!
  6. PaddlePaddle常用镜像
  7. Docker 容器启动 查看容器状态 - 四
  8. 上海财经应用统计考python_2021年上海财经大学应用统计硕士考研必看成功上岸前辈复习经验分享...
  9. 机器学习中最重要的公式——贝叶斯公式
  10. Android Studio报错Error:java.lang.RuntimeException: Crunching Cruncher xx.png failed, see logs
  11. Javaweb的HTML的表单标签
  12. Mezzanine基于 Django 的CMS系统框架搭建
  13. 复杂性思维中文第二版 五、细胞自动机
  14. 游戏运营相关名词及解释
  15. Fiddler 抓包HTTPS包,抓手机包
  16. 苹果发布Swift编程语言 - iOS移动开发周报
  17. Log4C的基本用法
  18. Java面试题基础系列228道(1),快看看哪些你还不会?
  19. Linux Shell程序设计(2)
  20. C#开发 AutoCAD二次开发 自动创建显示Ribbon界面(带图片),打开AutoCAD自动显示,执行响应程序

热门文章

  1. mysql 临时表_第05问:MySQL 在处理临时结果集时,内部临时表会使用多少内存?...
  2. python相同key合并value_python之入门
  3. 2020-10-13 四元数用法(不讲原理,只讲计算规则)
  4. jeecms内容管理系统使用了哪些技术
  5. 通过ITypedList实现数据绑定扁平化
  6. [Alfred]为Baidu Weather Workflow更新图标
  7. 奇怪吸引子---NoseHoover
  8. Restful framework【第七篇】权限组件
  9. Spring 学习04
  10. Python 字典dict操作定义