2019独角兽企业重金招聘Python工程师标准>>>

以下是我作为一名程序员经过10几年时间总结出的一些有关于软件开发的经验规则:


 

开发

1.从小事做起,然后再扩展

无论是创建一个新的系统,还是添加功能到现有的系统中,我总是从一个简单到几乎没有任何所需功能的版本启动,然后再一步一步地解决问题,直到满意为止。我从来没有妄想过能够一步登天。相反,我一边开发一边学习,同时新掌握的信息还可以用于解决方案中。

我很喜欢John Gall的这句话:“复杂系统总是源于简单系统的演化。”


 

2.一次只改变一件事

当我们在开发时,碰到测试失败和功能无效的情况,如果你一次只研究一个问题,那将会更容易找到问题的关键。换言之,就是使用短迭代。必须确保这个问题解决之后,再转移到另一个问题上。这适用于向下提交。如果在你添加新功能之前需要先重构代码,那么先提交重构,然后再添加新的功能。

3.尽早地添加日志记录和错误处理

在开发新系统时,我做的第一件事就是添加日志和错误处理,因为这两者从一开始就非常有用。如果系统不能照常工作,那么你就需要知道程序中发生了什么——这是日志的作用。错误处理也是如此——错误和异常越早处理越好。

4.每一行新代码必须至少执行一次

在你真正完成一个功能之前,你必须对它进行测试。不然,你怎么知道它是不是按照你的想法在执行呢?通常情况下,最好的方法是通过自动测试,但并非总是如此。不过,不管怎么说,每一行新代码必须至少执行一次。

5.在整体测试之前先进行模块测试

先进行部分模块测试可以节省时间。通常说来,我们在整合不同的模块时也会出现问题,例如模块之间的接口不匹配。但是如果我们能够信任各个组件的话,那么跟踪集成问题就会变得简单得多。


 

6.所有事情所花费的时间总是比你预期的要长

特别是在编程中,即使一切进展顺利,我们也很难对功能所需的时间做出正确的预算。并且,开发软件时碰到各种意想不到的问题是非常常见的。

侯世达定律其实道出了真谛:做事所花费的时间总是比你预期的要长,即使你在预期中已经考虑了侯世达定律。

7.先了解现有的代码

大多数的编码都需要以某种方式改变现有的代码。即使是新功能,也需要适应现有的程序。所以,在你加进去新的内容前,首先需要了解当前的解决方案。否则,你一不小心就很有可能会打破现有的功能。这意味着,阅读代码和编写代码都是必要的技能。这也是为什么看似微小的变化仍可能需要很长时间才能解决的原因之一——你首先必须了解上下文。

8.阅读和运行

幸运的是,对于理解代码,我们有两种互补的方法。你可以阅读代码,也可以运行代码。运行代码的确是个非常棒的好方法。所以,请确保充分利用这两种方法。 
故障排除

9.bug总是难免的

我不喜欢那些宣称软件开发可以“一蹴而就”的高谈阔论。不论你再怎么费尽心机,bug总是难免的。最好能够做成可以快速故障排除、修复bug和部署修复的系统。

10.解决故障报告

每个开发人员都应该花时间去处理来自客户的故障报告,并修复bug。这能让你更好地理解客户的意图,明白如何使用系统,知道排除故障的难易程度,了解系统的设计情况。这也是为自己的开发成果负责的好方法。


 

11.重现问题

修复bug的第一步就是重现问题。然后你得确保修复之后,问题能够彻彻底底地消失。这样一个简单的规则可以确保你不会误将非问题当作是问题,并确保解决方案真的能够奏效。

12.修复已知错误,然后再看看有没有遗漏的地方

有时候,可能同时存在着几个不同的问题。它们之间的互相作用,可能会让你毫无头绪,束手无策。不要纠结于搞清楚发生了什么,先去解决所有已知的问题,然后再看看还有什么不对的地方。

