可能的重复:早期阶段的原型设计与清理代码坦率地说,您是否更喜欢Cowboy编码?





在多家公司工作之后,我开始意识到我对编写高质量,经过良好测试的软件的承诺并不一定会导致职业发展,特别是当具有非技术背景的经理们看不到可维护代码的好处时,他们更喜欢具有高生产率的开发人员,同时又积mountains了很多技术债务。

那就是说我倾向于坚持写得很好的代码,因为我发现它本质上是有回报的-当您知道自己做得很好时,即使您知道自己不会得到称赞,也会有种感觉

在某种程度上,我可以通过采用不同的技术和方法来缩小生产力差距,同时仍然编写简洁的代码-解决方案包括动态语言,多语言编程和配置约定。

但我的困境仍然存在-手艺能奏效吗?

评论

多半是对的。但是正如您所说的那样,高层人士对结果的关注远胜于可维护性。当您开始在使用敏捷开发方法的公司中工作时,如果有对等代码审查等,那么工艺就开始得到回报。那时,管理人员可以在“有效”区域之外查看。

对于职业发展而言,这并不能像与老板进行抽奖那样多。但是出于您的理智,当您必须维护代码时,它确实有回报

精湛的工艺使我不必购买耻辱窗帘。

有时可以从沃尔玛购买可以使用一年的塑料家具,而有时您又想从斯蒂克利购买上一代的家具。

当您正在寻找新工作时...与您合作过的每个开发人员都必须使用您的代码,因此可能会很高兴为您提供良好的参考...在我的书中这是很大的收获。 br />

#1 楼

以我的经验,答案是不可以。我失去了很多工作,因为我想在草率的黑客技术上树立精湛的手工艺文化,在写为面向对象的过程代码上树立设计模式,而在过时的遗留技术上拥护新技术。请注意,我不后悔这些选择,但现实是,我们的开发人员中很少有人了解或关心手工艺。我敢说,我们中有更多人对“正确”的软件编写方式不太在乎,甚至完全不知道有比他们多年来做的更好的方法。当然,我会尝试以技巧为基础编写自己的代码,但这在很大程度上是徒劳的,并且通常当您没有遵循技巧的代码时,尝试添加一点点都是痛苦的。即使是我一直从事的工作,我也只能进行一些小错误修复,而不是从事新的工作(因为我被分配到新的开发工作中,所以我会尝试介绍我的“激进的想法”,即工艺),最终变得烦躁/无聊,并寻找另一家公司,希望找到一家懂手工艺的公司。

我看着并羡慕那些进入环境的人,因为他们并不是唯一了解软件技巧,SOLID原则或ORMS / IoC / SOC /等的人,因为他们不必打苦战试图告诉人们,不,将所有功能都集中在一个可能也是VB6模块的巨大类中是不好的;拥有一个可以连续运行一千行的代码文件是很糟糕的。将所有逻辑放在按钮的事件处理程序中是很糟糕的。他们不必冒被解雇的风险,因为您一直在努力教育您的团队有关新的更好的做事方式。改善代码库的寿命和可维护性的方法,只能让您感到困惑或被解雇,因为您是唯一知道为什么这是一件好事的人,或者您是唯一订阅技术博客/的人播客,以提高自己。

在从事软件开发工作的六年中,我实际上只有六家左右在乎工艺的公司中有一份工作。每个其他地方都不知道甚至不了解收益-试图向团队中的其他人解释事情时得到了这个奇怪的“哇...?”看起来,好像他们听不懂我说的话。两家公司宁愿保留那些没有改善任何东西的懒散的开发人员,甚至拒绝知道任何新事物的通过,而不是鼓励采用能够促进长期维护的适当开发技术,相反,他们全都愿意牺牲长期的精力,短期的。每一次。

总结:只有整个团队都拥护手工艺,工艺才能获得回报。如果一个人拥护手工艺,而其他人却不知道这意味着什么,那它根本就没有回报,可能会伤害您。

ADDENDUM

