在软件开发领域,经常会出现诸如“
没人在乎您的代码 ”(翻译-“
您的代码对任何人都不感兴趣 ”),“代码只是一种工具”以及业务方面完全误解的情况,为什么我们要花时间和时间?花费一些钱来“重构”已经起作用的代码。
我想告诉您“强调特性”会导致什么,而不是在乎代码的质量,以及为什么不仅程序员需要好的代码。
技术支持
如果没有主要论文,那么当前的文章在原则上将毫无意义:
数十年来在编程世界中正在发生的事情,因此,创建了更高级的语言,范式,方法,为其区分各种模板并负责代码设计的事情实际上是两件事-提高开发速度和促进对代码库的支持(本质上是开发新功能的速度)。
这些就是业务需要的东西。
当然,可以说他们自己需要提高程序员劳动效率的方法,以便以更高的价格出售其工作,从而能够在单位时间内完成更多工作,但是因为程序员立即订购大型完成的项目而无需进一步支持的情况非常多这种情况很少见,通常功能是逐步订购的,在项目开始时,您不会感觉到不良设计的有害影响,而是对未来的投资。
马丁·福勒(Martin Fowler)的
博客中有一张图片与此主题相关,该图片显示了根据项目的存在时间(即项目的大小)将新功能引入项目的速度。

水平轴是项目生命周期,垂直轴是总体功能。
红线表示设计良好的项目的开发速度,蓝线表示编写的项目对代码质量的要求没有任何限制。
因此,如果您认为应用程序注定要失败并且将无法开发,或者仅为即将发生的事件做准备,则无需考虑系统的设计。 在相反的情况下,好的设计可能会获得回报,并会产生很多回报。
有时您会听到这样的意见:在项目开始时,您不必考虑代码的质量并在成功向客户/投资者介绍之后重新编写代码,但是在大多数情况下,这是启动项目的错误,并且是获得未来几年
技术债务的最简单方法。
代码不是工具;代码是最终产品
软件公司不使用代码作为工具。 这是公司的主要产品,它是程序的最终代码,它决定了程序的质量,速度,是否符合功能要求。 不能仅仅采取和完全替换它,而不会造成暂时和实质性的损失,就像使用计算机/ IDE /开发方法论一样,它本质上将是创建产品的工具。
关于“专注于表现”在我所引用的文章中,表达了以下想法:您需要在项目准备水平与客户/项目经理进行沟通,而以下示例则与此相反:
想象一下,设计师将开始向您介绍他在Photoshop中使用的图层,那里有多少对象,在哪些画笔上使用了什么渐变以及他编写了哪些炫酷的动画脚本。 它对你不感兴趣。 您是否已经可以拍照?
所以在这里。 有一个区别,因为它
不能简单地在软件产品的支持下投影到实际情况上-在工作结果(图片)出现后,Photoshop中的所有这些图层和画笔对于任何人都是不必要的,并且相同的工具也是获得结果的工具,而不是最终产品。
因此,在草拟最终图片的要求时,客户不必担心该过程中将使用什么。 就软件而言,如果客户(企业)仅需要应用程序的功能,则他冒着获得他想要的东西的风险-新功能,但是毫无疑问,将需要维护和开发它。
不幸的是,这在外包中是一个相当普遍的问题,因为一家公司只出售其开发人员的时间,而客户无法客观地评估系统的质量以及解决问题所需的时间。 当更改代码的成本成倍增加时,这只会使公司自己对外包商有利-可以将更多的人工时间用于货币化,而订购该产品的公司已经陷入困境-重写繁琐且不便的系统为时已晚,因为它需要大量投资并停止提供新功能那是不允许的。
代码-程序员的工作场所
一直以来,这篇文章都是草稿本,我一直在想是否应将此项目包括在其中,但是在仔细观察了正在寻找工作的候选人的优先次序之后,我意识到这一刻确实很重要。
程序员每天都必须使用代码,他的创意产品,他创造的东西,但不仅要创建一个,而且要成组地创建,而且通常不是从头开始。 他需要接受项目已经存在的部分,并根据之前编写的功能对其进行开发。 员工极有可能不喜欢使用质量不佳的产品来工作。
我认为,首先是团队在项目上共同努力。 最终产品的质量直接取决于团队的工作方式,内部规则和内部建立的要求。
其次是技术。 选择不当或遗留的不便的框架,过时且质量低下的工具,将所有的拐杖和bug束之高阁的图书馆钉在了项目位置上,并且缺乏足够的能力和时间来消除传统方法的人会轻易地消除新的潜力工人。 除上述原因外,这对于程序员的发展也是一小部分前景和机遇,因为除了研究现代和最有效的工具外,还必须开发道具以使由于历史原因而适应当前问题的解决方案。
为什么这一切
不幸的是,对实际应用程序的需求很少能以100%的形式形成,并且在开发过程中不需要进行修订。 此外,当项目在启动后不必根据新要求进行调整时,这种情况几乎是不可能的。 业务扩展,发展,需要以前没有讨论过的功能,进入新市场。
在这种情况下,几乎不可能为每个小细节构建理想且经过深思熟虑的架构,而且通常没有必要,因为在这种情况下,其成本对于项目的初始阶段来说是不合理的高。
当然,对于那些从程序员那里订购软件的人来说,编写好的代码应该不会让他们感到头疼,而且那些无法编写代码的人也不太可能检查它。
但是,开发软件产品的公司如果要进行质量改进,必须了解该产品的重要部分,因为其源代码直接影响其成功,并且还应重构源代码并根据新要求修改体系结构。作为预算,应该将时间分配给程序员。 当然,如果有人对产品的质量感兴趣。
但是,随着IT行业的发展,产品,公司,工具的发展,用户的选择越来越多,竞争越来越激烈,人们希望未来仍将拥有高质量的产品。
结论
实际上,本文的主题当然是非常有争议的。
上图没有回答系统设计在什么时间开始产生收益的问题。
为此而产生的技术债务和债务,使您现在可以有更多时间再将其归还利息,其主要问题非常简单,并且非常类似于经济中的类似现象,即无法偿还债务和无法准确估算未来收入。
代码的质量也是非常主观的,并且不幸的是,它实际上没有形式化,否则程序员可能已经被机器人所取代。
无论如何,最重要的是取得适当的妥协并找到中间立场,这将使我们不要为了追求功能而将项目淹没在技术债务之内,也不要放弃竞争对手的有趣利基,而是进行系统设计而不是功能设计。