写点什么

JavaScript 很糟糕吗?

  • 2019-11-14
  • 本文字数:2610 字

    阅读完需:约 9 分钟

JavaScript很糟糕吗?

虽然 JavaScript 是目前最流行的技术,但它确实也是一种设计糟糕的语言。这就是现实。只有承认现实,我们才能开始解决这个问题。


根据Stack Overflow 2018年的调查,JS 是当前最流行的一项技术。我们这里有一个宝贵视频。JavaScript 的作者说,JS 的现状如同 BASIC 之于 C++一样。本文不是关于 JS 的技术特性的,而是关于我们的多元无知如何使玩具语言先成为事实上的浏览器语言,然后延伸到服务端,现在被用于控制台仿真和数据科学。


正如标题所示,我认为 JS 的流行是一件糟糕的事情。首先,JS 是一种非常糟糕的语言。Wat谈话做了大量工作来解释具体问题。各位可以参考以下优质资源来了解更多详情。当你读完所有资料,就会发现所有这些糟糕设计都明显源于JavaScript的历史


Why is JavaScript so hated?


The Top 10 Things Wrong with JavaScript


JAVASCRIPT:THE REAL BAD PARTS


“WHY DOES JAVASCRIPT SUCK?”


为了保护 JavaScript 的想法不被竞争提案打败,该公司需要一个原型。1995 年 5 月,Eich 在 10 天内写了这样一个原型。


这就是问题所在,这就是为什么我们不能拥有美好事物的原因。当然,我并不认为这个原型没有被重写过上百遍,我指的是这个方法,即现有实践并不重要,“快速实现,打破常规”。普通的编程语言都有着多年的设计历史记录,通常 10 年左右。wiki 上的历史副标题实际上都措辞相同,只是名称和日期不同而已。设计一种语言需要受过良好教育的专家进行大量规划和决策过程。JS 的最初设计以及它的后续迭代都是由商业决策驱动的,为了占领浏览器市场。


这有点儿像作秀。


问题是,现在最流行的编程语言不能正确执行基本的代数运算,而许多人对此习以为常。受欢迎程度被错误地认为是正常的。很多新加入这个行业的人认为这没关系,很正常。


这有些直接后果。


Is-even软件包都有依赖关系和怪异的发布历史!一般项目的 node_modules 都有成千上万的依赖。


让我们来稍微谈谈Axios


Axios 是一个 HTTP 请求库。截至目前,Axios 在 GitHub 上拥有 5007 个 fork 和 61,660 个 star。仅在 GitHub 上就有差不多 150 万个项目在使用它。


假设你想发起一个请求,而如果请求失败,打印用于诊断的错误日志。那么,下面是开发者为你提供的官方样本


