如果一种语言迅速变化,这被认为是一件好事吗?


14

我见过一些语言变化很快(例如,我说它们每年都在改进),而另一些语言则进展缓慢。

我的问题是,如果语言快速变化,这对程序员来说是好事还是坏事?程序员是否喜欢学习该语言中的新事物,还是喜欢坚持使用已有知识?


4
-1:太模糊和假设,根本无法回答。什么是“快速”?什么是“改进”?如果所有更改都向后兼容,那有什么关系?请改进问题以使其更具体。快速变化的具体语言可能会有所帮助。
S.Lott

旧程序仍然运行不变吗?

4
我当然更喜欢一种语言,它不会发生任何变化,但具有足够的灵活性以允许添加任意新功能作为库。庞大笨拙的语言将所有功能掩盖在其整体内核中,注定会腐烂。
SK-logic

“变更”和“打破向后兼容性”是完全不同的东西。后者是真正的问题。
user16764 2012年

Answers:


16

如果语言快速变化,这对程序员来说是好事还是坏事?

  • 所做的更改可能会添加一些漂亮的语法糖,使将来的代码更容易编写,并且错误更少
  • 更改可能会标准化程序员必须自行实现或依赖于第三方的惯用语/设计模式。
  • 所做的更改可能使与该语言通常使用的技术的集成更加容易
  • 这些更改可能有助于防止常见错误
  • 这些更改可能会弃用或消除危险的编程做法
  • 所做的更改可能为该语言的标准库增加了有用的添加,这些内容使我不得不自己实现或依靠第三方来完成这些工作。

  • 这种语言增加了复杂性-新功能可能并不总是能与旧功能(例如C ++与C的关系)一起很好地发挥作用
  • 旧版代码可能已过时,并且在没有更新的情况下可能无法在新版本的语言中运行(Python 2.x-> 3.x)
  • 该语言的编译器和其他工具需要更新。现在可能存在多个版本。
  • 第三方库可能不支持该语言的较新版本
  • 尽管存在标准,但仍可能需要一些时间来找到实现新功能并定义一些行为较为晦涩的情况的标准/常规方法

程序员是否喜欢学习该语言中的新事物,还是喜欢坚持使用已有知识?

许多程序员通过玩这些新功能来满足自己的好奇心。但是,这并不意味着新功能始终适用于生产代码。这是逐案决策,必须权衡新功能的优势与特定情况下的升级成本。

我可能会很开心或喜欢学习新功能,但是最终,我真正关心的是向某人提供有用的产品。我必须选择足够现代的工具集,以具有合理的支持和稳定性,但又不能太古老,以至于我无法合理地进行生产。


C ++不是C的进化,它是某种与C兼容的新语言。–
Nikko

大多数人没有正确使用C ++,他们会像使用C一样使用它,因为他们可以。而且,正确使用C ++的过程令人讨厌,并且有某些编译器不支持所有语言功能的历史。
sylvanaar 2011年

支持稳定性的另一个关键因素:在经过认证的环境中使用时,语言更新可能是一个主要问题。问题在于,即使对于很小的补丁发布,每次也都需要从头开始完成整个认证过程,这非常耗时。
Donal Fellows,

@Nikko我同意,但是它在很大程度上与C向后兼容,这会带来很多有趣的问题:)
Doug T.

11

如果改进是向后兼容的,那就太好了。

C#很好地做到了这一点。他们添加了lamdba表达式,对多线程的更好支持,linq等。但是,您使用了5年的C#2.0程序仍然可以很好地运行而无需进行任何更改,并且可以轻松升级到C#4.0,而无需进行任何更改。

如果学习新知识可以使您以更轻松,更快捷的方式完成任务,那就太好了。如果花一个小时学习意味着节省您的开发时间,那是值得的。


5

我想要常规的改进,但是我不希望它破坏500 kloc的代码库并触发庞大的“升级项目”,只是为了使代码像以前版本那样工作。


4

语言稳定性对于企业和开发人员来说都是必须的。如果语言可以解决问题或引入早期版本中缺少的功能,则欢迎进行语言更改,但是更改语言以使其成为新潮或者仅仅因为您想赶上竞争对手而没有那么好。

语言稳定后,随着时间的流逝,开发人员将不再专注于学习该语言,因为他们会精通该语言,并开始将精力集中在利用他们所了解的知识为企业提供服务上。结果是缩短了项目,使最终用户满意,并为开发人员感到骄傲!

