写点什么

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

2020 年 10 月 28 日

为什么程序员对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:075712
用户头像
刘燕 InfoQ记者

发布了 568 篇内容, 共 178.2 次阅读, 收获喜欢 1081 次。

关注

评论 1 条评论

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

甲方日常 30

句子

工作 随笔杂谈 日常 心情

Anaconda安装使用和akshare库使用

MySQL从删库到跑路

Python 数据分析 Windows 10 Anaconda akshare

Python 疑难问题:[] 与 list() 哪个快?为什么快?快多少呢?

Python猫

Python 学习 编程 程序员

面向对象编程会被抛弃吗?这五大问题不容忽视

Java架构师迁哥

Kubeless 函数部署遇到了问题,如何 Debug? | 玩转 Kubeless

donghui

Serverless kubeless

教育场景方案升级| 打通业务前后端,少量开发快速上线(一):互动小班

ZEGO即构

在线教育 低代码

手把手带你玩转 openEuler | 如何安装 openEuler

openEuler

Linux 开源 操作系统 openEuler

区块链USDT支付开发方案,USDT跨境支付搭建

135深圳3055源中瑞8032

远程触发Jenkins的Pipeline任务的并发问题处理

小Q

Java 学习 编程 架构 并发

数字货币交易系统定制开发,区块链交易所

135深圳3055源中瑞8032

极客时间架构师培训 1 期 - 第 4 周总结

Kaven

「红黑树」背了又忘?深入本质,他也不过是一棵二叉树

小松漫步

4年Java经验,备战两月成功拿到美团、京东、字节offer

Java架构之路

Java 程序员 面试 编程语言

惊险的B站Java后端岗面试之旅,复盘面试经历及面试真题

Java架构之路

Java 程序员 面试 编程语言

解释一下==和equals的区别,你以为就这么简单?那你就草率了

小Q

Java 学习 架构 面试 基础

合约跟单平台搭建,交易所跟单软件开发商

135深圳3055源中瑞8032

UBBF2020:智能联接,共创行业价值新增长

DT极客

腾讯技术官又曝神作,两份堪称‘千古绝唱’操作系统笔记现已被全网疯传

云流

编程 操作系统 计算机

netfilter/iptables 原理

为为

Service Mesh Linux Kenel

详细分析定制企业应用的价格

Philips

敏捷开发 快速开发

详细讲解:python中的lambda与sorted函数

计算机与AI

Python

随机森林原理介绍与适用情况(综述篇)

计算机与AI

数据挖掘 学习 数据科学 随机森林

区块链钱包开发需要注意哪些问题?区块链数字钱包搭建

135深圳3055源中瑞8032

月薪60k的Java开发在阿里是什么级别?对技术能力有哪些要求?

Java架构之路

Java 阿里巴巴 程序员 面试 编程语言

vidyo在数字化办公中提供了什么便利?

dwqcmo

音视频会议 集成架构 解决方案 智能硬件

springboot+Redis+Shiro+MyBatis炸翔版CMS开源系统(代码+视频)

周老师

Java 编程 程序员 架构 面试

【BAT面试通关手册】覆盖Java相关29个技能,学完之后吊打面试官!

Java成神之路

Java 阿里巴巴 程序员 面试 编程语言

图解 K8S 源码 - QoS 篇

郭旭东

Kubernetes Kubernetes源码

推荐一款MySQL开源客户端,免费+跨平台+使用便捷!

王磊

MySQL

Tensorflow2.0安装使用

MySQL从删库到跑路

人工智能 tensorflow Anaconda Jupyter Notebook

BATJ内部Java求职面试宝典,尤其应届生如果还没有学过那后悔去吧,也许你已经错过N多家大厂offer;

Java架构师迁哥

编译系统设计赛(华为毕昇杯)技术报告会|5月1日

编译系统设计赛(华为毕昇杯)技术报告会|5月1日

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