只是为了证明我的观点,我在2011年6月写了这篇文章。正是出于以下原因,我被放任了我在12年7月工作的一家公司的开发人员:在那13个月的时间里,我一直在努力推动我们倾向于使用某种技巧,而不是乱砍一些难以维护的废话(举个例子,我们试图将内部CRM软件出售给其他公司,当时它几乎无法支持我们内部拥有的70多个左右的用户,因此必须重新启动每天因崩溃而发生几次)。一位“高级”开发人员挫败了我的每一步努力,尽管亲自告诉我质量是目标,但非技术CTO总是站在他身边,最终导致我被带入会议室。首席技术官和人力资源经理被告知,我的开发技能不是“我的强项”,并且公司希望朝着与我试图推动的方向不同的方向发展(例如,具有诸如代码审查和代码约定之类的环境)和工艺),不再需要我的服务。

我花了将近5个月的时间找到了另一份工作,而这份工作除了SQL之外根本没有任何发展。我整天都在使用专有应用程序,而我再次进行开发的意愿和愿望几乎消失了,因为我一直都厌倦了上述情况。最近,我接受了两次面试,之后就不再考虑我的职位了(旧的“我们已经和另一位候选人一起去”了),因为我认为,公司认为我不会接受“他们的愿景”软件”在很大程度上是我对遵循良好的设计原则并坚持软件工艺的热情。

因此,重申一下我两年前所说的话:在大多数情况下,至少从我的经验来看,如果没有其他人对此表示谴责,那么手工艺将使您被解雇或被取消雇用资格,而大多数公司都不会对此予以谴责。它;大多数公司甚至都不知道它是什么。每当我提到好的设计或诸如ORM或SOLID原理之类的东西时,我就经常看到茫然的目光,这种下沉的感觉是我开枪打死了自己,因为面试我的那个人为零弄清楚这些东西是什么。可悲的是,这种下沉的感觉每次都被证明是正确的。

评论


+!对于“整个团队”

– Sean McMillan
2011年6月7日15:58

也许吧,但是如果团队具有任何真正的能力和知识,那么这些变化中的大多数应该首先放在适当的位置。很抱歉,但是我从未见过选择错误的方法胜过正确的方法的情况。如果代码库已经以这种方式完成,那么这是一个需要识别和解决的严重问题,而不仅仅是忽略。可悲的是,我似乎是唯一认识到这些问题的人。

–韦恩·莫利纳(Wayne Molina)
2011年6月8日12:06



好的,我可以同意。但是您是否会同意大多数情况下最好从一开始就这样做,并且从一开始就正确地完成了“代码库的核心体系结构部分”?这是我遇到的主要问题-我通常是整个团队(甚至不是整个公司)中唯一的人,甚至首先知道正确的软件工程概念!

–韦恩·莫利纳(Wayne Molina)
2011年6月8日在12:47

阅读此书并意识到它适用于他们后,还有其他人陷入轻度抑郁吗?

–麦克·韦勒
2012年2月9日在12:51

从来没有那种经验。恰恰相反。也许您自己有问题,或者您在选择公司时遇到了不幸。我的手工艺在任何地方都受到欢迎。因为我的编码既快又好。但是,如果我继承了一个已经被维护到死的应用程序的混乱局面,我只是说他妈的,而不关心工艺,而是专注于其他事情,例如客户法规等。事实是,我什至有一个老板他告诉我:“好,代码越差,维护成本就越高……这对我们有好处!”我不喜欢他

–猎鹰
2013年9月9日15:10



#2 楼

以下是一些需要考虑的数字:在2000年,研究发现,软件系统总成本的90%都用于维护和发展。总体而言,研究发现,软件系统的成本至少有50%用于维护。
仅在美国,每年的维护成本就接近700亿美元。

从项目开始到系统达到使用寿命,都遵循良好的工程原理,可以减少这些数字,这对您组织的底线有利。这里有很多方面,从为将来的开发人员提供有效的技术文档,到交付编写良好的代码和测试。您可能会花一些额外的时间来使它变得更好,但是它将在以后的维护阶段中得到回报。

评论


很好的答案,但是错过了船。显然,对于非技术性的典型业务经理而言,以上都不重要,因为他们的重点不是长期节省成本,而是短期产出。伤心,但事实。

