我的老板今天来找我,问我是否可以在1.5天内实现某个功能。我看了一下,并告诉他2至3天会更现实。然后他问我:“如果我们又快又脏又怎么办呢?”我请他用“快速而肮脏的”来解释他的意思。

事实证明,他希望我们通过(例如)复制其他项目中的点点滴滴,然后将所有代码都放在WebForms页面的代码后面,来停止编写代码,从而使人类尽快写代码关心DRY和SOLID,并假定永远不必修改或更改代码和功能。更糟糕的是,他不希望我们仅为此一项功能而已,而是希望我们编写的所有代码都可以这样做。 。客户不想为您付费,因为将来可能会发生某些变化。我们的利益在于尽快交付代码。只要应用程序执行所需的操作,代码的质量就无关紧要。他们从来没有看过代码。 :




开发人员的动力:我解释说,当开发人员不断面临不切实际的期限和预算的压力时,很难迅速地编写草率的代码,这很难保持他们的动力。 />
可读性:当一个项目传递给另一个开发人员时,更清晰,结构更好的代码将更易于阅读和理解。适应,扩展或更改编写良好的代码。

可测试性:通常,在干净的代码中测试和查找错误通常更容易。

老板的立场让我的同事和我一样困惑,但是我们似乎无法找到他。他一直在说,通过更快地做事,我们可以出售更多的项目,以更低的价格要求它们,同时仍能获得更大的利润。最后,这些项目支付了开发人员的薪水。

我还能说什么让他看到他错了?我想给他买《 Peopleware》和《神话人月》的副本,但我觉得他们也不会改变他的想法。

很多人可能会说“ Run!现在出来!”或“我要辞职!”,但这并不是真正的选择,因为.NET Web开发工作在我居住的地区非常罕见。
哇,我没想到会得到这么多答案。谢谢大家的贡献和意见!

正如很多答案和评论所指出的那样,公司类型和项目类型在此主题中起着重要作用。我在此处对一些答案的注释中已经解释了一些内容,但最好也在此处添加。

我工作的公司很小。我们有4个开发人员,1个设计师,1个老板和1个所有非技术性职业(老板的妻子)。我们所做的项目可以分为两类:


使用我们自己的CMS或电子商务框架构建的小型网站(65%)
中型Web应用程序(35 %)

因此,尽管我们的许多项目规模很小,但它们都是基于同一系统构建的。该系统大约有4年的历史,并且代码基数至少可以说低于标准。为特定客户添加新功能或修改标准功能始终是令人恐惧的事情。

老板设定的目标之一就是开始将重点转移到产品开发上。因此,这意味着我们将开发更大的应用程序,这些应用程序将成为其他项目的基础或类似SaaS的事物。

我完全同意,快速而肮脏的工作对于某些项目可能是最好的解决方案。但是,当您扩展将在未来几年内开发的所有站点都将使用的现有CMS或从头开始构建SaaS产品时,我认为有更好的方法。

评论

所有人:请不要发布“逃跑”或类似的答案。这是一项有效的业务问题,因为无论代码多么干净,如果业务用完了钱,没人会受益。

“他们从不看代码。”是的,大多数人从来没有看到过空调的内部。用胶带固定制冷剂泄漏仍然不道德。

您可能会看到完全不同的答案,具体取决于所使用的软件所使用的用途。如果您在医疗或财务数据附近,那么逃跑可能是有效的建议。

别介意,我只是链接到马丁·福勒(Martin Fowler)在这个问题上的观点。

我想您的老板理解的是代码过度设计而不是代码质量。他对前者是正确的。您不应过多考虑未来的可扩展性和可能的​​变化。但是,现有功能的代码质量应该非常重要。

#1 楼

不好意思地说,
你不想听这个,但他并没有完全错。
,他们愿意接受您可以做的最耳熟能详的事情
,也不要抱怨,并且愿意一次又一次地回来
,让您做更多的工作,在为您的公司实现最大利润方面,老板是100%正确的。