13.没有巧合

在测试和故障排除时,不要相信会出现什么巧合。就像你改变了定时器的值,那么就会改变系统重启的频率。所以一切都并非是巧合。添加新功能,另一个不相干的功能变慢了?这绝对不是巧合。相反,是你应该仔细调查的内容。

14.关联时间戳

在故障排除时,事件的时间戳可以作为你的好帮手。寻找偶数增量。例如,如果系统重启了,并且刚刚发出过一个3000毫秒左右的请求,那么可能是触发了某个定时器,才导致出现重启的动作。 
团队合作

15.面对面的交流最有效

当我们需要讨论如何解决问题时,那么面对面的交流比视频、打电话和电子邮件都要好。


 

16.橡皮鸭法

遇到你绞尽脑汁也解决不了的问题时,不妨找一个同事,然后将问题解释给他们听。很多时候,当你在叙述时,即使你的同事一言不发,你可能也会突然灵光乍现找到问题的关键。

17.问问题

阅读和运行代码往往非常有助于指出代码的目的和它的工作原理。但是如果你有机会咨询那些更为了解的人(例如原来的程序员),那么千万不要错过。

18.共享荣誉

不要贪图荣誉,该是谁的就是谁的。例如:“Marcus想出了这个主意……”(如果真是他想的话),而不要说“我们想出的……”。 
其他

19.尝试

如果你不知道某种编程语言功能的工作原理,那么不妨写一个小程序来理解它是如何工作的。这同样适用于测试你正在开发的系统。如果我将参数设置为-1,会发生什么?当我在重启系统时,如果服务当掉,会发生什么?以此来研究它的工作原理。

20.带着问题睡觉

如果你正在解决一个很难的问题,那么不妨带着问题睡觉。有科学研究表明,这样做虽然你表明上并没有在主动思考,但你的潜意思却这么做了。其结果就是,第二天再去研究问题,解决方案已经呼之欲出了。

21.跳槽

不要害怕跳槽。和不同的人共事,开发不同的产品,感受不同的公司文化是非常有意思的。


 

22.不断学习

我们需要不断地学习和了解软件开发。你可以尝试不同的编程语言和工具,阅读软件开发的书籍,接受MOOC课程。相信我,量变才能达到质的飞跃,这些小小的学习积累,终有一天会大大地提高你的知识和能力。

希望这些经验能对大家有用。如有不当之处,敬请指正。

译文链接:http://www.codeceo.com/article/10-years-20-tips-programmer.html 
英文原文:Lessons Learned in Software Development

转载于:https://my.oschina.net/1590538xiaokai/blog/470831

