说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

软件工程师如同花园园丁,清理代码就好比拔草!

HTML文档下载 WORD文档下载 PDF文档下载
原文作者Nicholas Tuck将软件开发者比喻成软件园丁。在他看来,拔草就好比清理代码,浇水和清扫落叶就是提高速度,而修剪是为了移除未使用的功能,这两者都需要用心去栽培,用心去灌溉。你赞同其观点吗?

简历上写上软件工程师的名号或许听起来显得高端大气,但倘若写上软件园丁则显得经验丰富。构建软件项目就像是搭建园艺工程。两者之间有许多相似之处。首先有个初步计划,然后将种子种下,但这是个持续性的过程,因为你永远无法保证产品的最终状态。我们可以延伸到项目中,并引导其在给定的时间内呈现出所期望的结果,以适应现实环境。“这也是敏捷方法论的基础。

原文作者 Nicholas Tuck 是敏捷开发专业人士兼软件工程师(园丁),在他看来,软件工程师就好比园丁,需要用心去灌溉。(以下为译文)

结对园艺

结对园艺是一种新的特性。我们知道结对编程是极限编程技术,是指两位开发人员在同一台电脑上并肩作战完成任务。

你会独自一人建花园吗?一人挖坑,一人拖着手推车。试想下,在高温情况下,做着重复性的工作,两个人总比一个人做得更好、更快且更加有趣。因此,园艺工程也需要结对完成。

测试驱动种植

测试驱动开发在顶级实践专家及经验丰富的倡导者中盛行,它也是大部分开发者采用的新技术之一。回想下你的第一个园艺项目。你去商店买一些植物,并在卡片上大致描述它的API(样子)并将它埋在土里。或许有些人不会选择肮脏的泥土,而有的人则很聪明,知道这些肥沃的土壤很适合使用,巧妙的将两者结合起来。尽管我们不知道在开始前想要什么,但是在项目启动前,应该弄清楚如何去做。

真正有经验的园丁,应先确定计划,定义花卉的大小以及种植的区域,并确定阳光的需求量,最后朝着这个目标来完成。

同样地,有经验的开发人员应决策如何实现客户价值、API接口的最佳方式,首先制定测试,然后努力完成该目标。

这并不是说,我们需要确切知道每朵花需要多大的空间,而是确定需要多大区域以及多少阳光来满足供需。无乱是成功或是失败,都应有个制定的过程。

重构种植任务

重构正在改变,但不会影响程序的行为。其中包括清理代码,文档,将对象移至更加适宜的地方,增加测试环节等。这对于园艺来说是最简单的比喻。

  • 拔草就好比清理代码。
  • 浇水和清扫落叶就是提高速度,这也是必做的步骤。
  • 移植植物是为了改善风水,改进软件设计。
  • 与松鼠和小矮妖战斗,是为了清除垃圾回收,防止内存泄漏。
  • 修剪是为了移除未使用的功能,更像是重构。

人月神话——需要时间

在人月神话中常流行有关树的生命周期的一句话:”怀胎9月才能孕育一个baby,但你却无法让9个人在一个月内孕育出一个baby。”软件亦如此,你不能让开发者在短时间内完成一个接一个项目,这需要花费大量的时间。”

你知道还有什么事情需要花费时间吗?园艺!是的,你不可能在一个月内种植出苹果。它需要时间、阳光,水、修剪、翻土、雨露,需要更多的空间,采摘以及生长时间。所以,你不可能在一天内完成所有这些事情。这就是生命周期。

当然,你可以购买具有一定规模的树,可能它会长的很好,也可能种植一段时间后,树就死亡了。有人会因树死了而责怪你,就像你的老板或者系统工程师会因为购买一个现成的解决方案而责备你没能力使它工作。

有时,你无需购买解决方案,而是买了种子、铁锹以及土地,但你必须辛勤工作,给足它时间,才能呈现出最好的结果。

设计

在软件项目中,设计往往并不是按照计划进行的。这也是敏捷实践建议紧急设计的主要原因之一。这一点同样适用于园艺。


  • 步骤 1:决定新花坛需要多少预算,迭代计划。
  • 步骤 2:准备阶段。扯下所有的软管,下载代码。
  • 步骤 3:设想下周围花坛的形状,任务分解。
  • 步骤 4:比预期的最终结果花费更多金钱(真的是因为植物吗?),零迭代。
  • 步骤 5:没有按照计划进行,但却拿出最好的产品,团队在规定的时间内完成项目。
  • 步骤 6:盈利。

同行评审