然后是YAGNI:如果项目是一次性项目,则无需花费任何维护或重写费用,维护和重写的时间是可计费的,因此在第一时间正确执行实际上会花费您更多的钱。然后,您的老板再次100%正确。
如果您的客户没有抱怨成本和缺乏质量,那么质量就不会使您的客户满意。听起来客户对废话很满意,所以卖给他们更多废话并不是一个艰难的商业决定。
除了客户满意之外,您所做的任何事情都浪费了每个环节:他们不会欣赏它。您的老板再次是100%正确的。
记住质量是情人的眼。如果满足客户的需求,他们将不在乎使它正常运转的胶带和衣架。
您所珍视的东西对您的客户几乎没有或没有直接价值,因为他们不在乎如何软件可以完成其工作,只是它可以满足他们的最大需求。 GUI工具,尤其是针对Windows的GUI应用程序,由于工具集的文化,它以VB熵的形式编写的更快。 。
就我个人而言,我永远不会以如此低质量的可交付成果开创先例,但是我再也不会去争取您公司显然试图迎合的最低客户级别。他们想拥有,如果他们对事情的看法很好,就无需尝试通过更昂贵,更高质量的软件来向客户推销。
您不会让管理变革,只有您的客户会做到的。您可以获得更好的客户,或者获得更好的工作。

评论


评论不作进一步讨论;此对话已移至聊天。

– yannis
16年1月19日在8:07

#2 楼


听起来像我以前的工作(1个销售人员,1个图形人员,2个程序员)

这种情况在我以前的工作中一直存在。我同意销售推动一切。商店经理(技能集:80%的销售20%的图形)一直在推销客户想要的功能。 20小时的工作将以10小时的价格出售,因为客户不愿支付更多,或者(我倾向于认为)销售经理没有足够强调客户获得的价值。

销售经理经常会展示潜在客户功能和我们为不同客户构建的小部件。当然,他会向新客户推销此功能,因为我们真的不需要重新编码东西……我们要做的就是从另一个网站复制并粘贴代码,然后将其放入该网站。我们已经构建了它。和“客户y只花了10个小时,而客户z才花了16个小时。”

我们问销售人员目标是什么?他说要以尽可能便宜的价格出售尽可能多的这些小部件。

我们告诉他,我们是一家优质商店,我们从事优质工作。我们告诉他,降低价格实际上是在稀释我们的工作价值,并且这样做的目的是,当客户因以前未开发的新功能回到我们身边时(这意味着从站点x复制和粘贴的选择不是在那里)他们会推迟定价,而销售经理会在压力下屈服。

我们决定按原价对小部件定价。任何修改都是多余的。我们说服管理层,如果有时间开发这些小部件,以便我们可以从“代码库”(而不是从其他网站)中提取它们,则可以采用更通用的方式进行构建,因此我们可以在2中将它们放入现有站点小时,并在10个小时的时间内获得报酬。我们还开始将这些小部件添加到“我们的网站”,并停止将其他客户的网站用作销售工具。我们只会使用其他客户的网站来展示如何自定义窗口小部件,而只需支付少量费用即可实现这样或那样的效果。工作几个晚上来构建一个通用小部件,将其放入我们的代码库中。生活越来越好。讨论从为什么要花这么长时间变成……“嘿,您可以转售x客户想要的小部件吗?如果是,您希望我们在基本模型中增加哪些功能来帮助您销售它。”

评论


+2赢得战斗

–加勒特·克拉伯恩(Garet Claborn)
2011年6月28日在21:34

好决定。我似乎还记得《代码完成》或《快速开发》或《神话人月》中的一句话,根据经验,可重用组件的构建时间要比一次性组件长3倍。因此,当您第四次转售它们时,您将获得纯利。我怀疑以质量卖出这个家伙的关键是当他问“客户y只花了10个小时,客户z怎么要花16个小时?”质量意味着可重复使用性,这意味着可重复销售性,这意味着几个月后您可以花红钱购买跑车和牛排刀。

– Paul D. Waite
2011年6月29日10:31



@Paul-是的,证据在布丁里。当这些小部件存在于我们自己的网站上时,销售额急剧上升。他可以以$ 500的价格展示“原样”模型,然后展示客户要求的几个不同品种,当然还要支付少量的客户编程费用。

– Michael Riley-又名Gunny
2011年6月29日14:11

@Cape:是的,我可以想象在那里有一个实际的工作版本很棒。承诺是一回事,但是尝试尝试却很酷-人们喜欢产品。苹果商店似乎以相同的方式工作。

– Paul D. Waite
2011年6月29日14:28



+1百万次。一个销售人员想要“以尽可能便宜的价格出售尽可能多的这些小部件”。不了解销售;我们的目标始终是“最大程度地提高利润”,即制造成本(数量)与客户支付的价格(价格)之间的差,这意味着您确实希望有几个支付很多的客户。那是利润。数量仅适用于商品业务,而代码/创意工作不是商品,永远也不会。

–SingleNegationElimination
2011年7月1日在17:54

