蒼時弦也
蒼時弦也
資深軟體工程師
發表於

想嘗試新的程式語言該怎麼辦?

有一天在 Facebook 的社團看到有人提到,朋友推薦他多嘗試看看不同的語言,卻不知道該怎麼下手去嘗試。剛好我自己蠻喜歡嘗試各種程式語言,這篇文章會簡單分享該怎麼選擇程式語言。

流行

一般來說,跟著學流行的語言大多不會有問題。畢竟使用的人多、工作機會也豐富,然而缺點就是不一定會是你喜歡的語言。

大多數時候,選擇跟著當下流行的語言應該是有職涯上的考量,可能會是想換工作或者增加競爭力之類的,如果單純是興趣的話,我倒是不太推薦「花費大量心力」在這類型的語言上,除非你本身也喜歡這個語言。

朋友

如果是新手,我最推薦的其實是跟著會寫程式的朋友學。對方在教你的過程中也能有所成長,你自己也能得到一個相對安心的幫手。

有人一起學習的話,在過程中也不會那麼枯燥乏味。要說缺點的話,大概就是你沒辦法保證朋友的能力足夠教你,或者擅長教人如何寫程式,但就整個學習的過程和體驗上來說,還是會遠比自己摸索好上不少。

應用

通常會不知道該選擇怎樣的語言來學習,很可能是不清楚自己想做什麼。如果知道想做的主題,其實能選擇的語言還是相對明確的。

舉例來說,想做人工智慧、機器學習就可以選 Python 來使用,跟雲端、網路的應用 Golang 在設計時就針對這類情境考慮,因此不少雲端相關的軟體都是用 Golang 所使用的。

如果是網站類型的,就相對複雜一點,因為這數十年非常多專案都基於這個領域投入資源。這個時候我們就可以從解決方案的角度去看,像是 Ruby 的 Rails 框架的目的是快速上手、快速開發,因此在起步上幾乎不需要有特殊知識,而 Elixir 為了解決 Ruby 在大量即時連線上的弱點而設計出來。

至於 .NET / Java 的話則是為了企業等級的應用為主,對於許多系統架構、設計模式的知識就會需要有所了解在使用上才會更加順利,目的在於穩定而非快速,因此寫起來就會感到非常囉唆,同時 C# 也經常被遊戲業所使用。

特性

從語言特性上下手是比較有趣的切入點,大多數語言支持者也都是因為喜歡這個語言的特性,缺點也是沒有人詳盡地為你介紹,你就很難了解差異。

以我個人最愛用的 Ruby 來說,最初想要用來替代 Shell Script 的,因此在他的標準函示庫中其實有著非常豐富的功能,另一方面在語言上非常開放,因此可以實作出非常強大的 DSL(Domain-specific language,特定領域與言)因而產生了 Rails 框架,利用大量「客製化語法」讓網站開發變的相當直覺。

然而 Ruby 在語言的設計上和發展中,還是有了「慢」的缺點,雖然受限於整個生態系的套件、語言發展的進度有所影響。也因此催生了以 Erlang 為基底的 Elixir 語言想來解決這樣的問題,類似於 Ruby 的語法讓我們可以非常容易的「轉換」到 Elixir 上。

而 Elixir 和 Erlang 不同於 Ruby 有著 Let it crash 的概念,因為語言特性讓「出錯」的程式碼得以輕易恢復,搭配上 Actor 模型的設計,也讓 Elixir 在處理非常大量的即時連線表現得非常好。

喜好

不管透過哪種方式選擇了一個語言,最後還是要回歸到「是否喜歡」這件事情上,如果對這個語言的特性、社群、應用沒辦法感到喜歡的話,即使學了也很難持續下去。

然而,在選擇要學習的語言階段,不妨多嘗試看看不同的語言。程式語言也是軟體,所以會不斷更新,因此當一個好的概念或設計被其他語言使用時,也可能加入到你主要在使用的語言,此時就可以透過不同語言的「差異」更深入了解某項語言特性。

當接觸的語言更多之後,也比較能對應不同的情況。像是 Serverless 的應用,我們不一定要完整地將整個服務替換成其他語言,而是可以針對特定情況使用少量的語言,搭配 Function as a Service 類型的雲端服務針對性的處理(像是 imgproxy)來解決部分語言無法完善處理的情況。

在比較大型的公司,大多也很難只使用單一語言解決問題。通常會是主系統(使用最多的語言)以及各類輔助主系統的服務、工具,使用不同的語言針對性的解決問題。