每個(gè)開(kāi)發(fā)人員都應(yīng)該學(xué)習(xí)的五種編程語(yǔ)言(下)
??上篇??說(shuō)了C/C++和Bash,下面繼續(xù)講剩下的三個(gè)語(yǔ)言。
三、JavaScript
WORA(一次編寫(xiě),隨處運(yùn)行)現(xiàn)在是 JavaScript——而不是 Java。現(xiàn)在您可以使用 JavaScript 來(lái)構(gòu)建幾乎任何東西。您可以使用 JavaScript 構(gòu)建網(wǎng)站、Web 服務(wù)、桌面應(yīng)用程序、移動(dòng)應(yīng)用程序、CLI 程序、IoT 解決方案、機(jī)器人相關(guān)程序和智能電視應(yīng)用程序。甚至還有一個(gè)原生支持 JavaScript 和 npm 模塊的運(yùn)行時(shí) (NodeOS)。如果您學(xué)習(xí) JavaScript,您將獲得與各種軟件項(xiàng)目合作的絕佳機(jī)會(huì)。
學(xué)習(xí) JavaScript 開(kāi)辟了一條新途徑,可以用一種現(xiàn)代編程語(yǔ)言構(gòu)建任何東西。面向互聯(lián)網(wǎng)的企業(yè)軟件公司主要使用 JavaScript 或維護(hù)至少幾個(gè)用 JavaScript 構(gòu)建的子項(xiàng)目。
Web 瀏覽器本身就理解 JavaScript 并提供大量基于 JavaScript 的 Web API 來(lái)構(gòu)建現(xiàn)代功能豐富的應(yīng)用程序。毫無(wú)疑問(wèn),世界上的每個(gè)程序員每天都在使用 Web 瀏覽器。程序員通常喜歡學(xué)習(xí)內(nèi)部結(jié)構(gòu)。JavaScript 確實(shí)是了解 Web 瀏覽器內(nèi)部結(jié)構(gòu)的必備技能。
下面的故事進(jìn)一步解釋了 JavaScript 的重要性。
抱歉 Java,一次編寫(xiě)隨處運(yùn)行 (WORA) 現(xiàn)在是 JavaScript
在 James Gosling 創(chuàng)建 Java 之前,特定于平臺(tái)的編譯語(yǔ)言(如 C/C++)是占主導(dǎo)地位的高級(jí)語(yǔ)言。程序員必須使用特定于平臺(tái)的 API 為每個(gè)平臺(tái)編寫(xiě)代碼。一些程序員通過(guò)使用條件語(yǔ)句分隔代碼,為所有平臺(tái)創(chuàng)建了一個(gè)單一的代碼庫(kù)。另一方面,一些程序員分別為每個(gè)平臺(tái)編寫(xiě)代碼庫(kù)。盡管編寫(xiě)特定于平臺(tái)的代碼會(huì)帶來(lái)很多好處,例如靈活性、可定制性和性能,但軟件開(kāi)發(fā)的業(yè)務(wù)方面需要一種快速發(fā)布跨平臺(tái)軟件產(chǎn)品的方法。
從業(yè)務(wù)的角度來(lái)看,制作軟件產(chǎn)品就是通過(guò)有效地利用人力資源使其正確和快速。Java借此機(jī)會(huì)進(jìn)入了軟件開(kāi)發(fā)市場(chǎng)。這與 OOP 無(wú)關(guān)(Java 不是第一個(gè)基于 OOP 的語(yǔ)言),也與性能無(wú)關(guān)(C/C++ 語(yǔ)言無(wú)疑比 Java 快)。這一切都是為了快速制作軟件和快速交付產(chǎn)品。
在那之后,我們到處都看到了Java。Java 幫助程序員創(chuàng)建桌面應(yīng)用程序、Web 服務(wù)器、移動(dòng)應(yīng)用程序、智能電視應(yīng)用程序和 Web 應(yīng)用程序(通過(guò)小程序)。但是現(xiàn)在,JavaScript 在所有這些方面都比 Java 做得更好。
JavaScript 是不朽的,Java 正在慢慢消亡
您可以使用不支持 JavaScript 的 Web 瀏覽器做什么?什么都不對(duì)?如今,幾乎所有網(wǎng)站都是動(dòng)態(tài)的;他們嚴(yán)重依賴(lài) JavaScript。沒(méi)有 JavaScript,您將無(wú)法正確使用您喜愛(ài)的網(wǎng)站。但是您將能夠像多年前使用 56k 調(diào)制解調(diào)器一樣查看純文本和一些圖形。
由于這個(gè)事實(shí),JavaScript 是不朽的,除非有人制作支持 X 腳本的不同瀏覽器并強(qiáng)制每個(gè)人使用它。另一方面,Java 正在慢慢消亡。Applet 已經(jīng)死了,大多數(shù)不使用 Java 制作桌面應(yīng)用程序,Java EE 有令人印象深刻的競(jìng)爭(zhēng)對(duì)手,并且 JavaScript 被用于制作 Android 應(yīng)用程序而不是 Java。此外,Java 的新許可模式并不是對(duì)每個(gè)人都有吸引力。另一方面,JavaScript 完全沒(méi)有商業(yè)限制。
JavaScript,一切皆有可能
你可以用 JavaScript 比 Java 更好地做以下事情。
- Web 應(yīng)用程序:Vanilla JavaScript、React、Angular 等。lWeb 后端:Nodejs 和 Deno。
- 桌面應(yīng)用程序:Electron、NW.js 和 Neutralinojs。
- 移動(dòng)應(yīng)用程序:Ionic、React Native 和 NativeScript。
- 物聯(lián)網(wǎng)/機(jī)器人編程:NodeMCU、NoDuino等。
很棒的是 JavaScript 真正支持我之前提到的業(yè)務(wù)視角。開(kāi)發(fā)如此簡(jiǎn)單,因?yàn)檎Z(yǔ)言語(yǔ)法提供了非常好的抽象,并且設(shè)置也非??臁H肆Y源利用率令人印象深刻。例如,如果您可以制作網(wǎng)站,您就可以使用 Web 后端、桌面應(yīng)用程序和幾乎任何東西。
真正的 WORA,是 JavaScript
如今,一切都在向云端邁進(jìn)。首先,WORA 口號(hào)告訴我們有關(guān)平臺(tái)的信息。這是關(guān)于為所有平臺(tái)編寫(xiě)相同的代碼。但是,由于現(xiàn)代云運(yùn)動(dòng),WORA 應(yīng)該將 Web 瀏覽器視為全部。您可以編寫(xiě) JavaScript 并在瀏覽器和平臺(tái)中執(zhí)行它。
Java 有 Java 虛擬機(jī) (JVM) 來(lái)執(zhí)行稱(chēng)為字節(jié)碼的編譯指令。因此,如果特定平臺(tái)可以運(yùn)行 JVM,它也可以運(yùn)行 Java。同樣,JavaScript 也有一個(gè)稱(chēng)為 JavaScript 引擎的虛擬機(jī)來(lái)執(zhí)行中間代碼或機(jī)器代碼。事實(shí)上,JavaScript 引擎是 Web 瀏覽器的關(guān)鍵部分,但它是一個(gè)獨(dú)立的組件。因此,JavaScript 帶著 Nodejs 的概念從 Web 瀏覽器出來(lái)到了其他地方。
另一方面,Java 已經(jīng)在其他地方出現(xiàn)了。但是,它試圖通過(guò) Applet 概念進(jìn)入網(wǎng)絡(luò)瀏覽器并失敗了。
結(jié)論
JavaScript 也有不好的部分,就像任何其他編程語(yǔ)言一樣。主要問(wèn)題與膨脹軟件有關(guān),它在可用性方面消耗了大量資源。例如,我們經(jīng)常發(fā)現(xiàn)用 JavaScript 構(gòu)建的桌面應(yīng)用程序變成了膨脹軟件。這不是 JavaScript 造成的問(wèn)題,而是程序員造成的問(wèn)題。下面的文章解釋了更多關(guān)于這個(gè)英國(guó)媒體報(bào)道問(wèn)題的信息。
此外,您可能會(huì)爭(zhēng)辯說(shuō) Web Assembly 將使 Java 永垂不朽。因?yàn)槟菚r(shí)程序員將能夠使用 Java 制作 Web 應(yīng)用程序,而無(wú)需擔(dān)心 JavaScript。我不認(rèn)為新程序員會(huì)在不接觸 JavaScript 的情況下學(xué)習(xí) Java 來(lái)制作 Web 應(yīng)用程序。
現(xiàn)在我們知道為什么他們將 LiveScript 重命名為 JavaScript。
*原文鏈接:https://medium.com/swlh/sorry-java-write-once-run-anywhere-wora-is-now-javascript-92641161a73f。
四、Python
Python 是一種對(duì)開(kāi)發(fā)人員友好、簡(jiǎn)單且動(dòng)態(tài)類(lèi)型的解釋型編程語(yǔ)言。許多 Web 開(kāi)發(fā)人員、數(shù)據(jù)科學(xué)家、機(jī)器學(xué)習(xí)工程師和系統(tǒng)管理員在日常編程任務(wù)中使用 Python。Kivy 項(xiàng)目也支持 Python 進(jìn)入移動(dòng)開(kāi)發(fā)者社區(qū)。有時(shí),編寫(xiě) Python 源代碼比編寫(xiě)偽代碼來(lái)實(shí)現(xiàn)特定算法更快。
Python 提供了很多內(nèi)置函數(shù)來(lái)處理數(shù)據(jù)結(jié)構(gòu)。此外,Python 是處理數(shù)據(jù)記錄的最簡(jiǎn)單的編程語(yǔ)言之一。學(xué)習(xí) Python 對(duì)所有程序員都有好處。Bash 非常適合自動(dòng)化。如果你的自動(dòng)化腳本想要處理數(shù)據(jù),Bash 不適合——因?yàn)樗且环N命令語(yǔ)言。另一方面,Python 可以用最少的語(yǔ)法處理數(shù)據(jù),并像 Bash 一樣用最少的語(yǔ)法調(diào)用其他進(jìn)程。因此,如果您學(xué)習(xí) Python,您就可以編寫(xiě)干凈且功能齊全的自動(dòng)化腳本。
此外,Python 非常適合在線編碼挑戰(zhàn)和技術(shù)面試以快速解決問(wèn)題。例如,看看在 Python 中刪除列表的重復(fù)項(xiàng)是多么容易,甚至不使用任何導(dǎo)入語(yǔ)句。
五、Go
Go 是一種靜態(tài)類(lèi)型的通用編程語(yǔ)言,采用類(lèi)似 C 的語(yǔ)法設(shè)計(jì)。它具有其他現(xiàn)代編程語(yǔ)言具有的許多功能,例如垃圾收集、內(nèi)存安全和并發(fā)支持。Go 編程語(yǔ)言具有對(duì)開(kāi)發(fā)人員友好的語(yǔ)法,但與其他流行語(yǔ)言相比仍然具有令人印象深刻的性能。Go 語(yǔ)言的設(shè)計(jì)為我們所有程序員提供了很多寶貴的經(jīng)驗(yàn)教訓(xùn)。
Go 只有 25 個(gè)關(guān)鍵字,但它提供了構(gòu)建任何軟件系統(tǒng)所需的所有功能。大多數(shù)編程語(yǔ)言都添加了大量語(yǔ)言功能,使開(kāi)發(fā)人員的生活更輕松。但實(shí)際上,新的語(yǔ)言功能很快就會(huì)過(guò)時(shí)你的代碼庫(kù)。此外,許多有經(jīng)驗(yàn)的程序員通常并不關(guān)心語(yǔ)言的最新語(yǔ)法技巧和技巧。
Go 語(yǔ)言的設(shè)計(jì)教會(huì)了我們?nèi)绾斡米钌俸屯暾慕鉀Q方案來(lái)解決工程問(wèn)題。試想,25 個(gè)關(guān)鍵字足以設(shè)計(jì)一個(gè)功能齊全的編程語(yǔ)言。另一方面,現(xiàn)在 C++ 有 97 個(gè)關(guān)鍵字,而 Rust 有 54 個(gè)關(guān)鍵字——開(kāi)發(fā)團(tuán)隊(duì)可能會(huì)添加更多。
Go 支持面向?qū)ο缶幊蹋踔翢o(wú)需將 class 定義為關(guān)鍵字。當(dāng)您學(xué)習(xí) Go 概念時(shí),您總是傾向于使用簡(jiǎn)單有效的解決方案來(lái)解決問(wèn)題。Go 語(yǔ)言的生態(tài)系統(tǒng)是學(xué)習(xí)更好的軟件設(shè)計(jì)模式的好方法。