【在主画面加入捷径】
       
【选择语系】
繁中 简中

技术杂谈:买 Mac 来写程序

【赞助商连结】

    每隔一阵子,就会在 Mac 讨论区看到有网友问「我想写程序,我要买 Mac 吗?」或其他类似的问题。在这里先讲结论:根据不同的程序类型,会有不同的答案。有经验的程序设计者,通常都知道自己需要什么,不太会在这个问题上纠结;但对程序设计初学者来说,这个过于空泛的答案,似乎也没什么帮助。笔者根据自己使用过 Windows、GNU/Linux、Mac 等多种系统的经验来说明什么时候适合使用 Mac,让初学者少走一些弯路;但笔者所学有限,也无法说明所有的使用情境,若讲错还请读者多多包涵。

    真正非用 Mac 不可的情境,就是要撰写 Mac 和 iOS 应用程序,这个就和撰写 Windows 应用程序 (包括 UWP 和传统 Windows 桌面程序等) 就非得买 Windows 电脑一样,这都是系统商的商业策略,程序设计者只能选择接受与否,但无法改变这个事实。像 Codename One (以 Java 为基础的跨平台行动软件框架) 的做法,表面上开发者不需要准备 Mac,但该团队在云端跑 Mac 主机,将编译好的软件传回使用者端;而 Xamarin (以 C# 为基础的跨平台行动软件框架) 的做法,则是用 SSH 连到一台 Mac 主机,再将编译结果传回本地端。由此可知,即使是使用一些第三方方案,其实还是要用到 Mac。

    至于其他类型的程序,则没有非用 Mac 不可,只是 Mac 刚好是以 BSD 为基础修改而成的类 Unix 系统,有些类型的程序在类 Unix 系统上会比 Windows 家族系统上方便一些。笔者在 Windows 求生手册系列文章对此议题有较详细的描述,有兴趣的读者可以前往观看,在本文中,我们仅节录一些要点。

    基本上,就是以下两者的差别:

    • 终端机环境
    • 对 C (或 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 仅支援其中一些类型的项目,而且 .NET Core 缺少其中一些原本在 .NET Framework 中出现的函式库。若要写 C# 程序,Windows 电脑仍然是首选。由于微软是 C# 后面的推手,这样的情形不会很意外。

    经过本文的介绍,相信读者已经有一些概念,对于是否要购买 Mac 更有信心;如果这篇短文能够帮助读者做出正确的选择,这就是笔者最大的荣幸。

    [Update on 2017/11/28] 近年来 Macbook 系列笔电价格持续上涨,笔者对于 Mac 追求利润最大化的发展策略也抱持着审慎以对的态度。有趣的是,其他一线笔电厂商为了商业考量,努力地端出和 Macbook 同级的商品,价格也和 Macbook 英雄所见略同。如果只是为了写 iOS 程序而不得不用 Mac,其实可以考虑租用云端 Mac 主机,像是 macincloud 或是 XCLOUD 等。

    [Update on 2018/05/28] 如果只想买一台电脑,就涵盖最多的功能,目前来说,iMac 仍然是首选。除了开发 Mac 特有的项目外,对于一般性的类 Unix 系统程序,只要不碰到太底层的东西,也是游刃有余;如果需要一些 Windows 特有的东西,只要透过虚拟机器即可解决许多 Windows 上面的应用。然而,Mac 主机性价比不高,而且硬件选择甚少。笔者认为,使用一台 GNU/Linux 桌机搭配一台 Windows 笔电应该是除了写 iOS 和 Mac 程序外最适用的方案。

    【赞助商连结】