0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

介绍了五个简单的总体概念 可轻松写出写出好代码

机器学习算法与人工智能 2018-01-10 14:00 次阅读

Bug 少,性能好,容易修改。好的代码影响深远,而且它可能是产生10 倍工作效率的开发者的主要原因。尽管好代码十分重要,但开发新手却不得要领。关于这一主题的技巧多而冗杂,让新手们如何记得住?“Code Complete(《代码大全》)” 是这个主题的经典,但内容多达 960 页!

我认为应该建立起良好的心态,这样,不管你用什么语言或者库,都会自然而然的写出高质量的代码。这里我主要谈到 5 个相关的概念。记住它们,轻松写出写出好代码。

请避免特立独行

当你读到一些文章中的新技巧时,如醍醐灌顶,一定会想要写点看起来很聪明的代码,让同行们眼前一亮。

问题是人们只是想修完 BUG,然后继续处理其它事情。那些聪明的技巧常常只会成为一种消遣。我曾经在“将神经科学应用于软件开发”中谈到,当人们被迫花心思来理解你的某段代码时,它们的“精神堆栈”会迅速填满,因而难以理解其中深意。

介绍了五个简单的总体概念 可轻松写出写出好代码

[译者注:图片中的注释内容:这在 C 语言中用于避免误写成 variable = null。最近它造成不少人困惑,但似乎并没带来多大好处]

不要在工作中使用太多可能需要额外解释的个性化方式。

不要用“你的方式”来编写代码,只需要按照标准(的代码规范)来编写就好。再次强调,要写让人读得明白,看得下去的代码,让人家能够理解它。

分而治之

模块化可以使复杂的代码结构变得清晰,除此之外还有很多方法可以达到同样的目的,而无需创建更多函数。将长长的条件表达式保存为一到两个变量就是个不错的方法,可以避免调用函数的开销。这些变量可以用在其它地方,甚至可用于组合更复杂的条件。

拆解问题的方法在于尽可能的让每个部分保持集中,只影响局部状态,不要混入不相关的问题,要避免副作用。编程语言和库通常会带来各自相应的问题,避免这些问题可以让你的代码更专注于其表达的业务。单一责任原则就是通过集中代码和局部化代码带来良好设计的例子。

[译者注:图中注释内容:这是不需要额外函数开销的一种模块化方法]

我喜欢利用变量来进行逻辑划分。

TDD(Test Driven Development,测试驱动开发)的成功实施表现出了它所带来的好处,它迫使人们运用一些以前不受欢迎的准则。无状态的代码曾经被嫌弃又慢又没必要(大部分老的 C/C++ 代码中可以看到),然而现在每个人都在谈论纯函数。就算你不采用 TDD,你也应该学习它背后的原则。在新的模式下工作会让你成为适应性极强的开发者。

分离代码并使其可分别处理

你写代码的时候面临着什么样的困难,你的计算机和工具也面临着同样的困难。代码的复杂性,与需要进行的预处理和需要处理的突发情况存在着或多或少的联系。

现在暂时抛开那些额外的构建工具所带来的好处。它们需要你使用特定领域的语言,比如自定义模板,或者复杂的动态数据结构,比如哈稀表。IDE 通常不善于处理这些东西,要找到相关的代码段则更加困难。

尽量避免使用不能很好支持 IDE 的语言扩展和库。它们给你的生产力带来的好处,远大于简易配置和用简洁语法保存击键带来的小便利。

[译者注:图中注释内容:使用神奇的字体串可能造成 IDE 不能正确识别你的代码]

ServiceLocator 是与 IDE 整合不佳的一个设计样例。

