团队内部编写所有内容有多普遍?[关闭]


53

在最近的一次采访中,我问采访者“您如何评估新技术和库(例如SignalR)并将其投入使用?”。他们说他们没有,相反,他们自己写了所有东西,所以他们不必依靠任何其他人。

该公司不为政府或国防承包商工作,也不从事任何对安全至关重要的项目。他们只是您的一般中型软件开发公司。

我的问题是:团队自己编写所有内容有多普遍?我应该为此感到担忧吗?

编辑-大多数回答都说这是值得关注的事情。是否可以进行第二次面试,让他们澄清/重复自己在家里编写所有内容的立场?


58
巨大的红旗。冷静地走开,不要突然移动。
tdammers

16
我认为这并不像人们所说的那样荒谬……最近,我浪费了不可思议的时间来修复废弃的库,以用于新的框架版本,库的新版本,未记录的重大突破甚至巨大的差距在像jQuery这样的重要框架中使它们不适合目标。人们没有做出足够的努力来决定第三方组件是否会增加巨大的维护开销,并且常常以无法维持的意大利面条依赖地狱告终。
Danny Tuppeny

4
NuGet很棒,但是这样做很容易。我最近从NuGet安装了一些琐碎的帮助程序库,它引入了Castle和其他各种肿的废话。当然; 彻底的禁令是很奇怪的,但是这并不比允许每个开发人员和他的狗无意识地随意拉入东西更愚蠢。
Danny Tuppeny

13
一切?是否包括自己的浏览器,操作系统和编译器?否则,他们只会自欺欺人。
Muhammad Alkarouri

4
当然,这就像人们所说的那样荒谬。a)可能为工作选择了错误的库,b)在某些情况下没有可用的第三方库比内部库更能满足您的需求:这并不意味着从不使用第三方的全面政策库是正确的。
user16764

Answers:


76

从不使用第三方库的态度是荒谬的。除非您有严格的业务要求,即代码库中的每一行都是由公司员工编写的,否则您自己编写所有内容都是对公司时间的可怕利用-但这是不寻常的情况,尤其是对于像这样的私营公司而言你已经描述过了

一个更合理,更彻底的答案可能是,他们只会使用具有以下功能的第三方库:

  • 满足他们自己编写的代码需求
  • 根据与公司业务模式兼容的许可提供
  • 包含的测试
  • 通过了代码审查

如果满足了这些条件(并且根据我的经验,代码审查非常灵活,尤其是在存在良好测试的情况下),那么您将不再“依赖其他任何人”,而是依赖现有的,可用的并且最好是健壮的码。

如果代码是开源的,那么在最坏的情况下,第三方库将变得无法维护。但谁在乎?测试证明该库适合您的需求!

此外,对已建立的第三方库的厌恶严重阻碍了程序员的生产力。假设该公司正在编写Web应用程序,但拒绝使用jQuery,因此编写了自己的跨浏览器库来简化DOM操作。几乎可以肯定地假设它们的实现:

  • 对于已经熟悉jQuery的开发人员将拥有一个外部API
  • 不会像jQuery那样有据可查
  • 使用该库遇到问题时,不会有相关的Google结果
  • 不会像jQuery那样经过现场测试

所有这些点都是阻碍程序员生产力的主要障碍。企业如何负担得起这样的生产力?


您已更新问题,以询问是否适合再次参加面试。绝对是。

也许您在第一次面试中误解了面试官的答案,或者面试官只是错误地解释了公司的职位,新面试官可以澄清这一点。

如果您解释说您担心它们对外部库的立场,那么至少有两种可能的结果:

  • 他们乐于变革,而且您对他们的工作流程的担忧使您看起来比其他候选人更好。
  • 他们不愿意改变,他们认为您是“我们不想雇用的那种开发商”。没关系,那不是您想工作的地方。

1
+1,但我认为您的意思是私营部门,而不是公共部门。
MarkJ 2013年

6
“如果代码是开源的,那么在最坏的情况下,第三方库将变得无法维护。但是谁在乎呢?测试证明该库适合您的需求!” 您还拥有源代码,该源代码使您处于现在使用的状态并能够对其进行更新以满足将来的任何需求。(是的,习惯于“外来”代码库需要时间,但滚动自己的代码也需要时间。)
CVn 2013年

34

