阅读更多
引用
原文:10 Tips for Writing Better Code
作者:Christopher Diggins
翻译:陈云龙

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

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

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

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

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

1、 遵循单一责任原则

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

2、最小化共享状态

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

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

3、本地化副作用

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

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

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

5、多用接口少用类

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

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

将软件项目分解成更小的模块(例如库和应用程序),以实现模块化重用。模块的一些关键原则是:
  • 最小化依赖关系
  • 每个项目都应该有一个单一明确的功能
  • 不要重复
你应该努力让你的项目保持小巧和明确。

7.避免继承

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

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

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

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

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

10.避免写新代码

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

在编写一行代码之前先问问自己,有没有一个工具,函数或库已经做了你所需要的功能?你真的需要自己去实现这个功能,而不是调用另一个已经存在的功能吗?

总结

编程就好比是一种艺术形式或者一项运动,你只有通过不断地练习,不断地向他人学习,才能不断地提高代码的质量,这些都将有利于你成为更加高效的程序员。
0
0
评论 共 1 条 请登录后发表评论
1 楼 solong2008 2017-08-31 11:26
楼主写的很好,我现在被垃圾代码折腾死

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 这一年,这些书:2022年读书笔记

    Note: 以下 `markdown` 格式文本由 `json2md` 自动转换生成,可参考[JSON转Markdown:我把阅读数据从MongoDB中导出转换为.md了](https://blog.csdn.net/u013810234/article/details/113360229)了解...2022年读书笔记

  • 产品读书《结网》

    1,产品经理:通常是负责对现有互联网产品进行管理及营销的人员,也负责开发新产品 2,职责: (1)战略性工作:为产品建立长期的战略布局;发现新的产品机会;为产品的演变、增强和引进提供建议。 (2)阶段性...

  • 产品读书.心理学《九型人格》

    (6) 贪求时间,空间,知识,希望了解事情的全部,而不是部分; (7) 不喜欢喧闹,喜欢独处;做事情不喜欢被别人打扰; (8) 喜欢分析事物及探讨抽象的观念从而建立理论架构,百分百用脑做人,刻意表现深度保护...

  • 向阅读致敬!微信读书产品设计策略推导

    全文11250字,拆解页面80个,3大理论设计模型,100多个产品设计细节,通过对【微信读书】的设计策略推导,为你提供一份读书类APP产品解题宝典!一、序言1.1 适合人群UI/交互设计师跳出执行层的思维,从产品设计策略...

  • 令人比较失落的IT圈子-关于华为裁员

    现在有大量的已婚人口都是两口子均在IT行业,更多数量的是其一在IT行业,以我为例,我老婆是非IT业的,我如果以我的圈子来说这个事可能不太公平,因为我本身就是IT圈子的,我认识的人大概率也是这个圈子的,所以我...

  • 《程序员的思维修炼》读书笔记(思维的重生)

    此读书笔记并不完全作为阐述想法,所以在阐述一些问题的时候可能没有前因后果,更是一种总结性的话语和书上言语的精华,这有点悖论,如果你想了解,请去看《程序员的思维修炼》,这本书可以跨学科,即便你不懂程序,...

  • 《非对称风险》读书笔记(二)

    绪论,第一卷,第二卷部分的笔记欢迎阅读上一篇博客~ 注:这篇读书笔记大体按照原书中的目录顺序,黑色字是原文摘录,蓝色字是我自己读后的想法。标黄的是我认为具有总结性或者非常有分量的句子。有少量摘录句子会...

  • 读书笔记:软件人才-管理的艺术

    这几天把第一本书看完了,虽然有些章节不是那么好,但总体上来说还是不错的,所以才有下面的读书笔记与大家分享。为了不让这本书看两年,所以在2011最后一天,把读书笔记奉上:)  本书作者Michael Lopp是一位从来...

  • 高效能人士的七个习惯(史蒂芬·柯维)——读书笔记

    前言 言不由衷,难免遭人怀疑。...依赖期:你为核心(靠别人来实现愿望) 独立期:我为核心(单枪匹马打天下) 互赖期:我们为核心(群策群力实现最高成就) 三个时期的成熟程度从大到小依次为:互赖期 >

  • 《软件测试》读书笔记(持续更新)

    喜欢拿到新软件,安装在自己的机器上,观看结果 (√)他们是故障排除员。善于发现问题的症结 (?)不放过任何蛛丝马迹。碰到转瞬即逝或者难以重现的软件缺陷,也不轻易放过,会想尽一切可能去发现他们 (?)...

  • 《黑客与画家》读书摘记

    最受欢迎的孩子并不欺负书呆子,他们不需要靠踩在书呆子身上来垫高自己。大部分的欺负来自处于下一等级的学生,那些焦虑的中间层。 ◆ 2 黑客与画家 确实有些东西会用就行了,不需要知道原理 黑客搞懂“计算理论...

  • 吴军《格局》读书笔记

    主要是马克思主义及马克思主义中国化相关 实践、认识、再实践、再认识… 这就是辩证唯物论的全部... 对家长来讲,让孩子避免失败的一个方法,就是在给他们想象空间的同时,制定一个切实可行的目标,而不是画完一张饼...

  • 读书笔记—趁年轻,折腾吧

    最好公司里能出现一些新业务、新职位,来一些新资本,让他总是有事可干,总有新的机会,他觉得这样很幸福。 总的来说,干任何行当或者专业的人,很可能是平凡的人。今天在这种规范化的企业里工作的人,以后也适合去...

  • 零代码的科普算法书《未来算法》读后

    前两天刷公众号消息,偶然间看到诸葛越老师的新书《未来算法》的发布,IT圈子的大V吴军、沈向洋、王小川写的推荐语,令我眼前一亮,当即下单买入。现在已全部读完,的确不负所望,是一本可读性非常强的科普书。 ...

  • 读书笔记—1分钟和陌生人成为朋友

    一些成功人士说,在一些人生转折点上,给你带来机缘和帮助的常常并不是你的老熟人,而是结识不久的新朋友。这并不奇怪。 我们与熟人的交集早已确定,很难超越固有的生活轨道。而我们与陌生人来自两个不同的空间,...

  • 级联H桥SVG无功补偿系统在不平衡电网中的三层控制策略:电压电流双闭环PI控制、相间与相内电压均衡管理,级联H桥SVG无功补偿系统在不平衡电网中的三层控制策略:电压电流双闭环PI控制、相间与相内电压均

    级联H桥SVG无功补偿系统在不平衡电网中的三层控制策略:电压电流双闭环PI控制、相间与相内电压均衡管理,级联H桥SVG无功补偿系统在不平衡电网中的三层控制策略:电压电流双闭环PI控制、相间与相内电压均衡管理,不平衡电网下的svg无功补偿,级联H桥svg无功补偿statcom,采用三层控制策略。 (1)第一层采用电压电流双闭环pi控制,电压电流正负序分离,电压外环通过产生基波正序有功电流三相所有H桥模块直流侧平均电压恒定,电流内环采用前馈解耦控制; (2)第二层相间电压均衡控制,注入零序电压,控制通过注入零序电压维持相间电压平衡; (3)第三层相内电压均衡控制,使其所有子模块吸收的有功功率与其损耗补,从而保证所有H桥子模块直流侧电压值等于给定值。 有参考资料。 639,核心关键词: 1. 不平衡电网下的SVG无功补偿 2. 级联H桥SVG无功补偿STATCOM 3. 三层控制策略 4. 电压电流双闭环PI控制 5. 电压电流正负序分离 6. 直流侧平均电压恒定 7. 前馈解耦控制 8. 相间电压均衡控制 9. 零序电压注入 10. 相内电压均衡控制 以上十个关键词用分号分隔的格式为:不

  • GTX 1080 PCB图纸

    GTX 1080 PCB图纸,内含图纸查看软件

  • 深度优化与应用:提升DeepSeek润色指令的有效性和灵活性指南

    内容概要:本文档详细介绍了利用 DeepSeek 进行文本润色和问答交互时提高效果的方法和技巧,涵盖了从明确需求、提供适当上下文到尝试开放式问题以及多轮对话的十个要点。每一部分内容都提供了具体的示范案例,如指定回答格式、分步骤提问等具体实例,旨在指导用户更好地理解和运用 DeepSeek 提升工作效率和交流质量。同时文中还强调了根据不同应用场景调整提示词语气和风格的重要性和方法。 适用人群:适用于希望通过优化提问技巧以获得高质量反馈的企业员工、科研人员以及一般公众。 使用场景及目标:本文针对所有期望提高 DeepSeek 使用效率的人群,帮助他们在日常工作中快速获取精准的答案或信息,特别是在撰写报告、研究材料准备和技术咨询等方面。此外还鼓励用户通过不断尝试不同形式的问题表述来进行有效沟通。 其他说明:该文档不仅关注实际操作指引,同样重视用户思维模式转变——由简单索取答案向引导 AI 辅助创造性解决问题的方向发展。

  • 基于FPGA与W5500实现的TCP网络通信测试平台开发-Zynq扩展口Verilog编程实践,基于FPGA与W5500芯片的TCP网络通信测试及多路Socket实现基于zynq开发平台和Vivad

    基于FPGA与W5500实现的TCP网络通信测试平台开发——Zynq扩展口Verilog编程实践,基于FPGA与W5500芯片的TCP网络通信测试及多路Socket实现基于zynq开发平台和Vivado 2019软件的扩展开发,基于FPGA和W5500的TCP网络通信 测试平台 zynq扩展口开发 软件平台 vivado2019.2,纯Verilog可移植 测试环境 压力测试 cmd命令下ping电脑ip,同时采用上位机进行10ms发包回环测试,不丢包(内部数据回环,需要时间处理) 目前实现单socket功能,多路可支持 ,基于FPGA; W5500; TCP网络通信; Zynq扩展口开发; 纯Verilog可移植; 测试平台; 压力测试; 10ms发包回环测试; 单socket功能; 多路支持。,基于FPGA与W5500的Zynq扩展口TCP通信测试:可移植Verilog实现的高效网络通信

Global site tag (gtag.js) - Google Analytics