通常,在大多数编程工作中,全新软件的创建是否都是主要的一部分?[关闭]


63

我从事软件开发工作已有10多年了,但我却很少能创建任何“新”东西,这使我感到惊奇。我意识到“新”是一个模糊的术语,但是我将其定义为从明显的新大型项目到现有项目中的新大型功能的任何内容(例如,需要对其设计进行一些思考,并且可能需要2周或更长时间才能完成)。如果需要书面说明,粗略的指导也许是新的东西。我认为大多数程序员都知道我在说什么-您正在开发中,正在快速编写大量代码。

无论如何,回想我所做的事情,我估计我只有不到10%的时间花在“新”工作上。诸如“使现有系统适应在新环境中工作”之类的事情当然需要进行大量规划,但是实际的编码和“新事物”归结为在整个代码中的许多地方进行了微小的更改。同样,对于小型功能请求-如果我知道该怎么做,通常可以在一个小时内完成,如果我不知道,那么很多阅读代码并弄清楚该做什么(这使我感到沮丧,因为我学习了做的更好,而不是阅读)。

总的来说,我觉得我大部分时间都没有创造任何东西。我以为大多数地方都是这种情况-新产品会很快推出,到那时每个人都会很兴奋,并以快速的速度发布代码,但是一旦上线,它就会进入维护模式,随后的更改很少被认为是“新的和创造性的”。

我错了吗?我是准确地描述了大多数编程工作,还是大多数程序员都觉得自己经常在创造新事物?


11
@JamieTaylor翻译成您的隐喻术语,问题是:总是固定别人的Lego模型并且很少创建新模型是典型的吗?
Caleb 2012年

22
@乔,哈哈!那么,您是生产所有我们将永远维护的!*#@ *&!%旧系统的家伙吗?;-P
彼得Török

14
@乔,是的,我非常感谢。也许如果你能写只是一点点更多的单元测试,我将完全的内容:-)
彼得Török

8
@Joe,这使我想到了那句古老的格言,到现在为止,我还没有发现这句话特别恰当:“直到下一个接管您代码的人总是像个危险的精神病患者,知道您的住处,才进行编码。” -)
PéterTörök2012年

11
@JonMcdonald不​​应令人沮丧-繁琐的工作无济于事,维护现有代码库可能是获得经验并提高工程师技能的最快方法。花时间进行维护将帮助您理解和避免所有导致代码无法维护的典型错误,并且可以帮助您欣赏其他您可能不会关心的事情,例如静态代码分析和自动单元测试创​​建。
Ben Cottrell 2012年

Answers:


66

维护需要大量软件工作。当然,没有任何招聘经理会告诉您这一点,但是确实是这样。


13
这可能是正确的,但是维护仍然非常重要,有时在智力上也可能具有挑战性:)
joshin4colours 2012年

3
维护绝对没有错。但是人们发现它的魅力不那么明显,因此工作描述往往会淡化它。
Scott C Wilson

维护是指使软件按照不断变化的规范运行。维护作为一个概念仅适用于硬件和其他由于物理因素可能会随机损坏的事物。不维护软件,而是对其进行了重新设计和重构。
Rudolf Olah'4

3
@omouse-有时是的,但是有时它只是修复实现中的明显错误以符合原始规范。但是您是对的-“维护”的主题涵盖了各种活动。
Scott C Wilson

@mouse,重新设计和重构也具有含义,并且没有涵盖我们通常称为“维护”的内容。如果某些软件使用了现在不推荐使用的功能,或者外部api发生了变化,那么您要做的就是既不重新设计也不重构。
cbrandolino 2012年

59

是的,您的看法是正确的。绝对的道理是,维护系统所花的时间,金钱和精力比建立新系统要多得多。很明显,大多数程序员的时间分配将反映这一点。

