程序员的9个经验教训,只有亲身经历才会懂
程序员从挫败中吸取经验,不断进步,本文介绍我亲身经历的9个经验教训。
1. 不存在最便宜,最快速,最可靠的软件
这是戈登·贝尔的名言,这里要吸取的经验教训是,你应该设计尽可能简单的系统或软件,降低复杂性以减少bug的数量。
2. 理解你的代码
有时候你修复了一个bug,但不明白问题是怎么解决的。相信大多数程序员都经历过这种情况。确保你理解自己的代码,找出为什么这个修复起了作用。
刨根问底的心态比什么都重要,在必要的时候要虚心求助,保持这种态度,不知不觉中你已经成为人们转而求助的对象。
复制粘贴代码也是如此。我们都用过Stack Overflow,复制粘贴别人的代码,这没什么丢脸的,但是如果你不理解代码,要么不要使用它,要么向别人寻求帮助。
使用你不理解的代码被称为voodoo Coding,这几乎保证了将来一定会发生bug.
3. 写描述性更强的代码
注释在源代码中非常重要,但如果可以的话,不要使用注释,而是编写更具描述性的代码。
为什么?
因为修改代码时往往会忘记更新注释。我的观点是:注释有时候会说谎(不正确),它们无法与最新的代码相匹配。
三种常见的代码文档是:
- 在代码中添加注释。
- 编写单独的文档。
- 自我解释的代码。
让我详细说明最后一点,这就是我所说的写更具描述性的代码:
- 使用好的设计模式,令代码库的逻辑结构更清晰,更容易导航。
- 不要使用缩写,使用变量、类和函数的全名。例如将一个变量命名为WindowManager,而不是wm。调用readFileToString而不是rf。这种命名方法可以帮助我们更容易理解代码,尤其是过几个月之后再回过头来看代码的时候。
- 尽可能将代码封装带函数中,并根据功能命名。例如,创建一个将文件读入字符串的函数,将其命名为readFileToString(String fileName)。就算不阅读源代码,人们也会知道它的作用。理想情况下,你的代码是一系列类似于人类语言的函数调用序列,代码本身就是文档!
4. 不要过度使用正则表达式
当处理文本问题时,有些人会想:“我知道,我用正则表达式!“,现在他们有两个问题。
这是个老笑话,但却是真的。正则表达式很难用,当你解决了一个特定的问题,再用相同的方式解决下一个问题时很可能会失败。
当然这只是我的观点,但我建议避免复杂的正则表达式。通常像split、substring、endsWith、indexOf等函数的组合可以解决大多数问题,并得到可读性更强的代码。
5. 软件就像教堂,先建造然后祈祷
《Cathedral and the Bazaar》是一本对比两种不同开发模式的书,正如维基百科所说:
在大教堂模式中,每个软件版本都有源代码,但在不同版本之间开发的代码仅限于一组专用的软件开发人员。
Bazaar模型,很多程序员通过网络参与开发,Linux内核项目的领导者Linus Torvalds被认为是这种模式的创始人。
两种模式各有利弊。人们普遍认为,软件是一个迭代开发的产品,在开发过程中,功能是逐渐增加的,用户最好从一开始就参与到开发过程中来。
6. 便宜,快速,可靠,只能选两个
我喜欢这个命题,它强迫项目领导人深入思考:
- 快速和可靠,这是可以做到的,但需要请最好的程序员。
- 便宜和快速,很多人都可以实现,但别指望它可靠!
- 便宜又可靠?如果你运气好可以做到。首先你要找到一个成本低但能力足够强的程序员,这个寻找过程本身就花费很多时间,然后还需要大量的迭代(更多的时间)才能做到。
7. 差一错误
软件工程中有三个难题:
- 命名(Naming things)
- 缓存无效(Cache invalidation)
- 差一错误(Off-by-one errors)
对于计数,人类从1开始,计算机则从0开始。这个简单的事实已经成为无数错误的根源,你可能已经犯了差一错误,就算现在没有将来也会遇到。
8. 尽可能多的捕捉异常
最好的软件可以处理所有的错误,即便是那些“永远不会发生”的事情。
大多数软件都是为了实现“快乐流”而编写的,在这个过程中,一切都按预期工作,用户不会做奇怪的事情。但现实世界充斥着混乱,随着时间推移,可能出错的东西一定会出错。所以尽量捕捉尽可能多的错误,尤其是当你的软件即将要添加一项关键的功能。
9. 代码行数与工作效率无关
代码行数与项目进度无关,同样道理,写更多的代码不意味着工作效率或项目质量越高。
最好的代码往往只需要用最少的行数解决问题,请记住一个著名的原则:KISS,Keep It Simple,Stupid.
如果您想了解更多关于软件工程最佳实践的知识,可以继续阅读我的文章:The 12 Habits of Highly Effective Software Developers。
原文出处:Medium
作者:Erik van Baaren
原文标题:9 Programmer Life Lessons You Must Experience Yourself to Truly Understand
你们的点赞和收藏是我们最大的创作动力,我们每天都会为大家带来数据科学和量化交易领域的精品内容。
蜂鸟数据:开源金融数据接口,一个API连接世界金融市场。
蜂鸟数据团队由业界顶尖的数据工程师,数据科学家和宽客组成,我们正努力构建一个开源的金融数据库,并提供API接口,目标是令金融数据开源化和平民化。
浏览并测试我们接口吧,目前覆盖股票,外汇,商品期货,数字货币和宏观经济领域,包括实时报价(tick)和历史数据(分钟),提供REST API和Websocket两种接入方式,能够满足金融分析师,量化交易和理财app的需求。