正确的工作语言

时间:2010-05-05 11:05:38

标签: programming-languages

使用正确的语言作为关键 - 这是我在SO中读到的评论,我也相信这是正确的事情。因此,我们最终为项目的不同部分使用了不同的语言 - 如perl,VBA(Excel宏),C#等。我们目前在项目中使用了三到四种语言。使用正确的语言完成工作使得自动化工作变得越来越容易,但是最近有人抱怨说,任何接管项目的新人都必须学习这么多不同的语言才能开始。也很难找到这样的人。请注意,这是在给定时间点最大限度地处理项目的一到两个人。我想知道我们所遵循的方法是否正确,或者我们是否应该融合到单一语言并尝试在所有工作中使用它,即使另一种语言可能更适合它。与此相关的经历也会有所帮助。

使用的语言及其目的:

  1. Perl - 处理大型文本文件(日志文件)
  2. C#with Silverlight用于基于Web的报告。
  3. LabVIEW for automation
  4. Excel宏,用于处理Excel工作表中的数据,生成图表并导出到powerpoint。

8 个答案:

答案 0 :(得分:14)

我说你做对了。我曾经工作过的几乎所有项目都使用了多种语言,没有任何问题。我认为你可能高估了人们学习新语言的难度,特别是如果他们都使用相同的范例。如果您的项目使用Haskell,Smalltalk,C ++和汇编程序,您可能会遇到困难,我必须承认: - )

答案 1 :(得分:13)

使用多种语言与可维护性只是另一个设计决策成本与利益之间的权衡,与任何设计决策一样,需要仔细考虑。虽然我喜欢使用“绝对最佳”工具来完成任务(无论“绝对最佳”意味着什么),但如果不考虑其他因素,我不一定会使用它,例如:

  • 我们是否有足够的技能和经验来成功实施
  • 我们能否找到维持它的必要资源
  • 我们已经在我们的系统中使用语言/技术
  • 整个系统的复杂性增加(例如集成问题,对构建自动化的影响)超过了使用“绝对最佳”语言的好处
  • 是否有另一种语言我们已经使用并且有经验可以用来代替“绝对最好”的语言

我与十几位使用C ++,Java,SQL,TCL,C,shell脚本以及只需轻轻一点Perl的工程师一起工作。我很自豪我们使用了他们理解的“最佳语言”,但是,在一个案例中,使用“最佳语言”(TCL)是一个错误 - 因为它是TCL - 而是因为我们没有观察到选择的全部成本与收益:*

  • 我们只有一位工程师非常熟悉TCL - 原来的工程师拒绝使用TCL作为特定目标组件的任何东西 - 然后该工程师离开了项目

  • 此目标组件是系统中唯一使用TCL的部分,相对于系统中的其他组件而言它很小

  • 该组件也可以用我们已经使用过的另一种语言实现,我们在(C或C ++)方面有很多经验并付出额外的努力

  • 该组件看起来似乎很简单,但实际上有一些微妙的角落案例让我们陷入困境(不是我们当时所知道的,但总会考虑以后的事情)

  • 我们必须对夜间构建实施特殊更改,因为 TCL 编译器(是的,我们代码编译成可执行文件)将无法正常工作除非它首先在屏幕上抛出它的标志 - 这是一个在cron启动的自动夜间构建期间无法使用的屏幕。 (我们使用xvfb来满足它。)

  • 当出现错误时,我们很难找到想要工作的工程师

  • 当该组件的问题仅在现场持续负载后出现时,我们缺乏对TCL执行引擎的经验和深刻理解,无法在现场轻松调试

  • 最后,维护和维护团队是一个规模小得多的团队,资源少于主要开发团队,他们还需要一种语言,他们需要培训和经验来支持这个相对较小的组件

虽然我们可以采取一些措施来阻止我们遇到的一些问题(例如,更加重视早期获得TCL经验,运行更好的测试以更早地发现问题等),我的观点是,整体成本与收益并不能证明使用TCL对单个组件进行编码是合理的。 同样,使用TCL是错误,因为它是TCL(TCL是一种优秀的语言),但它是一个错误,因为我们未能充分考虑成本与-benefits

答案 2 :(得分:4)

作为软件工程师,如果您需要,可以您的工作学习新语言。我会说你应该选择合适的工具。

就像用章鱼扫地一样。是的,它完成了工作......有点......但它可能不是最好的工具。你最好使用拖把。