#3 楼

我见过公司这样做。他们最终会激怒顾客。一旦应用开始为他们赚钱或被集成到他们的业务流程中,客户就会习惯返回并要求新功能。您很快将不得不告诉那些客户,您无法将新功能添加到您创建的混乱中,因为您无法再处理代码库了。否则会花费您更多时间。

客户(即使彼此竞争)也倾向于交谈。通过直接换公司的员工,或在其业务典型的活动(会议,展览)上通过随机会议直接进行。如果您的公司声誉不好,您很快就会很难获得新客户。即使是在项目的第一个实时周期内,任何更大或更复杂的事情都将立即浪费时间(以及金钱),只需花费比预期多的时间调试即可。

评论


这是双向的。我公司所取代的公司花了太多时间进行文档和设计,以至于客户将目光投向其他地方。另一家公司所做的工作很好,但是建造和维护非常昂贵,违反了YAGNI的规定淹死了,也没有比敏捷,少用的东西更好。这是一个平衡。

–迈克尔·哈伦(Michael Haren)
11年6月28日在20:59

出售高质量代码编程服务的公司很少。因此,自由市场的无形之手说:垃圾代码是开展这项业务的正确方法。

– Greg Dan
2011-6-28 21:32



@Greg:我觉得这有点太悲观了。尽管我只能代表德国和荷兰发言,但我可以说做高质量的工作是很重要的。而且,“自由市场”(无论如何还是一种错觉)并不仅仅由价格主导。有很多因素,制造不良产品往往会失败。

–瑟勒斯·穆勒
2011-6-28 at 22:21



后期评论,但在完美主义者看来,“质量”与实际用户的观点相比,“质量”是非常不同的野兽。作为最终用户,如果您花10个小时将每小时一次查询从0.1秒优化为0.01秒,那么您就浪费了10个小时。如果您对每秒运行10,000次的查询执行此操作,则这是实际的优化。

–尼尔森
16-9-28 3:00



#4 楼

教他技术债务

您要做的就是让他意识到他做出的选择的后果。有时,快速而肮脏的状态可能还不错,因为您可以更快地完成工作,但这确实会带来长期后果。是处理该项目的正确方法。

沃德·坎宁安(Ward Cunningham)提出了一个精妙的比喻:“技术债务”。正如您可能会在银行借贷以更快地获得某些东西(而不是储蓄)一样,从长远来看,您必须支付更多,因为您必须支付利息。如果更快地获取“东西”的价值超过了利息成本,这可能是一件好事。再说一次,如果尽早获得功能的价值大于事后清理的成本,那么借贷可能是正确的方法。最后,您将所有收入付给利息。技术债务也一样。如果您提出了太多快速而又肮脏的解决方案,那么您的技术债务将非常高,以至于您的进度将停滞不前。在我从事的一个项目中,技术债务非常严重,以至于我们严重无法进行3个月的工作,只是试图修复错误,引入新的错误等。

了解技术债务的概念,他应该能够做出正确的决定(祝您好运,这是一个韧性)。请注意,正确的解决方案有时也意味着快速而肮脏。

评论


+1。一个很好的比喻-我以前从未听说过这样的说法,但它确实打在了头上。

–斯科特
2011年6月29日14:25

每当我看到这个比喻时,我都会喜欢这个比喻,它适用于我们在IT中所做的很多事情。我同意-有时,Q&D就是答案,有时也意味着您必须花时间正确地做事。关键是要意识到两种方法的风险和优势,以便做出正确的选择。

–罗布·莫尔
2011年6月30日11:22



这太好了,这样一种简单的解释方式,而无需使用过多的参数。

–爱德森·霍拉西奥(Edson Horacio)少年
18年6月12日在19:52

#5 楼

维护成本通常要高得多,并且通常是软件成本的大部分。而且成本也太高了。从长远来看,如果您的产品仍然是烂摊子和越野车,您将失去它们。客户希望为您的竞争对手支付高品质产品的费用,而不是为您的虫子支付更多的费用。

您的老板不明白吗?

评论


如果您的公司按小时获得报酬来进行维护,则价格会更高,并且花费更长的时间对您的公司更好!他的老板确实理解这一点,并认为低质量是一种积极的收入来源,而不是负面的。

–user7519
2011年6月28日18:50



@Jarrod仍然,我认为如果您让客户为自己制造的错误付费,从而使他们失望,他们将不会对您感到满意。

–杰斯珀
11年6月28日在20:02

