位元詩人 [技術雜談] 買 Mac 電腦來寫程式

Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email

前言

每隔一陣子,就會在 Mac 討論區看到有網友問「我想寫程式,我要買 Mac 嗎?」或其他類似的問題。在這裡先講結論:根據不同的程式類型,會有不同的答案。

有經驗的程式設計者,通常都知道自己需要什麼,不太會在這個問題上糾結;但對程式設計初學者來說,這個過於空泛的答案,似乎也沒什麼幫助。

筆者根據自己使用過 Windows、GNU/Linux、Mac 等多種系統的經驗來說明什麼時候適合使用 Mac,讓初學者少走一些彎路;但筆者所學有限,也無法說明所有的使用情境,若講錯還請讀者多多包涵。

新的 Mac 電腦已經改用自家 ARM 晶片了。所以站長根據目前的情勢改寫這篇文章。

非得用 Mac 不可

真正非用 Mac 不可的情境,就是要撰寫 Mac 和 iOS 應用程式,這個就和撰寫 Windows 應用程式就非得買 Windows 電腦一樣,這都是系統商的商業策略,程式設計者只能選擇接受與否。

Codename One 的做法,表面上開發者不需要準備 Mac,但該團隊在雲端跑 Mac 電腦,將編譯好的軟體傳回使用者端;而 Xamarin 的做法,則是用 SSH 連到一台 Mac 主機,再將編譯結果傳回本地端。由此可知,即使是使用一些第三方方案,其實還是要用到 Mac 電腦。

用 Mac 比較方便

至於其他類型的程式,則沒有非用 Mac 不可,只是 Mac 剛好是以 BSD 為基礎修改而成的 Unix,有些類型的程式在 Unix 上運行會比 Windows 家族系統上方便一些。

筆者在這裡對此議題有較詳細的描述,有興趣的讀者可以前往觀看,在本文中,我們僅節錄一些要點。

基本上,就是以下兩者的差別:

  • 命令列環境
  • 對 C 的支援

終端機環境會影響到一些命令列工具,像是 AWK 或 Perl 的 one liner (直接撰寫在命令列的簡短程式) 在 Unix 上相當方便,但在 Windows 下就較不易使用。

另外有一些程式語言版本控制軟體,像是 SDKMAN 或是 pyenv,使用 Bash 撰寫,在 Windows 上就無法執行。而 Mac 是 Unix,這些終端機工具都可以順利執行。

C 語言在程式語言上有特殊的歷史地位,不僅可用來撰寫應用程式和函式庫,也是許多高階語言的母語,很多高階語言都有和 C 相接的接口,可以用 C 來撰寫延伸模組。對 C 語言的支援,不僅僅是 C 本身,還牽動其他的高階語言。

Mac 在 C 的支援上會比 Windows 系統好得多;這並不代表這些套件都無法在 Windows 上運行,不過,的確有一些套件較難安裝,有少數套件無法安裝。

其實不用 Mac 也還好

有些語言對 C 的依賴沒那麼深,在 Mac 上就沒有特別的優勢,像是 Java。Java 平台本身以 C++ 撰寫而成,但大部分的 Java 函式庫,都是以 Java 本身撰寫,較少呼叫 C 函式庫,在 Mac 或 Windows 上差異很小。

有些商業語言,像 SAS 或 MATLAB,為了在有限的預算內照顧大多數師生的需求,大部分大專院校都購買 Windows 版,反而不會刻意買 Mac 版,這時候,用 Mac 反而是次一等的選擇。

如果是想寫 C# 相關的程式,雖然微軟釋出 .NET Core、Visual Studio for Mac 等跨平台軟體或開發工具,但 .NET Core 僅支援其中一些類型的專案,而且 .NET Core 缺少其中一些原本在 .NET Framework 中出現的函式庫。若要寫 C# 程式,Windows 電腦仍然是首選。由於微軟是 C# 後面的推手,這樣的情形不會很意外。

在基於 Apple 晶片的 Mac 電腦上運行雙系統

雖然 Mac 是 Unix,但有時候使用者仍然在其他系統上寫程式,像是 Windows 或 GNU/Linux。但新近的 Mac 電腦已經改用 Apple 晶片。在不同架構的電腦上跑虛擬機器就成了另一個議題。

微軟已經表達不支援在 Apple 晶片的 Mac 電腦上跑 Windows 11 (出處),所以就不要考慮這樣的使用情境了。雖然網路上找得到一些非官方的解決方案,但那些方案不保證能長期穩定使用。

至於 GNU/Linux、FreeBSD 等自由軟體則沒有限制。但並非每款系統都能順利運行。站長先前使用 UTM 實測幾個系統下來,不一定每個系統都能順利安裝、使用。目前來說,Debian、Fedora、FreeBSD 可順利運作,而 Ubuntu、openSUSE 則無法安裝。

注意在安裝 GNU/Linux 或 FreeBSD 時,要選 ARM64 (aarch64) 的映像檔,不要選 x86-64 的。後者在運行速度上會比前者慢。

即使 Mac 是 Unix,不代表在 Mac 上寫的程式碼拿到 GNU/Linux 和 FreeBSD 上一定能跑。對於測程式碼相容性來說,安裝多個系統仍然是有益處的。

結語

經過本文的介紹,相信讀者已經有一些概念,對於是否要購買 Mac 更有信心;如果這篇短文能夠幫助讀者做出正確的選擇,這就是站長最大的榮幸。

關於作者

身為資訊領域碩士,位元詩人 (ByteBard) 認為開發應用程式的目的是為社會帶來價值。如果在這個過程中該軟體能成為永續經營的項目,那就是開發者和使用者雙贏的局面。

位元詩人喜歡用開源技術來解決各式各樣的問題,但必要時對專有技術也不排斥。閒暇之餘,位元詩人將所學寫成文章,放在這個網站上和大家分享。