变革还伴随着学习成本和时间。并非所有的雇主都愿意对开发人员进行新功能的教育。这给开发人员进行自学或其他培训带来了沉重负担-这并非微不足道,专门课程的费用为每门$ 1500- $ 3500!

持续的更改可能会将开发人员锁定在“旧版”软件中。例如,从现在起两年内未使用MVVM的ASP开发人员,或未学习WPF的Windows Forms开发人员。这种锁定可能会严重损害开发人员的职业。

随着时间的流逝,企业中的软件体系结构看起来像花园沙拉。各种各样的工具和版本,您发现项目什么也没做,只是将软件从一个版本升级到另一个版本而没有任何业务收益。


2

我认为没有任何答案是正确的。

一般而言,当一种语言相对年轻时,就有较大的自由来相对快速地进行相对较大的更改。现有代码的基础不大,因此人们通常更愿意进行试验。

随着语言的老化,假设有足够的用户供任何人真正关心,那么现有代码的基础开始对可以进行的更改施加越来越严格的限制。不仅有更多的代码利用了更多的功能,所以很难猜测可能会破坏代码的更改,而且人们的期望也随之变化。

举例来说,假设编写Ruby和Fortran的人数大约相同。此外,我们假设两者中的代码量大致相同。我想说的机会是非常好的,这打破了每一个准确的相同比例的变化(和的方式,花了大约相同的工作,以正确的),将是一个很大红宝石用户比Fortran的用户更容易接受作为一般规则(至少假设他们认为这是一种改进)。

我认为这在很大程度上还取决于人们对语言的理解。选择语言的人是因为它是“最前沿” 的语言,如果这样才能使它保持在最前沿,那么他们更有可能忍受破坏许多现有代码的重大更改。

另一个因素是使用该语言的项目的规模和预期寿命。迎合相对较小的项目或我们很早就知道的预期寿命较短的语言(例如,Web UI)可以相对频繁地破坏事物,因为很多人不太可能继续使用相同的代码库不管怎么说,十年。一种语言(例如C ++或Java)可以满足更大,更长寿的项目的需要(例如,可能需要5年才能达到初始版本),这种语言可能会定期使用(并持续开发)三到四十年,这显然需要一个伟大的交易更稳定。


2

我有一个人告诉我他喜欢他的C ++,而且它将保持这种状态。他不在乎D,也没有兴趣,他不想了解或使用C#。他之所以学习Java,是因为他热衷于他需要做的许多项目,并且他显然以他所知道的语言做得很好。

另一个人喜欢C#,不了解每个关键字,也不了解.NET 4库(异步和全部),并且没有使用抽象关键字或已使用的属性。

我只是说大多数人不关心

现在,升级的影响正在破坏(对于库或编译的代码)人们将关心的问题。


C ++的“演变”是C ++ 11的新规范。“ C#”或“ D”不是C ++的演变。.由于C ++不是C的演变
。– Nikko

1
@Nikko:啊哈。好点子。我认识的少数C ++程序员几乎都听说过C ++ 0x或C ++ 11。我敢肯定,除非公司升级了编译器并且碰巧看到使它们感到足够好奇的东西,否则他将不在乎或不关注功能(我希望这种举动是其中之一)

@ acidzombie24:我已经使用C ++进行了很长时间的编程(自1995年以来),而我对C ++ 11的第一印象是它增加了比实际语言更多的复杂性:语言的语义变得如此复杂,以至于它引入非常细微且难以发现的错误非常容易。并且这些花费时间来修复,从而降低了生产率。如果我被迫真正使用新标准,我可能会改变看法,但是即使深入研究了一些新功能,我的感觉也没有得到太大改善。
Giorgio 2012年

0

我将回答C#(但此分析也可能适用于Scala):

当您接近一种语言的“样式”时,此功能更改会引起一些问题:

在2011年,C#可以做很多不同的事情,这很好。不幸的是,它有两个不同的范例(如果不是更多的话):

  • 面向对象
  • 功能性(考虑lambda函数和LINQ)

不同的类型检查样式

  • 动态打字
  • 静态打字

当您要使用一个或另一个时,并不总是很清楚。


0

我认为这确实取决于语言以及该语言所具有的后续功能。例如,我认为,如果C#和Java开始以更快的速度弹出更改,那么更改将被接受(只要它们像Carra所说的那样向后兼容)。但是,如果该语言尚未受到关注并且仍在快速变化,我知道我不会打扰它,因为我今天尝试学习的内容很可能与6个月后的学习内容完全不同,并且由于语言是新的/不受欢迎的语言,因此对我来说继续下去不会对我有害(阅读:我的职业生涯)。

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.