程序员是否应当有权自主选择语言以及框架?
网友Spencer问道:
我目前就职于一家主要面向C#语言的公司,虽然公司内部也有几位喜欢Java与JRuby的同事,但大多数程序员都更倾向于使用C#。当时我被录用的理由是,我拥有丰富的Web应用程序创建经验而且比较喜爱JRuby on Rails或者node.js这类新型技术。
最近我开始接手一个Web应用程序构建项目,主要工作就是必须在短时间内保证该应用能够实现大量针对性功能。软件开发负责人要求我使用MVC 4来取代Rails,这倒并不是什么过分的要求,但我对于MVC 4完全不了解、对于C#也一无所知。然而我又是惟一一位负责创建Web应用程序服务器及前端UI的程序员。
难道说我就不能使用自己非常了解而且已经熟练掌握的框架(Rails)来代替MVC 4吗?之所以作出这样的决定,是因为这位软件负责人不知道如何运用JRuby/Rails、当然也就无法重复利用由此开发出的代码。
反对意见:
• 既然他本人并不参与代码编写工作,那么坦率地讲整个开发项目根本不需要他的参与。因此,无论他了不了解JRuby/Rails都并不重要。
• 我们实际上能够重新使用这部分代码,因为我们拥有大量Java应用,因此与JRuby之间进行代码往来与交换。事实上,他还要求我们把一部分资源由Java库转换成C#,而不准员工直接在JRuby on Rails应用中运行Java库。这一切的惟一理由就是,他不喜欢Java或者JRuby。
我曾经亲自开发过很多Web应用程序,但使用自己不熟悉的语言会给流程带来障碍,而且我更没办法在这么短的时间里拿出像过去那样令人满意的成果。这倒不是什么无法接受的状况,毕竟在开发领域学习新技术算是不可或缺的重要一环。但问题在于,在这个项目中我们不仅要顶住巨大压力、还得尽快搞定这么多任务。
因此,开发人员要在怎样的条件下才能自主选择所使用的工具?这该由公司方面决定吗?到底是我所在的公司糟糕透顶,还是说这已经成为业界常态?我是否应该选择其它更适合自己的企业?我审视这个问题的角度是否有所偏差?
反馈意见
网友Telastyn的回答(得到111票赞成):
开发人员要在怎样的条件下才能自主选择所使用的工具?
当这种选择不会给整个团队带来影响时。
我审视这个问题的角度是否有所偏差?
明显是的。
没错,公司给你设定的截止周期实在太过紧张。没错,如果使用Rails,你能更快地完成任务。不过公司需要应对与应用程序相关的全部部署与维护工作。如果这家企业拥有一大批精通C#语言的开发人员,那么开发C#应用很可能会带来维护上的成本优势(以及应用质量优势)。
这家公司的数据库管理员以及其他运维同仁可能对于C#堆栈非常熟悉,而且拥有一整套应对此类特殊堆栈的部署与更新流程。即使你个人能够更快更好地完成代码编写工作,不同的编程方式也很可能给其他同事带来困扰,并最终使这款专业Web应用程序的调试与运行周期变得更为冗长。
请记住,我们用在应用程序维护方面的时间要远多于编写应用的时间,而优化对于这部分成本显然非常重要。
学习技能,赚取回报
网友Ampt的回答(获得19票赞成):
坚持使用Java/JRuby也未尝不可
主要理由在于,老板的最终目标是让你完成生产任务。他们雇用了你,你也将因此为公司创造价值。请确保他们明确意识到强迫你使用自己不熟悉的框架会带来哪些负面影响,例如:
1. 以较低的生产效率交付工作成果。
2. 所创建代码的质量较低。
即使是最优秀的程序员,在接受新的语言/框架时也需要一段热身过程。
关于学习MVC 4与C#的建议
学习新的编程语言绝对不是坏事。作为一名程序员,技能的培养与投入就像是一场冒险——我们不知道自己已经掌握的语言/平台会不会在什么时候、甚至是不久的未来突然退出历史舞台。不过由于微软始终保持着良好的发展态势,我认为投身这一阵营是个比较安全的选择。C#与MVC最近刚刚完成又一轮更新,这证明了它们二者都具备出色的发展空间、并将在未来的前进道路上继续保持活力。
要想成为一位更为全面的开发者,你必须始终保持积极的接纳与学习态度。从最理想的状况出发,你的老板可能愿意为整个学习过程承担必要开支,这意味着你能在帮助自己提高身价的同时继续领取目前的这份薪水。
总结陈词
你也许最终能够在这场冲突当中实现自己的诉求,但随之而来的则是面对同事们的不满甚至对立情绪。请向你的经理详细解释使用熟悉开发方式的优势与弊端,这样双方都能获得相对令人满意的处理结果。
把话说开
网友FrustrateWithFormsDesign的回答(获得87票赞成):
在我看来,你需要跟开发团队负责人深入交流,并就以下几个话题进行沟通:
“我知道大家都是.NET的坚定支持者,但我能够加入这个团队、主要凭借的是自己丰富的Java/JRubyRails开发经验。利用这些已经非常熟悉的工具,我能够在xx天之内完成新应用的开发工作。如果大家坚持,我当然可以从头开始学习C#/MVC 4,但单这一项所需要的时间就将超过xx天。您对此怎么看?”
问题的实质在于“之所以雇用你所看重的技能”与“你现在需要掌握的技能”之间存在冲突,但在表达这一点的同时你也强调了自己愿意学习各类新技能,只不过这会导致新应用的开发工作耗时更长、毕竟目前要使用的工作集对你来说还太过陌生。再次强调,你一定要充分表达自己对学习新技能的积极接受态度。如果你对于新技能的学习总是抱有抵触情绪,那么一旦你的现有知识储备无法帮助企业解决实际问题,下一个会被炒掉的员工肯定就是你了。
最后谈谈你提出的几个问题:
开发人员要在怎样的条件下才能自主选择所使用的工具?这该由公司方面决定吗?到底是我所在的公司糟糕透顶,还是说这已经成为业界常态?我是否应该选择其它更适合自己的企业?我审视这个问题的角度是否有所偏差?
问题的答案在不同的企业中往往有所区别。如果一家公司购买了微软工具,并将VisualStudio平台与.NET框架作为执行标准,那么开发者坚持使用Linux与C语言的行为显然有些不可理喻。这种情况非常正常。对于那些并不太挑剔具体编辑器类型的企业来说,上述矛盾可能会得到显著缓解,例如允许开发人员选择Vi或者Emacs,只要输出结果不受影响即可。我见过的一部分企业甚至允许开发人员在Windows或者Linux之间自由切换,但前提是他们所使用的语言必须能在两种操作系统平台上顺畅运行并具备良好的支持。
为什么企业要部署这样的流程?保持一致性是其中的一项重要原因。如果多位开发人员根据个人喜欢选择语言/框架、采取不同的工具并在不同系统之上进行测试,那么在为应用程序代码库进行补丁更新时,企业方面将很难完成必要的调试工作。相比之下,如果所有开发人员都能在最大程度上使用相似的设置环境,那么这些难题将被消弭于无形。