写点什么

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:462579

评论 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
回复
没有更多了
发现更多内容

软件测试/测试开发 | web 控件的交互进阶

测试人

软件测试 自动化测试 测试开发 Web自动化测试

面试官:谈谈你对JVM内存结构的理解

做梦都在改BUG

Java JVM

啊啊啊!小程序小游戏也可以在自己的App上架❗️❗️

没有用户名丶

微信小程序 小程序游戏

由浅入深,聊聊OkHttp的那些事(很长,很细节)

Petterp

android okhttp

安擎董事长俞跃渊:打造智能算力,创新产业价值

科技热闻

前端培训学习方法有哪些

小谷哥

只用了半个Redisson的Semaphore实现并发控制

做梦都在改BUG

Java 并发控制 Semaphore redisson

Svelte框架结合SpreadJS实现表格协同文档

葡萄城技术团队

Java培训有哪些不同的学习方法

小谷哥

Sentinel 是如何实现分布式限流的?

做梦都在改BUG

sentinel 分布式限流

热点面试题: Array中有哪些非破坏性方法?

沉浸式趣谈

JavaScript array 前端面试题 Javascript框架 超全前端面试题

软件测试/测试开发 | 网页 frame 与多窗口处理

测试人

软件测试 自动化测试 测试开发 Web自动化测试

IoTLink 版本更新 v1.5.2

山东云则信息科技

物联网

秒云加入金兰组织,携手共建信创新生态

MIAOYUN

信创 信创云 信创产业 金兰组织

探讨丨传统行业必须数字化转型吗?

优秀

数字化转型

嵌入式ARM设计编程(一) 简单数据搬移

timerring

arm

特定领域知识图谱融合方案:文本匹配算法之预训练Simbert、ERNIE-Gram单塔模型等诸多模型【三】

汀丶人工智能

人工智能 自然语言处理 知识图谱 2月月更 2月日更

实战分享,电路板设计后这样干,一个人也能轻松搞定项目!

华秋PCB

PCB PCB打样 PCB设计

软件测试/测试开发 | Web 控件定位与常见操作

测试人

软件测试 自动化测试 测试开发 Web自动化测试

TDengine 3.0.2.5 查询再优化!揭秘索引文件的工作原理

TDengine

数据库 tdengine 时序数据库

宋红康2023版Java视频发布

小谷哥

模块6如何设计微服务架构

程序员小张

新年伊始,谈谈开源软件供应链安全的新趋势

安势信息

开源软件 清源CleanSource SCA 安势信息 ChatGPT 开源软件供应链安全

关于使用消息队列今天被面试官问倒了

做梦都在改BUG

SpringBoot 如何保证接口安全?老鸟们都是这么玩的!

做梦都在改BUG

Java Spring Boot 接口

fabric.js开发图片编辑器的细节实现

秦少卫

架构 编辑器 Fabric.js 前端编辑器

大数据培训学习选择哪个机构好

小谷哥

安势信息入选 SegmentFault思否「2022 中国新锐技术先锋企业」

安势信息

软件成分分析 清源CleanSource SCA 安势信息 技术先锋 SegmentFault

大数据培训零基础的方法有哪些

小谷哥

再获权威认证!秒云顺利通过ISO20000、27001双系统认证

MIAOYUN

ISO9001 ISO20000 ISO27001

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