另一个保持 IDE“整合度”的相关方法是避免编写特殊的代码。多数语言都提供了编写动态代码的能力。如果滥用这些特性,比如特殊的字符串、特殊的数组索引和自定义模板语言特性等,会产生难以连接的代码库[译者注:这里的连接应该是指相互关联的关系,连接最直接的影响是在使用 IDE 等工具进行重构的时候可以自动根据连接关系修改相关引用]。一般说来,那些只有你一个人才能看懂的特性会让你摔跟头的,因为如果 IDE 不能理解这些代码,在你想进行结构调整的时候,IDE 就没法帮你进行重构。

让程序可读

致力于可预测的架构。这种架构下你的队友要进行某项查找就会很容易,可以节约不少时间。一旦你为项目确定了一个整体的架构,就一定要把主要元素放在显眼的位置。使用 MVC?把模型、视图和控制器放在他们自己的目录下,不要放在三个深层次的目录中,也不要放在几个不同的地方。

我在前面谈到了模块化。也存在过度的模块化,让定位代码这种事情变得艰难无比。IDE 可能会带来一些帮助,但通常你往往会让 IDE 忽略库目录,因为其中有很多不相关的代码,或者它的索引需要人工处理一些问题,就会造成两败俱伤的局面。尽量使用较少的库,选用那些尽可能多覆盖你需求的库。

库和工具也可能成为新人的障碍。我最近使用 EcmaScript 7 (babel) 构建了一个项目,后来我才意识到我们的初级开发人员一直因为想搞明白它而卡在那里,这对团队的生产力造成了巨大损失。我低估了这对一个新手所带来的压力。不要使用对当前来说太难掌握的工具,等时机成熟再使用。

介绍了五个简单的总体概念 可轻松写出写出好代码

这是我写的一个 makefile 中的真实代码。新手不需掌握过多的新技术。

让代码易于理解

如果你已经做到了这一点,那我们来解决更重要的问题——选择好名字,这是软件开发中的重要部分。构建工具在这方面不能提供帮助,原因很简单,计算机不会真正知道解决方案背后的逻辑。你得通过文档来解释代码,而与主题相关,且符合上下文,体现变量和功能的名称就能很好做到这一点。语义化的名称甚至可以减少对文档的需求。

在名称中使用前缀对理解它们很有帮助。这在过去是一种流行的做法,我认为对这种作法的误用导致了它的消亡。像匈牙利命名法这样的前缀系统最初只是为了增加意义,但最后用于其中的上下文越来越少,终于少得只剩类型信息

介绍了五个简单的总体概念 可轻松写出写出好代码

[译者注:图中的注释内容:使用名称来表达意图,不要利用语言来耍小聪明]

近来,Fluent 接口经常被滥用。

最后要说说老生常谈的回溯复杂度。简单地说就是要尽可能减少条件分支的数目。每多一个分支都会增加缩进,同时降低可读性。不过更重要的是,增加的东西越多,你需要跟踪的东西就越多。

结论

本文介绍了五个简单的总体概念,我希望你能从中轻松的学习到组织代码的方法。

实践是最好的老师,用编程来巩固理论。如果你还没有这样做,我诚挚向你推荐代码大全。它带来了大量的示例,几乎剖析了你可能遇到的每一种问题。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 代码
    +关注

    关注

    30

    文章

    4553

    浏览量

    66668

原文标题:编写良好的代码:如何减少代码的认知负荷

