成为更优秀的程序员:退后一步看问题
转载自 成为更优秀的程序员:退后一步看问题
一天,在工作中…
Bug #3890 来自客户:
有个程序出现了错误,程序提示说“SpeedCalculator::compute()里出现了除零情况”。
请尽快修复!
你打开SpeedCalculator.php,发现:
修复bug
简单!是谁写的这段代码,他怎么不用一点脑子!
你就这样修改完了,这个bug只用了你2分钟。
后来,同样的bug又出现在了RatioCalculator和MoneyCalculator中,当把它们也修正后,团队中的所有人都认为,再也不会有这样的问题出现了,这是最后一次!代码现在又是坚固无比了!
一个月后,另外一个bug出现了。这次程序没有崩溃,但客户在报表中发现了错误的计算结果,是因为那句return 0;的代码修改。
退后一步看问题
如果,我们不是匆匆忙忙的修改,而是退后一步,以更宽广的视野看待些问题。
为什么这种事情会发生?
因为$this->time被赋值成 0.
简单!让我们阻止这种事情发生。
这样,修改的效果不是更好吗?你保证了数据的正确性。但这样客户并不是很高兴,因为当他输入0时,程序会跳到一个错误页面。
那么,你应该在控制层捕捉这个错误,让用一个漂亮的错误页面显示它们。
当做完了这些,你认识到,在RatioCalculator和MoneyCalculator中,你也应该这样做,于是你拷贝/张贴,修改了它们两个。
稍等一下,客户更喜欢让错误信息显示成橘黄色的,而不是红色的。于是,你再次拷贝/粘贴,再次修改一遍。
再退后一步
如果,我们不是修复这个不过,而是发现了一个普遍的要求?
为什么客户会输入 0 ?因为他犯了个错误。
这对我们的要求是什么?
我们只需要这次防止用户输入 0 来避免“speedCalculationForm = 0”吗?
我们只需要让“speedCalculationForm”里的数据合法就行了吗?
还是,我们要对所有的用户输入继续校验?
为什么不开发一个校验工具包呢?
且慢!不要自己去开发一个!请退后一步想想,深呼吸,去使用现有的第三方校验框架。
关于需求
我们,程序员,热爱计算机技术。当你的客户或老板,大声的脱口说出他们想要的东西时,我们无法阻止,我们只能想象如何去实现它们。
但是,我们需要用更全面的眼光看问题。如果我们想对自己的工作更负责,我们应该去理解为什么他们会提出这样的需求,而不是着急着去寻找解决方案。当然,这可能会占用你更多的精力。
是客户真的需要“一个会躲避鼠标点击的闪光的按钮”吗?还是他们需要的是另外一个功能——他们不了解的功能,需要你去帮他们定义的功能?这种事情同样会发生在你自己身上!你真的需要用程序打开一个文件,往里面写入一些信息吗?还是,你真正需要的是一个日志系统?
退后一步看问题,看更大的蓝图、更完整的信息。虽然你是一个很优秀的编程高手,但编程的目的是为了解决问题。
成为更优秀的程序员:退后一步看问题相关推荐
- 怎样成为一名更优秀的程序员?我总结出 7 条建议,希望对你们有帮助!
有几个人在 React 大会上向我请教一个问题--如何成为一名更优秀的程序员.人们将我视为一名非常资深的程序员,因此值得听听我的建议.我觉得可以分享一下,自己多年来在编程方面的"思维模式&q ...
- 怎样成为一名更优秀的程序员?我总结出 7 条建议
有几个人在 React 大会上向我请教一个问题--如何成为一名更优秀的程序员.人们将我视为一名非常资深的程序员,因此值得听听我的建议.我觉得可以分享一下,自己多年来在编程方面的"思维模式&q ...
- 如何成为更优秀的程序员?程序员进阶的8种途径
本文讲述了8种方式帮助你如何从一名普通的程序员进阶成为一名伟大的程序员,让我们就从此时此刻开始提高自己的开发技能吧. 是时候开始认真考虑一下如何升级你的java开发技术了.让我们来认真地学习一下吧. ...
- 学习编程基础知识,进阶成为更优秀的程序员
"脚本小子"常常从某些网站上复制脚本代码,然后到处粘贴,却并不明白其中的方法与原理 当你看到编程语言编进教材的时候,看到一个文科生也在编写Python程序进行数据分析的时候,你 ...
- 10 步让你成为更优秀的程序员
这篇文章要介绍的,是我作为专业程序员这些年来学到的能真正提高我的代码质量和整体工作效率的10件事情. 1. 永远不要复制代码 不惜任何代价避免重复的代码.如果一个常用的代码片段出现在了程序中的几个不同 ...
- 10步让你成为更优秀的程序员
这篇文章要介绍的,是我作为专业程序员这些年来学到的能真正提高我的代码质量和整体工作效率的10件事情. 1. 永远不要复制代码 不惜任何代价避免重复的代码.如果一个常用的代码片段出现在了程序中的几个不同 ...
- 十步让你成为更优秀的程序员
1. 永远不要复制代码 不惜任何代价避免重复的代码.如果一个常用的代码片段出现在了程序中的几个不同地方,重构它,把它放到一个自己的函数里.重复的代码会导致你的同事在读你的代码时产生困惑.而重复的代码如 ...
- 优秀的程序员是如何处理技术 Bug 的?
最近我的圈子里人们都在讨论"如何成为更优秀的程序员". 看了他们的讨论,我决定分享一下我关于"如何成为更优秀的程序员"的经验.我希望向别人介绍我认为有用的经验, ...
- 世界读书日:作为一个优秀的程序员请收藏这份书单
4月23日世界读书日全称"世界图书与版权日",又称"世界图书日".最初的创意来自于国际出版商协会.由西班牙转交方案给了联合国教科文组织. 1995年11月15 ...
最新文章
- 聊聊恺明大神MAE的成功之处!
- Multi-Task Learning的几篇综述文章
- 如何在windows上玩转redis的最新特性?
- Spring Boot devtool的使用
- linux定时任务实例,linux定时任务访问url实例
- HALCON示例程序inner_rectangle1.hdev木板有效区域提取
- 基于stm32的c语言程序设计,基于stm32的电子密码锁设计 main.c 代码奉上,做课设的直接用...
- logback日志pattern_[SpringBoot2.X]28- Spring Boot 的日志管理
- [转载] 算法导论:分治法,python实现合并排序MERGE-SORT
- channelinboundhandler中都包含了哪一类的方法_标准气体的分类类别与相关气体配置方式方法...
- PostgreSQL 在Ubuntu下如何修改postgres默认密码
- [官方消息]优秀云大使推广经验分享合集
- Linux基础知识点总结
- xshell7 突出显示集样例_Xmanager7/Xshell7/Xftp7
- Android一键转发图片多张图片到微信,朋友圈功能实现
- 金士顿服务器内存条怎么看型号,区分内存条型号的方法
- 为什么台湾的Yahoo!叫奇摩 ?
- spec.ports[0].name: Required value
- 分享一下杭州医院的看病流程(我去的杭州市第三人民医院)
- 【龙芯1B】:有源蜂鸣器例程
热门文章
- 邮箱通知php,PHPMailer 发送邮件(含详细介绍及使用方法说明)
- mycli mysql_MyCLI :易于使用的 MySQL/MariaDB 客户端
- 每天一小时python官方文档学习(六)————循环和条件控制的进阶用法
- [JavaWeb-MySQL]事务的四大特征和隔离级别
- Similar Pairs CodeForces - 1360C(图匹配+简单贪心)
- linux cpu load 值,理解Linux系统中的load average(图文版)转
- chrome主题_谷歌Chrome将很快允许用户创建自定义主题
- Batch_size问题
- #3328. PYXFIB(单位根反演)
- Codeforces Round #587 (Div. 3) C. White Sheet 思维