写点什么

为什么程序员对 TypeScript 爱得“深沉” ?

  • 2020-10-28
  • 本文字数:3307 字

    阅读完需:约 11 分钟

为什么程序员对TypeScript 爱得“深沉” ?

本文最初发表于 Towards Data Science 博客,经原作者 Rhea Moutafis 授权,InfoQ 中文站翻译并分享。


Python 是我的谋生工具,我很喜欢它。尽管我对这门语言有一些批评的地方,但我还是强烈推荐给任何开始从事数据科学的人。反正在这个领域中,比较有经验的人往往都是 Python 的布道师。


然而,这并不意味着你不能时不时地挑战你所在领域的极限,例如探索不同的编程范式或新的编程语言。


Python 的竞争对手名单很长:RustGoScala、Haskell、Julia、Swift、C++、Java 和 R 都可以在其中找到条目。在如此拥挤的领域里,JavaScript 和 TypeScript 没有得到那么多的认可,这是可以理解的。


但这并不意味着 TypeScript 不是通用编程领域的主流。然而,在数据科学家群体中,它似乎从来就没有特别受欢迎过。


你可能会得出这样的结论,TypeScript 可能不是数据科学的理想选择。但不要急着下结论。尽管它可能不适合数据科学的每一部分,但在某些领域上,它比 Python 有明显的优势。


如果你碰巧在这些领域之一工作的话,那么值得给 TypeScript 一个机会。如果你不这么做的话,谁知道你的下一步会在哪里呢?这个领域发展得如此之快。如果你能将眼光放远一些,你就有了竞争优势。

TypeScript:是一种 JavaScript,但类型安全

大约十年前,Microsoft 的软件工程师注意到,JavaScript 已经不能满足他们所有的需求了。一方面,该语言发展迅速,并增加了非常有趣的新特性。另一方面,管道中的任何功能都不能解决一个根本性的问题:JavaScript 对于小型程序来说非常棒,但用它来编写整个应用程序却一团糟。


解决这一问题有几种可能性:例如,可以使用不同的编程语言,或者使用更好的语法重新设计 JavaScript。Microsoft 的开发团队采取了一种不同的方法:他们通过扩展 JavaScript 创建了 TypeScript。通过这种方式,他们能够利用 JavaScript 的所有新特性,同时摆脱了那些不适合大型项目的东西。


与 Python 类似,JavaScript 是在运行时编译的,这意味着你需要运行代码来调试它。另一方面,TypeScript 是编译的。这提供了额外的安全层,因为程序员在执行时间之前就可以获得关于可能存在的 Bug 信息。对于 Python 或 JavaScript 这样的非编译语言,一旦意识到代码的行为与预期不符,定位 Bug 可能会非常耗时。


然而,JavaScript 和 TypeScript 之间的关键区别在于类型检查器。在编译时,每个 TypeScript 程序都会检查数据类型是否彼此一致。


手动做这些事可能听起来微不足道。但是,当你在项目中使用数千行代码时,你就会感谢上帝赐予你这一切。


还有一些其他不同之处,例如,TypeScript 有匿名函数和异步函数。匿名函数是函数式编程的一个关键特性,它可以使程序在大数据负载下更加高效。


当你需要并行执行多个操作时,或者在处理不应中断后台进程的 I/O 操作时,异步编程非常有用。异步编程在 Python 和 JavaScript 中是可能实现的,但在 TypeScript 中,异步编程是内置在内核中的。



TypeScript 是 JavaScript 的超集

TypeScript 是如何流行起来的

如果你讨厌 JavaScript 中不断发生的不合逻辑但又滑稽可笑的、令人抓狂的时刻,那么,我有一个坏消息告诉你:你在 TypeScript 中也会看到所有这些东西。


但是,这些语法上的小问题,并不是程序员如此热爱 TypeScript 的原因。更确切地说,这可以归结为这样一个想法:你需要一个很棒的产品(JavaScript),并添加更棒的东西(静态类型)。


当然,我并不是说 JavaScript 总是很棒,或者静态类型总是最好的处理方式。但是,对于构建大型 Microsoft 风格的应用程序来说,这似乎非常好用。


话虽如此,TypeScript 仍然只拥有 JavaScript 的一小部分人气。这可以归结为发行时间的原因:TypeScript 发行有八年了,而 JavaScript 的发行时间是它的三倍!Python 在这一领域中,也是一款有着三十年发行历史的老古董。


