原本想找链接的。可是...我还是选择手打    原作者:刘鹏看未来

原文标题 10+程序员总结的20+条经验教训

开发

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课程(?)。相信我,量变才能达到质的飞跃,这些小小的学习积累,终有一天会大大地提高你的知识和能力。

最后 感谢这位年长的程序员的分享。

转载于:https://www.cnblogs.com/weikang/p/4521237.html

习惯看新闻头条 一个程序员分享的工作心得相关推荐

  1. 一个程序员分享8年的开发经验

    [转]一个程序员分享8年的开发经验 时间:2011-08-10 10:25 来源: 风尘浪子  作者:风尘浪子  围观: 635 次 在中国有很多人都认为IT行为是吃青春饭的,如果过了30岁就很难有机 ...

  2. 四周年了,谈谈一个程序员的职场心得

    来源 | 蜗牛互联网 引言 时间好快,转眼间作为一个程序员在职场上已经摸爬滚打四年了.大学毕业以来的四年里,我都是在同一个公司(阿里),在同一个业务领域(电商)和技术领域(Java)发展,第一年结束完 ...

  3. 分享自己作为一个程序员的找工作经历

    我叫杨磊,从2016年5月开始学了关于软件开发的道路上,我是报一颗火热的心.在学习中,不说是最好的,但我觉得自己一定是很积极的去学习. 从学了之后的,放假时间,我大多时间都是用在码代码,不断的去练习, ...

  4. c语言编程知识分享uc头条,资深程序员分享的C语言编程中的一些误用及知识总结...

    我们是不是在写程序的时候错误很多,就算编译通过了也达不到我们预期的结果.之后自己还找不到错在哪儿.我觉得语言之所以能称之为语言,首先它肯定是一种工具.一种相互交流.相互通信.相互传达之间意图的工具.作 ...

  5. 我要嫁给一个程序员你们怎么看?

     程序员是什么?视乎很神奇的物种?嫁就嫁呗,有什么稀奇的?这里列出N个事例: 1,住酒店,进房间第一件事,把我按门口--别想太美:他会要求我看清门后逃生示意图,并口述一遍如何快速找到楼梯. 2,去 ...

  6. 十年带队经验,万字长文分享:如何管理好一个程序员团队?

    本文首发于唐虞阁微信公众号,欢迎转载,转载请注明来源,否则将追究侵权行为. 我从2011年开始带团队,这其实是第11个年头了,这些年大大小小的团队带了不少,也见识过各种各样的"人才" ...

  7. 一个程序员转产品经理的经验分享

    本文非原创,故事的主人公不是我,是来自一位知友Robert Struggle的高赞分享. 一个乐观派的程序员转了产品经理,并把自己的经历分享给同样有想法,想转岗的程序员们. 一个程序员转岗到产品经理, ...

  8. 阿里外包java程序员分享,看完你还会去外包吗?

    本文完全是我自己对软件外包认识,可以说是个"议论文",请大家看的时候可以从自己的角度出发,来感受这篇文章里面所涉及的内容. 我所知道的外包人员的职位: 程序员 软件测试人员 实施人 ...

  9. 分享一个程序员接私活、兼职的平台

    分享一个程序员接私活.兼职的平台 1.技术方向满足任一即可 2.技术要求 3.最后 1.技术方向满足任一即可 Python:熟练掌握Python编程语言,能够使用Python进行数据处理.机器学习和深 ...

最新文章

  1. MIT 更新最大自然灾害图像数据集,囊括 19 种灾害事件
  2. Windows环境下如何配置wamp的虚拟域名
  3. 网络爬虫终篇:向10万级网易云用户发送定向消息
  4. 运行mapreduce程序yarn的web端显示进度
  5. POJ-1426 Find The Multiple
  6. 【Kafka】使用confluent本地安装和使用kafka
  7. opsforlist 存在贼覆盖_RedisTemplate集合使用说明-opsForList(二)
  8. Hash(MD5校验工具)
  9. ubuntu16 install sogou input
  10. 服务器提供各种服务 包括文件服务器,服务器提供各种服务,包括文件服务器、邮件服务器、Web服务器等。...
  11. Matlab 答题卡方案
  12. Numerical Computing with MaTLAB(matlab数值计算)书中的工具箱 ncm下载以及课本答案和程序下载
  13. 软件测试之黑盒测试白盒测试
  14. google搜索语法与技巧
  15. 2019上半年网络工程师真题解析
  16. 微信小程序—带qq表情的评论输入框
  17. Python基础之面向对象知识创建一个游戏角色
  18. Hdu1329Hanoi Tower Troubles Again!
  19. wpa_supplicant-2.6 君正平台(Zeratul )编译 支持WPS功能
  20. csapp家庭作业第十章

热门文章

  1. java中不能定义为变量名称_Java,“变量名”不能解析为变量
  2. JavaScript内存管理——优化内存占用
  3. 【视觉项目】【day5】8.25号实验记录(修完BUG,28张测试图,13个样本,四张测试图误判,这比之前效果好很多了)
  4. scala 函数中嵌套函数_Scala合成函数
  5. Java Number shortValue()方法与示例
  6. java jar包示例_Java包getImplementationTitle()方法和示例
  7. 计算机指令格式_计算机科学组织| 指令格式
  8. Linux内核设计与实现---系统调用
  9. 如何在Visual Studio项目中正确添加汇编代码 .
  10. linux网路编程之多进程并发服务器