程序员在选择语言和框架时应有多少自由度?


67

我开始在一家主要面向C#的公司工作。我们有些人喜欢Java和JRuby,但是这里的大多数程序员都喜欢C#。我之所以被录用,是因为我有很多构建Web应用程序的经验,并且因为我倾向于JRuby on Rails或nodejs等较新的技术。

我最近开始了一个构建Web应用程序的项目,该项目的重点是在短时间内完成很多工作。软件负责人指示我使用mvc4而不是rails。可能还可以,除了我不知道mvc4,我不懂C#,而且我是唯一负责创建Web应用程序服务器和前端UI的人。

使用我已经非常了解的框架(Rails)而不是使用mvc4有意义吗?该决定背后的原因是,技术负责人不了解Jruby / rails,因此无法重用代码。

相反的论点:

  • 他不会为代码做贡献,坦率地说,
    这个项目不需要他。因此,他是否知道JRuby / rails并不重要。

  • 实际上,我们可以重用代码,因为我们有很多Java应用程序,JRuby可以从中提取代码,反之亦然。实际上,他已经投入了一些资源将Java库转换为C#,而不仅仅是在JRuby on Rails应用程序上运行Java库。都是因为他不喜欢Java或JRuby

我已经构建了许多Web应用程序,但是使用一些陌生的东西会引起一些混乱,而我却无法像过去那样在短时间内构建出色的应用程序。这样很好 学习新技术在这一领域很重要。问题是,对于这个项目,我们需要快速完成很多工作。

在什么时候应该允许开发人员选择其工具?这取决于公司吗?我的公司吮吸或认为这正常吗?是否存在绿色牧场?我看错了方向吗?


45
在这样的事情上“反抗命令”可能是职业限制。
Dan Pichelman 2013年


39
公司喜欢标准化工具,因为它既可以从应用程序购买的角度降低成本,也可以在管理公司资源方面降低成本。许可证管理实际上非常耗时。此外,如果每个人都使用自己选择的语言/工具,那么要在工作之间洗牌就变得更加困难。最后,您对潜在客户的抱怨与您为什么要使用所选工具的原因相同。您不熟悉mvc4或不喜欢它。SW线索是线索,因此,除非您提出可以改变他们想法的论点,否则这就是他们的呼吁。
Dunk

22
所有这些都应该在面试中得到解决。
user16764

30
您是程序员还是Ruby程序员?语言应该像工具一样。有些有优点或缺点,但是要由工匠充分利用它们。该公司出于明显的原因决定了使用标准工具集。

Answers:


98

我要说的是,您必须与团队负责人谈谈,例如:

我知道你们是.NET商店,但实际上是 因为我的Java / JRubyRails技能而被录用的。我可以使用我已经知道的那些工具在X时间内构建这个新应用程序。我可以根据需要学习C#/ mvc4,但这需要>> X的时间。你想要什么?

这就提出了“您想要的(假定)所雇用的技能”与“现在所需的技能”的问题,并且表明您愿意学习新技能,但这需要由于您对该工具集不熟悉,因此开发新应用程序的时间更长。您确实想表明自己愿意学习新技能。不愿意学习新技能是确保不再需要技能时结束工作的好方法。

至于最后的问题:

在什么时候应该允许开发人员选择其工具?这取决于公司吗?我的公司吮吸或认为这正常吗?是否存在绿色牧场?我看错了方向吗?

通常取决于公司。如果一家公司购买了MS工具并在VisualStudio平台和.NET框架上实现了所有标准的标准化,那么如果一个开发人员坚持使用Linux和C,它可能会变得很尴尬。这很正常。如果公司对编辑器不太挑剔,则可能存在例外,例如,只要输出相同,就可以让开发人员选择Vi vs. Emacs。我知道有些公司甚至允许开发人员选择Windows vs. Linux,但是他们使用的语言为这两个OS提供了很好的支持和运行时。

