网易首页 > 网易号 > 正文 申请入驻

代码之美:如何让编程成为一门艺术?

0
分享至

译者 | 明明如月,责编 | 伍杏玲

出品 | CSDN(ID:CSDNnews)

美丽的来源多种多样。就软件开发领域而言,简单和架构一致就能产生美感,美感和能精确地实现所需的功能以及创造性的解决问题密也是不可分。同样地,编码风格也是编写优雅代码不可或缺的一环,好的编码风格有助于降低团队沟通成本。 接下来让我们进步一探讨代码之美,以及如何让编程成为一种艺术。


从简单中寻找美

最近我读了《代码之美》的选集,其中最能引起我共鸣的一篇文章是 Jon Bentley 写的《我编写过的最漂亮的代码》 ,这篇文章的基本原则是“少即是多(less is more)” ,也就是说,一些优秀的开发人员要一次又一次地对代码进行重构、改进,以便消除冗余,使其尽可能简单易懂。


下面从书中选出的一些警句来阐述这种技巧:设计师知道自己的设计已经达到完美,不是因为再也没有东西可以添加,而是再也没有东西可以拿掉。— Saint-Exupéry最便宜、最快而且可靠性最高的计算机组件压根就不存在。— Gordon Bell如果我有更多的时间,我会写更短的信给你。— Pascal简单并不先于复杂,而是紧跟其后。— Perlis 换句话说,都在呼吁简洁。 每一行代码都需要被调试、阅读和维护。

因此,如果能够在实现功能的同时能简化代码就太棒了。如果一个方法有 10 条语句,如果我们能把它减少到 5 条,出现问题的可能性就减少一半,因为可能出错、过于复杂或有问题的地方也相应的减少了。源代码不应该视为一种资产,而视为负担!当你以后想使用代码行作为生产力的度量标准时,要三思! 相关的三个哲学法则是:YAGNI(You Ain't Gonna Need It,即我们不应该为程序编写尚未用到的功能),DRY( Don't repeat yourself,即避免重复代码) 和 KISS(Keep It Simple, Stupid ,即简单就是美)。

YANGI 原则建议如果你找不到一个某段代码存在的理由,就必须对其进行重构或剔除。避免重复代码原则提出,每一段代码都必须在系统中有唯一的明确的目的。KISS 原则传达的是:让事情变得更简单! 然而,具有讽刺意味的是,简单是一个复杂的问题。软件中,最漂亮的代码、最漂亮的功能、最漂亮的程序根本不存在。


代码质量是程序的灵魂

开发人员很害怕听到 “bug” 这个词。

人们普遍认为,代码没有 bug 的程序员就是优秀的程序员。尽管编写没有 bug 的程序是设计的要求,但是编写过程中没有 bug 是不现实的。我的意思是说,有些开发人员在编译阶段或执行程序之前就在努力编写没有错误的代码,他们更多地关注功能实现而不是代码的设计。 在开发过程中很容易忽略代码的可维护性。为了实现功能而忽略某种模式或标准,是导致灾难的重要原因(代价也会很大)。

另外,程序员可能会太关注开发的效率;过早的代码优化就相当于打开了工程的潘多拉魔盒。好的设计是能够让其他设计师因他们自己想不到该想法而怀疑自己的智商。每个专业的软件开发人员都能编写能实现功能的代码,但是实现功能的代码和实现功能并经得起时间考验的代码之间有天壤之别。如果代码设计的足够健壮,修复错误就相当容易,因为我们很容易定位出现错误的地方!换句话说,当体系结构没有被破坏时,解决这些错误的成本更低,也不会产生太多技术债务。


所有的艺术都是从一张空白的画布开始的

开发者能够把他们的想法变成有形的东西,这就是创造力。屏幕就像一块空白的画布,等着被代码填满,等着一个独特的解决方案ーー如果这件作品不是独一无二的,那么它就只可能是“复制粘贴”的 !即使设计的软件最终外观上看起来一样,也没有两个程序员会编写完全相同的代码。作为一个程序员,每个人都有自己的特点。这点非常了不起的。

根据我的经验,理解其他开发人员的代码,就像进入他们的思想,从他们的角度看世界。 编写代码的快感是很难形容的。这不仅仅是写几行代码这么简单。我们会目睹自己系统逐渐成型,当用户真正使用该系统时,开发者的想法就变成了显示。当你看到一个东西从概念到完工,不管这件事是大是小,你都能从中获得精神和情感上的满足,这都将能给你带来成就感。


