為什么要學(xué)習(xí)更多的編程語言?同時(shí)認(rèn)為 Go 是最佳
page head
我與編程語言的開放式關(guān)系
迄今為止我已經(jīng)編程四年了。從開始的基于 C# 的游戲開發(fā),然后使用 python 處理機(jī)器學(xué)習(xí)。學(xué)習(xí)使用 Javascript 以及 Typescript 做前端工作。后來想要做移動(dòng)端應(yīng)用,所以又學(xué)習(xí)了 Ionic,React,React Naive。為了達(dá)到更好的后端性能,Go 是一個(gè)最佳選擇。隨著 Flutter 的誕生,所以我學(xué)習(xí)了 Dart 來編寫更多的移動(dòng)應(yīng)用。我從一些大學(xué)課堂上學(xué)習(xí) Java,當(dāng)我在 Facebook 工作時(shí)學(xué)習(xí)使用 PHP。
我不敢說在這些語言中我稱得上專家,但是我比其他人有更多的關(guān)于語言和框架的經(jīng)驗(yàn)。為什么我熱衷于學(xué)習(xí)編程語言?因?yàn)槲沂侨菀妆徽T惑的,當(dāng)我看到一些語言中的一些優(yōu)異的特性時(shí),我就忍不住去學(xué)習(xí)它。
page middle
那么我為什么讓你做同樣的事呢?因?yàn)樵谀悴涣私庥心男┕ぞ撸@些工具具體是做什么之前,你也不可能去選擇正確的工具。選擇正確的工具和武器可以幫助你贏得大部分的戰(zhàn)爭。我個(gè)人發(fā)現(xiàn)這一點(diǎn)在生活中十分有用。選擇合適的語言,可以極大地減少解決問題所需要付出的努力。
解決真實(shí)世界中的問題
我來舉一個(gè)真實(shí)的例子,使用合適的語言可以節(jié)省很多時(shí)間,而只關(guān)注問題的主要部分。幾個(gè)月前,我選購了一個(gè)藍(lán)牙耳機(jī) AirPods??梢哉f是蘋果發(fā)布的最好的技術(shù)了。我嘗試了很多藍(lán)牙耳機(jī),但是沒有一個(gè)像這個(gè)一樣方便。但是,主要問題是我個(gè)人使用的是 Windows 筆記本以及 Android 手機(jī)。AirPods 可以自動(dòng)連接到我的手機(jī),但是筆記本卻不是這樣。我每次必須設(shè)置并且手動(dòng)連接,這是一個(gè)痛苦的過程。因?yàn)槲乙恢毕朐谑謾C(jī)以及筆記本電腦間切換。我需要一個(gè)可以將 AirPods 一鍵連接到筆記本的快捷按鈕。
我的第一個(gè)想法是使用 python, 因?yàn)槲掖_信可以找控制電腦藍(lán)牙的庫。但并不是這樣,沒有一個(gè)維護(hù)良好的庫可以完成這個(gè)工作。下一個(gè)選擇是 Node.js。后來我發(fā)現(xiàn)了一個(gè)可以控制藍(lán)牙的 Javascript 庫。通過運(yùn)行以下腳本,我可以將 AirPods 立即連接到我的電腦。
- // App.js
- const device = new bluetooth.DeviceINQ();
- const airpodsAddress = "18:81:0E:B2:6B:A6"
- const airpodsName = "Akshat's Airpods";
- device.findSerialPortChannel(airpodsAddress, function (channel) {
- // make bluetooth connect to remote device
- bluetooth.connect(airpodsAddress, channel, function (err, connection) {
- if (err) return console.error(err);
- console.log('YAY! Airpods Connected');
- // Don't need a communication stream between the two
- // so let's just exit the stream.
- setTimeout(() => process.exit(0), 5000);
- });
- });
現(xiàn)在我需要一個(gè)可以運(yùn)行該腳本的一個(gè)快捷方式。我以為可以直接將腳本放在任務(wù)欄,但是 windows 不允許任何非可執(zhí)行文件放在工具欄。我寫了一個(gè)批處理文件,希望掛載在任務(wù)欄,但還是失敗了。那么什么語言可以創(chuàng)建一個(gè)可執(zhí)行文件呢? Golang 是一個(gè)不錯(cuò)的選擇,我寫了一個(gè)腳本來運(yùn)行 Node.js 腳本.
- // main.go
- package main
- import (
- "fmt"
- "os/exec"
- )
- func main() {
- output, err := exec.Command("npm", "start").CombinedOutput()
- if err != nil {
- fmt.Println(err.Error())
- }
- fmt.Println(string(output))
- }
在任務(wù)欄放置該可執(zhí)行文件的快捷方式,設(shè)置圖標(biāo)。太棒了!一個(gè)便于訪問的按鈕,可以讓我很快的連接到 AirPods。
我知道通過使用 C# 我也可以獲得相同的結(jié)果。但我不想在我的筆記本電腦上安裝 Visual Studio 這樣一個(gè)怪異的 IDE。我還可以使用 nexe 等其他工具將我的 Nodejs 應(yīng)用程序打包到 exe 中,但這只是不必要的工作。 這只是一個(gè)簡單的例子,說明了解不同的工具如何幫助您輕松解決問題。如果我所知道的只是 Python 或 Java 或 Go,那將是一件非常困難的事情。我有更多的例子,知道使用正確的語言,大大減少了解決問題所需的時(shí)間和精力。
重點(diǎn)
-
學(xué)習(xí)不同語言真的很有趣。此外,它還可以擴(kuò)展您的視野,讓您置身于舒適區(qū)之外。
-
學(xué)習(xí)更多語言的另一個(gè)原因是訓(xùn)練自己思考一種語言或范式之外的問題。面向?qū)ο缶幊毯馨?,但也需要了解功能編程或程序編程。一旦你可以?xùn)練自己去思考特定語言之外的編程,你將不再受限于它的限制。
-
你學(xué)習(xí)的第一語言將是困難的,第二語言將更難,但在那之后就是信手拈來了。這只是語法變化和一些陷阱的避免。然后,您可以了解該語言的特定庫和框架。
-
我能想到學(xué)習(xí)更多語言的另一個(gè)令人信服的理由是 WASM。 Web Assembly 將允許您在瀏覽器上運(yùn)行所需的任何語言。這意味著如果您學(xué)習(xí)更快速的語言(如 C ++),可以充分利用瀏覽器的快速性并創(chuàng)建像 https://squoosh.app/ 這樣的精彩內(nèi)容。
最后的思考
-
你是一個(gè)Javascript或python開發(fā)人員。我強(qiáng)烈建議學(xué)習(xí)低級(jí)語言。你可以直接學(xué)習(xí) C 或 C ++,但我會(huì)建議 Golang。您可以輕松獲得類似 C++ 的速度,而不會(huì)受到 C 系列的挫折。
-
對于所有低級(jí)語言開發(fā)人員,請嘗試使用 python 或 Javascript。如果您還沒有嘗試過這些語言,那么您就錯(cuò)過了。 Python 就像偽代碼,現(xiàn)在 Javascript 無處不在。這兩種語言都可以讓您使用低級(jí)語言。您可以為 Node.js 和 Python 編寫C ++模塊。相信我,它會(huì)改變你的生活。
我希望我已經(jīng)說服你與你的主要語言建立開放的關(guān)系,并獲得一些新的令人興奮的經(jīng)歷。 如果你知道兩種截然不同的語言,到目前為止你的經(jīng)驗(yàn)是什么?您認(rèn)為它對您的職業(yè)生涯有何幫助?請?jiān)谠u論中告訴我。