@Jesper,我的客户从来没有处理过,@ Kristof的做法显然很好,很高兴,他们拥有更多的权力,他们可能没什么不同,而且鉴于他的地理位置,他的竞争状况可能更糟或根本不存在。

–user7519
2011-6-28在20:22



@杰斯珀(Jesper),您所谓的“骗人”也可以指得到您所付的钱。如果他们为快速而肮脏的东西付费,那么快速而又肮脏的交付并非不道德,这就是他们愿意付出的代价。根据您的推理,出售任何低端产品都是不道德的。麦当劳的软件开发与餐饮业一样。张贴者说,很难做一份自己正在做的事情,因为很少,这意味着没有多少公司在当地做他的工作,这意味着竞争很低。

–user7519
2011-6-28在20:39



@Jarrod-我们与需要额外功能(“什么?这个小功能如何让我花掉整个应用程序价格三分之一的客户?”)或错误修复(“什么?我必须付费)的客户发生了一些争论为您的错误?”)。我们也有客户为此而去竞争。我说过,如果.NET公司在附近没有那么多。虽然有很多PHP公司。他们也是竞争者。

–克里斯托夫·克莱斯(Kristof Claes)
2011年6月29日6:16



#6 楼

在极少数情况下,在几乎所有情况下,您都无法说服那些近视疯狂的人,在我们的职业中,更长的时间几乎总是更好。抱歉,这是事实。目光短浅的人会牺牲一切,以获取现在的利益,而最终总是受苦。质量的好处,而不是短视的。

#7 楼

注意:此答案采用了一种商务沟通策略,该策略试图利用理性来确保每个人都能得到他们想要的东西。如果问题仅在于进行低质量的工程会损害您的生活意愿,或者您的老板是奴隶司机,而且似乎看不到尽头,那么实际上可能是时候换个风景了。 >
您不是在说老板的语言。您的工作之一是向老板提供信息,以便他可以做出决定,并且您需要更改信息提供策略。您说的是工程技术,他需要了解的是风险,成本,投资和回报。您还需要采取一些防御措施,并确保您对他的了解有一个良好的记录。

有两个部分:

第一个传达您的估计,以及这不是目标或计划的想法。我可以在这里写书,但是基本上可以说是麦康奈尔(McConnell)的“软件估计:揭开妖术的神秘面纱”中所有内容的副本,您应该为这本书而不是步行前往书店。注意区分估算,目标和承诺,并确保在做出任何承诺之前进行真实估算!

第二个是传达您的老板可能感兴趣的实际风险。简单来说,这意味着您需要告诉您的老板,可以在1.5天内完成的实施将满足基本要求,但会大大增加未来的风险。更改和功能所需的时间远远超过所需时间。如果他问为什么,请使用房屋建筑类比:如果您的软件是房屋,则每项更改都是新家具,而每项功能都是新楼层。如果您没有坚实的基础,并且每次做某事时都进行一些改建/翻新,那么最终您将处于需要进行重大改建以支撑新窗帘的重量和尺寸的情况,如果他们想支撑四个新楼层和一个甲板,就必须对整个房子进行重建。决定。他需要考虑将来是否会发生任何变化,以及是否要忽略这种可能性。从那里开始,如果确定要走快速而低质量的道路,请确保(巧妙地)在有关每一个沟通和文档的环节中(明智地)提醒您有关该决定的信息。发送后续电子邮件,以确认该决定和您传达的风险,并致力于撰写。记下您的规格中的工程策略和风险。

当客户想要在第50层放一个游泳池时,您会看到最后20层是用棍棒和沙子,请确保您为此估算的大笔脂肪在技术上是合理的,并准备推出低价发票的纸质记录以说明为什么要这么多。

评论


我喜欢“软件就是房子”的比喻;尽管“技术债务”的概念应该告诉业务人员这是一个负债累累的坏主意,但此示例可以直观地说明为什么快速而肮脏的黑客会产生如此复杂的效果而无需任何IT知识。

–星空列车
17年1月10日在22:04



#8 楼

如果您确实提出了所有这些论点,而他仍将其排除在外,那么作为专业人士,您有责任将此问题举报至更高的级别。是的,那意味着要超过他的头。原因很简单,就是您的老板对公司构成了危险。您的产品会很烂,您的客户会离开您。

记录下来:我假设组织的核心业务是软件开发,并且产品很重要,而不是扔掉。

评论


@Martin,您的建议只会将他解雇,这听起来像他们确实是为员工工作而不是基于产品的销售。超过老板的头将是一场政治灾难,充其量会严重损害他的工作,最糟糕的是让他被解雇。