在我进入下一部分之前,作为结束语,我将给出《计算机编程的艺术》(Art of Computer Programming) 系列](https://www.amazon.co.uk/Computer-Programming-Volumes-1-4A-Boxed/dp/0321751043)的作者唐纳德克努斯 (Donald Knuth) 被要求说明为啥书名中用“艺术”来描述计算机编程时的一段摘录 (对于非程序员来说,这就像是计算机科学的圣经) 。他说:计算机编程是一门艺术,因为它能让程序员用知识来解决问题,因为它需要技巧和创作力,特别是它能够创造出美好的东西。


复杂的终极表现形式是算法


算法为提高编程效率提供了可能。他们是编程的支柱,因为算法系统地描述了解决问题的步骤。逻辑分析属于左脑,解决问题需要创造性,就要用到我们的右脑。解决问题的关键在于控制复杂性。

正如我们前面探讨的那样,复杂性会对我们的程序产生负面影响。 我所设计、评论或研究的所有最佳算法都有一个共同点: 它们通过聪明的想法来有效地处理计算任务,同时避免产生不必要的细节和复杂性。这包括:简化布尔代数、合理地组合、选择最适合的数据结构、使用简洁的正则表达式、合理利用资源以及遵循 SOLID 原则。

  • SOLID 原则是指设计模式的六大原则,即:

  • Single Responsibility Principle:单一职责原则;

  • Open Closed Principle:开闭原则;

  • Liskov Substitution Principle:里氏替换原则;

  • Law of Demeter:迪米特法则

  • Interface Segregation Principle:接口隔离原则

  • Dependence Inversion Principle:依赖倒置原则

然而这里有一个悖论,让创造算法成为一项复杂的任务:没有算法可以解决创造力的问题 — Andy Hargreaves


代码风格很重要


到目前为止,我们认为好的代码都是简单易懂,设计精巧的。现在我将转向编程的美学方面: 代码布局。良好的代码风格和代码质量息息相关,很多程序员以自己能够对代码精雕细琢为荣。一个程序员不会因为他们代码被铭记,而会因为他的编码风格而被别人铭记。

程序员编写代码不仅是为了让计算机执行,也是为了让其他程序员在阅读、拓展、修复或调试之前能够理解它。因此准确编写代码并保持代码风格的一致性至关重要。

其中代码的缩进和空格的使用很关键。 最好的布局方案是能够让代码修改后也能保持风格的一致性,如修改一行代码,不会影响到其他代码。程序员的代码本身就应该有自我说明的能力,也就是说代码要有足够的注释、命名要能表达其真实意图、尽量编写简短且易于测试的纯函数等。好的代码就是自己最好的说明文档 — S. McConnell 因此,漂亮的代码就是逻辑清晰、易于阅读和理解的代码。

代码的结构、组织方式、架构都是为代码背后所要表达的意图服务的。代码的每一部分都应该相对简短并符合单一职责原则。这就像马赛克:所有的代码片段可以完美地组合到一起,但是,当其中一个代码片段需要修改时,可以很容易将其剥离出去。

参考资料

Rich Hickey 的必读佳作:因简单而更容易Donald Knuth 的经典著作 计算机编程的艺术程序员修炼之道:计算机编程的艺术

结束语

我们每次编写代码,都像是沿着一条不确定的道路上行走,都是在创造一个前所未有的解决方案。这是一段自我发现之旅,也是个体智能的表达,这就是艺术! 虽然我们不是那种能给别人带来视觉美感的艺术家,但是当我们热爱某样东西的时候,就应该把美融入其中。 感谢阅读!


原文链接:https://towardsdatascience.com/beautiful-code-ad8a0c6b19


本文为 CSDN 翻译,转载请注明来源出处。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
惠州房价腰斩?有网友爆料某房源从挂牌105.5万,到现在的53万…

惠州房价腰斩?有网友爆料某房源从挂牌105.5万,到现在的53万…

火山诗话
2024-04-26 08:00:03
ST左江股票将被终止上市,赌徒们这次彻底输了

ST左江股票将被终止上市,赌徒们这次彻底输了

股海风云大作手
2024-04-28 17:24:56
原江门市海洋和渔业局党组成员、纪检组长伍文威接受审查调查

原江门市海洋和渔业局党组成员、纪检组长伍文威接受审查调查

南方都市报
2024-04-28 17:52:15
英超争冠变天:阿森纳全胜夺冠有戏,利物浦梦碎,曼城4连冠难了

英超争冠变天:阿森纳全胜夺冠有戏,利物浦梦碎,曼城4连冠难了

侃球熊弟
2024-04-28 23:01:45
“炎症”拖成癌!哈佛推荐:5种果蔬打成汁,每天半杯,降低50%炎症反应

“炎症”拖成癌!哈佛推荐:5种果蔬打成汁,每天半杯,降低50%炎症反应

凤凰卫视
2024-04-26 16:33:12
糖尿病到底有多可怕?原来糖尿病是这样来的,现在知道还不迟

糖尿病到底有多可怕?原来糖尿病是这样来的,现在知道还不迟

草莓啵啵奶2
2024-04-23 10:35:48
重庆这件事,已经不是践踏公平的问题了

重庆这件事,已经不是践踏公平的问题了

顾礼先生
2024-04-22 15:51:11
关于金钱管理的3个建议,让你越来越有钱

关于金钱管理的3个建议,让你越来越有钱

十点读书
2024-04-26 20:10:11
2024年就业形势严峻,老百姓找工作太难,国家看不下去了。

2024年就业形势严峻,老百姓找工作太难,国家看不下去了。

时尚的弄潮
2024-04-28 15:24:51
当年大家只看到她的胸,如今她是金像影后!

当年大家只看到她的胸,如今她是金像影后!

阿芒娱乐说
2024-04-27 13:49:59
台湾灵媒现场通灵南大碎尸案冤魂:刁爱青前世是屠夫,凶手无法投胎

台湾灵媒现场通灵南大碎尸案冤魂:刁爱青前世是屠夫,凶手无法投胎

古今档案
2024-04-03 18:33:10
问界M7追尾大货车起火,疑似车门打不开,家属求真相

问界M7追尾大货车起火,疑似车门打不开,家属求真相

鞭牛士
2024-04-28 09:43:11
中国最美“臀后”宋昱欣,肉感曲线身材,与卡戴珊对比,谁更胜?

中国最美“臀后”宋昱欣,肉感曲线身材,与卡戴珊对比,谁更胜?

天保影视V3
2024-04-21 11:45:00
迪丽热巴美哭了

迪丽热巴美哭了

娱乐的小灶
2024-04-28 15:33:16
最近,一位以色列网民在网上表示惊讶:中国人居然不敬畏以色列人

最近,一位以色列网民在网上表示惊讶:中国人居然不敬畏以色列人

莆农阿
2024-04-27 23:24:36
具俊晔为了躲避张兰,带着妈妈连夜飞台,大S要和婆婆同住了?

具俊晔为了躲避张兰,带着妈妈连夜飞台,大S要和婆婆同住了?

娱乐圈酸柠檬
2024-04-27 21:51:55
网友们只用了五个证据,就让纪云浩左右为难了

网友们只用了五个证据,就让纪云浩左右为难了

清晖有墨
2024-04-26 13:47:23
多位网友反映连接高铁WiFi时弹出“X你妈”,12306:确系官方授权APP

多位网友反映连接高铁WiFi时弹出“X你妈”,12306:确系官方授权APP

极目新闻
2024-04-28 17:34:27
俄媒:在俄罗斯的中国留学生人数超过4.1万人

俄媒:在俄罗斯的中国留学生人数超过4.1万人

周观环宇
2024-04-27 22:23:05
尘埃落定!申花德比战绝杀球被吹是否属于误判,终于有权威结论

尘埃落定!申花德比战绝杀球被吹是否属于误判,终于有权威结论

罗掌柜体育
2024-04-28 09:15:17
2024-04-29 00:44:49
CSDN程序人生
CSDN程序人生
关注程序员生活 汇聚开发轶事
1302文章数 754关注度
往期回顾 全部

科技要闻

特斯拉生死时速,马斯克西天取经

头条要闻

媒体:福建舰再"现身" 舰载机模型上甲板释放重要信号

头条要闻

媒体:福建舰再"现身" 舰载机模型上甲板释放重要信号

体育要闻

湖人的G4,尽人事得到了回报

娱乐要闻

张杰谢娜发文为何炅庆生,亲如家人!

财经要闻

上财万字报告深度解读Q1经济

汽车要闻

鸿蒙首款行政旗舰轿车 华为享界S9实车亮相车展

态度原创

游戏
旅游
艺术
房产
公开课

T1五人组出道即巅峰,第三次征战MSI的他们,能圆梦冠军吗?

旅游要闻

年轻人出游:为了爱好说走就走 好玩不贵很重要

艺术要闻

共度北京108小时 北京当代2024“凝聚”全球36座城市100余家艺术机构

房产要闻

力度越来越大!落户两年享本地居民购房政策,海南第16城松绑限购!

公开课

父亲年龄越大孩子越不聪明?

无障碍浏览 进入关怀版