另一个选择是创建适合特定语言的职位。因此,您可以拥有一名C#开发人员,一名Perl开发人员和一名只使用该语言的VBA开发人员。这是一个更多的开销,但它是一个可行的解决方案。

答案 3 :(得分:3)

任何范围的任何现代软件项目 - 即使它是一个人的工作 - 都需要多种语言。例如,Web项目通常需要Javascript,后端语言和DB查询语言(尽管这些语言中的任何一个都可能由后端语言创建)。也就是说,有一个容易达到的门槛,然后很难找到新的开发人员来接管项目。限制是什么?三种语言?四?让我们说:五个太多了,但是对于任何一个相当复杂的项目来说太少了。

答案 4 :(得分:1)

我认为,如果我的团队中的程序员想要在项目中引入第二种(或第三种)语言,那么最好是非常充分的理由这样做;作为项目经理,我需要确信这样做的成本,不仅仅是抵消了问题。这需要很多说服力。

将项目拆分为多种语言会使得雇佣合适的人员在需要维护时接管该项目非常昂贵。对于中小型商店来说,这可能是一个巨大的障碍。

编辑:我不是在谈论在同一个项目中使用javascript和c#,我说的是大部分代码使用C#,部分使用F#,然后是其他的VB或C ++ - 需要有一个令人信服的理由。

KISS:'保持简单愚蠢'在大多数情况下都是一个很好的公理。

编辑:我并不完全反对添加语言,但举证责任在于谁想要这样做。 KISS(对我而言)不仅适用于完成和运输项目/产品,还必须考虑到终身维护。和支持要求。许多语言来来去去,程序员被新的语言所吸引,比如飞蛾。我工作的大多数项目,我仍然监督和/或支持5或10年后 - 我想看到的最后一件事是一些长期遗忘和/或孤立的语言,负责我需要支持的应用程序的一些关键部分。

答案 5 :(得分:1)

使用正确的语言来做正确的工作绝对合适 - 我主要是一名网络程序员,我需要了解服务器端编程(Rails,PHP +其他),SQL,Javascript,jQuery,HTML& CSS(严格来说不是编程语言,但我需要知道复杂的事情) - 我不可能用一种语言或技术来完成所有这些。

如果你有一个聪明的开发人员团队,那么选择新语言对他们来说不是问题。事实上,他们可能会急于这样做。只要确保他们有足够的时间(和指导)来学习新的语言。

当然,如果有新的语言需要学习,那么实施生产代码会有一个学习曲线,但是你会有一个更强大的团队成员。

如果您的团队中的开发人员强烈反对学习新语言,除非有充分的理由(例如他们有理由坚持要求他们在不适合的情况下使用其他语言) - 那么他们不是我想要的团队开发者。

并且不要费心去雇用了解您使用的所有语言的人。聘请聪明的程序员(他们可能至少知道你使用的一种语言) - 他们应该选择其他语言就好了。

答案 6 :(得分:0)

我使用C ++和Lua的经验是,我写了更多的胶水,而不是实际的操作代码和可疑的好处。

答案 7 :(得分:0)

我首先要说的是,你是否正在使用正确的范例来完成工作?

假设您知道如何在C#中进行面向对象编程。我认为Java的飞跃并不是那么好。虽然您必须熟悉库和语法,但这个想法非常相似。

如果您的项目有程序部分,例如解析文件和各种数据转换,您的Perl / Excel宏看起来非常相似。

但是为了解决你的问题,我首先要说的是,你需要清晰的代码。由于您的员工使用多种语言,因此他们不会在同等程度上熟悉所有语言。所以请确保:

1)注释中解释了句法糖。糖是非常特定于语言的,对于新读者来说可能并不明显。例如,在VBA中我似乎记得有默认属性,因此TextBox1 =“Hello”是您要编写的而不是TextBox1.Text =“Hello”。这可能令人困惑。此外,LINQ语句之类的内容可能具有不明显的含义。因此,请确保人们有意见阅读。

2)如果来自不同语言的两个组件必须协同工作,请尽可能详细地说明具体情况。例如,我曾经不得不编写一个要从Excel VBA调用的C组件。这里引用了一些步骤和潜在的错误,尤其是编译器标志。确保双方都知道他们的交互方面是如何发生的。

最后,就招聘人员而言,我认为你必须找到没有与特定语言结婚的人。简而言之,雇用一个聪明的人来看待业务问题,而不是代码。他很快就会学习这种术语。