–wolfgangsz
2011年6月7日15:17

有些公司可以相信代码异味的影响,而有些公司则无法相信它,更不用说关心了。尽力找到前者-他们在那里。

– HedgeMage
2011年6月7日在16:33

对此采取的另一个有趣观点是,代码欠佳而引入的技术债务的确会引起利息-并以管理者的眼光将美元观点作为快速,高利率解决方案的选择,或者花费您的时间甚至不承担债务。

–阻止
2011年6月7日在16:58

@Thomas Owens看一下codequeeze.com/…,事实证明它具有更多的上下文。这种观点提供了一种在技术方面和金钱方面之间“转换”的好方法,并允许开发人员以更好的方式在时间和金钱类型决策之间向管理层提供输入。

–阻止
2011年6月7日在21:11

不幸的是,链接腐烂:-(

– EBarr
2014年3月19日在22:04

#3 楼

手艺能赚钱吗?确实可以,但是您需要将其带入一个新的高度。

创建自己的公司并提供一种能打败竞争对手的产品。然后,您将与自己的客户一起获得所有良好工作的结果。

在大多数受雇的工作中,人们努力争取认可,却找不到。在许多情况下,当这种认识到来时,它就发生了,但是当此人已经移至下一个地方时,它就会出现。然后,您会被记住的话语很好,但是会事后验尸。

评论


我很乐意,但是在我的领域(医学领域)有如此多的法规,认证,审计等,因此在单笔交易实现之前,已经吞没了数百万笔……根本买不起!

– Newtopian
2011年6月8日19:06

@Newtopian:那么该改变行业了吗?

–user8685
2011年6月8日在20:26

是的,总是有可能的,但是由于我并不精通政治领域来游说法规改革,所以我认为改变领域并征服另一个领域会更容易!

– Newtopian
2011年6月9日下午13:57

#4 楼

以我的经验,当大多数程序员谈论“工艺”时,通常是指通常经过预先设计以处理未来功能的过度设计的代码。 “足够好”的概念经常与低质量混淆,并被认为与“工艺”相反。代码来完成应有的工作,并且比草率的程序更容易,更快地编写和测试。巧妙的技巧和对未来的规划可能会永远浪费工匠的时间,并使他比草率的程序员慢。

评论


+1代表“足够好”和“低质量”之间的区别。工程过度是菜鸟的错误。优秀的(IMHO)高级开发人员往往会尽量减少代码量,因为您拥有的越多,重构的成本就越高,尤其是在您没有从IDE中获得太多帮助的情况下。我认为“工艺”一词意味着对代码的不断完善,将所有过度设计都剔除掉,直到足够好为止。

–扭曲
2015年9月4日在9:46

我完全同意这种说法。我已经看到太多的Java开发人员到处都束缚着设计模式,并且得到了一些简单的东西,用10条线就可以完成,花费的时间是原来的6倍,特别是最令人恼火的是-对于新员工来说很难理解

–阿尔瓦罗
18年7月10日在23:16

#5 楼

这是我的团队曾经做过的选择。我工作的公司每年营业额超过1000万。我加入的部门每月损失50万美元,而该业务的资金来自老板之家的担保。

选择1.最佳实践。整个.....将使所有者破产。

选择2. 10周内进行大型贸易展览。 8位开发人员,战争模式。没有设计,没有文档,没有测试。所有者在3年后卖出并向他的个人银行帐户中注入了5000万,该部门的营业额超过2亿。 (那真是令人兴奋的旅程)

无论采用哪种软件标准,这些代码都直言不讳,胡乱记录,没有文档记录,无法维护且难以理解。然而,它是可靠的(甚至令我惊讶)。
按照任何业务标准,该代码都是无可非议的。

迄今为止,我职业生涯的重头戏是:“编写糟糕的代码使很多人感到自豪,并为此感到自豪,因为我做到了完全是我得到的报酬。”

(我在这里扮演恶魔拥护者):
太多的软件开发人员忘记了谁付账单以及付给他们什么并以“技巧”和“最佳实践”作为过度工程师的借口。

我所看到的BP的每一个支持者都是a)供应商,或b)学术人员。您很少看到有关BP的会计师观点,也很少看到包括BP收益在内的完整成本分析,包括资本成本,时间成本,机会成本等。

