作者:追梦1819
原文:https://blog.csdn.net/weixin_39759846/article/details/116780540
版权声明:本文为博主原创文章,转载请附上博文链接!

楔子

本文是在在软件开发中的一些经验总结。有的看似很神奇,没有科学依据,但是在使用时确确实实有效果。

本文目的,一为记录,二为分享给后来者。

另,文中图片源自网络,与内容无关,仅供娱乐,精髓在于文字。

正文

开发

1.由易及难,由小及大

无论是一个新项目还是一个二次开发的项目。我总是从一个最简单的版本或者功能开始,然后逐步延伸,直达达到预期目的为止。

项目开始时无法详细计划所有事情。取而代之的是,我在学习的过程中学习了这些新发现的经验教训,并在后续方案中使用它们。形成一个螺旋上升的趋势。

我喜欢约翰·加尔(John Gall)的话: “我们会发现,一个有效的复杂系统,总是从一个有效的简单系统演变而来的。”

2.学会拆分

我们在开发时,某些测试失败或某个功能失效时,如果仅更改一件事,发现问题就容易得多。换句话说,就是使用短迭代。

做一件事,确保它起作用,然后重复。这同样适用于每次提交代码的场景。如果必须在添加新功能之前重构代码,请首先提交重构,然后(在新提交中)添加新功能。

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

在开发新系统时,我要做的第一件事就是添加日志记录和错误处理,因为两者从一开始就非常有用。

对于较大的功能或者系统,我们需要某种方式来了解程序中会发生什么。也许它无法按预期运行时,但是一旦无法按预期运行,我们就必须能够看到正在发生的事情。

错误处理也是如此,错误和异常也从一开始就发生,因此我们越早以系统的方式处理它们就越好。

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

在完成一项功能之前,我们必须对其进行测试(单元测试)。否则,如何知道它已经达到了预期?

通常,最好的方法是通过自动测试,但并非总是如此。但是无论如何,每行新代码都必须至少执行一次。

有时很难触发正确的条件。但是,我们可以手动制造一些异常。例如,可以通过暂时拼写错误的列名来检查对数据库调用的错误处理。或者,可以暂时将if语句反转(“ if error”变为“ if not not”),以触发很少发生的事情,只是确保代码已运行并且应执行应做的事情。

有时我会看到一些错误,这些错误表明开发人员永远都不可能运行特定的代码行。审查时看起来不错,但上线后仍然无法正常工作。

如果我们始终测试了每一行新写的代码,则基本上可以避免上述问题。

5.整体测试组件

经过良好测试的组件可以节省时间。集成不同的组件时经常会出现问题,例如模块之间的接口不匹配或理解不正确。如果每个组件可以按照预期工作,那么查找集成问题将变得更加容易。

6.一切花费的时间比想象的要长

特别是在编程中。即使一切进展顺利,也很难估计功能将花费多少时间。但是,在开发软件时,遇到意外问题是很常见的:简单的合并会导致细微的错误,升级框架意味着必须更改某些功能,或者API调用无法按预期进行。

我认为霍夫施塔特定律很有道理:即使考虑到霍夫施塔特定律,它也总是比您期望的更长。

7.首先了解现有代码

大多数编码都需要以某种方式更改现有代码。即使它是一项新功能,也需要适配现有程序。并且,在将新内容放入其中之前,我们需要了解当前的解决方案。否则,可能会意外破坏某些现有功能。

这意味着阅读代码是与编写代码一样必要的技能。这也是看似小的更改仍需要较长时间的原因的一部分-必须了解进行更改的环境。

8.阅读并运行

阅读并运行,幸运的是,有两种互补的方法可以理解代码。可以阅读代码,也可以运行代码。

在弄清楚代码的功能时,运行代码可能会提供很大的帮助。确保同时使用这两种方法。

故障排除

9.总是会有bug

我不喜欢所谓“第一时间正确”的软件开发方法。无论我们投入多少精力,总会有bug(bug的定义几乎是:“我们没有想到这一点”)。更好的方法是定位一个可以使我们快速解决问题,修复错误并部署修复程序的系统。

