系统地选择编程语言


24

我正在寻找一种选择语言的方法。我不是在征求有关语言的意见。我的任务是将我们商店的当前语言与其他可用语言进行比较。我们是一家网站开发商店。

我们的CEO希望获得一份关于所有可用的基于Web的语言的完整白皮书,这些语言是它们的派生语言(例如,jsp来自Java,而Java来自c / c ++)。我还需要创建一个矩阵,其中包含特定语言的所有关键因素以及该特定语言的不足之处。语言是受平台限制的吗,是为功能编程,过程还是面向对象设计的,还是可以与任何编程范例一起使用?

我还需要掌握较少技术性的信息,例如给定语言的人才库的规模以及该人才库中位数的薪水。市场将如何看待我们的选择?

我们开始寻找一位顾问来帮助我们理解所有这些事情,但是我们发现大多数顾问都来自开发背景,而且通常答案似乎是“ xxx是最好的语言,因为它是我所用的语言。在过去n年中使用最多,并且从未让我失望。您可以在前端添加yyy并使用zzz库”

我对这项任务感到不知所措,并且鉴于我们的首席执行官正在寻找的东西,我觉得最好的做法是在学术界寻找并雇用没有实际开发经验的教授来“教”我们关于所有可能的语言。

还有其他人必须进行此练习吗?如果可以的话,您可以分享过去用于该过程的步骤和/或方法吗?


21
CEO是否真的打算使用此矩阵来决定诸如“我们将使用$ {language}来构建$ {nextBigProject}”之类的事情?要构建实际上可能有用的东西(尽管我不确定它是否会非常有用),可能会花费大量时间,并且还会对其进行持续维护。
FrustratedWithFormsDesigner 2014年

3
我认为,为项目选择语言/环境的一般指南可能是首先尝试更深入地了解项目正在尝试解决的特定问题(以与语言无关的方式),寻找可用于该项目的工具/库。当时最好的解决方法,然后查看与这些工具/库一起使用时需要了解的语言。这可能会给你的候选名单的语言,并从那里你可以簸下来根据你熟悉他们,厂商的支持,预算,等等
FrustratedWithFormsDesigner

9
第一个要回答的问题是,“我们需要改变呢?” 您当前选择的语言不能解决哪些问题?
约翰·博德2014年

4
Stack Overflow如何帮助开发人员评估技术? “今天早上我面前有大约8个框架,试图决定我要使用哪个框架...”
gna 2014年

7
在实践中,您最好扔飞镖。在Web领域(尤其是JavaScript等)中,有数十种(如果不是数百种)选项,具有各种优势,劣势,亲和力和不兼容性。您可以对其进行分析直至死亡,或者只是进行有根据的猜测,然后继续进行,并在需要时进行中途更正。
Daniel R Hicks 2014年

Answers:


53

@FrustratedWithFormsDesigner在以上暗示了这一点,我会更直率地告诉您:您已承担了一项昂贵但无用的任务。

我怀疑首席执行官正在寻找无法辩驳的客观证据,以支持他选择的语言。问题在于,语言的偏好包含了太多的主观和外在因素,从而使白皮书变得无意义,更不用说有用了。

换句话说,如果有一种理想的语言,那么每个人都会使用它,而不是那些“客观上”有缺陷的语言。它也表明了一定程度的微观管理,这应该是必须使之起作用的工程师的职责。Erlang可能是“客观上最好的”,但如果没人知道,则增加6个月/工程师的启动成本,再增加6个月/工程师的成本即可。

由于我没有您的工作,因此我不担心失去工作,尽管您可能这样做。我会给CEO一篇有关“物理教会转向论文”的论文。然后,我将与高级工程师聚在一起,就他们应该使用什么获取他们的不严格,非客观的意见,并告诉首席执行官您将使用什么。作为交换,您将保证工程师不会参加董事会会议,首席财务官,会计方法,副总裁的选择等等。我们专长是有原​​因的,他在工程偏好方面的位置比您在他的领域中没有更多。


6
哈,我喜欢最后一段的鲁ck热情。我要说的是CEO领域,因为您提到的那令人讨厌的6个月,这就是您要告诉他/她的恕我直言的全部。
内森·库珀

1
“物理教会转向论文”让我们不要去那里。很少有编程语言具有形式语义,这是图灵完整的前提。(没有一个,它甚至都不是计算模型。)
Rhymoid 2014年

4
只需选择Lisp并完成它即可。
埃里克

1
Lisp是指ClojureScript。:-)
Brian Knoblauch 2014年

1
+1。向工程师传达为什么这不是一个好方法是您作为工程师的职责。这可能很难,因为它看起来像是一种好方法,但这是必需的。
djechlin

25

需要考虑的一些广泛的笔触:

语言受欢迎

这真的不重要,因为受欢迎程度不一定等于生产力,表现力或其他更重要的语言品质,但是这种考虑通常比其他所有考虑要重要,因为:

  1. 查找流行语言的软件开发人员比较容易。
  2. 查找流行语言的工具和库更容易。
  3. 决策者不了解语言的取舍,因此他们会做出安全的决定(“许多公司都使用这种语言,因此一定是好的”)。

适用于问题域

任何程序都可以用任何图灵完备的编程语言编写,但是某些语言比其他语言更适合某些问题领域。如果您正在编写Web应用程序,则可能会倾向于使用适合于此的语言和工具,而它们很可能是面向对象的语言。

另一方面,如果您要编写主要基于研究或数学的软件,则可能会倾向于使用包含功能范例的语言。

当然,介于两者之间。许多语言支持多种范例,并且存在某些软件模式只是为了克服那些缺少某些功能或范例的语言的局限性。

