不再使用JavaScript

通过减轻大脑的所有不必要工作,好的记号便可以将精力集中在更高级的问题上,从而有效地增加了……心理力量—阿尔弗雷德·诺斯·怀特海

编程语言是针对人的,而不是针对计算机的。 除机器代码外,计算机不需要任何其他编程语言。 好的编程语言可以使人们更容易地思考问题。 这很重要,因为编写代码不仅仅是解决问题。 从根本上讲,这也是关于您如何思考,交流和理解的。

在当今的网络上,我们有一种主要的语言:JavaScript。 创建JavaScript的原因是Marc Andreessen,“相信HTML需要一种“胶水语言”,Web设计人员和兼职程序员可以轻松地使用它们来组装图像和插件等组件。”(1)

作为前端开发人员,我们不应该接受这一点。 我们不应该只局限于一种语言,尤其是不允许一种语言,这种语言在大约10天内拼凑而成,只有一些“ 好的部分 ”。 尽管Axel Rauschmeyer(我非常尊重他)可能会认为JavaScript变成一团糟是一件好事-我不能完全不同意。 我们需要可以帮助我们解决问题的语言,而不是会给我们带来更多问题的语言。

语言与观念

“编程语言中可用来表达您的编程思想的单词肯定会决定您如何表达思想,甚至可能会决定您可以表达哪些思想。” —史蒂夫·麦康奈尔

有一个古老的笑话是这样的。

在天堂:厨师是法国人,恋人是意大利人,银行家是瑞士人。
在地狱中:厨师是英国人,恋人是瑞士人,银行家是意大利人。

按照这个笑话,如果我们想写关于烹饪的好文章,我们应该用法语写。 尽管我们可以用英语写关于烹饪的文章,但我们却缺少法语中对烹饪必不可少的词汇和范式。 而且,实际上,如果您知道烹饪的知识,那您就是对的! 对于烹饪,有许多专门针对法国的术语。 即使您正在写英语食谱,也要使用这些法语单词(例如,mise en place,Bain Marie,Coulis等)。

您使用的语言会影响您思考和解决问题的方式。 为了说明这一点,让我们比较curry在Haskell中的工作方式与它在JavaScript中的工作方式。 我们将考虑一个简单的currying函数。

这是Haskell代码:

在Haskell中,功能会自动进行处理。 咖喱化是Haskell范式的一部分。 作为Haskell程序员,我知道这一点。 它会影响我编写的每一段代码。 我考虑如何创建功能(即解决问题和沟通)的方式涉及到某种程度的操作。

这是一些执行或多或少相同事情的JavaScript代码(2):

JavaScript中没有隐式咖喱。 如果要使用currying,则必须实现它。 然后,我必须显式使用它。 而且有大量的实现方式 -不计算我自己选择实现它的可能性。 每个实现都有其自身的成本和收益。

因为我没有本机咖喱,所以我不得不处理不必在Haskell中做出的决定。 实际上,如果我尝试使用JavaScript进行函数式编程,则可能必须做出许多这样的决定。 每个决定都会以多种方式影响我的问题解决以及我的代码:

  • 决策疲劳
  • 多种范例(Ramda方法,Lodash方法,Folktale方法,一些随机NPM模块…)
  • 更多代码要管理(更多代码要阅读和理解)
  • 等等

如您所见,即使只是一个小示例,Haskell和JavaScript处理同一任务的方式也存在很大差异。 Haskell中琐碎而与生俱来的东西在JavaScript中变得更加复杂,冗长和陌生。

综上所述,我们可以声明自己的Whitehead版本:

良好的编程语言,应用于适当的领域,可以提高您的问题解决能力。 一门不良的语言(或不合适的语言)会使事情变得更难。

语言和问题解决

知道一种语言对问题解决和沟通的影响后,经常创建编程语言来解决特定问题就不足为奇了。 一些例子:

  • Ada被编写为可用于嵌入式和实时系统。
  • Erlang旨在编写电话应用程序。
  • ALGOL旨在清楚地描述算法。
  • Pascal的编写是为了教给学生结构化编程。

编写现代Web应用程序就是为了解决各种各样的问题。 我们应该有多种编程语言。 我们应该能够使用为我们的问题空间设计的语言,适合于我们处理问题的方式或者希望从中学习一些东西的语言。

简而言之:是时候摆脱JavaScript束缚了。

我们现在可以这样做

即使JavaScript是现代浏览器支持的唯一语言,我们今天仍可以使用多种语言来构建Web应用程序。 得益于许多得到良好支持的项目的工作,可以使用多种语言将其编译为JavaScript。 甚至有些项目还支持将这些语言与流行的框架(如React和Vue)一起使用-例如, Reason-ReactPureScript-ReactReason-Vue等。

有关可编译为JavaScript的语言的全面列表,请参见Jared Ashkenas的GitHub list 。 该列表包括所有.Net语言,Scala,Haskell,Ruby,Elm,Python,Erlang等。 Ashkenas列表中所代表的语言数量如此之多,以至于暗示了Atwood法则的伴随:“如果存在一种编程语言,则有人会编写将其编译为JavaScript的工具。”

前进之路

尽管有很多语言可以编译为JavaScript,但这并不是一个完美的选择。 编译为JavaScript存在以下已知问题:

  • 调试已编译的JavaScript可能很困难
  • 如果有帮助调试的工具,那么很多工具还不成熟(尽管Elm的调试器看起来很有前途)。
  • 由于语言之间的概念差异,一种语言中的某些概念可能无法很好地转换为JavaScript。 这会影响性能和理解力。
  • 脚本的调优和性能改进可能具有挑战性。
  • 等等

创新总要付出代价。 停滞也是如此。 停滞的代价更高。 如果我们要在前端开发中取得进展,我们必须拥有更多的多样性。 有人需要带路。 当有足够多的开发人员在Web应用程序空间中使用给定的语言时,就会有工具创建者,供应商和社区提供支持的动力。 即使最终只使用两种或三种主流语言,我们也会有更丰富的词汇和范式可供使用。

笔记

  1. https://zh.wikipedia.org/wiki/JavaScript
  2. 此代码示例摘自Steven Syrek。 他写了一篇有关使用JS学习Haskell的文章。 您可以在这里访问它: https : //medium.com/@sjsyrek/using-javascript-to-learn-haskell-f57509015842
  3. 语言和思想这个主题很丰富。 如果您感兴趣,则可以喜欢这篇文章: https : //www.linguisticsociety.org/resource/language-and-thought

From: https://hackernoon.com/javascript-no-more-3398a72e8e93

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值