评论


您忘记了一个宝贵的观点:最佳实践现在可能并不是100%合理的业务决策,但后来却是100%合理的业务决策,因为它可以确保代码可以生存并且在将来不会被大量维护。应丢弃并从头重写的垃圾。但是,您还说明了现代企业的一个基本问题:他们疯狂地短视,不关心长期的解决方案,只关心短期的解决方案。

–韦恩·莫利纳(Wayne Molina)
2011年6月8日在13:01

您是否希望您的“贸易展览会”代码能够存在数十年?如果没有,那么维护费用差额将不适用。

–user1249
2011年6月8日19:21

我绝对不会忘记“一个宝贵的观点”,我认为在大多数情况下“工艺不赚钱”。软件工程师的问题在于工艺是“过度工程”的同义词。真正的手艺不仅是完美,而且使总成本降到最低,而且每次都按时支付每周账单。

–mattnz
2011年6月8日在21:18

正如其他人在某处所说的“运输是一项功能”。

–TecBrat
2014年4月9日在17:53

阅读此评论令我百感交集。一方面,结果很棒,所以很难与之争论。最重要的是,我们的所有最佳实践都使我们难以为继。但是,您的经验是轶事,并且存在确认偏差。我们不知道有多少公司为支持以战争模式编写的代码而导致其退出业务的成本越来越高。

–维克多·罗宁(Victor Ronin)
16 Mar 27 '16 at 2:26

#6 楼

当您处于维护模式时,而不是试图将新产品快速推向市场,就可以得到精湛的工艺。

由于许多产品从未达到该阶段,或者如果执行了维护合同,则授予与最初创建公司的公司不同,您可能永远不会直接获得自己的工艺优势,但是其他人可能会记得自己的名字是在一个特别丑陋的结构上,如果他们在多年后的工作面试中遇到您并持有它反对你。

评论


+1识别名字!如果您像我一样生活在一个较小的城市中,则尤其如此。如果您打算长期在较小的城市定居,您可能会在职业生涯的某个时候再次与某些人一起工作,因为该地区的大型雇主数量有限。在一个地方,一个名字在我和我的同龄人中声名狼藉,那个曾经在公司工作的人写了传说中的15级嵌套循环。在我职业生涯的后期,他的履历来到了我的收件箱,我立即认出了他并把它扔了。

– Maple_shaft♦
2011年6月7日在11:17

我不知道您从哪里得到很多产品从未达到那个阶段的想法。仅在美国,每年用于维护的费用就超过700亿美元。所维护的源代码行数接近3000亿。在维护阶段有很多项目。

–托马斯·欧文斯♦
2011年6月7日在11:37

@托马斯·欧文斯。这些统计数据很可能不包括初创项目和无法生存的公司。

– StuperUser
2011年6月7日14:30



尽管可能永远无法达到维护模式,但是如果您做到了这一点并且至少没有合适的代码,那么将代码拖出那个坑是一个漫长而艰巨的过程。

–阻止
2011年6月7日在16:54

@Thomas:这只是说明整个部门的规模。但是,大多数产品从来没有见过。放弃了项目,更换了产品而不是进行维护,等等。但是总安装量如此之大,以至于仍有大量维护工作的余地(想想今天所有仍在使用的20至30年的大型机系统仍在运行,其中许多都有大型昂贵的团队专门负责维护工作)。

– jwenting
2011年6月8日下午5:29

#7 楼

我将同意一些答案,但略有不同意。我喜欢@Thomas Owens链接到维护方面的数字数据。它的确使您知道需要多少维护,以及一点点的手艺就能节省多少时间/金钱。

好几个人都说手工艺会在以后获得回报,但要等到以后再见。它肯定会在以后得到回报。您要么自己维护好代码,节省时间/金钱,要么将代码传递给其他人,他们每次看到您的代码时都会发出温暖的,模糊的,心形的幸福念头,并知道保持代码的容易程度。

