写点什么

最终,JavaScript 成为了一流语言

  • 2017-05-16
  • 本文字数:2594 字

    阅读完需:约 9 分钟

紧跟前端发展,共享一线技术——推荐关注 InfoQ 垂直公众号前端之巅

技术公司后端服务编程语言剖面图(图片来源:Stackshare.io)

2003 年,保罗·格雷厄姆(Paul Graham)在文中提到,他的公司决定使用Lisp(一门编程语言)。在文章中他将Lisp 描绘成计算机语言界的法语,它独特、深邃,能够表达难以描述的事物(亦即法语_je ne sais quoi_ 所指)。他指出自己公司相比竞争对手的优势在于Lisp。

如果Lisp 像法语,那么现如今的JavaScript 就像英语一般。尽管二者的语法不一致,但英语是世界上最广泛使用的语言,JavaScript 是最广泛应用的计算语言。

然而,JavaScript 仍未得到与其他语言同等的尊重。尽管它的使用率在创业公司和大型公司中持续增长,但若非必要,人们不会认为它是一门有用的语言。大公司的高级工程师声称它不是一门“真正的”编程语言,许多人并不知道除了操作像素外它还能被用于何处。

作为一名JavaScript 工程师,我希望更深入地了解公众对这门语言的看法,并观察这些观点在现实中到底有多牢不可破。我发现,一些批评有失水准,但更多的批评则是有意义的。

不断增长的生态系统

除了样式效果外,JavaScript 也被越来越多地应用于软件开发,例如后端任务、Web 服务器以及数据处理。 Zeit首席执行官Guillermo Rauch指出,JavaScript“不是人为设计出来的,它是在进化过程中得到的结果。它成型很快,起初只关注一个很小的目标,后来都是市场的力量改造了这门语言。

Rauch 的公司提供一个仅在浏览器和服务器中使用 JavaScript 的开源 Web 框架,事实证明,许多公司都在做同样的事情。

Rauch 的公司提供了一个仅在浏览器和服务器上使用 JavaScript 的开源 Web 框架。 事实证明,许多公司都在做同样的事情。根据展示公司技术栈信息的网站 StackShare.io的数据,在后端语言的选取上,相比 Python(4000)或 Java(3900),更多公司使用 JavaScript(6000)。这个网站面向的更多是创业公司,但它从侧面反映出 JavaScript 是一个不断增长的生态系统。以下是展示不同公司技术栈极各自市场份额的维恩图(数据来自 StackShare.io)。

技术公司后端服务编程语言剖面图(市场占有率估值)

再来看看编程工作的数据吧,Indeed.com上的一个看法告诉我们,在美国,大多数编程工作都使用 Java,但 JavaScript 并没有落后,如下图所示:

对 JavaScript 有正面影响的其他统计数据:

  • Github上 JavaScript 开源项目的数量最多(比 Java 多出 50%)。
  • NodeJS 被评为StackOverflow 2017 年开发者调查中最受欢迎的框架。
  • JavaScript 是 Stack Overflow 中最流行的编程语言。

对 JavaScript 的批评

我咨询过一位 Oracle 的朋友,他们的工程师对 JavaScript 有什么顾虑。他说“由于 JavaScript 是一门解释型无类型语言,对于系统编程来说它不是一门理想的编程语言”,这种针对 JavaScript 的投诉非常普遍。JavaScript 函数接受任意类型的参数,但在 Java 中,如果参数不是特定类型¹就会引发错误。

复制代码
function doSomething(literallyAnything) { return; }

我又咨询另外一位在谷歌工作的朋友,他向我指出 NodeJS 的一些公开的问题,他说,一些错误虽然微乎其微,但他会认为这个框架不够成熟。

Rauch 指出,JavaScript 的垃圾回收不是最理想的。另一个批评是 Java 和 Python 更适合数据科学类的项目,如机器学习和自然语言处理。这可能与这些语言可用的库有关,而非批判 JavaScript 的内在缺陷。学术界对 Java 和 Python 的依赖也助长了这种论调。

上述几位工程师都曾提到,每当讨论编程语言时,经常听到其他工程师贬低 JavaScript。大家对于 JavaScript 用于后端任务依然心存疑虑,但是大部分敌意似乎又与语言和生态系统的现状无关。

JavaScript 艺术的现状

JavaScript 在过去 5 年中已经走过很长一段路,早期 JavaScript 用例一般像 Facebook 的“Like”按钮这样的功能,每当用户点击“Like”图标,页面不会刷新,但会改变页面状态,这种特性只能通过 JavaScript 在网络上实现。

开发者几年前开始通过 JavaScript 来制作 _ 单页面应用程序(SPA)_。术语“单页”是指在浏览器中这些应用程序只加载一次代码,所有后续视图都是通过 JavaScript 生成的。反对者认为,用户需要花很长时间才能完成初始下载,在手机上更是长达 20-30 秒!