axios.get('/user/12345')  .catch(function (error) {    if (error.response) {      // The request was made and the server responded with a status code      // that falls out of the range of 2xx      console.log(error.response.data);      console.log(error.response.status);      console.log(error.response.headers);    } else if (error.request) {      // The request was made but no response was received      // `error.request` is an instance of XMLHttpRequest in the browser and an instance of      // http.ClientRequest in node.js      console.log(error.request);    } else {      // Something happened in setting up the request that triggered an Error      console.log('Error', error.message);    }    console.log(error.config);  });
复制代码


我直到今天都不能相信自己的眼睛。如果我曾在第三世界的无名大学提交过像这样的课程作业,我会得到巨大的羞辱。现在是 2019 年,显然设计模式和干净的代码仍是必备知识。


自从 2017 年,这个bug就已经打开并被标记为一个众所周知的 bug。显然,编写嵌套的 if 花费了 3 年。我将在其他语言最流行的 HTTP 请求库中发现同样糟糕的打开了 3 年的 bug。祝你好运。撇开 Axios 的话题,让我们继续聊吧。


灾难就在这里。搞砸 map 函数对于语言设计者来说就像获得奥林匹克金牌一样。奇怪的是,人们说“JS 是奇怪的”反而是少数,有相当多的人说他们从这篇文章中学到了一些东西。老实说,我不知道他们指的是什么。检查一种语言中的每个函数是否与其它 30 多种主流编程语言是否一致?坦率地说,.map(f)与.map(x => f(x))有什么确切的不同,是有用的知识吗?这都是“黑魔法”,不是预期的行为


在极简主义中,作为一个维护者轻而易举。但对于 JS 世界来说,并非如此。无论是否有意义,新版本总是层出不穷。3 年前的版本从零开始重建并不比升级容易。我使用过的任何 JS 项目都至少会有几个警告说它的Babel版本将会过时,很快会被弃用。Babel 有一个捐赠页面,上面写着他们的年度预算是 308,084 美元。作为一个社区,我认为这可以让开发者知道什么是向后兼容性并尊重它的用户群体。


OpenCollective 是一个很有趣的浏览工具,但是太令人郁闷了。这个页面显示,Webpack 的年度预算是惊人的一百万美元。那些认为将可执行代码放到配置文件或环境变量中需要重新设计的天才们,比这个称为 OpenSSL 的小项目获得了 10 倍还多的资金。如果 OpenSSL 被破解了,你的银行、互联网供应商、云服务……都要崩溃。如果 Webpack 崩了,你可以立即得到 gulp、grunt、browserify 或任何其它发烧友的玩具,而且那将不过是一键式迁移。想象一下世界从 OpenSSL 迁移,想象一下编写 OpenSSL 的功能克隆,或者数百个现代 IT 基础设施的基础项目,由没有通过任何赞助页面之类的渠道捐赠的人维护。


我听起来像是一个在互联网向志愿者索要东西的人,这是一件不道德的事情。事实上,我要表明的是,作为从业者,如果基于运行在浏览器上和支持 emoji 这些优点就接受低于标准的方案,贬低了那些编写可靠的良好设计的软件的人的努力。作为兴趣项目和原型当然可以,它也就“还行”,正如 PHP“还行”一样。有时,它确实好使。我要指出的问题是广泛的推理模式——JS 是如此流行,那么它一定和其它语言和生态系统一样优秀。这不符合逻辑。


JavaScript 目前是市场上最被需要的技术。其它语言没有这么多炒作,人们四处奔走,设计师设计 logo、T 恤和 3d 打印的吉祥物,通过财富 100 强公司和小额捐赠服务募集资金。所有这些,都必须有价值反馈。到目前为止,反馈的价值是负的,这让整个行业陷入低谷。JS 设计委员会在 20 年时间内似乎对于修复基本的语义不感兴趣。我不知道他们在做什么,但很明显,它们的首要任务并没有放在提升编程体验上,反而创造了一种“随用随想驱动开发”的文化,劫持了整个 JS 生态系统,也劫持了整个行业。


JavaScript 确实很流行,但也确实很糟糕。这就是现实。只有当我们承认现实,才能开始修复这个问题。


总之——JavaScript 很糟糕。


原文链接:


https://ror6ax.wordpress.com/2019/08/27/javascript-is-bad/


2019-11-14 16:462647

评论 6 条评论

发布
用户头像
map 函数任何文档都会介绍,handle 函数有三个参数;没有认真看文档,想当然着用,还说是所谓的「不是预期的行为」,预期行为就是想当然了么
2019-11-15 11:33
回复
作者是拿自己无知来秀优越感,真可悲
2019-11-15 13:29
回复
用户头像
这篇文章就像一个泼妇在骂自己的老公,实际上长话连篇在诉说故事,但没在说到底问题出在哪里
2019-11-15 10:58
回复
造成axios这么鬼不合逻辑的元凶是浏览器的api,这个换什么语言来写都一样,而浏览器提供的api是所谓高大上的c++来实现的。你不去怪api设计不合理,来说js是个设计糟糕的语言?怕是没有一丝说服力
2019-11-15 11:01
回复
再说npm外部模块多的问题,难道java外部模块就不多?模块多不多本身取决于业务的复杂程度和代码设计的合理程度。这一点你怪语言本身,合理吗?
2019-11-15 11:06
回复
用户头像
一万点同意
2019-11-14 19:53
回复
没有更多了
发现更多内容

谁说 Zadig 只能复制环境?数百微服务一套环境实现高效协作

Zadig

DevOps 云原生 CI/CD 软件交付

【刷题第五天】1. 两数之和

白日梦

5月月更

维护版式文档技术生态 国际PDF协会向福昕软件发来感谢信

联营汇聚

GPU分类和应用现状分析

Finovy Cloud

人工智能 云计算 gpu GPU服务器

实现同比、环比计算的N种姿势

葡萄城技术团队

数据分析 BI数据分析 同比 环比

如何开发 LAXCUS 分布式应用软件(四):编写边缘端软件

LAXCUS分布式操作系统

并行计算 端边云协同架构 分布式操作系统 分布式应用软件

备受关注的Bit.Store,最新动态一览

西柚子

Hadoop Echarts

Emperor_LawD

hadoop 5月月更

基于 Agora SDK 实现 Windows 端的一对一视频通话(基于3.6.2版本)

声网

人工智能 音视频 sdk

“四大高手”为你的 Vue 应用程序保驾护航

葡萄城技术团队

钉钉 Flutter 跨四端方案设计与技术实践 | Dutter

阿里巴巴终端技术

flutter 移动端 跨端框架 桌面端

4月月更开奖啦!中奖者速来领取!

InfoQ写作社区官方

热门活动

时序数据库在监控运维平台中的应用

CnosDB

IoT 时序数据库 开源社区 CnosDB infra

硬件为矛 软件为盾 英特尔分享数据中心GPU的攻守之道

科技新消息

英特尔公布数据中心和人工智能领域重大进展,全方位展示强劲领导力

科技新消息

我国类脑计算处于什么水平?人工智能下神经科学启发的类脑计算。

GPU算力

人工智能 液冷服务器 类脑计算 神经科学

echarts饼图指示器文字颜色设置不同

空城机

eCharts 5月月更

玩了一场剧本杀,同车队友“不是人”

脑极体

快速上手 Pythond 采集器的最佳实践

观测云

运维 可观测性 可观测

String源码解析-String的使用注意2

zarmnosaj

5月月更

动辄“耗资过亿”的表格工具,究竟难在哪儿?

葡萄城技术团队

“软件定义汽车”的数字化之变,华为云低代码平台带来了什么?

脑极体

2021年国内促进软件产业发展十大事件出炉,HarmonyOS 2入选

科技汇

直播预告 | PolarDB-X 动手实践系列——PolarDB-X Replica原理和使用

阿里云数据库开源

数据库 阿里云 开源 PolarDB-X

如何清除 WordPress 中的缓存

海拥(haiyong.site)

WordPress 5月月更

在字节跳动,一个更好的企业级SparkSQL Server这么做

字节跳动数据平台

架起医院就诊“快车道”,YRCloudFile 打造智慧 PACS 存储系统

焱融科技

云计算 分布式 高性能 文件存储 智慧医疗

蝉联第一!金蝶夺取Gartner中国高生产力aPaaS市场冠军!

金蝶云·苍穹

云图说|华为云帮助中心最佳实践:源自项目实战的上云指导

华为云开发者联盟

最佳实践 华为云 云图说 帮助中心 业务上云

Cilium 多集群 ClusterMesh 介绍

Se7en

深入剖析 split locks,i++ 可能导致的灾难

火山引擎开发者社区

JavaScript很糟糕吗?_编程语言_ror6ax_InfoQ精选文章