有些人说它现在还没有还清。我非常不同意这个说法。我曾在多个环境中进行快速变更。在某些情况下(引用电影),“它会在两口之间抓住您”。如果您在坚实的框架中拥有精心设计的,易读的,结构化的代码,那么这些更改来时,它们将更易于处理。我个人发现,对于任何项目而言,具有良好的骨干结构都有助于减轻需求变化,这是因为业务优柔寡断或客户的需求迅速发展。

基于同样的道理,我最近目睹了一个同事的情况,他的项目没有很好的骨干,并且定期编写可悲的,无法维护的代码。当对他的要求发生变化时,他被迫将大部分工作“重新推向公式”,并从头开始。

#8 楼

简短的回答-

在大型组织中-很有可能不会。

在小型组织中,或者如果您单打独斗(提供产品或服务的手工艺)-很有可能。

#9 楼

工艺确实可以带来回报,但要等到很久以后。

问题在于,大多数与IT相关的组织都还很年轻,并且还没有时间意识到不管示波器软件预期寿命很长,它需要很好地构建,以便在需要更改时能够正确地执行此操作,而不会产生可观的费用。

这意味着您需要在已经实现这种认识并相应调整工作方式的组织中找到工作。如果没有,您的努力将不被赞赏,这是非常不令人满意的。

评论


确实不尽人意。而且,对于那些编写草率代码的项目,管理人员倾向于比为维护草率代码的人员支付更高的薪水。

– Bernard Dy
2011年6月7日在11:57

手工艺确实有回报,但直到很晚才出现。 -这是一个很大的假设,这个行业的发展会更晚。

–mattnz
2011年6月8日在21:11

@mattnz,用于非Microsoft / Apple平台的代码往往可以使用数十年。

–user1249
2011年6月8日在21:51

#10 楼

当您的软件中发现错误时,您是否感到羞耻?

是否要一直返回到旧项目中以修复错误而不是在当前项目上工作?

您是否希望未来的开发人员重写您的代码,而不是修复错误?

随着时间的推移,大多数管理人员都会看到优秀的开发人员是谁。这些开发人员往往会获得更引人注目的项目,并且通常还会获得更有趣的项目。职业晋升往往更多地是关于专业发展,而不是实际完成的工作。如果您想获得职业发展的证明,那就去商务舱,寻找机会参与正常范围之外的项目。当您完成工作时,就会获得薪水奖励。当你超越时,你开始看到进步。

#11 楼

这与成为一名工匠的技巧无关,而与成为一名工匠有关。莱昂纳多会问自己,用油画问题是否值得?专业的木匠会问自己是否真的需要仔细打磨他正在制作的家具的每个部分?

不,我们是工匠,这就是我们的工作。做不同的事情会违背我们的本性,当您开始走“需要最小的努力”的道路时,您就会对工作和不断改进的动力感到骄傲。

话虽这么说,您必须考虑一些实际的事情,但决不要做任何让您感到羞耻的向他人展示的事情。

评论


“一位专业的木匠会问自己,他是否真的需要仔细打磨他正在制作的家具的每个部分?”他会。您不应该仅仅因为我们所做的而做事。

–JoãoPortela
2011年6月7日15:33

这个答案有效地突出了可怕的“手工艺”类比的谬误。对于画家或木匠,工艺是产品。对于开发人员而言,代码不是产品,而是针对机器的一组指令,用于指定如何构建产品。这种间接的级别是至关重要的和醒目的区别。除了其他开发人员,没有人会看到您所谓的工艺。除非您在谈论UI,文档等,否则问题似乎真的集中在代码上。

– Aaronaught
2011年6月7日在21:13

从消费者的角度来看,代码可能不是“产品”,但这并不意味着编程不是工艺而是工程,代码是具有固有美感和概念完整性等特性的工件。很明显,在大多数情况下,更多的程序员并不等于更好和更快的代码,但是与10名画家无法做出更好的绘画类似。工程类比是一个谬论,对待程序员像砌砖工是大多数项目失败的原因之一。

–洪德
2011年6月8日下午0:53