–user7519
2011年6月28日在20:31

@Jarrod或让他升职...无论哪种方式,这都意味着成为专业开发人员。相信自己的手艺并坚定立场。高层管理人员需要知道真相。让他们决定。这是采取行动的正确原因。

–马丁·威克曼(Martin Wickman)
2011年6月28日在20:44

@Martin,阅读他的其他问题,他不会有任何积极影响,听起来不会有其他高层管理人员。

–user7519
2011-6-28在20:45



@Jarrod:嗯,这使它更容易。他在找新工作时应该微笑点头。希望他能在目前的公司失败之前找到一个。

–马丁·威克曼(Martin Wickman)
2011年6月28日20:55

@Kristof,然后您就被搞砸了。 @Martin所说的一切都是正确的;取决于专业人士来推动质量并迫使管理人员去看它,或者找到一个重视质量和工艺的地方。

–韦恩·莫利纳(Wayne Molina)
2011年6月29日14:26

#9 楼

你的老板可能是对的。我可以想到这种编码就足够了的方案。假设您为某种数据分析或肮脏的网站编写了一次性脚本,您可以在其中浏览几页并大致了解正在发生的事情。这些类型的东西不需要过度设计,因为它们不太可能得到维护。如果这是客户想要的,那客户就会得到。

现在也很可能是您的老板弄错了,客户将不会欣赏功能不佳的产品。这是最常见的情况。

也可以选择一些快乐的媒介。最主要的是,如果某件事不起作用,则需要进行更改。显然,您的老板不满意开发流程如何影响业务。上市时间与产品质量同等重要。您需要做的是确保您的团队可以在不破坏产品适销性的时间范围内生产出优质产品。如果正确使用了工程原理,则不应破坏团队的生产力。如果有的话,采用正确的做法应该可以加快开发过程并提高质量。

#10 楼

是的,我们今天可以一起破解。

如果这样做的话,它将比平均水平有更多的错误,并且将严重挫伤未来的发展。一起破解这些实际上是我们可以做的一两次。可以将它想象为刮板机,我们可能已经有一个不错的地基,并且我们也有10层楼也很不错,如果您愿意的话,我们可以快速将一些帐篷和盒子拍打到11层,甚至可以建造帐篷和箱子外面是12楼,但您不知道该怎么做。我们必须将每个人都移出这两层楼,对其进行设置,重新培训所有内容,然后重新构建它,直到到达13层。

如果我们尝试用盒子和帐篷建造13层楼,我们可能会在任意时间塌陷3层楼,而要获得积木和超粘duplo可能要花费我们几个月在正确的位置。

您可以接受吗?

#11 楼

W. Edwards Deming's以其在第二次世界大战后重建日本制造业的工作而闻名。人们经常忽视他的工作实际上更多是关于管理而不是制造业。实际上,他的《摆脱危机》一书的主要部分是关于提高服务组织的质量。他的服务组织的例子包括软件,银行,保险和教堂。

您可以将软件开发作为业务流程进行分析。像制造业一样,它生产有意,无意,直接和间接的产品。

有意制造和编程的直接产品包括水龙头和源代码。有意间接产品包括债务和收入。

制造过程中的意外产品包括具有制造缺陷,意外起火,受伤,人员流动率高和员工失窃的水龙头。编程过程的意外产品包括错误,维护困难,可伸缩性困难,安全性问题,人员流动率高和员工失窃。

这些“产品”中的每一个都需要进行变化,统计分析和流程改进。

就您而言,您可能需要枚举和量化软件开发和项目管理流程中的意外产品。

戴明是日本成为制造业世界大国的主要原因之一。戴明奖以他的名字命名。

评论


编程不是制造业。编程是设计。

–kevin cline
2011年6月29日13:41

您可以在头脑中进行出色的设计。质量需要设计和执行。 (戴明可能会添加“以及统计测试和改进”。)

– Mike Sherrill的“猫召回”
2011年6月29日13:57

编写代码也是设计。计算机执行执行。

–kevin cline
2011年6月29日18:31

计算机执行机器代码。程序员通过将想法简化为源代码来执行设计。 Deming工作中的开创性思想之一是,应用于质量改进的统计分析远不止制造领域。 (他在该国的大部分工作是在美国人口普查局进行的。他在保险业中举的一个例子将一个业务与其他更传统的产品一起归因于意外火灾,其发生次数与其他质量指标)。

