高考考试网
当前位置: 首页 高考资讯

程序员不是在写bug就是在改bug(为什么你一直在写bug)

时间:2023-07-23 作者: 小编 阅读量: 2 栏目名: 高考资讯

程序员的预期没有满足绝大部分理性用户的期望。但有时候程序员期望程序执行的行为会出乎普通用户的意料,甚至给他们带来麻烦,所以这也算是一类bug。bug通常来自开发者尝试降低代码复杂性未果而产生的副作用。复杂的事物容易引起用户的误操作。这也是需要额外小心的另一件事。这两个方面是紧密关联的。本文摘编自《编程原则:来自代码大师MaxKanat-Alexander的建议》,经出版方授权发布。

导读:当谈论bug时我们究竟谈论的是什么?

作者:马克斯·卡纳特-亚历山大(Max Kanat-Alexander)

来源:华章科技

01 什么是bug

相信绝大部分程序员都听说过这个故事:曾经真的有人在计算机里找到了一只昆虫,正是这只昆虫导致了计算机程序运行出现了错误。(但真实情况是,人们在那之前就已经把程序的异常行为称为bug了,但因为这则故事富有趣味,所以一直被人们津津乐道。)

但说真的,当谈论bug时我们究竟谈论的是什么?

这里是关于bug的精确定义:

  1. 程序的行为并没有符合程序员的预期。
  2. 程序员的预期没有满足绝大部分理性用户的期望。

通常来说只要程序能够严格执行程序员给出的指令,它就可以算是处于正常工作的状态。但有时候程序员期望程序执行的行为会出乎普通用户的意料,甚至给他们带来麻烦,所以这也算是一类bug。

其他软件功能上的不足都可以归纳到新功能需求中。如果说程序的工作状态的确与我们期望的一致,但离用户期望还有差距,则意味着它需要新“功能”。“功能”和“bug”定义之间的区别也就在这。

请注意硬件也可能产生bug。程序员不太可能发出“让计算机爆炸”这类的指令。如果程序员编写了一段程序导致了计算机真的爆炸了,这很有可能是硬件bug引起的。硬件中当然可能存在某些bug,但应该不会是如此夸张的这种。

本质上说,任何导致程序员指令没有被正确执行的故障,都可以被认为是bug,除非程序员打算让计算机做一些它本不应该去做的事情。

举个例子,如果程序员告诉计算机去“统治整个世界”,但是它本身就不是被设计用来统治世界的,那就意味着计算机需要一个新的“统治整个世界”的功能。这也就算不上是一个bug。

  • 硬件

至于硬件,你应该同时考虑到硬件设计者的预期,以及大部分程序员的对于它们的期望。从这个层面上说,程序员其实是主要的“用户”,硬件设计者则是需要考虑程序员预期的人。

当然,我们也应该关心普通用户的期望,特别是针对那些普通用户会与之打交道的硬件设备,比如打印机、显示器和键盘等。

02 bug的源头

bug来自哪里?我们能把所有bug的成因范围缩小至一个或者几个之内吗?答案是肯定的。

bug通常来自开发者尝试降低代码复杂性未果而产生的副作用。也有部分来自对其实简单的代码产生的误解。

除了一些拼写错误以外,我能十分肯定以上两点基本就是所有bug产生的根本原因,尽管我还没有进行深入的研究来证明这件事。

复杂的事物容易引起用户的误操作。想象一下一个黑色盒子,上面有上百万个没有任何标识的按钮,而其中的16个按钮按下之后会毁灭整个世界,那么使用这个盒子的人中注定有人会一不小心让毁灭降临。在编程中也存在类似的情况,如果你无法轻易理解编程语言的文档,或者是这门语言本身,你就或多或少存在错误使用它的可能。

说真的,就那个长满上百万个没有标识按钮的盒子而言,正确的使用方式不可能存在。你永远也不可能弄清正确的方式是什么,即使你计划阅读完1000页的说明书,也不一定能记住能够帮助你正确使用盒子的整套流程。

同样的道理,只要你让事物变得足够复杂,人们就会倾向于用错误的而不是正确的方式使用它。如果你把50、100或者1000个这类的复杂组件拼装在一起,无论由多聪明的工程师来进行拼装,它们也永远无法正常工作。