转:10+年程序员总结的20+条经验教训相关推荐

  1. 10+年程序员总结的20+条经验教训

    以下是我作为一名程序员经过10几年时间总结出的一些有关于软件开发的经验规则: 开发 1.从小事做起,然后再扩展 无论是创建一个新的系统,还是添加功能到现有的系统中,我总是从一个简单到几乎没有任何所需功 ...

  2. 像程序员一样思考_如何像程序员一样思考-解决问题的经验教训

    像程序员一样思考 by Richard Reis 理查德·里斯(Richard Reis) 如何像程序员一样思考-解决问题的经验教训 (How to think like a programmer - ...

  3. 一位10年程序员生涯的总结与经验忠告分享

    展望未来,总结过去10年的程序员生涯,给程序员小弟弟小妹妹们的一些总结性忠告 走过的路,回忆起来是那么曲折,把自己的一些心得体会分享给程序员兄弟姐妹们,虽然时代在变化,但是很可能你也会走我已经做过的1 ...

  4. 10年程序员总结的20几条经验教训

    开发 1.从小事做起,然后再扩展 无论是创建一个新的系统,还是添加功能到现有的系统中,我总是从一个简单到几乎没有任何所需功能的版本启动,然后再一步一步地解决问题,直到满意为止.我从来没有妄想过能够一步 ...

  5. 程序员找工作的个人经验教训以及注意事项

    忽然间想到如果要找工作的话,需要注意一些什么问题. 没毕业的,刚刚毕业的,刚刚工作的都可以借鉴一下. 大师兄结合自身经历,经验,稍微总结下.保存下来,以备后来者-------自己或观众使用.想当初刚刚 ...

  6. 程序员做到这20条,成为人生赢家!

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 架构师小秘圈架构师小秘圈,聚集10万架构师的小圈子!不定期分享技术干货,行业秘闻!汇集各类奇妙好玩 ...

  7. 做外贸一定要知道的20条经验教训

    做外贸你必须知道的20课,由米贸搜为你整理如下: 1.在工厂里,客人抱怨价格太高的时候,我总是说一分钱一分货,质量好的回复.进入一家贸易公司后,我知道价格才是硬道理,尤其是大客人.对价格的考虑肯定高于 ...

  8. 代码传奇 | 身价10亿程序员的传奇一生

    他的前半生,值得我们每一个人深思. 在普通人眼里,他寂寂无名,只有年岁稍长的文化人,才听说过他传奇般的存在. 在IT人眼里,他是块活化石,中国第一的大旗除了他,没人敢抗! 他是求伯君,从一个浙江穷山村 ...

  9. 10个程序员最喜欢的 HTML和CSS 等在线代码编辑器——pow_na的博客

    一般软件开发中必备的一样工具就是代码编辑器.传统的代码编辑器一般都是以软件安装包的形式安装到电脑里面,代码编辑保存后一般也是通过ftp或者svn等工具提交到服务器的(当然,像.NET开发中Micros ...

最新文章

  1. oracle数据库导出灰色_oracle数据库导出和oracle导入数据的二种方法(oracle导入导出数据)...
  2. MySQL查询不到中文的问题
  3. C#学习日志三(流程控制语句)
  4. 小米跨界成立餐饮公司?其实就是新园区食堂...
  5. 心情舒畅,升级到u10.04了
  6. 服务器lsass状态代码c0000005,Windows服务器上lsass.exe进程CPU使用率异常问题排查方法...
  7. c++11多线程编程 整理(五) 原子量 atomic
  8. php微信转发无法显示标题图片,完美解决:微信分享为什么不显示图片呢? - 老牛博客...
  9. 致知在格物,物格而后知至,知至而后意诚,意诚而后心正,心正而后身修,身修而后家齐,家齐而后...
  10. 分区助手扩大c盘后自动修复_怎么使用扩展分区向导来扩大C盘
  11. sap税码配置_SAP税务管辖码Tax Jurisditcion code功能(1)
  12. Luogu1197 星球大战
  13. Java图形化界面编程超详细知识点(9)——Swing_树
  14. meta-inf文件夹以及MANIFEST.MF文件的作用
  15. cv岗工作做什么_2019 秋招 cv 岗求职心得
  16. PWA (Progressive Web App)
  17. Code Clinic: Swift SWIFT代码诊所 Lynda课程中文字幕
  18. 只有程序员才看得懂的元宵节灯谜
  19. 实验1动态规划——小明打王者
  20. Citco推出在Amazon Web Services上运行的新SaaS Æxeo Treasury™解决方案

热门文章

  1. Chrome十周年,作了一次死
  2. 全球最大手机公司又发年度新品:AI亮得一笔,智能音箱又晚又丑
  3. 霍金这次想帮AI说点好话,后来没忍住……
  4. vue项目打包优化策略
  5. nginx 的 proxy_cache 缓存配置
  6. 怎样实现MathType在Numbers中的运用
  7. 电脑也能管理服务器安全 安全狗服云PC端V2.3发布
  8. 网络技术独立的×××-SDN和三个问题
  9. H3C模拟器里的F1060防火墙如何开启WEB界面
  10. HDU 3507 Print Article(单调队列)