– Mike Sherrill的“猫召回”
2011年6月30日9:23

有些程序员的生产力比其他程序员高10倍,而且这种差异无法通过培训来减少。生产率的这些差异是制造过程的对立面。

–kevin cline
2011年7月2日在7:06

#12 楼

这似乎很明显,但我认为您需要找到一条中间路。不要轻视老板的态度。您对他的看法可能与他对您一样陌生。

这两种极端情况显然都不适合任何人,因此请尝试谈判达成中间立场。

评论


我可能应该提到它,但是目前我们处于中间立场。 :-)我们的代码质量不好。他想让情况变得更糟。我提到了DRY和SOLID。好吧,那是我在工作中谈论的话题,因为我们不遵循这些原则。但是老板想进一步降低质量。

–克里斯托夫·克莱斯(Kristof Claes)
2011年6月28日在18:30

@克里斯托夫:嗯,你已经表达了自己的担忧,但最终他是老板。听起来他了解您的意思,但他不同意您的建议是一个好的商业决策。所以...是的,这就是您所能做的。

– Ed S.
2011年6月28日19:02

@Kristof:也许他担心您会以SOLID的名义过度设计,这是可以理解的。您提到了DRY,但是您向他解释了YAGNI吗?关注YAGNI可帮助您避免过度设计和复杂性。

–马丁·威克曼(Martin Wickman)
11年6月29日在7:28

@Martin:可能的,即使我没有向老板提起SOLID。我只是和我的开发人员讨论过。在这一点上,我们的工作还不是固态,也不是很干。并不是老板要保持现状(“不要介绍SOLID”),而是要降低当前质量。我完全可以理解,这对于这里和那里的一些小项目是有意义的。但是,我们正在转向产品开发,就此而言,我不同意他的看法。

–克里斯托夫·克莱斯(Kristof Claes)
2011年6月29日7:43



@Kristof:对于与非技术人员的讨论,请使用技术债务,DRY和YAGNI作为论点。 SOLID对他们来说太难了。无论如何,您可能想通过开发产品这一事实来更新您的问题。就目前情况而言,它并不明显。

–马丁·威克曼(Martin Wickman)
11年6月29日在8:32

#13 楼

我认为这不可能。不同的公司具有不同的文化,如果您当前公司的文化(快速而肮脏)不适合您,那么我认为您应该继续前进。其他一些公司则持相反的观点,在那里您将与持相同观点的人一起工作。

我真的不想参加讨论哪种文化更好的讨论(请参阅其他职位,如果您有兴趣的话),我想说的是,如果您以相同的方式在公司工作,这将对您的心理健康有益。

#14 楼

我已经解决了所有问题,发现没有人进入安全性的观点...

是的,其他人提到调试时间,但是在这种情况下,调试只能达到“嘿,终于可以了作品”

在我的项目(无论大小)中,我都高度关注漏洞利用和可能的安全漏洞。花费相当多的时间,但至少这样,他们不会指责我在事情变坏时没有尽我所能。忘记清理一些变量,忘记在函数中进行一些检查,从而使您的项目成为黑客的起点。我内置的安全性和功能检查,以防止注入,包含,无限循环,甚至是某些东西被黑客入侵时的安全措施微小的损害

#15 楼

我处于与您类似的情况。我在一家服务公司工作,所以我为不同的客户编写自定义应用程序。负责交付应用程序的人员(例如项目经理,项目主管等)实际上并不关心代码质量(尽管他们说的确如此),他们关心的只是按时交付东西,以便他们可以最大程度地提高代码质量。利润。我经常被要求在短时间内编写功能。

我用来在截止日期之前保持代码质量的一种技术是连续重构。如果要求我在1天之内编写功能A,实际上要花3到5天才能完成高质量的写作,那么我将快速而又肮脏地交付。但是,在进行快速而又肮脏的方式时,我会在需要/应该改进的地方做笔记。然后在开发周期的晚些时候,我会在功能区A中到处发现一些时间片段,以便重构我的代码。我记得在重构过程中几乎完全重写某个功能的几个实例。但是随着我进行越来越多的重构,我快速而肮脏的代码开始变得不那么肮脏了。我开始发展更好的自然模块化设计意识,因此即使我处于快速和肮脏的模式下,编写的代码也变得越来越模块化。

认为代码质量无关紧要是没有错的,因为对于很多人来说,它实际上并不重要。就像您是否真的在乎SONY电视中的电路设计质量,只要它能显示出色的高清图片并能在5到10年内正常工作?