我不知道你在做什么。工程设计还具有概念上的完整性。软件是工程技术,其显着区别在于较低的进入门槛和令人恐惧的自恋。大多数像这样说话的人从来没有任何经验,甚至从未接触过工程。我敢肯定,对于许多程序员来说,将自己比作艺术家是很感动的,但是面对事实,代码不是很性感,也不是很漂亮。可能是干净,可维护,井井有条,甚至出色的-但不是艺术。

– Aaronaught
2011年6月8日在1:52

代码是否是“艺术”当然可以讨论,但IMO是一种技术。编码是“艺术性的”,因为它需要更高程度的右脑思维。总是很难画出良好的类比,但我想说的区别类似于建造者和建筑师之间的区别。建筑师需要考虑人的价值,审美等。建设者需要遵循一个蓝图。代码可以像雕像或绘画一样具有固有的“真实性”。抱歉,如果这一切听起来有些崇高,我当然不认为自己是艺术家,但我也不是工程师。

–洪德
2011年6月8日在3:02



#12 楼

一些公司靠吸引客户进行多年维护来维持生计,因此,他们的利益是交付几乎无法满足最低要求的快速1.0产品,并且需要很长时间来维护它。

此外,这样做更容易类型的吸血鬼可以证明维护成本的合理性是:与演示脚本不同的是,第一次交互发生故障时,一切正常时,情况却并非如此。

也许这就是您最终进入的公司类型,因此,企业文化不会确实鼓励手工艺。

#13 楼


手艺能赚钱吗?


是的,但不能平等地回报所有人。


能赚钱适用于对代码承担最终责任的首席开发人员或
开发经理

为必须对其进行更改的开发人员
有所作为
代码库的范围很窄。
当开发需要进行或更改或发布错误修复程序时,它会为业务带来回报。必须严格遵守最后期限的开发人员,经理或业务。


两条评论:


开发人员,您应该大力支持“工艺”路径,因为总是会要求您修改和支持代码。
选择下一份工作时,请尝试确定工作环境是否支持“工艺”路径。 />
如果不这样做,那么您应该获得因黑客入侵而不可避免地带来的麻烦的补偿代码。




#14 楼

作为从事运输产品的软件工程师,您对公司有以下贡献:


使公司的收入超过今年的支出。
使公司的收入更多比明年要花更多的钱。

快速编写代码是您实现第一个目标的方法。可持续地编写代码是您实现第二目标的方法。您和您的业务代表(代表业务利益的管理人员)必须协作以优先完成工作。

我的经验是代码永不消亡,编写注释良好且模块化的代码会及时获得回报很快

#15 楼

我将假定开发人员能够编写良好的代码,因此可以在编写可维护的代码与不编写可维护的代码之间进行选择。

您的期限紧迫吗?

是的-就完成吧。您不想成为拖延发布的人。

如果不是:您是一个自私的还是以自我为中心的人?

不-编写好的代码,这很好

如果是的话:您是否正在进行代码审查的情况下?

是-然后编写可维护的代码,否则编写同行的代码老板认为您的工作质量很差。

不,这取决于您,但是解决方案越快,您必须花更多的时间做其他事情。

如果否,那么您是在维护自己编写的代码的人吗?

是的-编写糟糕的代码。然后,您就有机会修复它,看起来像个英雄。人们会很高兴,因为您可以在一段时间内让他们的生活更轻松。如果您一次完成所有操作,那么他们可能会忘记您。这将增加您获得奖金和晋升的机会。

如果否,那么您将与维护人员一起工作,还是在同一部门工作??

是的-可能最好写好的代码,因为它们会成为您工作的称赞之源,或者以最糟糕的沉默。

否-编写您的代码并继续前进。不管有多严重,其他人都可以修复它。

#16 楼

更好的回报是商人。最重要的是完成工作。用户不在乎不会影响用户体验的技术细节。

编写代码时,有时候艺术家比手工艺人更好。工匠只是按照书中的描述去做,而艺术家只是坐下来并发明解决问题的方法。

还要注意,“按需办事”的做法通常是编写要求保持较高的技术水平。当公司以“廉价劳动力”为基础时,由优秀(因此价格昂贵)的程序员编写好的代码时,除了解基础知识外,还需要其他一些知识,而不是最佳解决方案。