所以你开始明白bug来自哪里了吧?你每引入一丝复杂性,开发者(这里的“开发者”甚至包括你自己)误用你的代码的概率就高一分。

一旦代码的意图和使用方法变得极不明确,就会让使用这份代码的人犯错。又因为你的代码和其他的代码混合在了一起,导致了开发者误用和犯错的可能性大大增加。而后这些代码又会继续和其他的代码混合,形成恶性循环。

  • 复杂性的构成

硬件设计者将硬件制造得极为复杂的情况时常发生。所以它必须与复杂的汇编编程语言集成。而这又使得汇编语言和编译器同样复杂起来。当你遇到这种情况时,如果你不提前对程序进行精妙的设计或者全方位的测试的话,基本上无法避免bug的发生。只要你的设计不够完美,那么在运行的一瞬间,大量的bug就会涌现出来。

站在其他程序员的视角看这件事也很重要。毕竟有些事对你来说很简单,但是对其他人来说或许很复杂。

如果你想要感同身受地体验一下其他人看不懂你的代码的感受,你可以找一份你从没有使用过的类库的文档来阅读看看。

也可以找一些你从没有阅读过的代码来阅读。尝试理解整段程序而不是单行代码的含义,并且想象当你需要对它进行修改时应该从哪里入手。这些都是其他人阅读你代码时的体验。你大概注意到在阅读他人代码时,即使并不复杂的代码也足以让人产生挫败感。

现在我们考虑另一种程序员误解简单代码的情况。这也是需要额外小心的另一件事。如果你察觉到某位程序员在向你解释一段代码时叙述得牛头不对马嘴,那便意味着他应该是误解了代码中的某些内容。当然如果他正在研究的领域极其复杂,也情有可原,可能需要他读到博士学位才能完全掌握它。

这两个方面是紧密关联的。当你编写代码时,需要承担的部分职责是让将来阅读你代码的程序员理解它,并且是很轻松地就能理解。如果你确实是这么做的,但是他在阅读过程中仍然产生了严重误解——或许他根本就不明白“if”语句是什么含义。那应该就与你无关了。

假设将来那些阅读你代码的程序员,对编程的基本原理和正在使用的编程语言语法都略知一二,在这个前提下你的职责是写出整洁的代码。

所以最后可以总结出几条有趣的原则:

  1. 你写的代码越简单,bug就越少。
  2. 你应该始终想方设法去简化程序中的代码。

关于作者:马克斯·卡纳特-亚历山大(Max Kanat-Alexander)是谷歌的代码健康技术主管,主要帮助其他软件工程师提高生产力,包括编写开发工具、创建教育程序、指导重构工作等。他还曾在谷歌担任YouTubeXbox的技术主管,从事Java JDK、JVM和Java其他方面的工作,以及担任YouTube的工程实践技术主管,他在YouTube上为所有开发人员提供最佳实践和工程开发效率方面的支持。

本文摘编自《编程原则:来自代码大师Max Kanat-Alexander的建议》,经出版方授权发布。

延伸阅读《编程原则》

推荐语:Google代码健康技术主管、编程大师Max Kanat-Alexander又一力作,聚焦于适用于所有程序开发人员的原则,从新的角度来看待软件开发过程,帮助你在工作中避免复杂,拥抱简约。

延伸阅读《深入理解计算机系统》