作为开发人员,您应该真正关心代码质量,因为您知道它的好处。您的老板不太可能改变对代码质量的看法,除非他遇到了一些危机,这些危机使代码质量节省了工作,或者当他亲自看到利润与代码质量之间的相关性时。

仅仅因为老板缺乏代码质量知识,并不意味着您应该牺牲代码质量(但是,保持与老板之间关于代码质量的沟通渠道仍然是一个好主意)。力求在代码质量和开发进度之间找到平衡点。您不能为当前的时间表编写高质量的代码,并不表示您无法在将来的时间表中提高质量,对吗?

#16 楼

快速而肮脏的事情即使在午餐之前也会使您慢下来。很多时候,即使您没有足够的功能来尝试使之被客户接受,它也会开始受到伤害。某个点后的收入。

引导重写也是您的客户尝试其他开发公司的机会(如果我们从头开始,他们也可能会如此)。
如果您所在地区没有其他雇主,那么可能会有更多的顾客感到疲倦。因此,基本上,您的老板可以继续做自己在做的事情,没有竞争对手能做得更好。也许自己创业? ;-)

或者,您可以告诉他您总是做“快而肮脏”的事情,而自己做自己的事情。

评论


我认为这是一个未被重视的观点。在许多情况下,我发现快速和肮脏开始损害了我在几小时而不是几周或几个月内完成工作的能力。

– PeterAllenWebb
13年6月18日在1:29

#17 楼

把数学扔给他。不幸的是,我没有手头的书来提供引用(希望有人可以帮助我),但是The Pragmatic Programmer和Code Complete 2中有一个或两个都引用了一部分研究,这些研究表明了快速做事的成本影响'n'肮脏的方式,而不是花时间去修复它。其他张贴者提供了很多要点论点,但根据您老板的举止,他可能会做出更好的回应以支持现有研究的支持。他可能认为您只是忙于缓冲时间和减轻自己的工作量。向他表明这是行业公认的事实,而不只是您的意见,可能就是门票。

评论


如果按小时支付顾问的薪水,那么花费更长的时间就意味着更多的利润。而且,“肮脏”的代码更有可能具有一堆半起作用的功能,以便能够证明进度并保持合同的进行。生活的不幸事实。

– Ben Voigt
2011年6月29日,0:30

#18 楼

我有一种强烈的感觉,在这种情况下您无话可说。但是我要提出几点:

修复问题需要更长的时间

当您复制并粘贴所有代码时,如果发现该代码中的错误,修复将需要更长的时间,并且测试将需要更长的时间。因此,您将在支持阶段浪费更多的时间(因为我猜您没有以“把它弄出来”的心态进行集成测试的阶段)。

添加新功能需要更长的时间

在意大利面条代码中添加新功能要花费更长的时间。而且由于它是复制和粘贴混乱,因此您必须在许多地方调整代码。反过来,这会在各个地方产生错误或意外的功能。因此,在支持阶段您将不得不浪费额外的时间。

为新客户添加UI元素和术语需要更长的时间

公司我现在正在工作,他们的Web客户端开始是复制和粘贴意大利面条代码。在我开始之前,花了2周的时间为新客户设置Web客户端的外观。

经过了几个漫长的夜晚,现在需要一个下午。我仍在工作并对其进行调整,以节省时间。


如果您的老板想要制造一种易于销售的产品来吸引不同的客户,他需要投入时间,以确保您不会浪费时间在产品上结皮。可能会向他们出售新功能。

很难,但是您需要让老板明白,除非您现在花一些时间来确保它做对了,否则您将在此浪费更多的时间。未来的错误,实际上将需要更长的时间才能为将来的新客户准备产品。

他只关心底线,因此您需要让他明白以这种方式编码不会帮助它,只会阻碍它。

评论


您无需考虑所有为客户付费和获利的浪费时间,在这种情况下,这些论点都不会成立,因为它们都不会对公司的获利能力产生负面影响。

–user7519
11年6月28日在18:57

@Jarrod Roberson-也许这不会在短期内影响他们扭亏为盈,但从长远来看,它将帮助他们扭亏为盈。如果您需要花一周的时间来修复需要花一天时间才能提供给他们的功能上的错误,那么您的客户会成为您的客户吗?在我看来,以长期获利为代价的短期投资对我来说似乎不是一个好的商业模式。

–蒂安娜
2011年6月28日19:15