文章出处:【微信号:machinelearningai,微信公众号:机器学习算法与人工智能】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    何为高质量的代码?如何写出高质量代码

    懂得“数据结构与算法” 写出高效的代码,懂得“设计模式”写出高质量的代码
    发表于 08-02 09:44 448次阅读
    何为高质量的<b class='flag-5'>代码</b>?如何<b class='flag-5'>写出</b>高质量<b class='flag-5'>代码</b>?

    如何写出好代码?高质量代码的三要素

    脍炙人口的诗"春有百花秋有月,夏有凉风冬有雪",意境唯美,简明易懂。好的代码也是让人陶醉的,那么如何写出好代码
    的头像 发表于 01-05 11:29 622次阅读
    如何<b class='flag-5'>写出好</b>的<b class='flag-5'>代码</b>?高质量<b class='flag-5'>代码</b>的三要素

    如何写出时序最优的HDL代码?如何写出时序裕量足够的代码

    你想写出可以跑出700M以上的代码吗,直逼FPGA内部PLL的极限。
    的头像 发表于 03-12 09:59 350次阅读
    如何<b class='flag-5'>写出</b>时序最优的HDL<b class='flag-5'>代码</b>?如何<b class='flag-5'>写出</b>时序裕量足够的<b class='flag-5'>代码</b>?

    【明天会更好】程序员如何在面试时写出高水平代码

    面试时写出代码能够把将来需求可能的变化都考虑进去,在需求发生变化时能够尽量减少代码改动的风险,那他就向面试官展示自己对程序扩展性和可维
    发表于 04-18 16:47

    了解c的缺陷才能写出好的程序

    了解c的缺陷才能写出好的程序PCB打样找华强 http://www.hqpcb.com 样板2天出货
    发表于 12-06 14:52

    写出利用Labview自动生成ARM Cortex代码的过程?

    写出利用Labview自动生成ARM Cortex代码的过程?
    发表于 11-14 15:13

    FPGA写出来的代码质量差

    前几天草草看了点Verilog语法书,今天自己试着建了一工程 (数码管显示 每秒加1)一 很简答的程序 在FPGA中却写了一堆(相对应单片机程序) 而且出现一大堆always可读性非常差这是由于我是一
    发表于 04-01 04:41

    如何写出高效并且简洁易于阅读的单片机C语言代码呢?

    单片机的运行除去需要硬件的支持之外,高效简洁的C语言也是非常重要的因素之一。那么如何写出高效并且简洁易于阅读的单片机C语言代码呢?本文将为大家介绍如何写出优美简洁 的单片机循环语句,感
    发表于 07-15 06:34

    用verilog写出代码

    题目描述:设计一电路,使用时序逻辑对一单bit信号进行毛刺滤除操作。高电平或者低电平宽度小于4时钟周期的为毛刺。用verilog写出代码
    发表于 07-22 09:18

    使用C语言写出的九九乘法表

    本文档的主要内容详细介绍的是使用C语言写出的九九乘法表资料合集免费下载。
    发表于 07-10 08:00 1次下载

    这么秀的代码,你能写出来吗?

    这么秀的代码,你能写出来吗? 技术主管来了都不好使,main函数里第一个函数必须是这个。 佛祖保佑版: void godBless(void) { // _ooOoo_ // o8888888o
    的头像 发表于 04-04 18:06 1484次阅读

    为什么有时候会写出代码

    为什么我就写出来了呢?其实还是因为有些知识没那么扎实了~就容易被忽略了,于是我在团队群里面强调了一下这个问题: 所以,本文主要是关于BeanUtils工具的属性拷贝以及深拷贝、浅拷贝等问题的。好了开始正文,介绍下问题代码是什么,
    的头像 发表于 08-27 10:23 1168次阅读
    为什么有时候会<b class='flag-5'>写出</b>烂<b class='flag-5'>代码</b>

    教你如何写出性能更高的SystemVerilog代码

    本文旨在帮助大家降低在编码过程中写出低性能和耗内存的概率,只要大家在写代码时稍注意下,积少成多。
    的头像 发表于 07-26 17:31 584次阅读
    教你如何<b class='flag-5'>写出</b>性能更高的SystemVerilog<b class='flag-5'>代码</b>

    如何写出高效的嵌入式C语言程序

    作为嵌入式工程师,怎么写出效率高、思路清晰的C语言程序呢?
    发表于 08-18 10:42 177次阅读

    如何写出高效优美的C语言代码

    电子发烧友网站提供《如何写出高效优美的C语言代码.pdf》资料免费下载
    发表于 11-18 10:55 0次下载
    如何<b class='flag-5'>写出</b>高效优美的C语言<b class='flag-5'>代码</b>