公司为什么要这样做?一致性是原因之一。当应用程序是由各种开发人员喜欢的语言/框架构建的二进制文件,由不同的工具构建,并在非常不同的系统上进行测试的二进制程序的拼凑时,调试起来将非常困难。如果所有开发人员都在进行大多数相似的设置,那么这类问题就可以解决。

就您而言,这听起来像是您被雇用从事该公司非标准技术的工作。这对我来说似乎很奇怪,您可能想与雇用您的人谈谈他们为什么要这么做。


31
“我可以使用我已经知道的那些工具在X时间内构建这个新应用程序。我可以根据需要学习C#/ mvc4,但这将花费>> X的时间。您想要什么?” -好答案。以成本权衡的形式进行构架。
Christian Ternus

同意 这都是关于经济学的。一旦您从经济角度出发,任何真实的领导者都会听到您的声音并重新考虑他们的立场。明确权衡:例如:更多时间意味着事情会晚一点,意味着最后期限可能会错过,这意味着收入下降。有时,他们本质上需要显示出达到“权衡”目标的路径。
博士

6
+1。这个答案令我不满意的唯一方法是,它稍微强调了学习方面。与那些一无所知且不会改变的人相比,渴望学习的开发者是一项宝贵的资产。
科里

7
+1我还要强调一下(暗示)的一点,即如果领导者仍然选择使用MVC,则OP必须负责并在MVC中进行项目。
丹·里昂斯2013年

“有些公司甚至允许开发人员选择Windows还是Linux。” –在Ruby世界中,您也经常会发现Mac用户。(我的公司主要是一家Ruby商店,但对编辑器或OS没有任何限制-我们现在有使用Linux和Mac的开发人员,但是目前没有使用Windows计算机的开发人员)。
本·李

140

在什么时候应该允许开发人员选择其工具?

当它们不影响您的团队时。

我看错了方向吗?

绝对。

是的,您的期限很短。是的,您可以在Rails中更快地完成它。但是整个公司都需要部署和维护应用程序。如果公司拥有稳定的优秀C#开发人员,那么维护C#应用程序可能会更便宜(并产生更好的质量)。

您的DBA和其他管理员人员可能熟悉该堆栈,并且具有适当的流程来部署和更新堆栈。即使您可以更快地完成代码,但如果考虑到启动和运行专业Web应用程序所需的所有开销,则可能需要花费更长的时间。

请记住,与编写应用程序相比,您将花费更多的时间来维护应用程序。为此费用进行优化。


19
好答案。在这种情况下,“最佳”可能并不意味着针对初始开发(特别是针对初始程序员)进行最快的优化。从业务角度来看,该应用程序可能会在维护模式上花费更多的时间并得到整个团队的支持,因此这才是决定框架决策的关键。
埃里克·金

4
我认为这通常是合理的建议。我没有选择它作为答案,因为在我的特殊情况下,很多顾虑都不适用。我将负责设置部署和部署应用程序。我绝对同意维护部分,这是一个有效的关注。谁知道几年后有人需要更新代码时我会在哪里。
Spencer

2
可能是您实际上不是因为JRuby / Rails技能而被录用的,而是因您在构建Web Apps方面的经验而被录用的,而他们真正寻找的是在MVC4和C#的上下文中利用它。
杰·史蒂文斯

尽管您提出了好要点,但是让没有经验的人做这件事仍然没有任何意义,并且可能对此没有兴趣。为什么不让一位C#的人去做呢?他们要做的就是让这个人觉得自己对项目没有所有权,并使他感到精疲力尽,并导致他离开公司。
s73v3r 2014年

@ s73v3r-我希望OP知道他正在进入什么领域。老实说,如果您有大量的C#开发人员(和代码库),那么这对Rails家伙在面试中应该是显而易见的。如果他接受了这份工作,然后不肯真正做他所雇用的工作……
特拉斯塔因

41
  1. 您之所以被录用,是因为您有能力适应“新”技术。在这方面,C#没什么不同。您确定您不希望借此机会学习新知识吗?

  2. 在许多方面,ASP.NET MVC与Ruby on Rails非常相似。

  3. 您永远不会像蜗牛一样步伐。如果您已经了解ROR,ASP.NET MVC将是您的不二之选。诀窍是学习C#。


