`

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

分享到:
评论

相关推荐

    10+年程序员总结的20+条经验教训,看完必须转发、收藏、学习

    这篇文章是一位拥有超过10年经验的程序员总结的20条宝贵经验,旨在为开发者提供指导,特别是对初学者很有帮助。以下是这些经验的详细解读: 1. **从小事做起,逐步扩展**:开发时应从最小可行性产品开始,逐渐增加...

    程序员工作经验之谈总结工作经验

    在当今社会,程序员作为一种技术性极强的职业,受到众多求职者的追捧。然而,对于程序员而言,除了不断学习新...程序员应该在工作中不断总结经验,吸取教训,把握每一个提升自我的机会,以期在程序员的道路上越走越远。

    java程序员年终总结.docx

    * 年终总结对于java 程序员的职业发展和成长非常重要,可以帮助java 程序员总结经验和教训,肯定成绩,找出缺点,并为今后的工作明确努力方向。 * 年终总结还可以帮助java 程序员提高自己的职业技能和知识,提高自己...

    php程序员试用期工作总结.doc

    "php程序员试用期工作总结" php程序员试用期工作总结报告为我们提供了一个详细的关于php程序员在试用期的工作经验和总结...我们可以从报告中总结出许多有价值的经验和教训,帮助我们更好地提高自己的技术和业务知识。

    java程序员试用期转正工作总结.doc

    通过试用期的经验,Java 程序员总结了以下教训: 1. 项目经验的重要性:Java 程序员意识到项目经验的重要性,在项目开发过程中,需要更多地实践和学习。 2. 技术学习的重要性:Java 程序员意识到技术学习的重要性,...

    程序员述职报告工作总结模版

    压缩包中的文件名称列表“工作总结精选(25).pptx、工作总结精选(11).pptx、工作总结精选(1).pptx、工作总结精选(10).pptx”表明这些文件可能是不同程序员编写的工作总结PPT模板,每个模板可能包含不同的结构和设计,...

    2021年程序员工作总结工作总结.docx

    作为一名程序员,2021年的总结是对过去一年工作成果、经验教训及个人成长的回顾。以下是对这份工作总结中提到的一些关键知识点的详细说明: 1. **心态调整与职业定位**: - 程序员在面对不同工作岗位时,应调整...

    30多年程序员生涯经验总结

    在三十年的程序员生涯中,积累的经验涵盖了从软件开发的全流程到软件交付,再到个人和行业层面的建议。以下是对上述内容中提到的关键知识点的详细解析: 1. 需求理解和功能性原型设计的重要性:在软件开发初期,与...

    程序员试用期转正述职报告.docx

    3. 程序员试用期转正述职报告的作用:程序员试用期转正述职报告可以帮助程序员总结自己的经验和教训,提高技术能力,提高自己的职业发展和个人成长。 4. 程序员试用期转正述职报告的写作要点:在写作程序员试用期...

    总结java编程中的经验教训

    标题:总结Java编程中的经验教训 在Java编程的漫长历程中,无数开发者通过实践与失败积累了宝贵的经验教训,这些经验和教训对于新晋程序员而言,是避免重蹈覆辙的捷径,也是提升代码质量和开发效率的关键。以下是从...

    java程序员试用期转正总结.doc

    Java 程序员试用期转正总结 本文档是 Java 程序员...本文档总结了 Java 程序员试用期转正的一年工作经验,包括思想方面、工作方面、工作心得、工作教训和工作计划等内容,为 Java 程序员提供了有价值的经验和教训。

    程序员年终总结.docx

    对于任何一个行业的专业人士来说,能够有效地处理工作中的挑战和问题,并从中汲取经验教训,是一个不断成长的过程。这位程序员在过去一年中,从一个初出茅庐的新手,成长为一个能独立承担重要项目的资深程序员。他的...

    程序员实习总结报告.doc

    本文档主要介绍了程序员实习生在××家具实业有限公司的实习经验和总结报告。报告涵盖了实习生在公司的实习经历,包括编程、软件开发、工资核算、计件工资等方面的经验和收获。 首先,实习生谈到了自己的实习经历和...

    程序员两年的积累

    【标题】"程序员两年的积累"反映了作者在IT行业中,特别是在编程领域,通过两年的学习与实践,积累了一系列的专业知识和经验。这样的积累通常包括对编程语言的理解深化、常见问题的解决策略、软件开发流程的熟悉以及...

    2022年java程序员的转正工作总结.docx

    在2022年的转正工作总结中,我们可以看到这位程序员在多个方面都有所提升,以下是对这些关键点的详细阐述: 1. **需求分析与技术规划** 成功的软件开发始于清晰的需求理解。Java程序员在接手任务后,会进行深入的...

    程序员转正答辩模板.pptx

    9. 反思和总结的重要性:在反思和总结中,我们可以看到该程序员对反思和总结的重要性,强调了需要对自己的工作进行反思和总结,以便更好地总结经验教训和继续学习。 10. 自我反思和完善的重要性:在自我反思和完善...

    程序员年度工作总结.docx

    6. **经验与教训**:总结工作中出现的错误和失败,提炼出宝贵的经验教训。这些教训可以帮助你在未来避免类似问题,提高工作效率和质量。 7. **团队合作**:描述你与同事、上级以及跨部门团队的合作情况,强调团队...

    程序员接单宝典PDF文档

    各种磨练,从这些经验教训中总结出了一套行之有效的接单技 巧,并成功地承接了总价值达上千万的软件项目。为了给广大 的程序员朋友在接项目时提供一些指导,作者特写成此书,作 为献给程序员朋友们的一份礼物

    【程序员实习总结范文3篇汇编】 .doc

    【程序员实习总结范文3篇汇编】的文档主要包含了实习生在IT领域,特别是软件开发方面的体验和学习收获。以下是对这些实习总结中的关键知识点的详细阐述: 1. **理论与实践结合的重要性**:实习期间,实习生意识到...

Global site tag (gtag.js) - Google Analytics