尽管它很年轻,但在某些领域中,TypeScript 是不可避免的。这就增加了它的受欢迎程度。例如,当 Google 在 2016 年宣布 Angular.js 将与 TypeScript 一起使用时,TypeScript 在 StackOverflow 上的标签数量呈爆炸式激增。



与 Python 和 JavaScript 的吸引力相比,TypeScript 只占一小部分。不过,在某些领域,TypeScript 是不可避免的。

TypeScript 在什么地方比 Python 更有优势

JavaScript 之所以在当时很受欢迎,是因为它可以在任何地方运行。你可以在服务器、浏览器或你喜欢的任何地方来运行它。你只需编译一次,它就可以在任何地方工作。当它第一次出现时,简直就像是魔法一样。


由于它是基于 JavaScript 构建的,所以 TypeScript 也继承了这种魔法。Python 也是如此!当然,Python 的实现方式略有不同,因为它使用的是解释器而不是虚拟机。但这并不能改变这样一个事实:就一次编写到处运行这方面,TypeScript 和 Python 是可以相提并论的。


像泛型和静态类型这样的特性使得在 TypeScript 中进行函数式编程比在 Python 中更容易。这可能是一个优势。因为由于数据科学、并行编程、异步编程等领域的发展,对函数式代码的需求正在增长。


另一方面,Python 也在添加越来越多的函数式编程特性。当涉及到数据科学、机器学习等方面,Python 处于前沿地位。


这就剩下并行编程和异步编程了。尽管这两种编程语言都可以完成这两种工作,但是有一个很大的不同:在 Python 中,你需要使用特定的库来完成任务。而在 TypeScript 中,所有的库都是与内核异步的。由于后者在默认情况下功能更多,因此进行并行编程更容易一些。


换句话说,如果你是从事异步进程和并行计算的 Python 开发人员,那么你可能会想尝试一下 TypeScript。

TypeScript 适合数据科学吗?

许多数据科学家都在处理异步和并行进程。你可能已经在考虑使用 TypeScript 而不是 Python 来编写下一个项目。不过,这究竟是不是一个好主意,还要取决于许多其他因素。


首先,TypeScript 并没有一种简单明了的方式进行列表推导。例如,当处理大型数据时,这可能会令人感到沮丧。


其次,TypeScript 中并没有原生矩阵运算。Python 中有 NumPy,以及许多其他工具,这些工具使 Python 变得更容易。因此,如果你的项目有大量的线性代数,你可能不会想用 TypeScript。


再次,如果你对 JavaScript 不是很熟悉的话,你几乎肯定会有一些困惑。因为 TypeScript 就是基于 JavaScript 构建的,前者继承了后者的所有特性——所有好的、坏的和令人抓狂的特性。不过,说实话,遇到这些现象也会很有趣……


最后,你还需要考虑到编程并不是一种单独的职业。在数据科学领域中,有一个庞大的 Python 社区,它能为你提供支持和建议。但在目前,TypeScript 在数据科学家中并没有那么流行。因此,你可能无法在 StackOverflow 和其他地方找到对你的问题有帮助的答案。


也就是说,如果你要开始一个没有太多大数据和矩阵运算的小项目,那么无论如何你都可以尝试一下 TypeScript。特别是当它涉及到并行或异步编程时。

底线:清楚在何处使用你的工具

并不是每项任务都有一种语言。当然,有些语言比其他语言更为有趣,或更为直观。当然,热爱你的工具是很重要的,因为这会让你在困难的时候继续前进。因此,从一种很受欢迎的编程语言(如 TypeScript 或 Python)开始,并不是一个坏主意。


但归根结底,你不应该像信奉宗教信仰一样只信奉一种编程语言。编程语言只不过是一种工具。至于哪种工具最适合你,主要取决于你想用它做什么。


目前,对数据科学领域来说,Python 是巨大的存在。但是,在一个快速发展的领域,你需要把眼光放远一些。随着任务的改变,你的工具也会随之改变。


另一方面,TypeScript 有一个围绕前端 Web、后端节点和移动开发的活跃社区。有趣的是,这些领域与数据科学的交叉比人们想象的要高。特别是,Node 在数据科学家中越来越受到关注。