这似乎极具竞争力。我曾在一些商店工作,由于某些“关键”缺失功能,他们决定跳过像Hibernate这样的标准开源库,并自行推出。最后,该软件的构建和维护成本非常高。当然,内部图书馆的费用被大大低估了。在编写内部库的同时,标准库也迅速发展,增加了内部库中不可用的新功能。最后,使用标准库将花费一个小时的工作,而花了两天的时间。随着世界的过去,这对开发人员的职业不利。我会避免这样的商店。我喜欢交付,并且在我可以重用时没有耐心重写。


2
由于开发人员不再具有其他工作的相关技能,因此无需更换离任的团队成员,从而节省了因延长开发时间而损失的公司资金!#stratgey
Michael Paulukonis

@Michael:他们唯一能留住的人就是那些最初决定创建内部框架的人。大约一年后,新员工往往离开。
凯文·克莱恩

</ itwasaweakjoke>
Michael Paulukonis

+1如果缺少的功能确实是至关重要的:修改开源库并将功能贡献到主要资源中。提供巨大的商业价值,使每个人都感觉良好,并且对每个人的简历都非常好,因为他们现在已经做出了开源贡献。
MarkJ

@MarkJ:但是如果更改被拒绝,某人的自我就会受到挫伤。
凯文·克莱恩

20

这家商店患有一种叫做“这里没有发明”的疾病。这是一个很好的理由,当场终止采访并立即离开。这只能通过极不可能发生的自上而下的房屋清洁来治愈。

要回答您的问题,可悲的是,它比您想像的要普遍得多,这绝对是值得关注的原因。


15

是的,绝对值得关注!那种傲慢自大和(愚蠢至极的)愚蠢。任何半脑子的程序员都会使用诸如signalR之类的库,而不是自己编写。浪费您的时间来解决已经解决的问题绝对没有意义。我可能会尝试首先查找更多信息-他们可能误解了您(尽管面试结束了可能会很困难!)


11

我有几个朋友(都)曾在软件公司工作过而没有在这里发明综合征。因此心态在那里。

他们俩都观察到了围绕开发团队所培养的文化的观点。他们俩最终都与在软件开发方面颇为陌生的人一起工作,而这些人并没有真正地被迫学习新事物和追求质量。无论您处于职业生涯的哪个阶段,您始终希望在某个有机会向同行学习新事物的地方工作。但是,这种环境似乎通常不在希望自己滚动所有内容的地方找到。


+1我从前任雇主搬来的主要原因之一!
Antony Scott

5

我住的地方并不常见,我通过同事认识很多公司。我什至会说这是我的直接“不谢谢”。

我不会反驳已经提出的要点,但我会补充一件事。

他们使招聘变得更加困难。

  • 所有新员工的学习曲线比软件/领域的主要部分还要陡峭
  • 最好的候选人将被推迟,因为他们不希望自己的技能被闲置。
  • 人们一旦意识到无法使用自己喜欢的工具有多糟糕,就不可能在附近呆很长时间,而且员工流动非常昂贵

现在当然会有喜欢挑战的人,但我认为他们将是少数。

同样,将会有一些以“ Internet规模”运作的公司,亚马逊,Facebook等,它们具有疯狂的自定义需求,但这些公司仍然是少数。


4

我认为没有依靠第三方软件和/或开源软件的软件公司就无法在今天生存下来,为了保持竞争力,他们当然需要积极跟踪新技术。但是,通常有充分的理由对此采取至少一种防御性的看法。

例如,如果您出售软件并声称提供24/7支持,并且对您的软件正确运行负有法律责任,那么您需要非常准确地了解如果您的问题出现了怎么办例如,在一家工厂中使用该软件,工厂可能要花1个小时的时间才能停产数百万美元,然后在您使用的那个开放源代码库中碰到了一个严重的错误。相信我,您将对所涉及的软件进行非常全面的评估。

从您撰写的内容来看,这种情况似乎并不是问题的核心。


4

如果您是一家具有一定规模的基于技术的公司,那么您似乎将开发越来越多的自己的技术,例如:google开发了很多(如果不是全部的话)他们的全部软件,而大部分是开源的追求使其成为行业标准。

对于较小的公司,当他们尝试使用自己的业务逻辑来交付特定产品时,似乎完全是在浪费时间,而根据我的经验,我还没有看到中小型公司这样做。