表现力和生产力

有些语言比其他语言更具表现力。可以使用一千行代码用一种语言编写的内容可以使用一百行代码以一种更具表达性的语言编写。权衡的是,一百行代码可能是由具有较高专业知识的人用一种不太流行的语言编写的。

用于编写业务应用程序的面向对象语言中存在的许多代码行都是仪式。这项仪式虽然花费时间和精力进行开发,但也提供了一种可见的结构,否则该结构在使用更具表现力的语言时就不会显而易见。它可以使专家的知识比其他人需要的代码少,从而减少了风险。

多种语言的时代

我将断言,决定使用一种语言的愿望可能是一个错误的困境。当今的应用程序通常不是用一种语言而是用多种语言编写的。每种语言都有其自身的优势,并且(从理论上来说)是针对正在使用的任务专门设计的。某些问题域(例如Web浏览器逻辑或数据库访问)需要特定的语言。


7
我要补充一点,如果您想使用多种语言,考虑一个支持它们之间轻松互操作的平台(.Net CLR或JVM)可能会很有用。
2014年

9
@NathanCooper:您的意思是您从未编写过Web应用程序?哪怕是一个很小的?还是不得不将移动应用程序移植到多个平台?还是在嵌入式系统中工作?还是从SQL数据库检索到的数据?
罗伯特·哈维

10
@ NPSF3000:当然,您不必费心透露自己的巫术方法。我称恶作剧。
罗伯特·哈维

9
@ NPSF3000虽然C#可能是您所做工作的一个不错的选择(尽管使用Unity确实使事情有些延误,因为它是专为他们完成所有多语言繁重工作而专门设计的),但是您的轶事并没有反驳这一点。当然,从使用SQL和其他技术的角度来看,大多数非琐事项目都是多语言的,但即使如此,许多项目还是并行使用不同的编程语言,或者以一种语言编写应用程序,以另一种语言编写工具,等等。根本不认为该主张有争议。
克里斯·海斯

7
@ NPSF3000如果这是您的问题,请说出来。不要让我们经历试图找出您的意思的繁琐过程。如果您明确表示“我不同意某些问题域需要特定的语言”,我相信Robert会很乐意进行编辑。就是说,在这里我完全不暗示使用多种语言进行工作是“默认情况下有利的”。
克里斯·海斯

5

选择某种语言有商业原因,而选择一种语言则有工程学原因,而且通常情况并不总是如此。由于学术原因而扔东西可能会使情况变得更糟。我怀疑教授将能够按您需要的方式为您提供帮助。

关于语言的血统和功能的事实很容易找到。您可能需要花一整天的时间在Wikipedia上填写大部分内容。人才库的规模和薪水更加困难,因为大多数人不认为自己是单一语言的程序员。使用诸如Scala之类的不太流行的语言的公司非常希望聘请没有特定语言经验的优秀通用程序员。从我看过的一些演示来看,该策略似乎效果很好。

即使知道事实,仍然给您一个相当主观的选择。您的CEO希望将其归结为一个粗略的指标,例如每个功能的美元。为了获得准确的图片,您将不得不做一些原型,然后讨论学习的难易程度,一旦学习了基础知识后编写原型的速度有多快,维护起来的难易程度如何。 ,以及您认为这对您通常从事的工作的适用范围。

我将尝试从不同的编程范例和框架类型中寻求代表,并在每种语言中实现一个原型,而不是尝试涵盖所有语言。

这是后端类别的粗略清单:

  • 微软。(可能有子类别。我对此一无所知。)
  • 重量级的OOP,例如Drupal。
  • 轻巧的OOP,就像python瓶子一样。
  • 使用Scala播放/提升/缩放。
  • 使用Java播放/提升。
  • 春天般。
  • 像支柱一样。
  • 像铁轨一样。
  • 基于Haskell。
  • Node.js

在前端:

  • OOP样式的JavaScript
  • 功能样式的JavaScript,例如Underscore
  • 响应式JavaScript,例如培根
  • Google Web工具包
  • 榆树

在每个类别上花一两天的时间,实施一个简单的原型,将花费您几个月的时间,之后您将对每个类别的优缺点有一个更好的了解。也许您可以根据公司的文化或经验更快地排除某些问题。

由于这是一份业务报告,因此我还需要花一些时间来搜索诸如“ <company>使用哪种语言”之类的内容,以替代您喜欢的各种公司。他们中的许多人都写了自己的白皮书,说明了为什么要选择特定的语言,这将为您提供很好的参考。


4

将现有开发过程固有的缺点标识为$ A并将其花费。将切换到任何其他开发过程的成本确定为$ B。

如果$ A小于$ B,则停止。

如果您已知的缺点超过了改变的代价(如果这样的话,那是很大的话!),然后详细分析这些缺点,并开始寻找可以解决这些缺点的语言/开发环境/开发过程更改,而这不会带来其他更昂贵的问题。

老实说,除非您当前正在尝试在Fortran中开发Web应用程序,否则您使用的语言的唯一影响将是您用来填补空白的承包商的成本。主流和成熟的语言/工具/开发流程已经解决了您可能会遇到的大多数问题,因为最昂贵,最昂贵的培训师和承包商附带了最热门,最新和最性感的工具,但解决方案最不成熟。而且,如果您确实有需要进行此类更改的缺点,则您选择的语言不太可能完全解决它们。

但是,如果此处并不是盈利能力的主要目标,那么您就需要考虑被视为过时的耻辱与对尖端技术的赞誉。向老板询问要用于方程式这一部分的美元价值。

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.