当然,这并不意味着你应该一次涉足十几种编程语言。真正精通一门编程语言有着巨大的价值。但从长远来看,对其他语言和技术的好奇心将有助于你保持领先地位。


所以,当你想尝试新事物的时候,不要犹豫!那为什么还不去尝试 TypeScript 呢?

作者介绍:

Rhea Moutafis,正在攻读暗物质物理学博士学位。热爱艺术、音乐及美好事物。


原文链接:


https://towardsdatascience.com/why-developers-love-typescript-every-bit-as-much-as-python-687d075cfb5e


2020-10-28 17:077146
用户头像
刘燕 InfoQ高级技术编辑

发布了 1123 篇内容, 共 608.5 次阅读, 收获喜欢 1982 次。

关注

评论 1 条评论

发布
用户头像
到底在说TypeScript还是和Python在做比较?
2020-11-06 08:45
回复
没有更多了
发现更多内容

产品训练营--第二期作业

曦语

产品训练营

一个 3 年 Java 程序员 5 家大厂的面试总结(已拿Offer)

Java架构之路

Java 程序员 架构 面试 编程语言

教你用Java字节码做点有趣的事

比伯

Java 编程 架构 程序人生 计算机

三张图解释静态NAT、动态NAT、PAT

“区块链新闻编辑部”: 从“云媒体”到“链媒体”的现实跨越

CECBC

区块链技术

Flink可靠性的基石-checkpoint机制详细解析

五分钟学大数据

大数据 flink

内存数据库解析与主流产品对比(三)

星环科技

数据库 大数据

区区一个SpringBoot问题就干趴下了?我却凭着这套“神级PDF文档”吊打面试官

Java 编程 面试 微服务

新思科技发布《美国不良软件质量成本:2020年报告》

InfoQ_434670063458

软件质量 新思科技

《程序员修炼之道》- 务实的哲学(3)

石云升

读书笔记 程序员 28天写作 批判性思维 完成好过完美

Elasticsearch 基于脚本进行 partial update

escray

elastic 七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试

数据库恢复子系统的常见技术和方案对比(二)

星环科技

数据库 大数据

阿里四年技术 TL 的得失总结:如何做好技术 Team Leader

阿里巴巴云原生

云计算 项目管理 程序员 微服务 云原生

30天消化MyBatis源码解析笔记,吊打面试官,offer接到手软

Java架构之路

Java 程序员 架构 面试 编程语言

5年Java经验不会源码被拒,苦学这些Spring源码笔记后,面试不再慌

Java架构之路

Java 程序员 架构 面试 编程语言

Libra演进与数字货币国际化

CECBC

区块链

开发质量提升系列:问题登记列表(下)

罗小龙

生产事故 28天写作 解决思路

程序员入职新公司,只需8步,直接凸显出个人价值

Java架构师迁哥

kotlin高阶函数let、with、apply、run、also使用场景

陈吉米

kotlin

【推荐收藏!】Gradle 与 Android 构建入门

百度Geek说

研发工具 andiod

拍乐云 Flutter SDK 全新发布,跨平台音视频开发更easy

拍乐云Pano

flutter 音视频 WebRTC RTC

nodejs的调试debug

程序那些事

debug 调试 nodejs 程序那些事 程序调试

Flink 学习路线总结

大数据学习指南

大数据 flink

这是阿里技术专家对 SRE 和稳定性保障的理解

阿里巴巴云原生

项目管理 运维 云原生 安全 监控

Dubbo 3.0 前瞻之对接 Kubernetes 原生服务

阿里巴巴云原生

容器 运维 云原生 k8s dubbo

KubeVela:标准化的云原生平台构建引擎

阿里巴巴云原生

容器 云原生 k8s API OAM

译文《最常见的10种Java异常问题》

潘大壮

Java 异常 java异常处理 Exception

抽奖助手利益相关方

千竹

数据库恢复子系统的常见技术和方案对比(一)

星环科技

数据库 大数据

智能汽车为什么新势力有胜算(28天写作 Day20/28)

mtfelix

28天写作 新能源汽车 智能汽车 造车新势力

10 个 JavaScript 简洁代码小技巧(文末彩蛋)

零和幺

JavaScript 大前端 CleanCode

为什么程序员对TypeScript 爱得“深沉” ?_语言 & 开发_Rhea Moutafis_InfoQ精选文章