说实话,花园不仅仅是为了我们自己,而是为了展现给大家看你是如何的优秀。这就是同行评论。

你可能会引起其他人的注意,他们会给你提些意见,比如种植的方式或者浇水的频率等等,以便你做的更好。

持续集成

也许你会先将花种植在盆里,然后再将其移植到花园里。也许你从未想过在院子里埋下树的种子,你种植的,是商店里的半成品,并尽快的将其整合在一起。

我认为,应将花直接种植在花坛里而不是养在独立的花盆中。当然这是个比喻,在软件开发中,我们更善长在大的开发环境中努力奋斗,相互竞争,很多专家和公司都同意这个观点。

调用支援

比如,某样东西着火了,这就需要调用资源。Bug就是最好的比喻。在代码中总有出现一些Bug,而我们的工作就是以最佳的方式清理这些Bug。但这并不意味着,当看到Bug时,要停下一切工作,而是如果这个Bug很大,你需要立即将其清理掉。

建议,充分信任开发者,当客户发现Bug,协助用户清理Bug。

开发进程

僵尸进程在软件开发中也常见的状态之一。

通常某个项目遇到这种情况,项目经理会对他/她作出一个负面评价,从而促使他/她作出更加有用的东西。在园艺中,你可以购买草坪侏儒(稻草人),帮助你协助管理园林。

交付功能

在敏捷开发中,最重要的一点就是向用户提供可用的交付功能。在一段时间内,无论你怎么努力,只能种植一种植物。在它们开始生长的时候你可能会发现不同的东西。而在敏捷开发中,你无需每天构建框架,很少负责一些无功能的任务。

需要记住的是,尽管你不会在一天内培养出一朵花,但你可以进行分批管理。就像短跑或者迭代条件。你砍掉了功能的某些特性,却在最后的迭代环节中完成了项目。

花园会长杂草,你的花园永远没有“完工”之日。并不是因为你不再需要在花园上进行投资,你的工程就完成了。如果你不坚持除杂草,你的花园最终会被杂草淹没,花园周边的环境同样也在不停的变化,一个疏于管理的花园将变得越来越难以存活。

写在最后

在软件工程行业中,质疑声一直会存在,正如我将程序员/开发者/编码者/软件开发者比喻成软件园丁。当然,任何比喻都有缺陷(也许并不恰当),但在我看来,将其比喻成园丁这个观点不错,因为两者都需要我们用心去栽培,用心去灌溉。

你觉得呢?

原文出自: Thesoftwaregardener

(文/夏梦竹 审校/陈秋歌)

