编程应该用 Mac 还是 PC ?

『有人的地方,就有江湖』— 徐克。笑傲江湖。

一个竞争的市场,就会有对立的产生,这世界存在著很多不同的领域,领域好比是个江湖的缩影,因此就有许多门派的纷争,例如说浏览器领域有著最大宗的 IE 派,门派成长速度飞快,武功版号跳的跟台湾物价指数一样快的 Chrome 门,不断被模仿,一直被超越的 Opera 派;韧性极强,一直对抗几大势力的 Firefox 派等等,程序语言也有自己的领域纷争,社群网站也有社群网站领域的战争,这根本就是一个战火永不停止的战国时代,但是其中持续最久,衝突最大最激烈,当然以作业系统这块领域为最,因此,让我们来谈谈这个江湖。

首先我想讲讲这个武林的历史,不想看的人可以直接跳到最下面我的看法

作业系统的上古时代

在很久以前,这块江湖的地位是侷限在于少数被选上的人才可以踏入的,这些人就是工程师,因为要掌握这个领域的武功不是一件容易的事情,因为在这个领域的武功基本心法就是学习一堆複杂的武功招式(文字介面的程序指令),这些被选上的人必须学习很多很多的招式,然后搭配使用这些招式进而来操作作业系统,因此这门领域的武功学习曲线是很高的,不是随便阿猫阿狗可以学习的,在这段时间中,掌握了这些招式你就能去使用作业系统中的各式各样的武器(软体),在这段时间内,你可以透过作业系统本身提供的基本招式来控制作业系统,你可以透过武器提供的招式来使用武器,你甚至可以自己发明招式(自己写script)来控制作业系统和武器,因此当时所有的工程师都有自己打造的一套最适合自己的武功,没有了他们武功会大打折扣,但是在他们使用自己打造的武功时能发挥出他们最强大的威力。

百家争鸣

但是这世界后来起了变化,当时某人将一个『连猴子也能学会用电脑』的概念带进了这个领域,让这个领域不再被少数人寡佔,这个概念就是 GUI (图形化介面),GUI 的产生让作业系统看起来更容易理解,大幅降低了这个领域武功的学习曲线,将这个概念发扬光大的有几个大门派,一个是目前最大的微软 派,这个门派非常可怕,势力非常之庞大,他们以作业系统这个领域起家,不单单如此还将触角伸向非常多不同的领域,几乎是跟电脑有关的领域都参一脚,不难理解是一个以征服世界为终极目标的门派,掌门人是 Bill Gates,据说他靠著卖出这些武功所赚的钱蝉联了 13 年的世界首富,是个极为可怕的角色,所有能力值大概都是 ?????,微软派的武功非常多,但都是以 Windows NT 这个核心心法所延伸出来的,像是大家熟知的 Windows XP,Windows 7 等等。

另外一个是由 Steve Jobs 建立的苹果教,教主 Steve Jobs 是一代传奇人物,苹果教早期曾经发生过一次内乱,这次内乱迫使当时教主 Steve Jobs 远走他乡,但是强者天生就是不平凡,在教主离开苹果教的这段期间,教主看出了当时武功心法的一些通病,为了矫正这些错误他穷尽心力费尽苦思的想出一套旷世奇功 — NeXTStep,而反观在这期间苹果教在新教主阿猫一号的带领下反而流失越来越多的教徒,整个苹果教呈现一个日暮西山的状况,因此在其他长老的强烈要求下他们将 Steve Jobs 迎回了苹果教继续担任教主,当然教主也带回了他所创的那套旷世奇功 NeXTStep 作为日后苹果横行天下的武功 Mac OS 的基础,如果你有研究过 Mac 的心法你不难发现在他们的招式中常常会有 NS 的 prefix 像是 NSString,这个 NS 所指的就是继承于 NeXTStep,在教主回归苹果教后,经过了几年的发展再次将苹果教推向了新的高峰,推出的许多划时代的神兵利器像是 iPod、iPhone、iPad,苹果教利用这些神兵利器打下了一片大大的江山,成为微软派最大的劲敌,但在作业系统领域上的唯一一套武功就是 Mac OS,也就是这个门派最基本的心法武功。

