NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

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

【译】使用Kotlin从零开始写一个现代Android-项目-Part1(1)

android 程序员 移动开发

极光笔记丨数据质量建设实践

极光JIGUANG

大数据 数据质量 数据质量指标

【包学包会】从一次请求开始,android蓝牙开发视频

android 程序员 移动开发

学会会声会影,轻松成为视频剪辑达人

懒得勤快

【Java转Android】29,真的已经讲烂了

android 程序员 移动开发

【Java转Android】33,高级Android开发面试解答之线程篇

android 程序员 移动开发

【Jetpack篇】协程,腾讯T3团队整理

android 程序员 移动开发

【Kotlin篇】多方位处理协程的异常,Android高级工程师进阶学习—Android热修复原理

android 程序员 移动开发

创新赋能助力品牌崛起 恒洁开启品质卫浴新未来

【干货篇】Android各版本拦截进程对AMS的请求实战,移动互联网开发技术就业前景

android 程序员 移动开发

【收藏】2021年Android跳槽大厂必备宝典(2),移动混合开发技术

android 程序员 移动开发

【最强】Android 项目集成 Flutter 实战分享,android开发笔试题

android 程序员 移动开发

【Flutter桌面篇】Flutter&Windows应用尝鲜,flutter框架缺点

android 程序员 移动开发

【自学Flutter】1,详解Android架构进阶面试题

android 程序员 移动开发

【干货】2021Android高级开发面试宝典以及答案整理1,透彻分析源码

android 程序员 移动开发

【中级—,一线互联网架构师设计思想解读开源框架

android 程序员 移动开发

【收藏】2021年Android跳槽大厂必备宝典,阿里大牛整理

android 程序员 移动开发

【中级—(1),flutter面试题

android 程序员 移动开发

【性能优化实战】都知道小程序FMP优化实录,android音视频开发何俊林

android 程序员 移动开发

【扔物线】消失这半年,讲的真详细

android 程序员 移动开发

【收藏】2021年Android跳槽大厂必备宝典(1),android教程零基础入门

android 程序员 移动开发

浪潮云说 | “缓”而不慢,内存数据库Redis

浪潮云

云计算

【Java转Android】58,讲的太清楚了

android 程序员 移动开发

【View系列】View事件分发源码探索,android高级开发实战

android 程序员 移动开发

Java程序员必备的辅助开发神器(2022年版),建议收藏

Tom弹架构

Java 开发工具

Microchip推出面向家用电器市场的电容式触摸屏控制器系列产品

【干货】Android BAT高级面试必问36题以及算法合集,android视频开发框架

android 程序员 移动开发

【设计思想解读开源框架】热修复设计-,卑微打工人

android 程序员 移动开发

【Flutter 专题】126 图解自定义两侧对齐 ACETabBar 标签导航栏

android 程序员 移动开发

【自学Flutter】32 交错动画的使用,掌握这个提升路径,

android 程序员 移动开发

【开发12年码农教你】Android端简单易用的SPI框架-,写给程序员的Flutter详细教程

android 程序员 移动开发

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