作者 | STX Next
譯者 | 彎月
出品 | CSDN(ID:CSDNnews)
在討論應該使用 Python 還是 JavaScript 構建項目時,一般我們都不會說只使用一種編程語言來構建所有的組件。
在現代軟件開發中,如果想構建符合標准的軟件,確保在截止日期前完成,或者構建一款可以處理數百萬用戶的應用程序,那麼通常都會使用多種語言、框架、工具和 API。
因此,如果我們想比較 Python 和 JavaScript,那麼就應該討論使用這兩種語言來構建軟件的核心組件。
除了這個核心主題之外,我們還將在本文中討論:
Instagram 成為世界上最大的 Python 應用程序的背後故事;
最適合 Python 和 JavaScript 的應用程序;
這兩種語言可互補。
在深入探討細節之前,首先我們來簡單地回顧一下 Python 和 JavaScript 的發展經歷,以及它們當前在編程世界中的獨特地位。
Python發展成為最大的編程語言之一的經過
Python 問世於 1991 年,這是一種通用編程語言,因此可用於解決任何可以用代碼量化和描述的問題。
近年來,Python 在科技市場的受歡迎程度大幅上升。在Django 等 Web 開發框架的推波助瀾下,Python 聲名大噪,此外Python在學術圈也非常流行。之後,Python 又成為了機器學習和數據處理的首選語言,這進一步增加了 Python 的人氣。
CSDN付費下載自視覺中國
Python 借助 Django 等 Web 開發框架在網絡開發中人氣大增,雖然還比不上 JavaScript。在 2020 年的 StackOverflow 開發者調查中,JavaScript 以 67.7% 的使用率位居榜首,而 Python 的使用率為 44.1%。在框架方面,JavaScript 的庫和框架 jQuery、React 和 Angular 占據前三位。Django 排在第 10 位。
如今,許多科學家和研究人員都在使用 Python,這些人精通復雜的科學知識,但技術力不是特別強,對他們來說,Python 是一種簡單易學的語言。科學家們可以利用 Python 快速制作原型,因此這種語言更具吸引力。
這一切都是因為 Python 是最簡單的語言之一,但這種語言入門容易,想要精通卻很難。即使你不是程序員,也可以利用 Python 實現簡單的自動化,比如抓取網站的數據,或者將數據從一個程序遷移到另一個程序。
此外,如果花費一番心思真正掌握 Python,就可以利用它來構建各種各樣的軟件。
JavaScript 於 1995 年首次問世。當時還沒有 Web 應用,JavaScript 的目標是讓 Web 成為一個真正的應用程序平台。
JavaScript 的發展並非一帆風順。由於一些設計選擇,以及糟糕的營銷,JavaScript 被許多開發人員厭棄,而且由於低網速和低帶寬的限制,JavaScript的能力也非常有限。另外,很長一段時間以來,跨浏覽器的兼容性一直存在問題,這使得開發人員很難構建可以在所有浏覽器上運行的網站。
CSDN付費下載自東方IC
多年來,JavaScript 的受歡迎程度一直在穩定增長。於 2006 年發布的 jQuery 是第一個消除跨浏覽器兼容性問題的庫。在 jQuery 的支持下,網站交互性的實現變得更加容易。後來又出現了一個主流框架 AngularJS,但它後來被 Angular 2+ 取代,如今該框架在企業級解決方案中仍然非常流行。
2011 年~2012 年左右,JavaScript 首次獲得了所有主流浏覽器的支持,包括Firefox、Chrome、Opera 和 Safari。但即使到現在,JavaScript 仍然未能獲得 100% 的支持。這是因為 JavaScript 會定期添加新功能,因此浏覽器開發人員必須不斷努力改進對 JS 的支持。
2013 年,Facebook 工程團隊發布了 React,該框架迅速流行起來,並為鞏固 JavaScript 作為最受歡迎的網絡技術貢獻了重要力量。
當然,上述只是 JavaScript 發展歷史的概要,實際上整個發展過程更加漫長,更加復雜。總的來說,JavaScript 經歷了重重磨難,才有了如今的地位。
目前,新版 JavaScript 的設計正在朝著成熟通用編程語言的方向邁進。
如果核心組件或系統發生故障的時間過長,整個項目就會面臨崩潰。因此,我們需要慎重地選擇這部分的構建技術。
對於優先級較低的系統,你可以嘗試不同的方法,找到最節省成本的方法。然而,在為構建核心組件選擇編程語言時,也采用這種態度就會導致項目走向失敗。
假設有一款主要用於共享照片和視頻應用程序,在全球擁有超過 10 億用戶,那麼處理海量內容的服務器就是該應用程序的核心組件。對於這類應用,我第一個想到的就是Instagram,這款應用號稱“世界上最大的 Python 網站”。
Instagram 的一位工程師曾表示,“Instagram 的服務器完全由 Python 驅動。”Instagram 服務器的應用程序就是“一個龐大的、包含數百萬行代碼以及數千個 Django 端點的大型代碼庫”。Instagram 的每張照片、每個視頻都是通過最流行的 Python Web 框架 Django 編寫的。
Instagram 使用了大量 Facebook 數據中心的服務器。工程師不僅需要管理應用程序的外觀、消息流、內容推薦算法,還需要確保服務器的 CPU 不會過熱。
這是一項極其艱巨的任務。他們為什麼會選擇 Python 作為主要語言?
Instagram 的開發者博客公布了答案:“我們最初選擇使用 Python,是因為該語言簡單且實用,這與我們的理念非常吻合,即從簡單的事情入手’。但簡單也有一個缺點:效率低。”
簡單且實用。Martin Fowler 是一位軟件開發大師,擁有數十年的從業經歷,還出版了多本書籍,他曾經寫道:“任何傻瓜都可以編寫計算機可以理解的代碼。但只有優秀的程序員可以編寫人類可以理解的代碼。”
這意味著,雖然你的目標是確保機器不會因每天為數十億用戶提供服務而過熱,但實現這一點的方式並不是學習怎樣更好地編寫機器代碼。你必須編寫方便其他開發人員理解的代碼,這樣他們就可以在必要時快速調試代碼,或在現有代碼之上構建新功能,同時還不會擔心破壞現有系統。
Python 非常適合這類應用,因為該語言方便閱讀、簡潔且易於理解。
雖然 Instagram 的服務器選用了 Python,但界面部分卻並非由 Python 負責。Python 負責存儲和管理所有數據,但智能手機上的界面是使用原生編程語言構建的,而且還有很大一部分來自 JavaScript。
Instagram 的移動界面是使用 Swift(iOS)和 Java(Android)構建的,但流行的移動前端 JavaScript 框架 React Native 也發揮了重要作用。Instagram 工程師之所以選擇該框架,是因為他們希望提高開發速度,這樣就能夠盡快為應用程序的 iOS 和 Android 版本添加新功能。
React Native 是不二之選,因為工程師只需編寫一套代碼就可以在不同的系統上發布新功能。他們可以使用 JavaScript 代碼在兩個系統上創建原生界面。
本來他們可以使用另一種方法,例如利用 Swift 和 Java 構建單獨的界面,但他們選擇了 React Native。在 React Native 的支持下,維護界面的工作不僅可以節省成本和開發時間,而且也可以減輕開發人員的負擔。
Instagram 代表了當前網絡和移動行業的基准。許多流行的應用都采用了與之類似的結構:後端采用 Python,前端采用 JavaScript。
即使是與 Instagram 完全不同的 PayPal,也有類似的技術棧。他們曾在一個非常簡單的聲明中稱使用了 Python 來管理數據,而且還使用 JavaScript 來創建用戶界面。
這份聲明被極度簡單化了,因為了解一下他們所使用編程語言和工具的細節,就會被復雜性所淹沒。另外,他們不像 Instagram 那樣熱衷於與全世界分享技術棧的細節。
還有一篇博文解釋說,PayPal 的中間層基礎設施(Web服務器和前端)采用了Node.js,因此這樣他們就可以只使用 JavaScript 來構建網站了。
但這也不是核心組件。PayPal 的的核心組件隱藏在所有這些界面之下,其中很多是采用 Python(很可能還有其他幾種語言)編寫的,而且安全性、穩定性和數據管理也是由 Python 負責的。
JavaScript 不適合核心系統的構建。最初,這門語言的設計目標是為網站添加交互性,雖然如今已經發展成為一個強大的工具,但依然受到設計的限制。
另一方面,Python 的設計目標是通用編程語言,因此它的用途遠遠超出了 Web 開發。如今,Python 還植根於學術界。我們不僅可以利用 Python 構建網站,而且還可以利用這門編程語言來構建人工智能的神經網絡。
因此,總的來說,Python 的使用比 JavaScript 更廣泛。但是,在幾個領域內JavaScript 是不二之選,選擇 Python 就不太明智了。
JavaScript 是移動開發領域的贏家。雖然有一些移動開發的小眾框架(比如 Kivy 和 PyQT)是使用Python開發的,但幾乎沒有人使用。
對於 Python 開發人員來說,學習 JavaScript 並使用其最流行的移動開發框架 React Native 來構建應用程序是合理的選擇。
還有一個領域 JavaScript 略勝一籌,那就是前端開發。在構建現代界面方面,JavaScript擁有一流的框架(React、Angular、Vue)。開發人員還可以借助 Node.js,構建應用程序的服務器端。此外,開發人員還可以通過 JAM 技術棧(即JavaScript + APIs + HTML),在短期內快速構建漂亮的 Web 應用。
對於預算有限,時間緊迫的中小型 Web 和移動開發團隊來說,JavaScript 絕對是最佳選擇。
Instagram 和 PayPal 的例子表明,Python 與 JavaScript 結合使用,可以構建出主導市場並徹底改變數十億人生活的應用程序。
使用 JavaScript 構建的應用程序可以在 Web 上快速運行。與 Python 應用程序相比,無疑使用 Node.js 構建的 Web 應用程序的運行速度會更快。
正如 Towards Data Science 所說,“Python 的性能相對較慢,因為它只能單線處理請求,而 Node.js 可以使用多線程。”
有一些方法可以優化 Python 的性能,因為其底層使用的是 C 語言。例如,NumPy 利用經過優化的 C 代碼提升了 Python 的速度。Cython 是一個編譯器,是 Python 語言的超集,使用該編譯器的開發人員可以構建速度更快的C模塊,從而加快 Python 代碼的執行。
一般來說,對於 I/O 壓力較大的應用程序(比如 Facebook)來說,JavaScript 的運行速度更快,這類應用程序需要處理大量的實時數據,避免用戶等待至關重要。
如果是CPU需求較大的應用程序,例如需要處理大量數據來解決特定問題的機器學習模型,則Python的速度更快。另外,需要GPU進行大量計算的應用程序,也應該選用Python。
Instagram屬於I/O 密集型應用,但它的服務器使用了Python,這表明,經過合理的優化後,Python的執行速度也可以很快。
關於性能,我們還需要考慮到另一個層面:走向市場的時間。只要代碼編寫合理,這兩種語言都可用來快速構建最小化可行產品。對於復雜的程序,使用Python可以縮短開發時間,因為該語言易於閱讀和調試。此外,Python還可以促進團隊協作。
而使用JavaScript構建產品則會比較復雜,雖然速度很快,但開發時間會更長。出於這個原因,如今很多公司選擇了TypeScript,因為一些開發人員認為TypeScript比Python更容易閱讀和維護。
Python 是機器學習開發人員的首選語言。機器學習很復雜,涉及大量數據,因此選擇Python合情合理。Python 是一種簡單易讀的語言,可以減輕開發人員的負擔,而且它一直是數據科學的標准。
如今流行的機器學習框架(如TensorFlow、scikit-learn、PyTorc)大多是使用Python編寫的,而且它們還提供了專用的 Python API。TensorFlow 曾在2018 年發布了該框架的 JS 版本,支持開發人員構建可在浏覽器或 Node.js 服務器中運行的機器學習模型。
但這還不足以贏得整個機器學習的世界。Python非常適合機器學習,而且在短期內它不太可能被另一種語言取代。
很多人認為 Python 與 JavaScript 做比較並不公平。畢竟這兩種語言的設計初衷不同,因此二者在軟件開發中的應用也存在差異。
正是這些差異使得這兩種技術能夠在現代編程世界中完美地互補。
將來這種情況會發生變化嗎?就目前來看,JavaScript 作為最強大的 Web 與移動應用開發工具的地位似乎非常牢固。同時,JavaScript 也在朝著通用編程語言的方向發展,但未來它能否取代 Python 之類的語言,目前尚無定論。
至於 Python,由於可讀性、易用性以及處理數據的能力,該語言可能會繼續主導機器學習領域和學術界。
說到底,技術棧的選擇始終取決於項目的性質、程序員掌握的技術以及其他多種因素。
*本文由CSDN翻譯,未經授權,禁止轉載。
原文鏈接:https://medium.com/@STXNext/python-vs-javascript-is-it-a-fair-comparison-a3d90288a204
— 推薦閱讀 —
《新程序員001-004》已全面上市
歡迎掃描下方二維碼或點擊進入立即訂閱
即可暢享電子書及精美紙質書。
*Linux 超 macOS、最討厭 Angular.js 框架,調查了 7 萬名開發者的最新發現!
*“一次編寫,運行各端”,高通重磅發布 AI 軟件棧!
*把騰訊搬到雲上,治愈了他們的技術焦慮
一鍵三連 「分享」「點贊」「在看」
成就一億技術人