18
+1,将自己绑在一种语言/框架上真是愚蠢。把握机会学习新事物并获得报酬。.NET正在进行许多活跃而有趣的开发。
jozefg

我同意它们是相似的,但是存在明显的差异,这些差异可能要花很多小时。考虑到项目的有限时间,我认为使用Rails是明智的选择。正如我在问题中提到的,我不反对学习新事物。
Spencer

项目#1并不明显-OP表示他们被聘用是因为他们具有Java / JRuyb / Rails / nodejs的经验:我被聘用是因为我拥有构建Web应用程序的丰富经验,并且因为我倾向于JRuby on Rails等较新的技术或nodejs。OP没有谈论他们的适应性,也不说他们的适应性是他们被雇用的原因。
FrustratedWithFormsDesigner 2013年

2
+1,同意,我从未理解过这种类型的论点:“我非常清楚如何用语言L1来做A,但是我完全不能用语言L2来做”。
Shivan Dragon

2
@Spencer:当您向我们寻求建议时,每个人都给您同样的建议,您可能应该接受该建议。当您承认答案时,毫无根据地争论答案,而是提出一个问题,即您不知道正确的答案是什么。
安德鲁·库恩斯

21

坚持使用Java / JRuby的观点

您的老板很可能希望您生产。他们雇用了您,以便您可以为公司增值。确保他们了解通过强迫您使用您不熟悉的框架导致您:

  1. 以较慢的速度产生结果
  2. 创建较低质量的代码

即使是最好的程序员,也需要使用新的语言/框架进行预热。

学习MVC4和C#的参数

学习新语言是件好事。如果您正在学习的语言/平台在不久的将来会消失,并且只有在Microsoft坚持不懈的情况下,投资您作为程序员的技能才有风险。C#和MVC都有最新的更新,两者都得到了改进,并且正在更新中。

就个人而言,使您成为更全面的开发人员将使您不再陷入这种情况。最好的部分?您的老板将付钱给您学习这些东西,这意味着您将获得报酬,以使自己身价更高。

底线

您可能最终会赢得这场战斗,但是您将与不满的同事一起工作。只需向您的经理解释每种方案的利弊,然后你们都会更加开心。


11
+1,“意味着您得到报酬,使自己身价更高”,宾果游戏!
2013年

正如这个(以及几个答案)所指出的,在时间上的初始创建与其他人的部署/维护之间需要权衡。做出体面(但要尊重)的努力,以查看尖头毛发是否愿意进行交易,但不仅要尊重他们的决定,并喜欢在公司工作中获得报酬来学习新知识。
brichins

@brichins:我认为此答案的主要问题之一是它实际上并未指出您所说的内容!
ruakh

@ruakh我在弄清楚该评论的答案时遇到了麻烦-您是对的,这个问题没有解决具体的权衡问题(尽管它确实指出了可能导致的工作场所紧张)。我可能还应该特别指出,运营经理应确保他已经与所有决策者进行了交谈(不会超出任何人的负责范围),这样,如果/当项目未按时完成时,他可以礼貌地传达“我告诉过你也许会。也许在下一个项目中,我们可以尝试使用Ruby?”
brichins 2013年

18

在什么时候应该允许开发人员选择其工具?

什么时候说开发商是软件主管。

当然,如果您担心生产力,可以(并且应该)使用其他工具包,但要为不希望得到的答案做好准备。您的领导者可能希望您使用特定的工具箱,这是一个非常好的理由,例如与当前体系结构的兼容性,对维护的关注,许可问题等。

顺便说一句,这句话

着重于在短时间内完成很多工作

导致软件行业更多的烧心和混乱的原因远不止于此。


2
+1“当所说的开发商是软件主管时。” 究竟。有时候,当您争论自己的观点而您的领导者不同意您的观点时,这是因为您的领导者对全局有更好的了解。这是其中一种情况。
安德鲁·库恩斯

