【自省篇】软件开发七宗罪
看到51CTO上一篇文章,觉得很适合目前的状况,收藏起来自省。。。
想成为一名优秀的软件开发人员需要很长时间的培训和实践。但是如果不遵循合适的原则,即便是再好的程序员也会成为失败的牺牲品。不经意间你就会养成 一些可怕的坏习惯,它们可能会一而再再而三地出现,甚至对于经验最为丰富的程序员而言也是如此。我认为软件开发至少存在七宗罪。那么,就请看看欲望、暴 食、贪婪、懒惰、愤怒、嫉妒和骄傲会为你的最新编程项目带来哪些意想不到的损失吧。
51CTO推荐:《开发高手的物种起源》
软件开发七宗罪,你有几条?
软件开发第一宗罪:欲望(过度设计)
现代编程语言趋向于不断增加更新的功能让其臻于成熟。程序员们一层一层地往上堆叠抽象的代码,用新设计的关键字和结构来增加代码的可读性和可重用性——只要你肯花时间去学习如何正确地使用它们。
与此同时,编程的原则在这些年里有所改变。今天,你可以饱览到成千上万的设计方案和模式,而且每几个月就会有人想出新的开发方案。此外,开发人员总是信誓旦旦地宣称这些开发方案会让你成为程序员中们眼中的佼佼者。
但是纸上谈兵往往不见得在实际操作中奏效,这个道理很简单,打个比方来说就是你可以去做某些事情但是并不意味着你应该去这么做。就像编程大师Joel Spolsky所说的,那些盲目迷恋自己工具的程序员们都不可避免地忽略了这一点,甚至于最简单的项目也可能葬送进开发的地狱。所以,必须抵制这种不可取的冲动,那么首先要做到的就是坚持你最初的设计方案。
软件开发第二宗罪:暴食(不进行重构)
没有比开发软件更令人可喜的事情了。一旦你有一个正在开发的产品,就会很容易受到开始筹划下一次迭代的引诱。新产品应该具备什么样的新特征呢?我们在第一轮实施的时候没有注意到哪些问题?
人们总是很容易忘记代码很少能在运行的时候保持最佳状态。然后,当新功能不断地累积直至几个轮回的发展之后,程序员们往往会倾向于复合过去发生的错误,这样就导致了一个臃肿、脆弱的代码基础,难以进行有效地维持。
所以,在添加新功能之前尽量克制自己,对现有代码的质量和可维护性进行评估。对于每一次新一轮的开发,都必须将代码重构列入预算范围之内。用户可能只会关心每一个版本的新功能,但是从长远来看,他们一定会更希望你保持产品的精炼性。
软件开发第三宗罪:贪婪(团队之间的竞争)
对于财富和权利的过度欲望——要不然如何解释程序员与自己同僚之间竞争的动机?当一个团队得到了其他团队泄露出来的电子邮件,就开始进行闭门会议和开发。接下来的事情你应该知道,这个团队编写了一个代码库,它已经超越了其他团队已经完成的编码库功能的一半以上。
开发团队很少会出于恶意来进行重复的工作,但是他们往往缺乏明确的目标和责任感。得到的结果则是多余、无力的代码库,更不要说预算的损失和之前付之 一炬的努力。经营开发项目的首要任务之一应该是了解其他团队正在做什么,然后所有的团队都朝着一个共同的目标去努力。分享与共享应该成为开发人员的座右 铭。
软件开发第四宗罪:懒惰(不验证输入)
基本编程容易犯的错误清单很长,但是没有验证输入这样的错误非常低级以至于不能不从别的角度来思考犯这类错误的原因。这个看似低级的错误仍旧出现在许多经验丰富的程序员编写的代码中,这一点十分令人费解。然而,很多普通的安全漏洞,从缓冲区泛滥成SQL注入攻击,却可以直接追溯到用户输入的代码没有进行正确格式验证这一点。
现代编程语言提供了许多工具来帮助程序员来避免类似情况的发生,但是他们必须对其使用得当。切记,一个JavaScript的Web表单验证输入可能很容易被在浏览器中禁用的JavaScript回避,或者干脆不使用浏览器进行访问。输入验证应该是你应用程序的核心部分,而不是在用户界面上煞费苦心。如果做不到这一点只能归咎于程序员的懒惰了。
程序开发第五宗罪:愤怒(不对你的代码进行注释)
对于你的同僚而言,有什么行为能比不对你的代码做出任何注释这种行为更具敌意?我自己写的我当然知道:精心编写的代码是它本身最好的文档资料。那么,你知道吗,其他人能看懂吗?其实这些你自认为值得骄傲的代码可能并非天衣无缝。
程序员们自己很可能很快就会遗忘他们现在所写的代码,但是这些代码将在他们离开以后继续存在很长一段时间。对于取代他们的程序员而言,要想搞清楚每一个代码真正代表什么是一件吃力不讨好的工作。鉴于此,在你编写程序的时候,行行好吧,多给他们留下一些暗示。
但是请记住,难以理解的注释或者注释过多都与不做任何注释的性质同样恶劣。类似于“这已经损坏”或者“不要碰这个”的注释对于任何人都没有什么帮 助。也不要做多余的评论来解释简单的操作,比如变量初始化。代码就是其本身最好的文件材料,所以出现的注释评论应该尽可能解释原因和本质。
软件开发第六宗罪:嫉妒(不使用版本控制)
也许你有理由对于你的项目不推行版本控制。也许一开始你的项目很小。但是今天,功能强大并且高效的版本控制系统已经可以免费进行使用。服务供应商甚 至可以对分布式项目提供价格低廉的托管代码服务。所以没有理由不在一开始就使用一个代码库,即便是再小的项目也是如此——除非,你无法容忍除了你以外的任 何人实施代码变化。
软件开发第七宗罪:骄傲(不进行单元测试)
你往往会认为自己的编程工作相当出色,但是你又如何知道自己做的到底是否唯美无缺呢?有什么指标来对你的工作好坏进行衡量吗?
除非你已经在特定的测试环境下对你的代码进行了验证和测试,否则你就不能证明它能像广告中说的那样完美无瑕。但是太多的开发人员并不对他们的代码进行单元测试。他们声称花时间进行测试就没有时间推行新功能了。事实上,一些开发人员甚至不将质量测试写入他们项目的预算范围。
那么我又能说什么呢?只能期待他们在品尝失败的滋味之前将这股傲气抛之脑后。一旦存在缺陷的代码抵达客户手中的时候,再撤销它们就未免太迟了。在进行代码传输之前,进行越多的单元测试,就能在今后越多地避免不必要的损失。
原文标题: The 7 deadly sins of software development
关于七宗罪
贪婪,失控的欲望,是七宗罪中的重点。其他的罪恶只是无理欲望的补充。
色欲:肉体的欲望,过度贪求身体上的快乐。
饕餮:贪食的欲望,浪费食物或者过度放纵食欲,过分贪图逸乐皆为饕餮一罪。
妒忌:财产的欲望,因对方拥有的资产比自己多而心怀怨恨(此处的资产并非限定于财产,更多的指才能、才华)
懒惰:逃避的欲望,懒惰及浪费所造成的损失为懒惰一罪的产物。
傲慢:卓越的欲望,过分自信导致的自我迷恋,以及过分渴求他人的关注为傲慢。
暴怒:复仇的欲望,源于心底的暴躁,因憎恨产生的不适当邪恶念头。
七宗罪在拉丁语中为: “superbia”,“invidia”,“ira”,“accidia”,“avaritia”,“gula” and “luxuria ”
好的开发人员应该能够时时自省,反思过错,纠正方向。所以,放在这里提醒自己了。
转载于:https://www.cnblogs.com/SingleCat/archive/2011/03/02/1968581.html
【自省篇】软件开发七宗罪相关推荐
- 开源软件之七宗罪以及背后的阴谋
编者注:本文由 @七液 原创撰写 我们每天使用着大量的开源软件,我们歌颂她赞美她.当有人站出来说一句开源不好 肯定会激起N多人站出来批评.然后给你列举出N多开源的好处和闭源的坏处. 首先我不反对开源, ...
- 转开源软件之七宗罪以及背后的阴谋
编者注:本文由 @七液 原创撰写 我们每天使用着大量的开源软件,我们歌颂她赞美她.当有人站出来说一句开源不好 肯定会激起N多人站出来批评.然后给你列举出N多开源的好处和闭源的坏处. 首先我不反对开源, ...
- 用事实说话!AJAX应用程序开发七宗罪
AJAX bandwagon是个好去处.它带给你更快.更高效.更强动态的应用.但它也有自身的缺陷. 初一看,具备一些常识似乎就能避免这些缺陷,在一定程度上,的确如此.但从DHTML起源来看,AJAX应 ...
- 软件开发中项目经理有那些职责
搜集了一篇软件开发中项目管理的文章,大家看看 当项目繁多的时候,需要规范,并且定义到细节,只有这样,才能支持大规模的开发. PM非常重要,PM的能力将直接导致项目最后的质量. 本文 ...
- 企业IT项目开发之七宗罪(下篇)
即使没有翅膀,心......也要飞翔! 在新年前一天预祝大家新年好,在新的一年里工作顺利,身体健康. 前一阵公司给我下达了任务,一直在忙着打造面向SAAS的企业级微信平台,彻底实现零代码配置,小小一个 ...
- 企业IT项目开发之七宗罪(上篇)
经济危机愈演愈烈,国内学习IT的人员又如飞蛾扑火一般趋之若鹜,而工资一低再低,吃着连快递员都不如的午饭,住着8人.12人的集体宿舍,天天赶进度赶到零晨,血红的双眼,为什么?为什么?中国的IT,你将何去 ...
- datagrid只传入了一部分的数据 未显示全_软件开发面试之数据库事务篇
软件开发面试之数据库事务篇 不少的小伙伴正在准备或是即将准备后端开发的岗位,对于这个岗位而言数据库是必问的一个知识点,而数据库的事务和数据库的隔离级别又是问到数据库时必问的重点.小编从年初开始也是不断 ...
- 大智慧 软件 开发语言_智慧工厂培训软件开发流程篇
为了提高河北钢谷电子商务股份有限公司软件开发的工作效率,明确软件开发过程中相关人员的岗位职责,2020年4月2日下午五点,智慧工厂项目组特开展此次软件开发流程有关培训会议,由纪伟经理担任主讲. 智慧工 ...
- 自考那些事儿(四):软件开发工具(理论篇)
强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan [前言] 本篇是对上篇博文(自考那些事儿:软件开发工具(总述篇))的理论部分进行了细化. 从软件 ...
- 自考的那些事儿(三):软件开发工具(总述篇)
强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan 君子性非异也,善假于物也!-<劝学>(荀子) ####[前言] 纵观人类发展的历史长 ...
最新文章
- VC++实现QQ聊天工具【源代码】
- com.ibm.msg.client.jms.DetailedJMSSecurityException: JMSWMQ2013: 为队列管理器提供的安全性认证无效...
- 电商的本质是“商”还是“用户”?
- vscode怎么执行python_VScode | 执行python
- forget password of WEBLOGIC user
- 流量节省模式 Android,这三种方法让你节省更多手机上网流量
- Arrays工具类(jre中基本类库提供的工具类)
- php队列失败是指什么,队列是什么意思
- Nodejs正则表达式函数之match、test、exec、search、split、replace使用详解
- Vigenère密码(洛谷P1079题题解,Java语言描述)
- 这个是什么单机经典模式的引入
- mybatis核心配置_MyBatis 核心配置综述之StatementHandler
- 注意了,有关学习前端的一些“坑”,别踩!
- (转)Centos7 Nginx安装
- win10系统计算机物理地址,Win10电脑mac地址如何查看 win10系统查看mac地址的方法...
- java爬虫爬取京东_java爬虫练习|爬取京东上的手机商品数据
- 有关java的几个日期类的转换
- 好用的json在线工具
- ROS踩坑|warning:clock skew detected. Your build may be incomplete
- 4.0 第三十三章 XML
热门文章
- 星期几计算函数参考 周几计算 礼拜几计算函数 C语言 C++函数参考 用公式计算 通用函数 Linux开发函数 Windows开发函数参考
- 测试三极管的口诀[转]
- Linux 配置SSH免密登录
- CSS权威指南(七)视觉格式化
- 小红拿到了一个数组,她想取一些数使得取的数之和尽可能大,但要求这个和必须是 k 的倍数。你能帮帮她吗?
- 笔记本电池电量保持在50~55%可延长电池寿命
- 不同图像锐化算子提取的图像信息有哪些不同_opencv数字图像处理(3)- 图像平滑与锐化...
- ue小知识点 动画蓝图 ABP的 begin、init和Character的posses的先后
- redis 通道 java_【java】netty4,服务端向客户端主动发消息怎么把channel存储到redis缓存中?...
- 黑客组织Anonymous(匿名者)