在我们公司,我们需要做许多看似不复杂的事情,比如开发Mobile。
比方说,有经验的程序员的花费是初学者的4倍。
两者基本上都能在相同的时间内完成看似简单的事情。
不同之处在于,经验丰富的程序员产生的bug更少,代码更稳定等等。初级程序员浪费了其他人(PM、客户等)的大量时间。但它们要便宜得多。
相反的论点是,使用HTML制作表需要经验丰富的初学者和初学者相同的时间。因此,聘请有经验的程序员来做这件事是奢侈的,初学者程序员也可以做到这一点。
我们应该投资更多更好的程序员还是更多更好的PM,因为在我们这个领域,经验丰富的程序员和新程序员之间的区别可能是4倍。
发布于 2017-03-16 01:23:45
我有第一手的经验,两种理论都是在现实世界中试验的--实际上是在同一个项目中。
在我到达之前,我已经决定雇佣更贵、更便宜的程序员--这个想法是让非常初级的程序员随心所欲地遵循好的质量规范。
在经历了6+几个月的主要项目之后,我接管了开发经理的职位。一旦我修复了一些卫生因素,代码质量的问题就依然存在。我有一些空闲预算,聘请了一个非常有经验的程序员(嗯,更像是一个解决方案架构师),有着超凡的沟通技巧,并且以前在C# (该项目是用这种语言编写的语言)做培训师。这样做的目的是通过提供指导和有效的免费培训来提高其他编码人员的质量。
一个或两个月后,痛苦的是,即使这样也行不通,所以原来的团队被从项目中移除,增加了几个最优秀的程序员。他们交付了一个项目,原来的团队在8+中完全没有交付,在3个月的短跑中尝试了3个月,从零开始,因为原始代码是不可挽回的。
如果您的需求是非常基本的,您可能可以使用一个非常初级的程序员,但很可能,从长远来看,它们的成本会高得多。有时,“简单”的需求会演变成非常复杂的过程。
如果我没有做出改变方向的艰难选择,他们可能还在努力:) --更严重的是,在这个例子中,原始团队缺乏沟通和能力意味着他们不会对规范提出问题,而只是尝试做他们被要求做的任何事情,不管它在架构上是否有意义。一位更有经验和自信的开发人员提出问题,深入了解基本需求,因此最终第一次提出了正确的解决方案。
哦还有一件事。不要以为你可以立即雇用一个伟大的程序员。有很多人有着多年平庸的经验,他们提供的结果几乎和低年级的人一样糟糕,但代价却和超级巨星一样(有时甚至更高)。我有一个非常好的“命中率”,但这与经验和我有很多。这是一个完全不同话题的话题.
优秀的程序员是很划算的。最难的是找到他们,创造一个足够有吸引力的工作环境来留住他们。
发布于 2017-03-16 00:45:26
如果您具有广泛的性能统计数据,则可以使用数学进行业务说明。这可能表明,开发速度将补偿价格的增加,甚至更好的是,一个健壮的设计可以节省更多的维护和后续版本的开发。不幸的是,这样的数据并不常见--尤其是对于较新的技术。
另一个论点可能是上市时间。高层管理人员更容易理解这一点。然而,如果时间不是很重要,这也于事无补。
最后,找到一张红广告的照片,著名的消防员,在经历了几次经验较少的人的失败尝试后被召到了一场重大灾难中。他的名言:
如果你认为聘请专业人员很贵,那就等到你雇了一个业余的。
...deserves将被打印成彩色,并显着地显示在你的办公室门上,这样每个人都知道它是关于什么的;-)
发布于 2017-03-16 05:46:35
我喜欢并推翻了mcottle的答案,但我想介绍一些其他的动态和论点,其他的答案还没有提出来。
首先,在mcottle的回答中隐含的事实是,在一定的技能水平以下,一些问题是不可能的。不幸的是,您发现这一点的方法是您的团队尝试和失败,这是非常昂贵的。失败后,有两个可能的教训可以从中吸取。一种选择是你了解到你需要更多有能力的开发人员,所以你雇佣了他们,你完成了这个项目,大大超出了预算和时间表,但至少你已经做好了未来的准备。另一种选择是,这样的项目对您的团队来说“太难了”,今后不应该尝试这样的事情,即您放弃了项目和任何类似的项目。当然,它很少被表述为“我们太笨了,做不到这一点”,而是将其合理化为“我们的系统非常复杂”或“我们有很多遗留代码”或其他一些。后一种观点可能会极大地扭曲公司对开发的可能性和开发时间/成本的看法。“如果做不到X需要一年的时间,那么做一个简单得多的Y可能需要六个月的时间是合理的。”
一个问题是,你们公司的计划到底是什么?好吧,他们会雇佣廉价的初级程序员。三年过去了,现在怎么办?在过去的三年里,他们对开发人员做了些什么?他们只是从来没有给他/她加薪吗?这里的备选方案如下:
后两种情况意味着大量的员工周转,这意味着公司知识的流失和不断提升员工的薪酬。在第二种情况下,您实际上是为糟糕的开发人员选择的,因此成本将以增加计划的形式增加。结果是,X项目的一切都进行得很顺利,直到吉姆突然离开,他是一个优秀的开发人员,因为他已经两年没有得到加薪了,现在这个项目需要“很长的时间”才能“理解”,因为你需要雇佣和培训新的初级开发人员,他们(想必)不会像吉姆那样优秀。这就是你重新校准期望的方法。
即使在提供竞争性加薪的情况下,如果您拥有的只是初级开发人员,那么他们应该在哪里以及如何学习呢?你基本上希望他们中的一人能在工作环境中自己学习好的做法,并最终指导他人(而不是离开这里去更绿色的牧场)。与一些优秀的开发人员一起“启动泵”将更有意义。更有可能的是,您将开发一种专家初学者文化。其结果是,最终您将支付高级开发人员的费用,只比初级开发人员稍微好一点,而且在文化上是有害的。
一个好处,特别是,非常好的开发人员,我感到惊讶,没有其他人提到的是,他们可以很容易成为一个乘数因素。很可能是初级开发人员和高级开发人员花同样的时间制作表格。然而,一个好的开发人员不会这样做的。他们将制作一个表生成器,以减少每个人制作表的时间。或者/此外,他们将提高对每个人都能做到的上限。例如,实现谷歌MapReduce框架的开发人员可能非常合格,但即使MapReduce的用户完全无法自己制作大规模分布式的算法版本,他们现在也可以轻松地使用MapReduce。这种动态往往不那么明目张胆。例如,更好的源代码管理、测试和部署实践使每个人都更好,但是跟踪到特定的人可能更困难。
与另一方争论一下,也许高层是对的。也许没有必要有更多经验丰富的开发人员。然而,如果是这样的话,开发似乎并不是公司的重要组成部分。在这种情况下,我只会完全淘汰开发人员,使用现成的软件或按需雇用承包商。这可能是值得探讨的原因,他们不只是使用承包商,而不是内部团队。如果你无论如何都会有大量的员工流失,那么增加承包商就不成问题了。
https://softwareengineering.stackexchange.com/questions/344206
复制相似问题