在提议使用新语言之前要回答的问题?

时间:2009-11-03 19:50:39

标签: clojure

在我接触某人介绍新语言之前,我必须先解答哪些技术问题?

我正在寻找技术问题列表,如果没有一个非常好的答案,我甚至不应该浪费任何人的时间来提议我们使用语言X.

PS :( def X clojure)

12 个答案:

答案 0 :(得分:52)

工程师的政治速成课程......

尽管所有的使命宣言中的所有内容都意味着高贵并强调社区支持,但每项业务的真正目的都是投资回报,或者等同于最大化股东价值 。如果它是一个政府机构,它仍然是一个相同的问题,但合法所有者将没有直接影响,相反,你将拥有代理所有者,如更高级的代理机构或强大的个人官员。

然而,决策几乎总是由代理商决定,因此 principal-agent problem (也称为代理商困境)出现;代理人(管理层)将根据其利益作出决定,而不一定根据理论上要求的股东利益。在政府机构中,这几乎是100%的考虑因素。

遗憾的是,这激起了迪尔伯特和帕金森律法的复杂性。

您可以得出的最好结论是,决策将基于风险,成本和收益来证明,但往往是基于代理商存储的信用和责任以及代理商理解的信息和责任。 ,这是一个狭隘的风险因素,对委托人来说是值得怀疑的,但至少是可识别的。

因此,我们现在应该将此应用于语言问题。您的经理可能会避免威胁,风险,丑闻和争议。他对委托人关注的应用主要是通过预算和期望的限制。以下是一些应该大部分不言自明的例子。

如果您想使用Java或PHP:

  • 每个人都是这样做的
  • 这是针对此类问题的行业标准方法
  • 这是低风险的方法
  • 类似的系统已在Java / PHP
  • 中多次完成

(这就是“没有人因为购买IBM而被解雇”的说法。)

如果你想使用Ruby:

  • Ruby在Tiobe排名前十位(不是行业标准,所以这是你能做的最好的)
  • PHP和Java是成本较高的技术(他可能有预算作为缓解委托代理问题的尝试)
  • PHP和Java将很快“过时”(也许不是,但是被称为“愚蠢地使用旧技术的风险”,并暗示缺乏后来的信用和认可)
  • Ruby是一种高级语言,具有强大的成本效益开发抽象(代理商的弱论据,但提供了信用的可能性。所有论据中效率最低。)

如果你想使用Clojure:

  • 您最好在周末和晚上对系统进行原型设计,并将其作为已解决的问题展示出来。
  • 强调并行Java / Clojure开发(“如果需要,整个系统可以用 Clojure Java编写”)
  • 制作所有Java参数,然后说一些关于“两全其美”的内容

答案 1 :(得分:17)

使用语言的生产力既不是唯一的因素,也不是简单的标量。重要问题包括:

  • 如果团队成员还不熟悉语言,那么学习语言有多容易?
  • 成为该语言的专家有多容易?
  • 团队是否可以访问一位或多位有能力进行必要指导的语言专家?
  • 是否有好的学习资料(书籍,博客,教程)和支持渠道(论坛,IRC,邮件列表)?
  • 语言(或该语言中的某些框架)是否允许合格的程序员以比您现在使用的更快的速度编写软件?
  • 语言的可维护性如何?对于有能力的程序员第一次遇到别人的代码的语法有多可读? (想想APL和Perl。)
  • 语言是否比您现在使用的语言更适用于您的问题域(例如,分布式计算的函数式语言)?
  • 语言/平台如何满足与开发速度无关的业务需求(例如,性能,可伸缩性)?
  • 有哪些可用的工具,以及它们的成本是多少?有可用的调试器吗?一个IDE? IDE内置的重构和单元测试支持?构建管理和部署工具?

答案 2 :(得分:3)

在很大程度上取决于您目前使用的是什么,您要转换的内容以及为什么难以回答。但这些都很重要:

  • 如果我选择以前不能做的新语言,我该怎么办?
  • 我能用比新语言更快的速度做什么?
  • 团队的其他成员将如何应对新语言的引入?
  • 如果我离开了,可能会有其他新手使用这种语言,而不会出现太多问题吗?

答案 3 :(得分:3)

商业案例是什么?

归结为投资回报率(ROI)。

不仅仅是关于个人的生产力,还有:

  • 整个团队

  • 对产品生命周期的影响

  • 可维护性

答案 4 :(得分:3)

接听起来有多容易?我发现这并不重要。

是否有IDE支持?非常重要,但没有它就可以工作。

是否有可用的调试器?我认为这是我要问的最重要的问题。一旦你有一个有效的调试器,你通常可以做任何事情。

答案 5 :(得分:3)

我们今年聘请了一支团队,并决定使用 Clojure 作为我们的首选武器。该团队的背景主要是基于Java的,但也有各种其他语言用于业余爱好工作。

我们考虑的标准是:

  • 我们可以利用团队的Java / JVM背景并与现有的基于Java的产品集成吗?
  • 我们能否达到与Java相同的性能?
  • 我们可以构建线程安全的并发可维护程序吗?
  • 我们可以利用更高级别的抽象
  • 我们可以雇用/训练人们用这种语言工作吗?
  • 我们可以用这种语言维护一个大的代码库吗?
  • 是否有足够的工具可以有效地使用该语言?
  • 是否有一个活跃的人群发展语言和图书馆?

我们认真考虑过Groovy,Scala和Clojure。我非常喜欢轻量级应用程序的Groovy,但我对性能有严重的疑问。 Scala和Clojure都有很多可以提供上述所有要点。最后,我们的问题领域涉及很多符号操作,我们认为Clojure会更好,但我怀疑Scala也能很好地运作。

答案 6 :(得分:2)

您的新语言将提供现有语言尚未提供的内容?

我们的语言几乎可以解决今天的各种问题。因此,在引入新语言之前,请确保没有一种语言能够完成新语言的所有功能。并确保您确切地知道您的新语言将提供哪些功能,这些功能不是以相同的组合提供,或者完全不是由其他语言提供。

除非你当然只是为了自己的教育而做这件事 - 在这种情况下忘记这个问题并且掌握它!

答案 7 :(得分:2)

这将如何提高我的工作效率?

如果无法收回,请回家。

答案 8 :(得分:2)

有什么意义? /为什么?

如何让我的工作更轻松?

答案 9 :(得分:2)

Q1:我可以雇用具备这些技能的人吗?

Q2:当我打电话给我们的外包合作伙伴客户经理,并询问一个典型的固定成本项目成本,如果以通常的方式完成,或使用语言X完成,乘数是否超过1?

问题3:我所在部门的其他人是否也有一种喜欢与我最喜欢的语言工作相同的语言,并且他们最喜欢的语言也应该使用吗?这有什么实际后果?

答案 10 :(得分:0)

一个很好的问题是围绕语言/框架的社区规模是多少。例如,ruby / rails周围有一个重要的社区,这让我更加舒服,因为我不会成为“第一个遇到特定问题的孩子”。

答案 11 :(得分:0)

为什么要限制自己使用一种语言?找出哪种语言和提供服务最能解决哪些问题。如果服务之间的带宽太高,那么根据哪种语言最好地解决有问题的服务。