在过去的两年中,向浏览器发送 JavaScript 代码的技术已得到显著提高(参见:webpack)。这可以解决 JavaScript Web 应用缓慢的加载速度,提升性能并创建更好的用户交互体验。这是目前 Web 开发领域最先进的技术。

伴随着技术进步,出现了新的 JavaScript 范式。状态管理库将计算机科学原理应用于用户交互,JavaScript 工程师的门槛变得更高。

在这些变化的背景下,对于早期阶段的公司来说,使用 JavaScript 作为后端语言非常有意义,如果您已拥有优秀的前端 JS 攻城师,此举可以让它们更轻松地协作,审核和共享代码。

尽管 JavaScript 最初是一门浏览器中的语言,但在计算机科学的各个方面 -Web、移动端、物联网和后端服务中,它都变得更加普遍。工程师是明智的,不要因为他们对语言过时的看法而解雇他们。其实 JavaScript 一直是一门“真正的”编程语言,只是此时此刻,这种声明会比其他任何事情更容易被误解。

总结

从这些观察结果可以看出,JavaScript 已经达到以下这些成为一流编程语言的标准:

  • 被创业公司和大型私营公司用作后端服务框架(NodeJS)
  • 有一个蓬勃发展的开源社区(在 Github 上最活跃)
  • 作为一门专业技能,有大量的招聘需求要求掌握 JavaScript 知识(Indee.com)

最后,一家公司决定贯彻某种技术方案都是需要妥协的。我们在 Commandiv这款产品中就同时使用 JavaScript 作为前端和后端服务语言,但这并不适合搜有人,我们这么做决定一部分原因是因为我么熟悉 JavaScript 这门语言。为了在创业初期快速启动,请您使用最趁手的工具。

也就是说,我认为质疑 JavaScript 是否是一种“真正的”编程语言的时代已经过去,它的旅程远没有结束,但是其应用率和改进速度使我对其前进道路充满信心。

感谢 Alim S. Gafar对本文进行审核。

汤姆·金伯格(Tom Goldenberg)是 Commandiv 的首席技术官兼联合创始人,Commandiv 是一个人投资平台。

附注

尽管该语言不支持静态类型,但像 Facebook 和微软这样的公司已经发布了添加此功能的库(Facebook 发布了Flow,微软发布了TypeScript)。

查看英文原文 https://hackernoon.com/javascript-a-first-class-language-at-last-209376f69731

2017-05-16 19:008163
用户头像

发布了 63 篇内容, 共 133.0 次阅读, 收获喜欢 38 次。

关注

评论

发布
暂无评论
发现更多内容

Java面试宝典(2020版)

Java 程序员 后端

JetBrains 又出了一款新神器,一套代码适应多端!

Java 程序员 后端

Java程序员经典面试题集大全(二十五)

Java 程序员 后端

Java程序员:面试字节跳动被问算法 多亏我扛下来了

Java 程序员 后端

Java面试中最常问的JVM问题大全,附答案

Java 程序员 后端

Java高并发编程课后总结

Java 程序员 后端

Jenkins部署springboot项目

Java 程序员 后端

Java程序员经典面试题集大全 (六)

Java 程序员 后端

Java线程状态以及 sheep()、wait()、yield() 的区别

Java 程序员 后端

Java编程配置思路详解

Java 程序员 后端

Java面试通关要点汇总集

Java 程序员 后端

Java面试题大全(持续更新中)

Java 程序员 后端

Jsoup解析html

Java 程序员 后端

Java程序员:终于,在一个艰难而又轻松的工作日之后,我被辞退了

Java 程序员 后端

Java程序设计(基础)- 数据类型

Java 程序员 后端

Java笔记 —— Set集合的排序原理(源码分析)

Java 程序员 后端

Java虚拟机内存结构及编码实战

Java 程序员 后端

Java进阶:什么是TCP-IP?如何运用!

Java 程序员 后端

Java面试之EJB & Spring

Java 程序员 后端

Java面试题超详细整理《JVM篇》(1)

Java 程序员 后端

Java面试题超详细整理《JVM篇》

Java 程序员 后端

Java编程配置思路详解(1)

Java 程序员 后端

Java详解:如何实现一个-redis-缓存服务

Java 程序员 后端

Java进阶:什么是TCP-IP?如何运用!(1)

Java 程序员 后端

Java集合容器面试题(2020最新版)

Java 程序员 后端

Java黄金五年——1~5年一个Java程序员从入行到大牛的晋升之路

Java 程序员 后端

JAVA面试核心教程|Java面试基础知识点总结

Java 程序员 后端

Java高级特性之多线程

Java 程序员 后端

Java程序员(阿里、京东、携程)面试归来

Java 程序员 后端

Java经典算法题(二)

Java 程序员 后端

JDK8-Object源码

Java 程序员 后端

最终,JavaScript成为了一流语言_JavaScript_ Tom Goldenberg_InfoQ精选文章