造成这种情况的部分原因是,许多人在做“新创意”时会做得不好,因此很难维护系统(如果他们从未亲自维护过,这尤其可能-一直致力于小型绿地项目的人都不能真正声称自己有能力。

另一个(可能更大)的原因是,大多数系统被设计为持续有用的,而不仅仅是一次性事件。因此,它们的使用时间比开发它们所需的时间长得多。但是在此期间,需求因法规,市场,研究,用户以及其他方面的变化而发生变化(并被添加)。这意味着维护工作。


15
+1表示“一直致力于小型未开发项目的人都不能真正称职”
mattnz

1
什么是“小型绿地项目”?
米粉饼干2012年

@RiceFlourCookies:格林菲尔德(Greenfield)是一个全新的工作经历。在这种情况下,项目从头开始。
史蒂文·埃弗斯

@RiceFlourCookies,虽然是相对的,是可以由一个人来完成的项目可以合理地认为是小。
Scott C Wilson

23

旧版系统是成功的系统。他们在最初的开发过程中幸存下来,其中50%的项目失败了(即使成功定义为成功!)。他们在不断变化的商业环境中生存下来。他们可能幸免了年轻的天真的程序员提出的大约十个建议,用Java或当时流行的任何东西重写整个内容。他们很幸运,该软件所服务的任何部门,公司或代理商在各种预算削减,重组,合并等情况下都幸免于难。

十年后仍可能运行的软件不到5%。

因此,与其抱怨这件事,不如将其视为在这样一个达尔文式的成功故事上工作的荣幸,并且是一个了解现实世界中有效的方法和原因的机会。


8
...或他们之所以得以幸存,是因为有人拥有足够的决策影响力,并且对保持传统猛mm象持续10年或更长时间抱有浓厚的兴趣,例如获得工作,养恤金,或者能力不足,技能过时找新工作
Marek

@marek的确可以兼而有之。
nicolas 2012年

8
某种东西能够幸存的事实并不意味着它是最优的甚至是好的。这仅意味着它“足够好”,没有人摆脱它的痛苦。自然界中主要的选择性力量是竞争。当竞争不激烈时,您会得到一些非常棘手的生物。竞争也可以在软件中进行,但是内部系统通常没有太多竞争。结果是内部系统经常会陷入困境。
Caleb 2012年

@Caleb-作为一般规则,开发人员会听取用户的意见并锁定需求,这样才能生存。不管写得多么糟糕!开发人员试图匹配最新设计模式,实现最新时尚并痴迷于缩进的系统并没有进入第一版。工作代码总是胜过漂亮的流行语兼容代码。
詹姆斯·安德森

14

不依赖于较旧开发的新项目中经常使用的术语是未开发项目。您可能偶尔会在工作清单中看到这个词-知道您要从头开始,而不是继承别人的失败尝试,可以使工作更具吸引力。

成功的软件项目通常比在新项目上花费更多的时间来维护,因此,您不必做很多完全“新”的事情也就不足为奇了。

此外,创造一些完全新的是大量的工作。即使在未开发项目中,您也可能会选择许多工具来帮助您:平台,编译器,框架,库等。一旦做出这些选择,就会对项目施加一定的约束。这并不是说您不再从事新工作,只是“新”在这里是相对术语。即使您不称其为未开发项目,从那里将功能或模块作为“新”添加到现有项目也不是什么大的步骤。


7
“别人的失败尝试”-遗留系统是达尔文式的成功故事,失败的项目无法得到维护!
詹姆斯·安德森

2
@JamesAnderson Point,但技术成功并不是软件生态中的唯一选择力量。谁没有看过对管理人员很重要但又步入正轨的项目的半成品呢?
Caleb

6

这取决于您要从事的工作。

我仅在一家纯软件产品公司工作过,在那儿,我由一个小型的启动团队在他们的单个镀金应用程序中工作。

否则,我曾在需要软件以支持其内部研发或外部产品的技术公司工作。

好处是我可以构建完整的入门级产品,并且可以构建我想要的东西。有时,您还可以尝试更新的技术,而不是坚持在现有的市场领先应用程序中添加功能。

缺点是您是成本的一​​部分,而不是产品的一部分。所以我有固定的项目,因为“我们不在做软件” /“软件不是核心业务” =令人惊讶的是,公司如何认为他们可以出售没有软件的价值10万美元的机床来操作它!


这也让我感到惊讶,公司如何认为他们不需要针对其自定义问题的自定义解决方案,并且可以在excel中而不是db中轻松,快速地操纵100万行的278列。
Spencer Rathbun 2012年

@SpencerRathbun让您惊讶的是,当您给他们一个估计来构建自定义软件时,他们立即开始询问您并问:“他们的免费开源软件是否可以免费为我们提供自定义X功能?”
maple_shaft

7
@maple_shaft更有意思的是,他们说“我们可以以$ 10,000的价格购买X,并且该通用解决方案无需安装即可完全满足我们的自定义问题!顺便说一句,将负责启动并运行它以及所有问题/我们所购买软件的错误是您的错。”
Spencer Rathbun

3
@SpencerRathbun你赢了,那就是要在最糟糕的情况。
maple_shaft

5

与其将遗留代码视为不断清除他人的混乱,不如将其视为处理许多新项目的机会。

考虑一下,添加到系统中的每个新功能本身都是一个小项目。您仍然需要应用整个SDLC,以确保您正确完成了这项工作。当然,您可能已经为该功能指定了规格,但是通常会留出一些细节,因此您可以根据需要分析所显示的问题,设计应用更改的最佳方法,对其进行测试,对其进行编码,然后将其发布回您的版本控制系统,并有可能在将来进行维护。

根据我的经验,您通常不会在一个完全绿色的领域中工作,通常当您幸运地这样做时,您将有望在很大一部分维护工作中看到该项目,甚至可能产品的生命周期,或您在给定雇主的整个时间内。这是因为您对产品的亲密经验意味着您已成为知识库,并且将您转移到其他方面的成本很高。当您开始使用现有产品时,这是因为雇主最近在项目上失去了资源或需要更多资源,并且他们的业务需要确保它在软件投资上不会造成太大损失。这是成为软件工程师的现实。

我从事IT工作近22年,最近15年担任软件开发人员,在整个过程中,我只创建了大约5种新产品,而我大部分时间要么长期维护这些产品,要么维护其他人的产品。产品。每个人都给我带来了挑战和要解决的问题,每个人都不仅被视为我只是其中一部分的一个大型项目,而且还被视为要完成的一系列巨大微型项目。

令人惊讶的是,一点精神健美操可以完全改变您对日常工作的看法和享受。;-)