听起来好像他们在他的地理区域中没有太多竞争,因为他的工作稀缺,所以他们很可能被认为是唯一一家从事其工作的供应商。听起来他们只是做出租工作,而不是卖产品,完全不同的业务。

–user7519
2011-6-28在20:24



#19 楼

最好的答案可能是从敏捷方法开始:

早发布,经常发布

早发布对您的公司有好处,因为您早开始得到报酬。第一个发行点是您的产品具有足够的功能,以便至少可以在某些方面使用。因此,它增加了客户公司的价值。这就是为什么按模块开发模块很聪明。

发行版通常对您的客户有好处,因为他们会尽快获得所需的东西。我故意不写欲望,因为最终结果经常与开始时的想法有所不同。产品逐步。

#20 楼

我发现的一件事是,干净的代码库可以轻松解决问题。如果您有针对不同人员定制的核心CMS,则核心中的任何问题都会困扰您。但是,经过测试不良,做得不好的针对特定客户的插件可以轻松解决。

在您的情况下,听起来好像您还没有构建干净的核心,因此您很费劲。尽管如此,您还是应该花一些时间来改善您的核心代码库,这应该使您的现有客户受益并加速未来的开发。

#21 楼

我想简而言之。


如果代码要长期维护,则代码质量是个问题。
对于原型代码而言,这并不是什么大问题。通常人们会丢弃这样的代码。
程序员的代码质量是通过实践来实现的。作为获得经验的方式,我们将获得良好的速度Vs。质量比。我见过曾经问过“给我三天时间来更新编码标准”的程序员。这完全是狗屎。为什么他们在编写代码本身时要小心?一旦测试完成,并且要进行标准更新,可能会导致问题。
即使我们没有正式设计某些东西,在编写代码之前,我们也会考虑某种设计。在这种情况下,质量取决于开发人员的想法。
经理们臭名昭著的日程安排,工作量和预算。如果您可以在给定的范围内做某事,请同意。否则,请告诉他在给定期间内您可以做什么。或提供有关可能为特定问题做出良好贡献的人员的建议


#22 楼

告诉他,他可以省钱。
罗杰·普雷斯曼(Roger Pressman)写道,您花费20%的钱来开发软件,而80%的钱用于维护软件。失去合同,去做,但是要在另一个分支。之后,以正确的方式再次执行。

#23 楼

如何获得两全其美?使用软件工厂。将精力花在创建可以重复做的事情上的工具上。例如,看看Ruby on Rails,或者如果您是.NET人士,请查看ASP.NET MVC与称为MVCScaffolding的nuget软件包结合使用。我目前正在研究此工具并对其进行自定义,以生成我的工作流程所需的东西。生成简单的,由数据库支持的CRUD网站就像使用Scaffold控制器一样简单。现在,我可以花时间定制UI并完善驱动应用程序的业务逻辑。

如前所述,您可以定制工具(例如,我更改了默认控制器模板以在内部的IRepository / IUnitOfWork实用程序,使我可以轻松地在EF和InMemory数据存储之间进行切换以进行测试)。在大多数情况下,我的大部分开发工作都花在完善对象模型上,以支持业务使用场景。

#24 楼

LIE:当您的老板询问“快速而肮脏”的速度时,请告诉他“那是快速而肮脏的估计”。这种方法的最终缺陷是,您正在与商人交谈。不管您要承担多少推理,如果您甚至建议有更快的选择,他都会在99%的时间内采用该选择。老板喜欢从空中挑出任意数字来支持销售,然后开发团队吸收加班和低薪的损失。客户对愚昧无知的期望不切实际,坏老板也很乐意接受。

谁在赚钱?这个过程对您的长期职业有什么影响?它会使工作贬值,并最终使您的技能价值降低。即使您是短期承包商,也请考虑降低合理工作成本对行业的长期影响。和肮脏”是不可能的。如果客户要求某个功能,则该功能需要花费基本时间才能完成并达到合理的标准。不要为合理的实现提供时间。

评论


如果可以的话,我会拒绝投票。撇开道德信念,误导和破坏老板,可能会使您的长期职业面临比遵循无脑的计划更大的风险。

–史蒂夫S
2011年6月30日14:02

将OP置于此位置的原因是,老板误导客户期望在此时间范围内无法交付某些东西。最终的结果是一种文化,代码便宜,我们所有人都随着时间的流逝而讨厌自己的工作,这对我的长期职业而言意义重大。

– sunwukung
2011年6月30日14:24

#25 楼

我会向您的老板介绍LulzSec。他们可能希望与众不同,Web应用程序中的代码质量并不重要...