程序员如何做到「编程速度又快,Bug 数量又少」?

最近看到一个Quora中的回答,答到心坎上。译文引用自伯乐在线:

  三个程序员被要求穿过一片田地,到达另一侧的房子。

  菜鸟程序员目测了一下之间很短的距离,说:“不远!我只要十分钟。”

  资深程序员看了一眼田地,想了一会,说:“我应该能在一天内过去。”菜鸟程序员很惊讶。

  大神程序员看了一眼田地,说:“看起来要十分钟,但我觉得十五分钟应该够了。” 资深程序员冷笑了一声。

  菜鸟程序员出发了,但只过了一会,地雷爆炸了,炸出了巨大的洞。这下他必须偏移预定的路线,原路返回,反复尝试穿过田地。最后他花了两天到达目的地,到的时候颤颤发抖,还受了伤。

  资深程序员一出发就匍匐前进,仔细地拍打地面,寻找地雷,只有在安全的时候才前进。他在一天的时间内小心谨慎地缓慢爬过了这片地,只触发了几个地雷。

  大神程序员出发之后径直穿过了田地,十分果断。他只用了十分钟就到了另一边。

  “你是怎么做到的?”另外两个人问道,“那些地雷怎么没有伤到你?”

  “很简单,”他回答道,“我最初就没有埋地雷。”

  地雷从何而来?

  与大神一起工作的时候就是这种感觉,也是我的第一印象「代码整洁而且没有地雷」。可是反过来想,为什么有的人就是习惯于埋雷呢?难道看不到后果吗? 再深一层来讲,没人愿意给自己埋地雷,主要还是没有对习惯引起重视。培养起好的编程习惯是非常重要的。编程中的坏习惯,是很多程序员上升的天花板,十年原 地踏步的原因。想要写出好代码,一定要常常问自己「我还能做的更好吗?」(好吧,这是算法课的口号)。只有想不断提升的人,才会注意去扣各种各样的细节, 使得自己做得比前一次好。下面总结一下,常见的「地雷」有哪些:

  没有提前构建

  没有规划完整系统的生命周期,内存泄露到处都是。

  系统没有设计好,存在不少重复功能的类。

  系统的行为没有定义好,接口设计不完整,写了创建不写删除。

  没有重视代码的可读性

  代码没有经过提炼,到处都是重复代码,改一个功能常常要改很多处代码。

  缺少抽象,将具体实现暴露得到处都是。比如一个状态机在外部设置它的状态切换。

  代码没有紧贴语义。

  没有重视开发效率

  到处都是繁杂重复的配置项,通过约定可以省去很多配置。

  很多中间代码,比如解析xml、解析协议等等的工作,通过元编程可以将这些中间工作自动化。

  没有重视数据

  数据没有处理好,敏感数据要保护好,比如角色的属性,到处都是直接赋值的话,很容易出错,要把直接改变限制在少数的某几个函数里。

  某些系统知道得太多,比如数据层就不应该知道显示层的东西,显示和数据掺杂在一起。

  数据依赖于代码,比如写在C++的模板里面,没有为数据设计序列化文件。

  更深层的原因

  “我不是什么伟大的程序员,我只是一个有着很多好习惯的程序员”—-Kent Beck

  在《程序员修炼之道》里,第一条就是「关心你的技艺」。如果你不在乎能否漂亮地开发出软件,你又如何要耗费生命去开发软件呢?

原文发布于微信公众号 - php(phpdaily)

原文发表时间:2015-12-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Python中文社区

Why Not Python?

Python是一款简单强大又好用的动态语言,但我不解的是,为何这样一个好用的语言,在国外已经流行了十几年,但在国内不要说流行,问很多人的答案都是...

1848
来自专栏数据结构与算法

dsu on tree入门

说起来我跟这个算法好像还有很深的渊源呢qwq。当时在学业水平考试的考场上,题目都做完了不会做,于是开始xjb出题。突然我想到这么一个题

444
来自专栏量子位

Facebook发布张量理解库,自动编译高性能机器学习核心

? Facebook AI Research今天发布了张量理解(Tensor Comprehension),这是一个C ++库,也是一种数学语言,它能够自动、...

3325
来自专栏量子位

有记忆会推理的可微分神经计算机,DeepMind现在开源了代码

王新民 编译自 GitHub 量子位 报道 | 公众号 QbitAI ? 去年10月,Google旗下DeepMind在《Nature》上发布第三篇论文,宣布搞...

3356
来自专栏web前端教室

想靠狂看JS教程来快速提高前端水平?90%的人都选错了方向...

文章开头第一句,“请大家放心,这篇文章一定不是标题党。” <!-- 说话要有根据 --> 狂看JS教程,能不能快速提高前端水平? 肯定有人能。 你能不能?不好说...

1887
来自专栏精讲JAVA

十年之后再看“面向对象”

一起帮里有人问“面向对象”的问题。但我创建“一起帮”的目的是帮人解决“具体的”“实务性的”问题,“面向对象”太过于抽象,所以没批准发布。后来在QQ群里讨论,看他...

1706
来自专栏智能算法

主宰这个世界的10大算法

出自linux中文社区 链接:https://linux.cn/article-3125-1.html 什么是算法? 简而言之,任何定义明确的计算步骤都可称为算...

3358
来自专栏鸿的学习笔记

用python讲故事(中)

5. Assemble a corpus of data to validate subjective(human) interpretation

473
来自专栏企鹅号快讯

程序员一年写百万行代码是什么体验?这肯定是个Bug

2017 骄傲和遗憾都将成为过去,2018 元旦将至,春节还会远吗? 年年岁岁没对象,岁岁年年撸代码,或许这一年你还在new对象,但是依旧没有对象,让我们情场失...

1768
来自专栏CVer

OpenCV实战:人脸关键点检测(FaceMark)

Summary:利用OpenCV中的LBF算法进行人脸关键点检测(Facial Landmark Detection) Author: Amusi Dat...

7037

扫描关注云+社区