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

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

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

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

想辨析“马航”等事件真伪,有很多技术和工具可以使用 两倍于IBM的基础设施投资,Google大力发展云服务 听云平台发布移动应用性能黑洞报告 微信开发者大会陶瑾:如何玩转微信支付功能的原理和开发 560亿PV+7.3亿用户,Reddit是如何做到的? 打造安全界的希波克拉底誓言文化 极客的春天来了! Mozilla COO宫力:老牌操作系统如何助力新一代智能电视 App提高用户留存率新招:应用性能监测 韩国手游市场规模超万亿 2014中韩手游项目对接会开幕在即 SanDisk发展之路:专注SSD、推新产品线 AMD发展线路图曝光,欲造500+平方毫米GPU 全球移动开发者:IAP降温,企业应用成待掘金矿 Vuforia 2014 视觉大奖赛:寻找最炫酷AR增强现实应用,迈向巅峰! MapReduce谢幕,谁将成为最终的接棒者? 变身音乐控制器!开源JavaScript库NexusUI 从112台服务器到Q2 50亿基础设施开销,谷歌只用了15年 【技术文章】微信公众平台开发教程新手解惑40则 Qualcomm承诺投入1.5亿美元 扶持中国初创企业 物联网多了把“新板凳” 联想推三款智能硬件 .NET技术+25台服务器怎样支撑世界第54大网站 基调网络发布听云平台:“听”懂App性能 《近匠》豌豆荚李大海:用搜索敲开手机娱乐平台之门 微信开发HTML5轻游戏中的几个坑 【微信大会】企业号、支付功能、智能客服与LBS、电商开发解析 【CTO俱乐部走进海尔】活动图文直播进行中 燃料电池商业化,数据中心或将永不断电? 广告教父的哲学:值得F2P游戏借鉴的8条经验 UC李云:基于Chromium的浏览器如何打造更好体验 一周消息树:颠覆互联网思维?年薪50万码农转行卖凉皮 Coconut2D:跨平台2D游戏及应用开发工具 第八届中国大数据技术大会将于12月中旬隆重召开 GGJJ们谁有电子版《windows核心编程》的完整的第27章啊?偶的那一版这章只有半截 请教一个写入文本的问题,解决200分相送,在线等 如何做到高人一筹 有没有人能具体讲一讲关于大文本处理的过程! 函数返回值问题,给高分 DX抓图,如何保存为Bmp文件? 3个NF 嵌入文件夹窗格怎么使用 创业中的软件公司招人(有兴趣的弟兄进来看看) 数据库中事务的特点及其应用,急,不够再给分500,在线,急。 关于对话框.高分请教 创业中的软件公司招人(有兴趣的弟兄进来看看) 做的网站在IE5.0和IE6.0显示的问题 寻找采用WebSnap 技术的例子? matrxII观后感 关于JSP文件和BEAN的存放 创业中的软件公司招人(有兴趣的弟兄进来看看) c#做的程序可以直接在新安装的win98下(没有.net环境)跑吗?有经验的请留步 c#做的程序可以直接在新安装的win98下(没有.net环境)跑吗?有经验的请留步 存储过程分页有点问题,谁帮我看一下 基础问题!困扰我! 请哥哥姐姐帮忙,把下面的代码转换成VC代码 大家case工具都用到什么程度? 为什么编译的可执行文件在其他计算机无法运行? ACCESS操作问题,高手... 我是刚刚入门,请帮助 怎样把一个已建好的主域服务器更改域名(在线等) 如何得到DataGrid控件里面的某行某列得值? 关于rave报表的问题 weblogic部属程序问题! 组合查询的问题 怎样在改变一个下拉菜单,不刷新页面的情况下,改变另一个菜单的内容??? 有使用BCG库的朋友吗?有些问题不明白,想讨论一下。 sqlmangr.exe文件受到了损坏,应该怎么做恢复[急] 请问,广东的高程报名在什么时候?谢谢! lwangzi(磊子)请关注 win2000下读注册表的怪问题??? 在线等待,急急急 菜鸟百问之一 在VS.NET中无法调试ASP.NET应用程序 从一个表select等好久也没有东西返回,别的表正常,这是为什么呀 大哥大姐: 请问BC与DELPHI有什么区别 ? 问个小问题,权当散分 怎么把终端服务的3389端口号改为自己需要的端口? 怎么样使用实体bean来修改数据库中的记录? 高手请进!!急 如何知道打开子窗体的父窗体是谁 关于XML转换的问题!!请高手进!! *.xfm是什么文件?? 打包难题 help me 来这里问一下, DELPHI与C++ BUILDER 有什么区别 ? 北京时尚-- 海淀vs朝阳 (转) 请问:如何显示通过get来传递过来的带“+”的变量?(显示“+”会丢失) 庆阳能源怎样才能促进当地居民增收 I like all the subjects,_e_____ English.这里除了可以填especially,能不能填except 或者说表达类似意思I like all the subjects,_e_____ English.这里除了可以填especially,能不能填except 或者except for,或者说表达类似意 六年级部分同学去划船,若每条船上坐5人,有14人没有船可乘,若每条船上坐7人,则有1条船上还可乘4人,六年...六年级部分同学去划船,若每条船上坐5人,有14人没有船可乘,若每条船上坐7人,则有1 y=cosx-根号3sinx 判断奇偶性 信息发送模式是什么意思? 猜 迷语 趣填成语 125 八分之七 问这个是什么成语?猜 迷语 趣填成语 125八分之七 问这两个是什么成语? 已知点A(2-x,5-x)在第三象限,求x的取值范围 传递信息的息是什么意思 四年级的一些同学去划船,如果每条船坐6人,将有8人不能上船:如果每条船坐8人,会多出一条船.他们租了几条船?一共有几位同学?用方程解,记住,麻烦写清楚点 如图,矩形OABC中,O是原点,OA=8,AB=6,则对角线AC,BO的交点H坐标为 小灵通发信息时出现信心发送失败13什么意思 题:六年级部分同学去划船,若每条船上坐5人,有14人没有船可乘,若每条船上坐7人,则有一条船还可乘4人.问:六年级有多少名同学去划船? 已知点A(x-2,5-x)在第三象限,求x的取值范围 知函数f(x)=x2+x/a(x不等于0,a属于R) (1) 判断f(x)的奇偶性(2)若a小于或等于16,判断函数F(x)在[2,正无穷 每条船能坐6人,54名同学排好对,按照先后顺序上船:彬彬排在第8个,应坐在第()条船上.强强排在第24个,应坐在第()条船上.军军坐在第6条船上,他排的位置应在第()到()个. 点A(x-1,2-x)在第三象限,x的取值范围是( ) 这句话语法错有什么.如何改正啊?professionals require developing cultural intelligence in order to understand characteristics of different culture and resolve misunderstandings. 力的合成中,做出平行四边形后,如何求借合力 成语:( )尘莫及 ( )明星稀 重力加速度是多少? 求三个数最大值,哪里错了#includeint main(){int max(int a,int b,int c);int a,b,c,m;scanf("%d%d%d%",&a,&b,&c);m=max(a,b,c);printf("%d",m);} 下列关于矢量和标量的说法正确的是 工厂对某设备进行检修后,工作效率比原计划提高了4%,因此比原计划提前5天完成了任务,问原计划几天完成任 Stripes 2.a measure of success achieved at the sprawling two-story plant,where both the Stars and Stripes and the Rising Sun fly in front of the factory's glistening white exterior 明星稀的前一个词是什么 成语 我们祖国中国最炎热的地方是哪? c++问题,三个数中求最大值三个数中求最大值,为什么我这里无法通过编译,#includeusing namespace std;int main(){int a,b,c,d;//d为最大数据cin>>a>>b>>c;d=max(a,b,c);cout 关于矢量和标量,下列论述中正确的是?(注明解题原因)选项:A.有方向的物理量一定是矢量B.矢量一定具有方向C.只有大小而没有方向的物理量一定是标量D.标量一定只有大小而没有方向 若A【x-1,2-x】在第2象限,求x取值范围 fastening stripes什么意思 知了怎么捕捉食物 打字员用一天时间打完一份稿件,已知上午完成了五分之三,下午比上午少打12000字,这份稿件一共有多少字? 第五个英标是什么? 为什么孔子认为《韶》乐尽善尽美?《武》乐尽美而不够尽善? 若A点(2+a,a-1)在第四象限,求a的取值范围. horizontal "knock on 甘肃庆阳市以后会有地震吗?汶川地震后会不会对庆阳造成隐患啊. Do not use internal horizontal or vertical 爱情是不是想象中的那样完美?爱我 的 人我 不爱 ,我 爱的 人不 爱我 1爱,从何而来! 判断函数的积偶性:y=根号(1-cosX) +根号(cosX-1) 来领分吧 你门都回答的很好我只能采一个啊 根据谜面写成语赤橙绿蓝紫武大郎请客加起来是五句 Knock on wood. 点(a,3-a),在第二象限,求a的取值范围. 125成语什么意思 俊秀唱过knock on wood吗我也很奇怪觉得没有啊,可是在搜索标签里碰到过不只一次~~ 所以就来问问亲们~~ 计划用10小时打一份稿件,实际只用了8小时.工效提高了( Android开发中Intent的具体用法? 尽善未必尽美的答案是什么 打一文稿计划用10小时完成由于工效提高四分之一实际用()小时打完稿件 android 应用开发中的 Activity ,Intent, 小学人教课标版12册语文课本第1课两小儿辩日中的:两小儿笑曰:“孰为汝多知乎.”其中的“为”字的读音应是“维”还是“喂”.要有原因 9题有语法错吗,有的话请纠正 平行四边形有几条对角线? 人教语文六年级上册15课选做题 关于时钟的名言 平行四边形两条对角线的平方和=? 有没有人教版? 有偏旁相同的字组成的词 OM为角平分线,求证OA/OB=AM/BM 苹果发布新款平板电脑iPad Air日本猫站长阿玉担任“粉红丝带”宣传大浙江温州一在建祠堂坍塌致7人受伤浙江海事局下放海员证和油污保险证办理浙江省新增1例人感染H7N9禽流感病云南晋宁传唤嫌犯引发群体性事件 多名荷兰针对俄扣押其破冰船向国际法庭提起50多个国家将参加第五届外洽会吸引中日网上传视频主张独岛主权 韩国敦促日东盟各国持续热议中国与东盟合作前景美加州大学戴维斯分校打造奢华宿舍吸引温州将建10条BRT 3条线路近期先中石油与俄油气公司签署LNG购销协议星巴克回应售价质疑 称在中国利润不比意大利父子专制冒牌名酒遭警方查获 将日本首相安倍表示将对离岛等土地买卖实美国男子跑马拉松织出近4米长围巾 破韩军拟提前部署三艘宙斯盾驱逐舰 欲增韩国战殁者遗属要求取消靖国神社合祀二文莱将实施严厉伊斯兰刑法 通奸者将被李克强与梅德韦杰夫清晨在钓鱼台国宾馆首个社区型公益论坛在穗举行废液倒下水道 工人打赌点燃 爆炸一死“大V”帮助家乡卖苹果东莞亿元贪官吴湛辉起底:传最初为领导江苏昆山一居民 建家庭光伏电站8000元,VIP中P[街谈]求爱遭泼水的几个问题内地养老香港老人“回流潮”南都猜猜猜纽约4岁女童遭奸杀 22年后逮捕其堂偷倒刺鼻垃圾的责任人被批捕(图)“否决政体”的“停滞本质”(钟声)加强中泰精华互鉴 搭建更多合作平台让我们的父母享受美好时代(深阅读)上海自贸区会是什么样?(经济热点)高山哨所的别样运动会“老百姓的点子,含金量高哟!”(民生江苏队升至积分榜首“北马”越跑越精彩(体坛观澜)梁希森:从房产老板到土豆大王(寻找中德约科维奇称雄上海大师赛
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