Swift没有异常处理,遇到功能性错误怎么办? 基于Python的测试驱动开发实战 不能守株待兔!移动互联网时代:产品找用户 淘汰传统屏幕,虚拟现实新纪元何时开启? 《近匠》SENSORO CTO赵东炜:解密iBeacon生态 我由Angular转向React,为什么? 产品设计中的九个注意事项 昂贵、复杂、不可靠!智能家居产品的尴尬现状 Facebook的CIO都做些什么? 穷游网CTO黄向阳:成果与价值是最好的驱动力 2015移动游戏行业方向标:创业者必须关注的几个领域 基于Python的行为驱动开发实战 面向WP和Android!微软车库发布多款免费应用 GRPC:谷歌发布的首款基于HTTP/2和protobuf的RPC框架 革命,就是现在!——CES 2015行纪 HTML5游戏引擎排行榜 Construct 2最受欢迎 2015手游营销新趋势:电视广告,及其投放逻辑 详解下一代开源混合应用框架Reapp 应用内一键交易!Google公布Android Pay项目 Timehop为什么要放弃Rails,转向Go? 无线充电技术走入客厅 宜家推出“Home Smart”系列 发布仅一年,虚幻引擎4宣布完全免费! HTML5初学者福利!11个在线学习网站推荐 Qualcomm发布Snapdragon 820与超声波指纹识别技术 App Store应用僵尸化:没品质没资本的必然走向 Unity 5正式发布:支持21种平台、个人版免费! 创新高性能移动UI框架——Canvas UI 框架 取精华、去糟粕!适合iOS开发者的15大网站推荐 Swift如何优化性能? 【程序员电子刊精选】明道CEO任向晖:企业也需要养成好习惯 你信吗?重构软件并不会改善代码质量 前辈请推荐几本关于Delphi数据库开发的好书 我要在wsda5.0下使用jdk1.4,怎么办? aspx页面滚动如何实现 第二届深圳Delphi爱好者聚会通知 我的InterBase7为何登录不了? 两个窗体问题,希望今晚能结贴。谢谢了!!! Microsoft.Web.UI.WebControls --- Treeview的应用(请大家帮帮忙) 请为一个界面问题 在9i中为什么提示这个表或视图不存在? 在线等…… 为何在邮箱定则中建了规则,还是收到满足该定则的垃圾邮件,急急! ASP如何调用进程外组件,在线等待,急!!! 帮个忙吧! html中 文本框失去焦点的事件 函数名是什么?? 谢谢 高分求助--关闭进程问题 关于在窗体上画线的问题。 大家讨论一下,做一个游戏修改器应该如何下手? 分不多,只是希望能解决问题!!!!还望各位帮助 一个简单的问题:无线网关是否要和无线网关配套? 问一个Swing做界面算是设计模式方面的问题,语言上应如何去实现 关于xslt的两个问题,各位高手帮忙。。。 怎样获得一个IP地址的整数值? 左连接(left join) 速度很慢,如何解决? “WGE”团队诚邀英才 访问这个页面试试看,能不能跟踪到文件的下载地址? 一个简单的问题 @Command([RefreshHideFormulas]) 有什么作用? 怎么找不到我的mapping 和formbean??? 菜鸟初学问题,两个表之间导入数据时候,一个表比另外一个表多一个字段的时候…… 我的软件在发布一周之后,终于有破解版了,悲喜交加中! 高分求教(大家看看下面的程序,尤其是编,解码部分,有什么问题) CSocket连接错误... 访问这个页面试试看,能不能跟踪到文件的下载地址? 在Javascript中嵌入Jsp问题 怎样在TcxGrid中实现类似TDBGrid的OnColExit的功能? 最近接私活累死了,哎,赚钱难呀,还是散分容易!! 求救高手,ie打印屏蔽ip 地址的问题 在sun Solaris下配置锅IBM MQ Client的高手请进... 怎样将%赋值给一个变量? 简单问题:如何获得一个文件的更新时间 特难问题!!求救。。。。 对于MyWebService.asmx中大家的用法 我想找thining in java第三版,中文版,且是CHM格式的,各位帮帮忙 请问往word文档写内容的API是什么? 螃蟹今天生日。再放分。来者有分 运行时提示"找不到文件msadomd.rll in c:\winnt\system32\resources\1033\"? 当前时间提交数据库问题 关于给水晶报表传递DataSet的问题 查找文件问题 急救:进制转换问题 怎么执行一个data.sql文件 陆地生物是怎样生活的? 对陆地生物来说,【 】,【 】和【 】是生存的基本环境条件. 不是陆地生活的生物最本条件 商店将排球单价降低10%,足球的单价涨价10%后,它们的单价正好相同.现在售出排球和足球各1个,与原价相比,商店是赚了?赔了?还是保本? 为什么人类要生活在陆地上? 陆地什么生物最大? 多级直线加速器中,为何两极板间距离逐渐增大? 电容器两极板电荷量恒定时,增大极板间距离.问U是否能够无限增大? 蘑菇头怎么留长剪了蘑菇头··不想要这么短了··不知道怎么留长···求方法 理和天地万物是一种什么样的关系 尧是哪个时期的人物不要说他的儿子,我只要知道他 辽宁舰今年第四次出海 专家称为在冬季西非经货联盟首脑会议在达喀尔开幕潘基文呼吁世界各国与联合国共同应对全黎巴嫩总理宣布立即采取措施制止北部教伦敦股市股指24日上涨美媒曝美无人机行动得到巴默许 巴政府美农民发现两副恐龙骨架 有望拍出20澳大利亚灭火消防飞机坠毁 驾驶员被证法国、马里和联合国部队在马里北部展开伦敦股市24日上涨叙利亚人权观察组织称叙政府已释放61法律是准绳任何时候都必须遵循道德是基北京今明两天再现空气中度污染 13日任振鹤兼任襄阳市委书记图文:喜领温暖包“日记婆婆”余洪芝:等做不动了还有儿天然气将成我国主体能源我省昨起开展“史上最严”交通安全排查十堰1.2万辆新能源车销往全国中央第四环境保护督察组交办深圳问题调近六成春运车票网购无需验证码深圳 海防经贸合作区开工金鳞大王子邪觇仙异世之传奇技能巫墓开封有个包小姐乌龙游大唐女捕妃飞欲仙我的恶魔弟弟绝顶丹霞地貌旅游观澜山水田园农庄旅游富春茶社旅游巨石山旅游茱萸峰旅游鸿门宴遗址旅游王家坪革命旧址旅游翠屏湖旅游雪峰寺旅游M50创意园旅游山塘老街旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