買 Mac 來寫程式

每隔一陣子,就會在 Mac 討論區看到有網友問「我想寫程式,我要買 Mac 嗎?」或其他類似的問題。在這裡先講結論:根據不同的程式類型,會有不同的答案。有經驗的程式設計者,通常都知道自己需要什麼,不太會在這個問題上糾結;但對程式設計初學者來說,這個過於空泛的答案,似乎也沒什麼幫助。筆者根據自己使用過 Windows、GNU/Linux、Mac 等系統的經驗來說明什麼時候適合使用 Mac,讓初學者少走一些彎路;但筆者所學有限,也無法說明所有的使用情境,若講錯還請讀者多多包涵。

真正非用 Mac 不可的情境,就是要撰寫 Mac 和 iOS 應用程式,這個就和撰寫 Windows 應用程式 (包括 UWP 和傳統 Windows 桌面程式等) 就非得買 Windows 電腦一樣,這都是系統商的商業策略,程式設計者只能選擇接受與否,但無法改變這個事實。像 Codename One (以 Java 為基礎的跨平台行動軟體框架) 的做法,就是在雲端跑 Mac 主機,將編譯好的軟體傳回使用者端;而 Xamarin (以 C# 為基礎的跨平台行動軟體框架) 的做法,則是用 SSH 連到一台 Mac 主機,再將編譯結果傳回本地端。

至於其他的程式,則沒有非用 Mac 不可,只是 Mac 剛好是以 BSD 為基礎修改而成的類 Unix 系統,有些類型的程式在類 Unix 系統上會比 Windows 家族系統上方便一些。筆者在 Windows 求生手冊系列文章有較詳細的描述,有興趣的讀者可以前往觀看,在本文中,我們僅節錄一些要點。

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

  • 終端機環境
  • 對 C 語言的支援

終端機環境會影響到一些命令列工具,像是 AWK 或 Perl 的 one-liner (直接撰寫在命令列的簡短程式) 在類 Unix 系統上相當方便,但在 Windows 系統下就較不易使用。另外有一些程式語言版本控制軟體,像是 SDKMAN (Java 相關軟體版本控制軟體) 或是 pyenv (Python 版本控制軟體),使用 Bash 撰寫,在 Windows 上就無法執行。而 Mac 是類 Unix 系統,這些工具都可以順利執行。

C 語言在程式語言上有特殊的歷史地位,不僅可用來撰寫應用程式和函式庫,也是許多高階語言的母語,很多高階語言都有和 C 相接的接口,可以用 C 來撰寫延伸模組。對 C 語言的支援,不僅僅是 C 本身,還牽動其他的高階語言。Mac 在 C 的支援上會比 Windows 系統好;這並不代表這些套件都無法在 Windows 上運行,不過,的確有一些套件較難安裝,少數套件無法安裝。

有些語言對 C 的依賴沒那麼深,在 Mac 上就沒有特別的優勢,像是 Java。Java 平台本身以 C++ 撰寫而成,但大部分的 Java 函式庫,都是以 Java 本身撰寫,較少呼叫 C 函式庫,在 Mac 或 Windows 上其實差異很小。有些商業語言,像 SAS 或 MATLAB,為了在有限的預算內照顧大多數師生的需求,大部分大專院校都購買 Windows 版為主,反而不會刻意買 Mac 版的,這時候,用 Mac 反而是次一等的選擇。

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

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

[Update on 2017/11/28] 近年來 Macbook 系列筆電價格持續上漲,筆者對於 Mac 追求利潤最大化的發展策略也抱持著審慎以對的態度。有趣的是,其他一線筆電廠商為了商業考量,努力地端出和 Macbook 同級的商品,價格也和 Macbook 英雄所見略同。由於筆者目前有在寫行動軟體,暫時還會繼續和蘋果生態圈打交道,或許等沒寫行動軟體時,就會離開蘋果一陣子囉。

上篇5五將棋:具體而微的將棋世界
下篇Perl 6 小感