三个人的系统 - 你如何建立第三个系统?

时间:2009-03-19 02:49:36

标签: project-management

我从书中The UNIX Philosophy一直在思考三人制度的故事。对于那些不熟悉的人,它是这样的:

  • 他是第一个人的系统 当他的后背对抗时,他会建立起来 壁。这是klugey,hackish,和 它不适合新的 特征
  • 第二个系统是由a设计的 坚持他们的“专家”团队 要做正确的方法 时间。结果系统很慢, 臃肿,迟到,结束 预算。
  • 第三系统是由人建造的 谁被烧得太多了 时间由第二个系统。它是 强大,可扩展且可维护。

显然,软件开发的目标是编写第三系统。作者的前提是,如果不首先编写其他两个系统,就不能这样做。从那里我们得到了来自The Mythical Man-Month的“计划扔掉一个”的概念。在我有限的软件工程生涯中,我曾经研究过一个系统和两个第一个系统,这两个系统都因惯性而成为The System。感觉就没有足够的时间或预算来做正确的事情,但总是有足够的时间和金钱去做。

这里有没有人建造或维护过第三套系统?你到达那里采取了哪些步骤?你真的可以“计划在实践中扔掉一个吗?”

6 个答案:

答案 0 :(得分:1)

我认为关键在于拥有时间和金钱以及经验之间的区别。如果你之前已经构建了一些东西,被烧毁了,再次构建它,弄错了然后重新构建它,你就是那个知道什么有效的稀有开发者,然后你就会得到'第三系统'。

只要有钱,时间和以前的失败都不是成功的秘诀。

答案 1 :(得分:1)

我所知道的第三个系统的一个例子是Linux的iptables

Linux的原始数据包过滤系统是ipfwadm从BSD借来的。在此之后,编写了ipchains,但结果证明不能以社区期望的方式扩展。

因此,编写ipchains的人从头开始编写iptables。它存活了很长时间。

(从技术上讲,iptables和ipchains以及ipfwadm是用于管理内核数据包过滤器的用户空间工具。对于第三系统,我指的是内核数据包过滤器以及用户空间工具。)

答案 2 :(得分:1)

这是一个有趣的问题,它让我对这个问题的原始答案三思而后行。我正在研究我认为是“第三系统”的东西,我是在维护并尝试扩展之前的“第二系统”后从头开始设计的。 (我没有声称我的'第三系统'是完美的,我只是声称我花了一大堆时间思考是什么让以前的系统变得糟糕,并努力避免这种情况)。未来的工程师会不会认为我已经实现了“第三系统”?我当然希望如此,但我打赌他们会想知道我为什么以某种方式做事。我认为,无论系统是否实现“第三系统”,它都是在旁观者的眼中。

我认为有经验是进入'第三制度'的最佳步骤。至于你能否计划在实践中扔掉一个,是的,你可以 - 通过一些好的原型设计。当然,你不能对所有东西进行原型设计,所以如果你说的是整个系统的一个版本,那么也许并不完全符合“抛弃一个”的条件,但对于子系统,在我看来,原型设计是必须的。

编辑:我想我会选择UNIX哲学。我希望我之前听说过: - )。

答案 3 :(得分:1)

我已经建立了第三个系统。没有多少人关心你,但绝对是在一个案例中。

我不会说我把以前的那些“扔掉”,因为他们在以前的项目中发起并航行。

我为公司构建CMS系统,每个客户都需要不同的东西。通常,第一个产品是背靠墙建造的产品。时间限制,预算限制,技术镀金......所有标准问题都是与预期不匹配的糟糕项目。

下一次迭代是对现有代码和想法的重复使用,并在下次进行“更好的尝试”。

就我而言,我构建了一个表单生成库。它不限制我的设计师,它当然不会限制我的程序员。只需花费很少的精力就可以完成我所需要的一切。这是我做过的最好的工作,但是在第二次系统尝试中花费了几次尝试(和几年),每次尝试都有不同的,通常很少考虑的目标。

最后的结果,感觉还不错。我知道我有第三个系统,当我意识到我所做的工作超出了当前项目的需求,能够轻松,熟练地应用于当前即将到来的每个项目,同时节省了我无数小时的实际编程时间和发展。

希望有所帮助。

答案 4 :(得分:1)

“这里有没有人建造或维护过第三套系统?你采取了哪些措施来实现目标?你真的可以”计划在实践中扔掉一个吗?“

我被带了几次清理Second Systems出错了。

我采取的步骤是坦率的 - 由专家建立的系统没有/不起作用。请注意,你称某人的宝宝很难看,你不喜欢这样做。

是的,我们 投掷一种方式。我们扔掉了那些无效的软件。请注意,您说先前的软件是成本,而不是投资。你不喜欢这样做。

其他时候我被带来建立一个工作系统。每个设计都经历了所有三个阶段。

  1. 您不了解问题域(或技术)。第一个系统是混合物。它有问题域kluges 技术kluges。第一个系统总是两者都有。

    在某些项目中,管理层宣布胜利,将其投入生产,用户讨厌它,因为问题领域存在问题。开发人员因为技术问题而讨厌它。

  2. “第二阶段”开始。在少数情况下,我继续过去最初的klugy阶段。现在真正的工作开始了。修复问题领域克隆 - 挖掘用户告诉的谎言,找到业务捷径和愚蠢的非解决方案。同样,修复技术方面需要返工,这需要进行单元测试才能重构。

    请注意,问题域kluges是最具破坏性的。用户说“它只是数据的简单'副本'”,当它真的不是副本而是第二个引用时。用户说“只需给我一个用户定义的字段”,然后将其变成一个可以完成所有操作的神奇键(非常糟糕。)

    丢弃定义不明确(或知之甚少)的问题域名是可能的。用户需要一段时间来围绕他们真正做的事情。他们游说“最先进”的流程定义。

  3. 最终,用户意识到他们错误地定义了他们的业务或他们的关系或流程。那是第三个系统出现的时候。在一个案例中(到目前为止),我继续了解这一级别的问题领域理解。我们抛弃了一堆问题领域的“专家意见”,并清楚地看到了真正发生的事情。它比第二个系统简单,并且在第一个系统中没有废话解决方法。

  4. 是的,我们放弃了两种商业模式。这似乎并不昂贵 - 只是分析和规范。但是 - 真的 - 旧的PPT和计划以及什么不是现在可笑的,因为它们已经过时和近视。

    是的,我们扔掉了以前的软件版本。但是,我们使用了大量的开源工具,所以停止使用一个组件并开始使用另一个组件并不是很痛苦。

答案 5 :(得分:0)

你是否真的理解或欣赏第三个系统而没有经历过前两个系统?那里真的有第三个系统(完美)吗?有些人可能会接近(我不能说出任何名字......包括iPod),但这可能是一件好事,一个人达到完美后会做些什么呢?喝啤酒?