当您谈论高度专业化的代码库时,它会变得更加复杂,例如:加密算法-有些人对它们的工作方式有基本的了解,但是实际实施解决方案的复杂部分似乎像是一脚枪击自己除非您雇用专门从事此类工作的密码学家。

有些公司确实允许自由创建自己的开源项目,这似乎更合适。

我个人不会去有这种文化的地方。


1

您所拥有的是一个非常好的机会,可以参加第二次面试,并向他们提出一些棘手的问题。我不知道公司在做什么,因此很难说为什么这似乎是一个奇怪的选择。您可以使用@Daniel Pryden关于Google使用第三方库的评论。

无论使用内部软件还是第三方软件,任何使用的软件都有其优点和缺点。不要使用一种工具,因为它不是公司内部的,即使它是工作的最佳工具,但显示出一定的封闭心态,也永远不会鼓励创新和创造力。

也许尽管,也许也许,您是介绍这种变化的人。祝一切顺利。


-3

当然,你应该走开。我没有看到这里提到的内容,但是最重要的原因是因为您不会获得很多可转让的技能。

想象一下,在下一次面试时,他们问您使用的技术是什么,而您只能提及裸露的C ++。这听起来像是研究生水平


“我在这里没有看到它” –您是否看过其他答案,例如这个答案?
蚊蚋

3
会不会获得很多技能?那太可笑了。仅当您将编程视为玩乐高积木,将组件堆叠在一起时,才是正确的。如果您必须“重新发明”一个图书馆,那么您将学到很多有关特定主题的知识。
GrandmasterB

@GrandmasterB您是正确的,请允许我澄清-很多地方都询问您使用的工具。如果其他候选人可以从头开始,而您不得不从头开始学习,那么您被忽视的机会就会更高。
Martin Konecny

-9

大公司自己写所有东西。

自己编写它有几个优点:

  1. 您可以保证自己拥有该软件
  2. 您可以正确计算创建它的工作量
  3. 即使下一次lib不可用,也可以重复执行步骤
  4. 它减少了您的需求膨胀
  5. 您不会重复别人已经做的事情
  6. 您可以保证有足够的人来维护它
  7. 您可以修改软件的每个部分
  8. 软件大小受您拥有的资源量限制

如果您使用别人的库,以下是每个要点的破绽:

  1. 别人拥有图书馆
  2. 您不知道创建lib付出了多少努力
  3. 您的下一个版本的产品无法在新平台上创建,因为不再提供相同的库
  4. 实施需求的能力取决于lib是否在多年前实施过
  5. 其他人也使用相同的库,具有相同的限制和功能
  6. 由于您没有创建库,因此没有足够的人员来维护产品中的所有软件
  7. 库是二进制文件,不可修改。即使源可用,您也没有足够的人来修改大量代码。
  8. 维护您创建的代码+库比您最初估计的工作量更大

7
这些参数的逻辑扩展是否不是还要编写自己的编译器(可能是针对您自己的语言),在自己的OS上运行该软件以及可能也要构建自己的硬件?
2013年

4
1:是的,我可以付费使用(无需花任何钱来建造它,以节省成本)。2:如果我不构建它,则不在乎。3:在业务平台中,更改速度很慢。保持领先优势很少是必需的。但是好的软件容易移动。4:不是。您只是将膨胀从外部转移到内部。5:没有道理 6:不是。7:是的,但是这意味着您需要将宝贵的程序员(项目中最昂贵的部分)从实际工作转移到可以在其他地方维护的错误修复。8:这是一件坏事。
马丁·约克

5
许多大公司广泛使用各种形式(包括libs)的开源代码,通常会在相关项目上进行改进或为其提供帮助。这些要点大多无关紧要或不正确。
Matt

7
@ tp1:我为Google工作,可以向您保证Google确实会在满足我们需求时使用第三方库。与许多其他软件公司相比,Google常常需要独特或规模不同的需求,因此,出于某种原因,Google经常会自己开发事物。但是Google还使用了大量的开放源代码库和/或开放源代码提供了很多内部库,因此并非所有内容都在内部。您的大部分观点不再适用于开源软件,因为有了源代码,您可以确保始终可以调试它并在必要时进行修复。
Daniel Pryden

5
“不,价值来自准确地执行需求。如果它是在知道需求之前构建的,那么它就不能准确地执行那些确切的需求。” 线索:如果您认为此论点毫无用处,那么您就无法理解关注点分离。
user16764 2013年
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.