哈Ha! 我向您呈现我对Richard Kenneth的文章
“ 关于JavaScript的三大谎言 ” 的翻译。 这篇文章写于2016年5月,但我认为它的相关性并没有消失。 我是一个新手程序员,因此可能会出现“理解”方面的错误。 所以...
关于JavaScript的三大谎言
谎言有两种类型:我们告诉别人的谎言和我们告诉自己的谎言为其辩解
JavaScript爱好者一次又一次告诉我三大谎言。
谎言1
JavaScript是世界上最容易被误解的编程语言。人们不知道如何正确使用它,因此他们不断陷入各种麻烦。 这是一个谎言,因为在
JavaScript中没有什么令人费解的。
这是一种普通的命令式/过程式编程语言,具有少量的编程功能(FP)和有争议的“面向对象”功能,称为对象原型。 那有什么特别之处呢?
基本上,使用JavaScript时出现的所有问题仅是使用它的人的错:他们无知,懒惰,习惯于用Java或Python进行编程,他们不知道什么? 功能编程?
那么,为什么人们在使用其他FP语言时不会出错,例如
C#,Clojure,Dart,Elm,Erlang,F#,Julia,Haskell,Scala和Scheme ? 函数式编程是IT行业中一个相当容易理解的范例。 那么,什么使JavaScript在这方面特别有问题呢?
也许人们不了解对象的原型。 在这种情况下,请阅读
“什么不是JavaScript的对象原型 。
” 当然,原型不适合软件开发。 它们不是编程抽象的特别高级。 原型大部分是可区分的哈希表,级别很低,这就是我所谓的“构建块”,用于真正的面向对象的编程(基于类的OOP)。 人们可能不了解如何使用对象的原型,但是为什么需要学习如何“砌砖”? 这不值得您付出努力。
是的,我明白了。 原型非常灵活。 它们不具备经典AKI所具有的所有“仪式”。 从这个意义上说,它们很有趣。 但是对于大型应用程序,它们不能很好地扩展,因此人们正在重返课堂。 如果原型是一种有用的技术,那么您会发现它适用于所有地方,因为原型可以用基于类的语言建模,就像类可以用基于原型的语言建模一样。 这是
JavaScript程序员无法弄清楚的。
谎言2
异步编程是JavaScript的关键优势。 好吧,让我们首先了解为什么异步编程甚至存在于
JavaScript中 。
为了开发图形用户界面(GUI),无论是在
Windows ,
X Window还是
OS X的Cocoa或Web浏览器中,事件循环都是
必需的(通常如此) 。 它们全部异步处理用户输入事件。 这是否意味着异步编程也是
C ++或
Objective-C的强大功能? 事件循环(带有异步库)也已在
Python和
Perl和
Tcl中使用 。 然后,我想它们都具有异步编程的功能? (当人们使用不存在的词“
异步性 ”(
异步是形容词,描述不及时协调的对象或事件)时,我会大笑。
JavaScript还使用事件循环和异步处理来支持Web浏览器用户界面。 那使他成为一门好语言吗?
现在,这种计算模型已经使
Node.js在服务器端变得非常流行,用于非GUI开发,即用于服务器端。 实现高性能并发。 显然,
Node对许多应用程序很有用,但它不太可能接管并发世界。 最近的事件表明了
Node.js的局限性
。 是的,这应该说服所有人只使用JavaScript。
事件的循环被描述为“穷人的平行性。
Node的支持者喜欢一遍又一遍地展示大型企业(PayPal,Netflix,沃尔玛,Uber等)的相同示例。 每个
Node.js示例可以在答案中进行比较吗? -数百个
Java示例?
Java已经证明了自己无数次用于企业开发的经验。 这就是为什么它是行业标准。
Node.js尚未证明自己。 我们真的不知道有多少公司尝试使用
Node.js并最终放弃了它。 我们不知道
Node.js项目的真正成功率是多少。 对于企业而言,选择
Node.js仍然是一个风险。
我有信心地预测,一旦Go扩展了其框架和软件包生态系统,它将在将来取代Node。 它的轨迹是不可否认的。
在大多数并发方案中,
Go和
Erlang / Elixir等语言可以轻松胜过
Node 。 从长远来看,即使事件/异步循环模型也不可持续。 如果我们的目标是实现最佳性能,那么我们应该对使用真正的并行编程语言感兴趣。 为什么要妥协
JavaScript 。
谎言#3
JavaScript是世界上最流行的编程语言。真的是这样吗 默认情况下广泛使用的语言与广泛使用的语言之间存在巨大
差异 。
请记住,在Internet以外的任何其他领域,开发人员都不是一种语言的人质。 我们忽略这一事实,后果自负。
JavaScript是Web浏览器的唯一本地语言,因此这是编写浏览器应用程序的最直接方法。 但是,大多数开发人员都鄙视这种语言,如果他们确实有更好的选择,他们会做到。 如果您在Internet(论坛,社交网络,网站等)上搜索人们对
JavaScript的意见,则可以自己进行验证。 除了
PHP以外,其他任何语言都找不到
很多关于
JavaScript的
WAT和
WTF 。
我们确定的是,网络非常流行,而不是JavaScript 。
大多数主要语言排名索引并不表明
JavaScript是最流行的编程语言。 甚至没有第二,第三或第四位置。 根据
IEEE Spectrum (American Journal),这是
#8位,
PYPL#5 ,
TIOBE#7 ,
CodeEval#6 。
Redmonk (一家分析公司)使用
Github统计数据,该统计数据显示出非常高的
JavaScript数量,正是因为用任何语言编写的Web应用程序都必须至少具有一些
JavaScript才能在浏览器中工作; 没有选择。 因此,
Redmonk无法给出
JavaScript异常的客观评价。 否则,最受欢迎的语言是
Java 。
例如,来自StackOverflow的用户轮询在选择中也包含类似的偏差。 当我们别无选择只能独自使用
JavaScript时,怎么能说
JavaScript是一种流行的语言呢? (幸运的是,我们可以使用翻译器)。
我们应该记住,对于其他领域(例如,网络服务器,游戏和图形,移动设备,台式机等)。 编程语言的选择多种多样。 Web应用程序非常独特。 (至少直到最终发布WebAssembly为止。)
是的
让我非常清楚:
JavaScript不是用于软件开发的良好编程语言 。
JavaScript被设计为一种轻量级的,用于Web浏览器的新鲜脚本语言。 这样一来,它就变得灵活而又宽容,打字也很弱。 它甚至没有正确的整数类型或正确的数组类型。 这是什么语言!?
弱打字,这是开发软件所用的编程语言的致命弱点。 尽管这使编写用于Web浏览器的快速简单脚本变得非常容易,但是当您编写需要安全性和可靠性的大型应用程序时,它也不利于您。 这就是为什么大多数主要语言通常都是强类型的(不要与静态类型的语言混淆)的原因。 这非常非常重要!
典型的弱化和由此产生的强制性表现出完全缺乏语言纪律。 这解释了大多数
WAT和
WTF列表
。由JavaScript生成。 (此外,作者提供了指向在线资源的链接,其中提供了
JavaScript疣的列表)。