不同意。这样,您就将您的下属带给其他人,而追随者会忘记如何做出决定并对其负责。如果您想要-很好。我认为,在团队领导下,人们会比您更聪明。但是,是的,有些人对此有疑问,这是悲剧性的。
JensG 2013年

我对您的回应感到很高兴,因为您的回应是“在软件行业造成的烧心和混乱更多,而不仅仅是其他任何原因。”……谢谢!说不出更好的话!
Alexus 2015年

11

我注意到您并不是说您被聘为JRuby或Java程序员。

这就是您说您被录用的原因:“ [B]因为我在构建Web应用程序方面有很多经验,并且因为我倾向于JRuby on Rails或nodejs等较新的技术。”

换句话说,他们喜欢您的网络体验以及您学习新技术的意愿。

现在,他们要您使用网络体验学习新技术。

所以问题是,您是否要这样做?


9

软件的最大支出在于软件的维护

我读到最大的支出(80%)是在软件维护上。最初的开发仅占开发总成本的20%。

我读了一个案例,该案例涉及一名开发人员以其母语(不是英语)开发代码和注释,而其他团队成员去增强和维护代码时,这几乎是不可能的,因为该语言(不是任何编程语言)都是外国语言给他们。

同样,如果您使用自己选择的编程语言来开发代码,那么其他团队成员将很难维护。

解决方案:配对编程

考虑让您的雇主将您与知道所需编程语言并且可以一起工作的其他人配对。你们可以互相学习,如果你们中的任何一个离开公司,那么另一个人就会知道代码。

维基百科有关“配对编程”的文章:http//en.wikipedia.org/wiki/Pair_programming


3
如果您写的东西只有您自己理解,那么您将永远保持下去。
jwernerny

6