推荐语:卡内基梅隆大学计算机学院院长兼美国4大机构院士撰写,畅销全球40余国,中文版售逾30万册。

    推荐阅读
  • 美国伊利诺伊大学工商管理硕士(美国渥太华大学工商管理硕士)

    美国渥太华大学工商管理硕士美国渥太华大学简介美国渥太华大学(OttawaUniversity)成立于1865年,是一所拥有150多年历史的著名综合性大学,在领导力培养方面走在世界前沿,被U.S.News评为2022年美国最佳大。

  • 不适合过夜吃的蔬菜(有哪些不适合过夜吃的蔬菜)

    不适合过夜吃的蔬菜绿色蔬菜是不能隔夜吃的。很多的蔬菜中都含有非常丰富的硝酸盐,这主要是由于在种植过程中施用了大量的化肥引起的。因此,如果绿色蔬菜还没有彻底的做成熟,那么再加上隔夜保存,在细菌的作用下,这些硝酸盐会被还原成有害的亚硝酸盐,甚至可能会使人致癌。因此,如果同时购买了大量蔬菜,应该先吃叶菜类的,比如大白菜、菠菜等。

  • 华为手机有关于照相的功能吗(一个华为手机官方都没公开的摄影功能)

    众所周知,华为手机的拍摄功能非常的丰富,今天重点说一下它的夜景模式。有些朋友可能会说华为不是专门有一个“流光快门”的功能么。没错,华为是有这个功能,比如上图中的这个效果用“流光快门”中的“丝绢流水”也能拍出来。但是,华为的所有慢门功能都要保持手机的绝对稳定才能拍出更好的效果来,就是说最好配一个三脚架才行。而这个夜景模式就不同了,只靠手持拍摄就能得到不错的效果。

  • 移动副卡怎么办理(能在线上办理吗)

    移动副卡怎么办理中国移动万能副卡办理有两种方式:可以携带身份证去中国移动营业厅办理;可以登录中国移动APP办理。接着点击马上订购确认提交。副卡签收之后,会收到一条短信,点击短信中的链接进入实名认证。完成校验并上传身份证正反面。移动会在一个工作日内完成审核并以短信形式告知。再次进入手机APP,选择万能副卡入口。输入副卡手机号、副卡服务密码后点击获取验证码,主卡获得验证码后填入并点击确认完成万能副卡的激活。

  • 菠萝蜜补什么有什么营养(菠萝蜜是什么样的水果)

    是世界著名的热带水果,属桑科桂木属常绿乔木。菠萝蜜中的糖类、蛋白质、脂肪油、矿物质和维生素对维持机体的正常生理机能有一定作用。服用菠萝蜜后能加强体内纤维蛋白的水解作用,可将阻塞于组织与血管内的纤维蛋白及血凝块溶解,从而改善局部血液、体液循环,使炎症和水肿吸收、消退,对脑血栓及其它血栓所引起的疾病有一定的辅助治疗作用。菠萝蜜的功效与作用1、果肉及花可止渴除烦,核仁补中益气。

  • 我是余欢水是根据什么小说改编的 我是余欢水是小说改编的吗

    我是余欢水,是由郭京飞、苗苗、高露、岳旸、高叶等主演的一部都市题材网络剧。我是余欢水是根据什么小说改编的:该剧是根据余耕的小说《如果没有明天》改编,以诙谐荒诞的方式描写了社会底层小人物余欢水的艰难境遇与心路历程。演员阵容也很强大,由郭京飞、苗苗领衔主演,高露特别出演,岳旸、高叶、冯晖、赵达等主演,无论是主角还是配角全员演技在线。该剧一播出,便收获了不少的好评,豆瓣评分更是直接到8.5。

  • 沙尘暴的危害有哪些(沙尘暴的危害有什么)

    以下内容希望对你有帮助!沙尘暴的危害有哪些出现沙尘暴天气时狂风裹的沙石、浮尘到处弥漫,凡是经过地区空气浑浊,呛鼻迷眼,呼吸道等疾病人数增加。沙尘暴还会使地表层土壤风蚀、沙漠化加剧,覆盖在植物叶面上厚厚的沙尘,影响正常的光合作用,造成作物减产。沙尘暴还使气温急剧下降,天空如同撑起了一把遮阳伞,地面处于阴影之下变得昏暗、阴冷。

  • 那年来了鬼子兵剧情(讲的是什么故事)

    那年来了鬼子兵剧情民国二十七年,日本人俘虏“抗倭救国军”司令葛道元在广场上以比武为名当众戏辱中国人,下山为师父报仇的尹秀茹舍下个人恩怨,挺身而出与日本人比武。历经日军扫荡青龙寨,抗战烽烟四起之下,尹秀茹率部接受国民政府改编,在历经与国军、新四军的合作共同抗日之后,最终受到共产党的感召,成功率部破袭咽喉要塞平靖关。

  • 英雄联盟上单塔姆出装(塔姆上单出装推荐)

    英雄联盟上单塔姆出装出门装:腐败药水出门,前期线上多消耗,消耗方式就是平A,伤害非常高。第一次回家做出熔渣,有生命值加成,非常适合塔姆。继续出肉装,板甲有生命值加成和护甲加成,也有移速加成,可以弥补塔姆的腿短。