10.解决故障报告

每个开发人员都应将一部分时间花在处理客户的故障报告和修复错误上。

它使我们可以更好地了解客户真正需要什么,如何使用系统,进行故障排除的难易程度以及系统的设计水平。这也是对自己的责任心的训练。我们不要错过这些好处。

11.重现问题

修复错误的第一步是重现问题。然后,请确保在添加修复程序后,问题就消失了。这个简单的规则可确保我们不会以为某件事不是问题,并确保解决方案确实按照我们的方案去实现的。

12.修复已知的错误

修复完已知问题后,然后看看还剩下什么问题。

有时我们会遇到一些其他问题。不同的bug可能相互影响,并引起奇怪的事情发生。不要尝试解决在这些情况下会发生的情况,而是要解决所有已知问题,然后查看仍然存在哪些现象。

13.假设没有巧合

在进行测试和故障排除时,请不要相信巧合。我们更改了计时器,现在系统重新启动的频率更高。不是巧合。

添加了新功能,但不相关的功能变慢了吗?不是巧合。而我们要做的事,要调研原因。

14.与时间戳相关

在进行故障排除时,请使用事件的时间戳作为辅助名称。例如,如果系统重新启动,并且在大约3000毫秒之前发出了请求,则可能是计时器触发了导致重新启动的操作。

合作

15.面对面办公效率最高

在讨论如何解决问题时,有面对面视频,通话,聊天和电子邮件。不过我的经验来讲,面对面讨论的方案和效率最好。

16.学会请教

当我们遇到困难时,应去找同事并向他们解释问题。

很多时候,即使我们同事不回复,但是在我们描述问题时,可能会意识到问题出在哪里。听起来像魔术,但经常会出奇的效果。

17.咨询

读代码和运行代码,通常对于弄清代码的功能和工作方式非常有用。但是,如果我们咨询一个很厉害的人(也许是原始作者),也可以弄清楚我们的疑问。

18.分享他人对你的帮助

在讨论问题或者业余聊天时,尽量多提及别人对你帮助,包括给你解决问题的思路甚至灵感。

其他方面

19.试试看

如果不确定某个语言功能的工作方式,我们可以先编写相同的Demo。测试正在开发的系统时也是如此。

如果将此参数设置为-1,会发生什么?重新启动系统后,如果该服务关闭,会发生什么情况?探索它的工作原理–-随便摆弄经常会发现错误,同时也加深了您对系统工作原理的理解。

20.在睡眠中"解决"问题

如果我们正在解决一个难题,且没有任何思路时,我们可以好好睡一觉。这样,即使没有积极考虑问题,潜意识里也可能可以解决该问题。有时候可以发现,第二天的思路比前一天更加开阔。

21.改变

不要害怕偶尔改变角色或工作。

与不同的人,不同的产品或不同的公司一起工作很令人兴奋。

在我看来,太多的人年复一年地被动地呆在同一份工作中,只有在被迫离开时才改变。

22.持续学习

软件开发者的一大优点是,学习能力强。这是由于职业因素导致的。因为,对于这样一个行业,必须得保持持续学习的习惯,不然很容易被淘汰。