其他门派像是 Linux 门也是一股势力,这个门派的武功与苹果教的 Mac OS 同样都是由一个上古时代就存在的门派 Unix 演变而来,这个上古时代也就是本文一开始提到在还没有『连猴子也能学会用电脑』这个概念出现前,那个被少数人所寡佔的世界,这个门派心法的特性就像是我们前面提到的工程师可以利用各种由作业系统本身或是应用程序本身所提供的招式,加上自己的想法组合出最适合自己的武器,因此 Linux 及 Mac OS 皆继承了这个传统,但是 Linux 门情况比较特殊的是,虽然他是一个门派但是本身有非常多不同的势力,这些势力自己每天互相打来打去不亦乐乎,造成无法将枪口一致对外,大家自己闭门造车一直重複打造别人已经有的武功,因此发展始终无法达到一个高峰,但是一直以来他在伺服器领域的令人惊艳,也让 Linux 在这块领域有著他不可取代的地位。

回到武功心法

前面说到,这个世界的改变是由于『连猴子也能学会用电脑』这个概念的带入,但是这个概念在每个门派的实作方式是不一样的,例如说微软派为了将这个心法发挥到极致,将自己的心法改造的与上古时代完全不同,抛弃了那些使用指令操纵一切的心法,取而代之的是使用许多不同的武器(软体)来应付不同的对象(档案),因此基本心法(作业系统)不再是重点,而是一个随时可以替换掉的东西(随时可以重灌),你只要保留你的档案,重灌你的作业系统后再把这些武器装上去就可以用了,这个过程不知葬送了多少宅男的青春,但也让他们有当好人帮正妹修电脑的机会,但是因为如此,微软派的心法失去了原本上古流传下来的传统,你无法使用招式(指令)来操作各种不同的武器(软体、程序),因为这些武器现在开始彼此是不相往来,GUI 上的所有程序无法互相沟通。

你可能会问这有什麽影响?我告诉你影响可大了,人使用电脑的目的就是提高工作效率,在程序无法互相沟通的情况下,程序必须仰赖人的操作才有办法工作,因为你无法写一些综合巨集来完成複杂大量的工作,以微软的例子来说,会使用 VBA 脚本的人工作效率会是一般人的 n 倍,因为你可以完全的操控你的作业系统,就像你使用 VBA 可以完全的自动化 Excel 一样,但是作业系统想要做到这个层次,必须仰赖著一个统一的执行环境来管理这些程序,这个目标也是之前程序语言领域的 Sun 想要在他们的工作站做到的事情,也就是 Java,但是那是另一段故事我们先暂且不谈,这样的影响对工程师来说,就是 “什麽都看不到”,现在微软派武功心法全部都蒙上了一层马赛克,因为所有的东西都是被包装过的,相对的工程师们无法去真正的了解这套武功心法,你想要做的事情如果超出了武器(软体)能应付的范围,你只能放弃,也是因为包装的太好,在发生问题想要 Debug 的时候你根本看不到作业系统层面的问题,只能按下那个回报给微软的按钮,因此在微软派以这样的概念全力发展 GUI 的历史后,取而代之所捨弃的就是这个 “问题”,我把问题用双引号包起来的原因是因为,对一般使用者来说这并不算是个问题,因为他们感受不到,我相信这或许也是微软的成功原因之一。

Linux 门则是把原先上古时代的传统发挥的淋漓尽致,但就像我前面提到的,Linux 门自己的内战打的不亦乐乎,当你踏入了 Linux 门之后,你会发现常常当你想使用 Linux 上面所需要的武器 A 的时,他会告诉你你必须先有武器 B 的 1.13 版,然后武器 B 的 1.13 版必须先有装备 C 的 2.01 版,然后装备 C 的 2.01 版需要 Linux 心法的 1.03 版,然后结果你发现你在用的是 Linux 心法 2.0 版,因此虽然 Linux 门继承了上古 Unix 门的良好传统,让你可以像高手般的打造自己的武功,也可以完全的掌控整个作业系统,但是常会因为这些武器的相依性给搞疯,还没用到武器,就先被武器给弄死了。

再谈 GUI

