产品战略专家梁宁确认出席AICon北京站,分享AI时代下的商业逻辑与产品需求 了解详情
写点什么

为什么程序员对 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:076601
用户头像
刘燕 InfoQ高级技术编辑

发布了 1112 篇内容, 共 533.9 次阅读, 收获喜欢 1976 次。

关注

评论 1 条评论

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

7-32 哥尼斯堡的“七桥问题” (25 分)(思路

爱好编程进阶

Java 程序员 后端开发

CCF201509-2 日期计算

爱好编程进阶

Java 程序员 后端开发

Day168

爱好编程进阶

Java 程序员 后端开发

Day193

爱好编程进阶

Java 程序员 后端开发

前端食堂技术周刊第 36 期:pnpm v7.0.0、Node 对 ESM 的支持达到重要里程碑、四月份登陆浏览器的新功能、VS Code April 2022

童欧巴

JavaScript 前端 Node React 前端工程师

CQRS架构

爱好编程进阶

Java 程序员 后端开发

ElasticSearch入门(三)Logstash实现MySQL数据同步至ElasticSearch

爱好编程进阶

Java 程序员 后端开发

2021 企业架构(EA)状态调查报告

涛哥 数字产品和业务架构

企业架构

模块五:作业

本人法海

「架构实战营」

5 年 Java 开发经验,阿里面试了 7 轮,太难了呀

爱好编程进阶

Java 程序员 后端开发

CGBTN2108-DAY07总结复习

爱好编程进阶

Java 程序员 后端开发

如何开发LAXCUS分布式应用软件(一):前言

LAXCUS分布式操作系统

集群 并行计算 分布式操作系统 分布式应用软件

模块5 作业

KennyQ

C语言_语句与位运算练习

DS小龙哥

5月月更

6月GitHub上最牛逼的10个Java开源项目,号称“Star收割机

爱好编程进阶

Java 程序员 后端开发

Github已标星80

爱好编程进阶

Java 程序员 后端开发

全链路压测(十一):聊聊稳定性预案

老张

性能测试 全链路压测

Nacos源码系列—服务端那些事儿

牧小农

源码 nacos

Day433

爱好编程进阶

Java 程序员 后端开发

GitHub持续霸榜!2021年Java核心知识:面试突击版

爱好编程进阶

Java 程序员 后端开发

C++最佳实践 | 1. 工具

俞凡

c++ 最佳实践

ftp命令解决文件的上传和下载

爱好编程进阶

Java 程序员 后端开发

GitHub上14个屌炸天的Java进阶教程、面试真题项目,建议收藏

爱好编程进阶

Java 程序员 后端开发

【愚公系列】2022年05月 二十三种设计模式(八)-组合模式(Composite Pattern)

愚公搬代码

5月月更

985硕非科班,靠着自己的努力一步一步转行拿到抖音后端offer,现在想想就觉得满足

爱好编程进阶

Java 程序员 后端开发

ansible2

爱好编程进阶

Java 程序员 后端开发

Day262

爱好编程进阶

Java 程序员 后端开发

Docker容器重启慢?快来看看这些优雅终止方案

爱好编程进阶

Java 程序员 后端开发

python之pythonic

AIWeker

Python 人工智能 5月月更

32岁的我裸辞了,八年 Java 老鸟,只因薪水被应届生倒挂

爱好编程进阶

Java 程序员 后端开发

Bean的作用域与Bean的生命周期详解

爱好编程进阶

Java 程序员 后端开发

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