4

我认为许多软件开发工作涉及改进现有产品或使现有代码适应新客户或新市场。

这并不是真正的“维护”。例如,VMWare刚发布了版本8,这是对其主要产品的重大升级。我怀疑编写VMWare的第一行代码时,很少有人从事这项工作。他们的主要升级是基于很久以来就一直在前进的家伙编写的代码。

Workplace Beta中,存在一个有关Google的20%个人项目系统如何工作的问题

我确信Google会找出最好的开发人员来创建新的软件产品,并最终会厌倦多年添加小功能并为下一个发行版调整gui。

通过拥有20%的项目,我推测Google开发人员不会介意继续改进Google的项目,因为他或她仍然可以从新事物的开始就乐在其中。


2

您将花时间创建新功能并更改现有代码的功能,以符合新规范。

其他人则称其为维护,但这是一个可怕的名词。它是对软件的重新设计,重构或重新编码,以使其符合程序应做的新想法。


2

我会说这取决于您所工作的公司。

我的第一份工作是一家会计软件公司,其主要产品是ERP系统,其竞争水平与Great Plains或Peachtree差不多(就像您从QuickBooks晋升到该公司一样,或者当您厌倦了GP的混淆模式或其他东西时就侧身竞争)。您以为PT错了,那么您就从层级上移到了像SAP这样的软件包中。这项工作是99.99%的维护,定义为修复错误并添加“小东西”,而没有从根本上改变软件的工作方式或功能。当CEO想要对系统进行一页一页的重写时,我离开了公司,这本来很酷,但他坚持采用清晰的反模式的几个设计功能,例如内部平台(允许高度定制)。基本上是通过给客户一个笨拙的VS Designer来完成该程序的,

在那之后,我的下一个工作是一家从事“交钥匙开发”的合同公司。客户指定的系统是从头开始构建的,包括硬件和软件,然后在项目完成时将其全部交给客户,客户可以自己维护它或保留公司服务(按月收费)。我的工作是在其中一个主要项目的开发中,因此在我在那里工作时,我所做的几乎所有事情在我开始之前都不存在。即使到那时,开发本质上也是迭代的。您总是要添加现有的东西(即使您什么也没有),并且必须避免并解决回归问题(新的东西破坏了旧的东西)。一旦项目进入“保修”状态,

对于安全公司,我目前的工作是回到内部开发部门,该公司使用视频监视和音频反馈来提供警报信号验证和其他“虚拟警卫”服务。这个领域正在迅速发展,并且仍在发展。新设备一直在进入市场,新客户签约谁想要我们做新事情,而现有产品不再符合适应性UL和政府法规。这项工作的99%是“整合”;编写从未存在过的新软件,以使一个新的但已经存在的设备或软件与另一个可能更旧的已经存在的设备或软件一起工作,以便我们可以同时使用两者。


1

我想说这在很大程度上取决于您的角色性质。

我是一个小型团队的成员,因此必须维护和支持我创建的所有内容。

5年前,我所做的大部分工作都是“新”的-现在我要说,维护现有代码至少要花费我一半的时间,还有25%是现有系统的“新”版本。

