首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这个项目的规模和语言的严格性之间有关联吗?

这个项目的规模和语言的严格性之间有关联吗?
EN

Software Engineering用户
提问于 2013-08-24 17:18:46
回答 4查看 10.6K关注 0票数 79

我向我的一位同事解释了语言的严格性和范式之间的区别,最后我断言:

  • 容忍语言,如动态语言和解释语言,是用于原型和小型项目或中型web应用程序的最佳语言。当选择优雅的动态语言(如Python和Node.js )时,好处是:
    1. 快速发展,
    2. 简化的样板代码,
    3. 能够吸引年轻的,创造性的程序员谁逃离“公司语言”,如Java。

  • 静态类型/编译语言最适合于需要更高严格性的应用程序,例如业务关键应用程序或中小型应用程序的应用程序。
    1. 众所周知的范式和模式已经发展了几十年,
    2. 容易进行静态检查,
    3. 有能力找到许多具有几十年经验的专业开发人员。

  • 严格的语言,如Haskell、Ada或C#中的代码契约之类的技术,对于那些支持安全性而不是灵活性的系统(即使Haskell可能非常灵活)更好,例如生命关键系统和预期非常稳定的系统。好处是:
    1. 能够在编译时捕获尽可能多的bug,
    2. 容易进行静态检查,
    3. 容易得到正式的证明。

然而,通过查看大公司大型项目所使用的语言和技术,我的断言似乎是错误的。例如,Python成功地应用于大型系统,如YouTube或其他需要严格要求的应用程序。

该项目的规模与应使用的语言/范式的严格性之间是否仍有关联?

还有第三个我忘了考虑的因素吗?

我哪里错了?

EN

回答 4

Software Engineering用户

发布于 2013-08-24 19:10:33

你的说法并没有错。你只需要挖得更深一点。

简单地说,大型系统使用多种语言,而不仅仅是一种语言。可能有使用“严格”语言构建的部件,也可能有使用动态语言构建的部件。

至于你的谷歌和YouTube的例子,我听说他们主要使用Python作为不同系统之间的“粘合剂”。只有谷歌知道这些系统是用什么构建的,但我敢打赌,谷歌的许多关键系统都是使用严格的“公司”语言(如C++或Java )构建的,或者是他们自己创建的Go语言。

这并不是说你不能在大型系统中使用容忍的语言。很多人说Facebook使用PHP,但他们忘了提到Facebook必须制定非常严格的编程准则才能高效地使用PHP。

因此,是的,大型项目需要一定程度的严格性.这可以来自于语言或框架的严格性,也可以来自编程指南和代码约定。你不能仅仅抓到几个大学毕业生,给他们Python/Ruby/JavaScript,并期望他们编写跨越数百万用户的软件。

票数 27
EN

Software Engineering用户

发布于 2015-03-25 13:26:18

我对大型系统的经验是,它们的成败不是取决于语言的选择,而是取决于设计/体系结构或测试覆盖率的问题。我更希望在我的大型企业项目上有一个有才华的Python团队,而不是一个平庸的Java团队。

话虽如此,任何让我们少写代码的语言都必须值得一看(例如Python )。也许未来是用聪明的静态类型语言进行高级类型推理(例如在Scala模型中)。还是混合语言,比如C#试图使用dynamic限定符.?

让我们不要忘记“其他”静态类型化的好处:正确的IDE代码完成/intellisense,在我看来,这是一个基本的特性,而不是一个很好的选择。

票数 4
EN

Software Engineering用户

发布于 2014-06-30 07:56:49

有两种错误需要检查:类型错误(连接整数+浮动列表)和业务逻辑错误(将资金转移到银行帐户,检查源帐户是否有钱)。

动态编程语言的“动态”部分就是进行类型检查的地方。在“动态类型”编程语言中,在执行每个语句时进行类型检查,而在“静态类型化语言”中,类型检查是在编译时进行的。您可以为静态编程语言编写解释器(就像斯莱姆那样),也可以为动态编程语言编写静态编译器(比如gcc巨蟒脱毛皮 )。

在Python和Javascript这样的动态编程语言中,不仅需要为程序业务逻辑编写单元测试,还需要检查程序是否有任何语法或类型错误。例如,如果将"+“整数添加到浮点数列表(这没有意义,并将发出错误),则在动态语言中,将在运行时在执行语句时引发错误。在静态编程语言(如C++、Haskell和Java )中,编译器将捕获这种类型错误。

动态检查的编程语言中的一个小代码库更容易查找类型错误,因为它更容易获得100%的覆盖范围源代码。就是这样,用不同的值手工执行几次代码,就完成了。拥有100%的源代码覆盖率会给您一个很好的提示,说明您的程序可能没有类型错误

使用动态检查的编程语言中的大型代码基,很难用每种可能的类型组合测试每条语句,特别是如果您不小心编写一个函数,该函数可能会根据参数返回字符串、列表或自定义对象。

在静态检查的编程语言中,编译器将在编译时捕获大多数类型错误。我之所以这么说,是因为除以零错误,或者数组超出界限的错误也是类型错误。

通常情况下,真正的讨论不是关于编程语言,而是关于使用这些语言的人。这是正确的,因为,例如,汇编语言和任何其他编程语言一样强大,然而我们正在JavaScript上编写代码。为什么?因为我们是人类。首先,我们都会犯错误,而且使用专门用于特定任务的专用工具会更容易,更容易出错。第二,存在资源约束。我们的时间是有限的,在汇编上写网页需要很长时间才能完成。

票数 3
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/209376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档