软件工程师如同园丁

软件工程师软件开发敏捷开发开发人员项目经理软件设计

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

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

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

结对园艺

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

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

测试驱动种植

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

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

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

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

重构种植任务

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

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

人月神话——需要时间

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

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

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

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

设计

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

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

同行评审

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

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

持续集成

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

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

调用支援

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

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

开发进程

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

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

交付功能

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

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

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

写在最后

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

你觉得呢?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值