许多公司只是喜欢坚持自己一直做的事情或“安全”的事情。Java和PHP仍然很受欢迎是有原因的。此刻,在indeed.com上搜索“ COBOL”将返回2144条清单……这应该是不言而喻的。业界并不关心良好的代码,它关心的是它会尽可能长时间地运行(这并不意味着C#是不好的,实际上不是)。

仔细考虑一下:代码将使您永不过时。很有可能其他人将维护您的代码,并且C#比Node.js和Rails更安全。如果在5到6年内,Ruby程序员的数量减半,这在Perl和其他任何被认为是“ it”网络语言的语言上发生了同样的变化,这也就不足为奇了。Javascript不太可能消失,但我们已经开始看到它被用作Web的一种ASM(甚至C)-一种其他语言可以编译的中间语言,因此可以在其中编写服务器端代码很好地变得过时了。


4
尽管这是事实,但对于C#商店来说,聘用不了解C#的Ruby开发人员的招聘实践相当差,却没有绝对清楚地表明他所雇用的工作主要涉及C#开发。
Carson63000

5

我对开发人员选择如何实现目标的主要关注是,他们通常只假设他们将要编辑代码。这样看,12个月后他们可能需要更改;您不可用(离开公司或忙于其他任务),并且另一个开发人员必须修改您的代码。如果是C#商店,那么使用他们的工具集就是很好的团队合作。应该研究和实施新技术,但只有当领导者认为时机成熟时,他们才能着眼于许多目标,而不仅仅是一个目标。


3

请把它转过来。假设您是一位雇用Ruby开发人员的人,他们坚持要在Asp.net/MVC中实现他们的工作。

你会对他们说什么?这是我们的筹码,伙计。学习生活。

黄金法则,这就是拥有黄金的她制定的准则。


1
但是,为什么要雇用一个坚持使用.NET担任Ruby角色的人呢?
Bobson

3
@Bobson是因为他们是一个聪明的年轻程序员,他似乎能够使用多种不同的技术解决问题,令人满意地解决了一般的编程问题,因此他们申请了这份工作。

2
@Bobson:所以现在您正在争论公司不应该雇用没有使用公司所选择语言经验的开发人员。其他人似乎都在争论另一个方向,他们声称他们可以真正快速地学习新语言,因此公司不应仅仅因为他们还不是特定语言的专家而就放弃优秀的开发人员。
Dunk

2
我之所以被录用,是因为我拥有构建Web应用程序的丰富经验,并且因为我倾向于JRuby on Rails或nodejs等较新的技术。” -这不是被聘为XYZ开发人员,而是“被聘为具有较新技术经验的Web开发人员”(该公司可能会对将来的更新感兴趣)。

3
@Bobson:当我被雇用到一家新公司时,我不仅知道我要带给我什么,而且我也知道我将要从事的项目以及他们希望我在该项目上做什么。如果操作员不愿意找到这些信息,那就对他感到羞耻。话虽如此,我认为这确实是该公司聘请他们认为是具有相关领域知识的优秀开发人员来帮助团队的人的一个案例,并期望获得mvc4东西是一个小障碍。也许该公司没有很好地解释这一点,但OP也没有发挥作用。
Dunk

2

有许多相互矛盾的目标,而问题是要找到最佳的折衷方案。我们有最后期限,我们的团队负责人需要一个特定的工具集,而我们的开发人员对此工具集没有经验,但是注定要在(显然很短的时间内)产生某些东西。

重要的是要理解,团队负责人可能有一些充分的理由说明他为何完全需要此工具集(其中一个确实可能是因为您可能不知道的某些原因而使您习惯了此工具集)。第一次运行时,您可以做的最好的事情就是找出这些原因到底是什么。

在您的位置上,我将尝试与团队负责人交谈,并尝试解释您所认为的情况,以及产生的选择以及产生的结果(包括短期和长期经济影响)遵循以下每个选项。例如,可以指派另一位更有经验的开发人员来指导您,可能需要进行一些配对编程会议等。

除非您的团队负责人是完全傻瓜,否则您应该能够找到对项目和公司整体目标有意义的共识。


2

呸。每个人都是错的。

做一个比那些单平台的人更好的开发者,您将拥有比他们以往任何时候都有趣的选择。所以,现在,一定要学习MVC。在您自己的时间上,了解有关您真正感兴趣的平台的更多信息。建立您的Node技能。学习一些Django。注意您接触过的Java或MVC之前的版本,然后逃之but,但至少要学到足够的知识,才能批评和解释您对这些平台几乎隐瞒的仇恨抱有多少想法。(好的,也许我在那儿投影)

现在提供重要建议。如果您继续磨练自己的专业,同时又在其他领域多元化,那么最终您将可以在一年中的任何时候在任何给定的主要城市中,在不到两周的时间内找到新工作,而这些工作都是最有趣的是至少有一半的时间。当您发现自己在这个地方时,不要在他们说想要的工作上忍受这些工作,到第二天,他们会让您做那件事,并且没有希望在长远的将来得到缓和。只是有礼貌地解释和道歉,但是没有,您真的不想做那件事,在面试时说了那么多,然后!@#$ ing辞职,继续走了几周,他们不可避免地没有采取任何行动以适应他们误以为是您的事实,并拒绝承认这一事实。

但请相信我,找到新演出总是比持续超过5分钟的时间变得烦躁和不高兴更好。但是,当然,首先您必须支付会费,然后您才能这样做。有些人永远不会。这就是为什么他们想要他们最了解的东西中的一切。当然,其他答案并不是真的错误。如果.NET商店必须维护愚蠢的东西,那么与.NET一起使用确实是有意义的。

当然,没有意义的是为什么他们会使用Rails / JS / UI开发人员进行多样化,只让他做MVC应用程序。但现在。您可能需要将其收起来并支付您的会费。正如我在评论中所说,MVC确实还不错。考虑到所有选项,这确实是一个糟糕的选择,但肯定不是最坏的选择。这非常简单,不会在实际发生的事情上抛出10,000层抽象,也不会使自己与客户端发生纠缠,以至于您诅咒负责任的MS工程师的名字。学习它们。

因此,如果还没有的话,去到可以随时离开的地方,您甚至可能会对自己喜欢的事物持怀疑态度。您甚至可能会发现自己像我一样讨厌铁路。并不是说Ruby有什么问题(当然不是它的解释器)。


1

根据您的情况,假设您知道他们为什么雇用您可能很危险,而假设您的经理知道这一点并同意雇用具有您技能的人是一个好主意,则可能会更加危险。

我想问一下上面的建议,并提出一个业务案例,为什么您应该在C#上使用JRuby,也许您的论点和时间表意味着打破旧方法是有道理的。我不只是认为这是可以的,还是要给经理或引导事实,然后让他们做出决定,这就是他们所需要支付的大笔费用,再加上一点CYA。


1

坦率地说,将优秀开发人员与优秀开发人员区分开来的一件事是他们适应新技术的能力。我们生活在一个快节奏的世界中,今天的顶级技术明天将过时。因此,不愿适应的开发人员对公司的使用受到限制。如果不是因为发现和聘用好人真的很难,而当一家公司找到他们的瑰宝时,他们正计划长远的话,那会很好。

我见过一些公司雇用他们的技术范围以外的人,并且出于同样的原因这么做。他们希望与优秀的开发人员接触,即使这意味着等待他们适应新技术。

现在到您的情况。作为小组中的一个新成员,我会非常谨慎地对自己说什么,而不要对上司说。当然,基于您仍在适应新环境的假设,您将获得很多收益。但是,破坏您的首选技术的权威和顽强的毅力只会使您的上司认为他们雇用您是错误的,并且您不愿意离开自己的舒适区。

您会选择什么取决于您,但是我建议您尝试学习新技术。我保证,这不会伤害。


1

我将假设您在面试中对您缺乏C#知识很诚实,因为如果您不这样做,那么从法律的角度来看您可能处于非常不稳定的境地。

好的程序员会编程。显然,没有人能精通所有语言和框架,但大多数语言和框架之间存在相当大的共性。除非要求您使用与当今主流语言(例如Lisp)大不相同的语言进行工作,否则优秀的程序员应该能够适应。

自然地,存在学习曲线。如果雇主雇用了您,那么他们必须对您在合理的时间内遵循该曲线的能力充满信心(再次,假设您是诚实的不了解C#的人)。C#语言是从Java大量借用的,并且在一般情况下,大多数基于类的编程语言在本质上是非常相似的(您提到了node.js,它基于ECMAScript构建,ECMAScript是基于原型的语言,因此显然适应其他编程范例。

优秀的程序员除了要灵活之外,还应该乐于学习新事物。在软件开发中,您通常要么学习,要么变得无关紧要。

当然,假设他们知道您不了解C#,您的老板必须中途见您。如果您渴望学习,那么他们必须给您时间和资源。把你扔进深渊是不公平的,不必要的压力。您需要坐下来与上级进行冷静,理性的讨论。如果他们希望使用C#,那么他们必须准备好接受您在学习过程中处于学习曲线上,这对他们强加紧迫的期限是不公平的。如果最后期限不灵活,并且具有很高的战略重要性,那么他们需要准备好让您有一定的自由度,以便在该最后期限内完成工作。如果他们需要使用办公室中更常用的语言,那么您也许可以要求立即以自己的方式实施 熟悉最后期限,然后作为下一个项目在C#中重新实现它作为学习练习,并在软件满足外部要求后使其符合内部要求。就像我说的那样,当今大多数较常用的语言都有很多共同点,因此主要归结为实现细节。

您必须准备早晚接受在C#商店中工作的准备,因此您确实需要掌握C#。


0

也许他们对每个人在.NET环境中使用MVC的方式都不满意。可能像Webform一样对待它太多了。当具有程序背景的人从OOP开始,将所有内容归为一类,然后照常进行时,这没什么不同。

第一个项目不是理想的情况,因为他们希望如此快地完成。尽可能快地使用.NET并开始尽快开发功能。您不会喜欢您的处事方式,只是要记住,您将开始重构这些内容并将您的技能应用另一种语言。

希望您以更Ruby风格使用MVC4的方式(假设其他所有人都做得不太正确)将赶上并使每个人摆脱Webforms思维的方式。

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.