我的软件开发中经验教训相关推荐

  1. 论软件开发中的可信赖的工作

    中大型软件开发,免不了团队开发,团队开发就少不了分工合作.在团队开发中,当然每个人的能力都很重要,但是我认为可信赖的工作是团队开发的首要条件,也是团队开发存在的基本保证.没有可信赖的工作,就没有团队分 ...

  2. 软件开发中的10个认知偏差

    最近,在和同事们讨论产品经理职责的时候,聊到了关于产品的定义,如果不能准确定义"产品"的时候,可以考虑其必要条件,即可没有用户的产品肯定是没有意义的.产品有了用户, 必然存在用户与 ...

  3. 软件开发中的详细设计

    传统软件开发中的详细设计: 模块内的数据结构进行设计.比如模块中类.结构体的设计 对数据结构进行物体设计.比如数据库表的设计,文件存储的设计,文件存储目录的设计 每个模块进行详细算法设计.比如每个方法 ...

  4. 暗黑破坏神 用什么 开发的_软件开发中最具破坏性的五种态度

    暗黑破坏神 用什么 开发的 重点 (Top highlight) 成长心态是关键 (GROWTH MINDSET IS KEY) Based on my years of professional s ...

  5. 软件开发中会使用到的图

    文章目录 软件开发中会用到的图 一.背景 二.图为了解决什么问题 三.不同流程中适合运用的图 四.实际的运用 五.结语 软件工程中的各种图 软件工程用的15种图 数据关系流图怎么画?这款软件教你轻松绘 ...

  6. 软件开发中“埋雷容易,排雷难”

    软件开发中"埋雷容易,排雷难" 先讲一个亲身经历的故事,在支持一家机顶盒场景的项目中,由于初期客户不信任,或者是故意刁难,新平台的引入没有安排有经验的老员工或骨干,直接安排刚毕业的 ...

  7. 软件开发中的经验主义和理性主义

    软件开发中的经验主义和理性主义 读<设计原本>笔记 理性主义和经验主义是典型的认识论理论.这两种类型的思想,从古到今,从中到外,互相对立,互相斗争,又互相影响,互相渗透.经验主义者认为人类 ...

  8. 一对一直播软件开发中,如何进行推流?

    推流环节对直播链路的影响非常大,如果推流网络不稳定,就算前期在音视频处理.编码和封装上做何种优化,用户体验都会很糟糕.因此接下来,小编就以一对一直播软件开发为例,为大家讲述下推流过程中涉及的协议.实现 ...

  9. Code Review 是软件开发中必不可少的一步

    前言 我一直认为Code Review(代码审查)是软件开发中的最佳实践之一,可以有效提高整体代码质量,及时发现代码中可能存在的问题.包括像Google.微软这些公司,Code Review都是基本要 ...

最新文章

  1. 强烈推荐:Spring 核心知识点总结.pdf
  2. stl 之 copy copy_backward
  3. Ubuntu下载连接(阿里云镜像)
  4. Asterisk标准通道变量
  5. Cesium官方教程6--相机
  6. HALCON 20.11:标定助手使用注意事项
  7. hosts文件 端口_中望软件:中望3D网络版服务端如何固定端口
  8. 用nltk模仿莎士比亚写十四行诗
  9. cad插件_【CAD】源泉插件CAD插件强大到你无法想象,掌握此插件1/10功能你就是绘图大师...
  10. 使用python对微信好友进行数据分析
  11. 网站接入qq客服在线聊天
  12. 利用树莓派搭建校园网种子站
  13. FreeRTOS 任务调度 任务切换
  14. openwrt多wan限上下行速脚本,基于qosv4,imq模块替换成ifb模块
  15. C语言入门(八)一维数组
  16. IT管理体系——战略、管理和服务
  17. 浅谈用KUSTO查询语言(KQL)在Azure Synapse Analytics(Azure SQL DW)审计某DB账号的操作记录
  18. Leetcode 1276:不浪费原料的汉堡制作方案(超详细的解法!!!)
  19. 6.3 理解矩阵背后的意义
  20. 2017-秋招:机器学习/算法工程师(含大量面经)

热门文章

  1. win10系统重装win7系统bios设置方法
  2. GCD XOR UVA - 12716 ——筛法建立约数表+xor运算+数学规律
  3. 人工智能AI技术如何在视频领域应用落地
  4. 【翻译】.NET 5中的性能改进
  5. iOS端的UI设计文档
  6. 楚留香自动采矿--按键精灵
  7. ThinkPad T460p笔记本中Win10+Ubuntu17.04双系统安装方法(UEFI引导模式)
  8. linux 查看snmp端口,linux下的snmp配置及获取信息测试
  9. WEB安全学习第六天:加密编码算法
  10. ArcGIS基础实验操作100例--实验49按分区划分栅格图层