作者 | Ari Joury
譯者 | 康少京
審校 | Noe
Python是我的生計,我喜歡它。盡管我對這門語言有一些意見,但我強烈建議從事數(shù)據科學的新手去嘗試使用Python語言。不管怎樣,在該領域具有豐富經驗的人往往是 Python傳道者。
但是,這并不是意味著不能挑戰(zhàn)您所在領域的限制,例如通過探索不同的編程范式或新語言。
大約在十年前,微軟的軟件工程師注意到JavaScript已經不能滿足他們的所有需求。一方面,這門語言發(fā)展迅速,增加了非常有趣的新功能,管道中的所有功能都無法解決一個基本問題,JavaScrip對于小程序來說很好,但用它編寫整個應用程序卻一團糟。
解決這一問題有幾種可能性:例如,使用不同的語言,或者用更好的語法重新設計JavaScript。微軟的開發(fā)團隊采用了不同的方法:他們通過擴展JavaScript創(chuàng)建了TypeScript。通過這種方式,他們能夠使用JavaScript的所有新功能,同時擺脫對大型項目不利的東西。
與 Python類似,JavaScript是在運行時編譯的,這意味著您需要運行代碼來調試它。另一方面,TypeScript 是經過編譯的。這提供了額外的安全層,因為程序員在執(zhí)行之前就有可能得到有關錯誤的信息。對于像Python或JavaScript 這樣的非編譯語言,一旦意識到代碼沒有按預期運行,在查找bug時可能會非常耗時。
然而,JavaScript和TypeScript之間的主要區(qū)別在于類型檢查器。編譯后,每個TypeScript程序都會檢查數(shù)據類型是否相互一致。
這可能聽起來很簡單,但是當你做一個有數(shù)千行代碼的項目時,你會特別驚訝,感謝上帝擁有它。
還有一些其他差異,例如TypeScript具有匿名函數(shù)和異步函數(shù)這一事實。匿名函數(shù)是函數(shù)式編程的一個關鍵特性,它可以使程序在大數(shù)據的負載下更高效。
當您需要并行執(zhí)行多個操作,或者處理不應中斷后臺進程I/O 操作時,異步編程非常有用。在Python和Javascript中可以進行異步編程,但在TypeScript中它是從核心內置的。
TypeScript是javaScript的超集
Python的競爭對手名單很長:Rust、Go、Scala、Haskell、Julia、Swift、C++、Java和R都在上面找到了一個條目。可以理解的是,JavaScript和TypeScript 在如此擁擠的領域得不到那么多認可
這并不意味著TypeScript不是通用編程世界中的主流。然而,在數(shù)據科學家中,它從來就不是特別受歡迎。
由此可以得出結論,TypeScript可能不適合數(shù)據科學。但不要著急。盡管它可能并不適用于數(shù)據科學的每個部分,但在某些領域它比Python具有明顯的優(yōu)勢。
如果你碰巧在其中一個領域工作,就得嘗試一下TypeScript。如果你沒有嘗試過,誰知道你接下來會在哪里著陸呢?該領域發(fā)展的很快。如果你能看得更遠,你就有了競爭優(yōu)勢。
TypeScript是如何流行起來的
如果你討厭JavaScript中不斷發(fā)生的不合邏輯但又很滑稽的WTF時刻,那么我要告訴你一個壞消息:你也會在TypeScript中看到所有這些東西。
但這些語法問題并不是程序員喜歡TypeScript的愿因。相反,它歸結為這樣一種想法:使用一個很棒的產品——JavaScript——并添加一些更強大的東西——靜態(tài)類型。
當然,我并不是說JavaScript總是很棒,或者靜態(tài)類型總是最好的做事方式。但是對于構建大型的微軟風格的應用程序來說,這似乎非常有效。
也就是說,TypeScript的流行程度只是 JavaScript 的一小部分。這可以歸因于年齡:TypeScript是8歲了。但JavaScript的歷史是TypeScript的三倍!Python也是該領域的老前輩,已有三十年歷史。
盡管TypeScript成立的時間不長,但在一些領域是不可避免的。同時也增加了它的受歡迎程度。例如,當Google在2016年宣布 Angular.js 將與TypeScript一起運行時,StackOverflow上的標簽數(shù)量呈爆炸式增長。
堆棧溢出趨勢
TypeScript只分享了Python和JavaScript所具有的一小部分吸引力。不過,在某些領域這是不可避免的
TypeScript可能比Python更有優(yōu)勢的地方
當年JavaScript之所以流行,是因為它無處不在。您可以在服務器、瀏覽器或任何您喜歡的地方運行它。只要編譯一次,它就可以在任何地方運行。當它首次出現(xiàn)的時候,簡直跟變魔術一樣。
由于它是基于JavaScript構建的,因此TypeScript也具有這種魔力。Python也可以!當然,它的實現(xiàn)略有不同,因為它使用解釋器而不是虛擬機。但這并沒有改變這樣一個事實,即在run-me-anywhere方面,TypeScript 和Python不相上下。
泛型和靜態(tài)類型等特性使用TypeScript進行函數(shù)編程比用Python更容易。這可能是一個優(yōu)勢,因為由于數(shù)據科學、并行編程、異步編程等方面的發(fā)展,對函數(shù)代碼的需求正在增長。
另一方面,Python也增加了越來越多的函數(shù)式編程功能。在數(shù)據科學、機器學習等領域,Python處于最前沿。
這使得并行編程和異步編程成為可能。盡管這兩種語言都可以實現(xiàn),但有一個很大的區(qū)別:在Python中,需要使用特定的庫來完成任務。在TypeScript中,所有庫從核心開始都是異步的。由于后者在默認情況下更具功能性,所以進行并行編程通常更容易一些。
換句話說,如果你是一名涉及異步進程和并行計算的Python開發(fā)人員,你可能想嘗試一下TypeScript。
是什么讓TypeScript對數(shù)據科學如此重要——或者不是
許多數(shù)據科學家處理異步和并行編程??赡苁紫瓤紤]得是TypeScript而不是Python編寫,不過,這是否是個好點子取決于很多因素。
首先,TypeScript不會用直接的方式進行列表推導,例如,在處理大型數(shù)組時,這可能會令人苦惱。
其次,TypeScript 中沒有原生矩陣運算Python具有NumPy以及許多其他工具,用起來會很簡單。因此,如果項目涉及大量的線性代數(shù),這個時候可能你會不想采用TypeScript。
第三,如果你對JavaScript不太熟悉,肯定會有感到困惑的時候。由于 TypeScript是基JavaScript構建的,它繼承了它的所有特性——好的、壞的和WTF。不過,老實說,遇到這些現(xiàn)象也很有趣……
最后,要考慮到編程不是個獨立的職業(yè),在數(shù)據科學領域中,有個龐大的Python社區(qū)可以提供支持和建議,但目前TypeScript在數(shù)據科學家中還不是很流行。所以你可能找不到那么多關于StackOverflow和其他問題的有用答案。
話雖如此,如果開發(fā)一個沒有太多大數(shù)據和矩陣運算的項目,你可能還是想試試TypeScript,尤其是當它涉及到一些并行或異步編程時。
沒有一種語言適用于所有的項目要求。當然,有些語言比其他語言更有趣或更直觀。當然,你喜歡的工具也是非常重要,因為這會讓你在困難時期繼續(xù)前進。因此,從TypeScript或Python等深受歡迎的語言開始學習是個不錯的主意。
但歸根結底,你不應該像宗教一樣堅持一種語言。編程語言是工具。哪種工具最適合您取決于您嘗試使用它做什么。取決于它做什么。
目前,Python對于數(shù)據科學來說非常重要。但在一個快速發(fā)展的領域,你需要能夠看得更遠。隨著任務的變化,工具也會發(fā)生變化。
另一方面,TypeScript有一個關于前端 Web、后端Node和移動開發(fā)的熱門社區(qū)。有趣的是,這些領域與數(shù)據科學的交集比人們想象的要多。尤其是 Node,它在數(shù)據科學家中獲得了越來越多的關注。
當然,這并不意味著您應該一次涉足十幾種語言。精通一門語言是很有價值的。但對其他語言和技術保持好奇將幫助你長期保持領先地位。
所以,當你想嘗試新事物的時候。請不要猶豫,為什么不用TypeScript?
原文標題:??Hey Python devs, don’t underestimate TypeScript???
譯者介紹
康少京,51CTO社區(qū)編輯,目前從事通訊類行業(yè),底層驅動開發(fā)崗位,研究過數(shù)據結構,Python,現(xiàn)對操作系統(tǒng)和數(shù)據庫等相關領域感興趣。