所以你大概可以体会,GUI 开始算是一个作业系统的分水岭,他让每个门派的心法看起来变得很不一样,微软派的设计让你看不到作业系统层面的东西,因为东西几乎都是被包装好的,但是你可以在微软派的 windows 系列武功上使用相对良好的 GUI,但是由于微软派的 GUI 设计是跟底层绑在一起的,因此有时候 GUI 的崩溃也让系统一起崩溃了,就出现了传说中的蓝白画面,Linux 门的设计非常开放,你可以随时取用串接你想用的心法,但是在 GUI 方面就差强人意,大部分是一些看起来就像是山寨微软派或苹果教的产物,当然现在来说有些表现较为优异的像是 Ubuntu 之类的,但用过就知道还是有差,而苹果教正好是取其两家之长,一个拥有高度 usability 的 GUI 介面加上可以自行设计的武器系统,Mac OS 感觉就像是上古流传下来的神器再用对武器施法的卷轴衝到 +10 那样强大,在 Mac OS 上使用继承于教主所开发的心法 NeXTStep 的进化版本 Cocoa,这套心法提供了一个统一的作业系统执行环境,所有基于 Cocoa 心法所研发出来的新武器都有了统一的介面,这个统一的介面让你可以 100% 的控制所有的程序,而且 Mac OS 本身就已经提供了完整的开发环境给所有的工程师,反观在 Linux 门缺乏这个在 GUI 上统一的介面,因此他们的 GUI 看起来就挺杯具,而微软派的 Windows 系列在从 Vista 以后希望打造出一个完全建构于新心法 .NET 框架的环境来达成像是统一介面的环境,但是由于其设计哲学上的差异他们还是有差异,而且 .NET 心法的一个致命伤就是仰赖著使用者必须自行去更新 .NET 版本,如果他没有更新成适合的版本那你所开发的武器可能他就没有办法使用。

后记

其实是简短的故事整理,对于使用 Mac 或是 PC 的来写程序比较好,其实两派各有说法,个人浅见只是文化上的差异,一个最简单考虑的重点就是你想开发哪个平台上面的软体,那麽你最好就使用该平台来开发,你想开发 Windows 上面的应用程序,那麽赶快安装 Visual Studio.NET,你想开发 Mac 上面的程序那就赶快买台 Mac 安装好你的 XCode,当然,你也可以考虑 Java 来开发跨平台的程序,但是用过都知道在 GUI 的显示在不同平台上还是会有差异的,那如果是开发 Web 的程序来说,个人浅见如果你是使用 PHP、Ruby、Python 等程序语言,那麽 Unix-base 的环境还是比较适合你,因为你必须常常去追踪你的 Application 在系统的运行状况来做效能的调教或是 Debug,而这是在 Windows 平台上的相对弱项。

已经看过太多的战文在讨论 unix 好还是 windows 好,其实就像我说的是文化上的差异,微软的文化是以一般使用者为出发点而设计的平台,如果是由一个 Unix 的工程师来设计一个软体,他可能会开始先设计一个文字介面的核心,然后才加上一层 GUI 的皮,这样这支程序才可以为其他程序设计师来自动化操作,因为 Unix 的哲学是以程序设计师为出发点,反观 Windows 工程师会倾向于先做出一个使用者操作的画面,然后才去写核心部分,对于 99.999999999% 的使用者不写程序的 Windows 这是很正常的事。另外 Windows 跟 Unix 最大的差异还是在资讯透明度,Windows 上核心底层的东西必须仰赖微软更新后才会修复,因为你很难去看到底层的原始码,而 Unix 由于开放的关系你可以随时进入底层去找出错误来修正他,但这也不算是 Unix 就比较好的观点,因为这单纯是设计理念的不同,Windows 倾向于我帮你处理所有底层的问题,你专心写你的程序就好,而 Unix 则是我让你看光光,你不开心就改没关系,因此两派信徒互相嘲笑对方,其实只是设计理念上的差异罢了。

虽然我用 Mac,但我相信比尔盖兹在 Windows 上写程序还是会把我震住的,所以我从不嘲笑 Windows 的工程师,所以请依照你的需求挑选你的平台就好,如果要开发微软的程序,那麽用微软的环境还是最无痛的!

本文文字及图片出自 gogojimmy.net

你也许感兴趣的:

共有 6 条讨论

  1. 贺子轩  这篇文章
  2. mac能代表linux?mac采用的是精简指令集,我觉得linux与windows的本质区别在于linux的思想在于一切都是文件。

  3. 2 对这篇文章的反应是很实用
  4. wdyday 对这篇文章的反应是垃圾
  5. 韩冬冬 对这篇文章的反应是敬佩

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注