但是,如果您在发布代码后仅与团队一起作为开发人员来进行维护和支持,那么从技术上讲,所有内容都是“新的”。如果您找到不需要维护自己的代码的工作,那就去做吧!


1
  1. 这取决于您的工作岗位有多危险:;-)

    如果您在一家开发新产品的新公司工作,而该公司将生存下去的风险很高,那么您可能会创造出一些很棒的新产品。

    如果您在一家在市场上具有稳定地位的老公司工作,则很有可能您将以维护模式进行编码;-)。

  2. 新软件的创建总是很诱人的。事实是,很难以正确的方式做到这一点。编写可维护的代码并非易事。

    如果您考虑这些方面,则必须确保编写良好的代码:正确的日志记录,正确的监视和统计信息获取,高效的描述性设计,甚至可以帮助不熟悉的人参与您的项目,文档编制,自动测试和测试驱动的开发。

没有多少人做得对,所以我们必须维护他们的代码并将其完善为适当的状态。;-)

好消息是,如果您在公司工作的时间足够长,则可以影响新代码的编写方式:-)


1

您是否主要进行维护至少部分地在您的控制之下。就我而言,过去15年以上的大部分工作都是新的发展。这是因为我正在寻找可以使我获得新发展的工作。我不是承包商,而且我通常不进行网络开发。我几乎一直为小型雇主工作,而且我通常在利基市场(台式机GUI开发,质量保证工具,开发人员工具,垂直市场)工作。

我还看到并亲身经历了团队中最好的程序员通常(尽管并非总是)能获得最好的工作。因此,专注于成为公司中最好的程序员,您将开始看到新的发展趋势。


1

维护开发是一项艰巨的任务,在许多方面都比新开发更难。以我的经验,雇主喜欢让开发人员进行维护,尤其是如果他们擅长的话。在旧技术中找到好的维护开发人员比找到可以使用最新技术的人要难。

我曾在一家公司工作,该公司分为一个产品团队和一个项目团队,一个产品团队负责所有维护工作,一个项目团队负责所有新开发工作。双方都有出色的开发人员,但维护人员肯定更专业并且使用了旧技术。

我可以建议您推迟并要求进行一些新的开发工作吗?如果您的雇主只进行维护,那么您可能需要继续前进吗?


0

我会说这取决于很多因素。您在哪里工作,生产什么样的产品,团队的组织方式等等。

在公司工作的四年中,我会说我70-80%的时间都花在创造新事物上。大约有50-60%的钱花在了全新代码的大型项目上,而其余时间则花在了对当前功能的增强上。

我知道的部分原因是我的公司如何运作。不是我的开发团队中的每个人都花这么多时间来构建新功能。有很多人将他们的时间集中在错误修复/寻找上。如果这是一项全新的功能,或者他们需要帮助,那么它将被踢给我进行调查。但是,总的来说,这个小型的Bug猎手团队可以使更多的开发人员继续前进,而不会受到干扰。


0

作为公司中唯一使用QuickBooks和Excel的开发人员,我已经工作了将近三年,当我刚开始工作时没有其他工作。现在,我们有了Windows窗体应用程序,SharePoint设置,SQL Server + Reports,Excel加载项和Outlook加载项。

就在今天,我第一次设置了票务系统,因为我失去了以防止用户抱怨的速度来管理电子邮件请求的功能,因此我认为这表明我已进入维护模式。

我以前的工作更像其他人发布的工作,但我认为我会加入非典型经验,因为这表明您永远不知道下一份工作会带来什么。我已经筋疲力尽了,但是我从这项工作中学到的东西是值得的。


维护模式是很久以前发生的……您现在需要工具来帮助您。

我很高兴我没有感觉,因为在该线程上获得唯一带有负点的答案可能会伤害他们:(
Aaron Anodide 2012年

好吧,你不回答所问的问题。

0

一些较大的组织(例如,我工作的公司)制定了多年停用软件的政策,这可能是因为不再使用其编写的开发语言(Delphi有人吗?),或者是平台被替换了(Windows XP)或法规要求。例如,现在正在停用直接与数据库通信的两层程序,而支持使用Kerberized连接以提高安全性的三层程序。

用户仍然需要原始功能,因此使用当前最新技术开发了一个全新版本。

预计此类产品的更换周期为5-7年。例如,到2020年,我预计我正在编写的WPF(客户端)/ Java(服务器)软件将是旧技术,并将被更新的软件所取代。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.