編程應(yīng)該用 Mac 還是 PC ?
『有人的地方,就有江湖』— 徐克。笑傲江湖。
序
一個(gè)競(jìng)爭(zhēng)的市場(chǎng),就會(huì)有對(duì)立的產(chǎn)生,這世界存在著很多不同的領(lǐng)域,領(lǐng)域好比是個(gè)江湖的縮影,因此就有許多門派的紛爭(zhēng),例如說瀏覽器領(lǐng)域有著***宗的 IE 派,門派成長(zhǎng)速度飛快,武功版號(hào)跳的跟臺(tái)灣物價(jià)指數(shù)一樣快的 Chrome 門,不斷被模仿,一直被超越的 Opera 派;韌性極強(qiáng),一直對(duì)抗幾大勢(shì)力的 Firefox 派等等,程序語(yǔ)言也有自己的領(lǐng)域紛爭(zhēng),社群網(wǎng)站也有社群網(wǎng)站領(lǐng)域的戰(zhàn)爭(zhēng),這根本就是一個(gè)戰(zhàn)火永不停止的戰(zhàn)國(guó)時(shí)代,但是其中持續(xù)最久,衝突***最激烈,當(dāng)然 以作業(yè)系統(tǒng)這塊領(lǐng)域?yàn)樽?,因此,讓我們?lái)談?wù)勥@個(gè)江湖。
首先我想講講這個(gè)武林的歷史,不想看的人可以直接跳到最下面我的看法。
作業(yè)系統(tǒng)的上古時(shí)代
在很久以前,這塊江湖的地位是侷限在于少數(shù)被選上的人才可以踏入的,這些人就是工程師,因?yàn)橐莆者@個(gè)領(lǐng)域的武功不是一件容易的事情,因?yàn)樵谶@個(gè)領(lǐng) 域的武功基本心法就是學(xué)習(xí)一堆複雜的武功招式(文字介面的程序指令),這些被選上的人必須學(xué)習(xí)很多很多的招式,然后搭配使用這些招式進(jìn)而來(lái)操作作業(yè)系統(tǒng), 因此這門領(lǐng)域的武功學(xué)習(xí)曲線是很高的,不是隨便阿貓阿狗可以學(xué)習(xí)的,在這段時(shí)間中,掌握了這些招式你就能去使用作業(yè)系統(tǒng)中的各式各樣的武器(軟體),在這 段時(shí)間內(nèi),你可以透過作業(yè)系統(tǒng)本身提供的基本招式來(lái)控制作業(yè)系統(tǒng),你可以透過武器提供的招式來(lái)使用武器,你甚至可以自己發(fā)明招式(自己寫script)來(lái) 控制作業(yè)系統(tǒng)和武器,因此當(dāng)時(shí)所有的工程師都有自己打造的一套最適合自己的武功,沒有了他們武功會(huì)大打折扣,但是在他們使用自己打造的武功時(shí)能發(fā)揮出他們 ***大的威力。
百家爭(zhēng)鳴
但是這世界后來(lái)起了變化,當(dāng)時(shí)某人將一個(gè)『連猴子也能學(xué)會(huì)用電腦』的概念帶進(jìn)了這個(gè)領(lǐng)域,讓這個(gè)領(lǐng)域不再被少數(shù)人寡佔(zhàn),這個(gè)概念就是 GUI (圖形化介面),GUI 的產(chǎn)生讓作業(yè)系統(tǒng)看起來(lái)更容易理解,大幅降低了這個(gè)領(lǐng)域武功的學(xué)習(xí)曲線,將這個(gè)概念發(fā)揚(yáng)光大的有幾個(gè)大門派,一個(gè)是目前***的微軟 派,這個(gè)門派非??膳?,勢(shì)力非常之龐大,他們以作業(yè)系統(tǒng)這個(gè)領(lǐng)域起家,不單單如此還將觸角伸向非常多不同的領(lǐng)域,幾乎是跟電腦有關(guān)的領(lǐng)域都參一腳,不難理 解是一個(gè)以征服世界為***目標(biāo)的門派,掌門人是 Bill Gates,據(jù)說他靠著賣出這些武功所賺的錢蟬聯(lián)了 13 年的世界首富,是個(gè)極為可怕的角色,所有能力值大概都是 ?????,微軟派的武功非常多,但都是以 Windows NT 這個(gè)核心心法所延伸出來(lái)的,像是大家熟知的 Windows XP,Windows 7 等等。
另外一個(gè)是由 Steve Jobs 建立的蘋果教,教主 Steve Jobs 是一代傳奇人物,蘋果教早期曾經(jīng)發(fā)生過一次內(nèi)亂,這次內(nèi)亂迫使當(dāng)時(shí)教主 Steve Jobs 遠(yuǎn)走他鄉(xiāng),但是強(qiáng)者天生就是不平凡,在教主離開蘋果教的這段期間,教主看出了當(dāng)時(shí)武功心法的一些通病,為了矯正這些錯(cuò)誤他窮盡心力費(fèi)盡苦思的想出一套曠世 奇功 — NeXTStep,而反觀在這期間蘋果教在新教主阿貓一號(hào)的帶領(lǐng)下反而流失越來(lái)越多的教徒,整個(gè)蘋果教呈現(xiàn)一個(gè)日暮西山的狀況,因此在其他長(zhǎng)老的強(qiáng)烈要求 下他們將 Steve Jobs 迎回了蘋果教繼續(xù)擔(dān)任教主,當(dāng)然教主也帶回了他所創(chuàng)的那套曠世奇功 NeXTStep 作為日后蘋果橫行天下的武功 Mac OS 的基礎(chǔ),如果你有研究過 Mac 的心法你不難發(fā)現(xiàn)在他們的招式中常常會(huì)有 NS 的 prefix 像是 NSString, 這個(gè) NS 所指的就是繼承于 NeXTStep,在教主回歸蘋果教后,經(jīng)過了幾年的發(fā)展再次將蘋果教推向了新的高峰,推出的許多劃時(shí)代的神兵利器像是 iPod、iPhone、iPad,蘋果教利用這些神兵利器打下了一片大大的江山,成為微軟派***的勁敵,但在作業(yè)系統(tǒng)領(lǐng)域上的唯一一套武功就是 Mac OS,也就是這個(gè)門派最基本的心法武功。
其他門派像是 Linux 門也是一股勢(shì)力,這個(gè)門派的武功與蘋果教的 Mac OS 同樣都是由一個(gè)上古時(shí)代就存在的門派 Unix 演變而來(lái),這個(gè)上古時(shí)代也就是本文一開始提到在還沒有『連猴子也能學(xué)會(huì)用電腦』這個(gè)概念出現(xiàn)前,那個(gè)被少數(shù)人所寡佔(zhàn)的世界,這個(gè)門派心法的特性就像是我們 前面提到的工程師可以利用各種由作業(yè)系統(tǒng)本身或是應(yīng)用程序本身所提供的招式,加上自己的想法組合出最適合自己的武器,因此 Linux 及 Mac OS 皆繼承了這個(gè)傳統(tǒng),但是 Linux 門情況比較特殊的是,雖然他是一個(gè)門派但是本身有非常多不同的勢(shì)力,這些勢(shì)力自己每天互相打來(lái)打去不亦樂乎,造成無(wú)法將槍口一致對(duì)外,大家自己閉門造車一 直重複打造別人已經(jīng)有的武功,因此發(fā)展始終無(wú)法達(dá)到一個(gè)高峰,但是一直以來(lái)他在伺服器領(lǐng)域的令人驚艷,也讓 Linux 在這塊領(lǐng)域有著他不可取代的地位。
回到武功心法
前面說到,這個(gè)世界的改變是由于『連猴子也能學(xué)會(huì)用電腦』這個(gè)概念的帶入,但是這個(gè)概念在每個(gè)門派的實(shí)作方式是不一樣的,例如說微軟派為了將這個(gè)心 法發(fā)揮到***,將自己的心法改造的與上古時(shí)代完全不同,拋棄了那些使用指令操縱一切的心法,取而代之的是使用許多不同的武器(軟體)來(lái)應(yīng)付不同的對(duì)象(檔 案),因此基本心法(作業(yè)系統(tǒng))不再是重點(diǎn),而是一個(gè)隨時(shí)可以替換掉的東西(隨時(shí)可以重灌),你只要保留你的檔案,重灌你的作業(yè)系統(tǒng)后再把這些武器裝上去 就可以用了,這個(gè)過程不知葬送了多少宅男的青春,但也讓他們有當(dāng)好人幫正妹修電腦的機(jī)會(huì),但是因?yàn)槿绱?,微軟派的心法失去了原本上古流傳下?lái)的傳統(tǒng),你無(wú) 法使用招式(指令)來(lái)操作各種不同的武器(軟體、程序),因?yàn)檫@些武器現(xiàn)在開始彼此是不相往來(lái),GUI 上的所有程序無(wú)法互相溝通。
你可能會(huì)問這有什麼影響?我告訴你影響可大了,人使用電腦的目的就是提高工作效率,在程序無(wú)法互相溝通的情況下,程序必須仰賴人的操作才有辦法工 作,因?yàn)槟銦o(wú)法寫一些綜合巨集來(lái)完成複雜大量的工作,以微軟的例子來(lái)說,會(huì)使用 VBA 腳本的人工作效率會(huì)是一般人的 n 倍,因?yàn)槟憧梢酝耆牟倏啬愕淖鳂I(yè)系統(tǒng),就像你使用 VBA 可以完全的自動(dòng)化 Excel 一樣,但是作業(yè)系統(tǒng)想要做到這個(gè)層次,必須仰賴著一個(gè)統(tǒng)一的執(zhí)行環(huán)境來(lái)管理這些程序,這個(gè)目標(biāo)也是之前程序語(yǔ)言領(lǐng)域的 Sun 想要在他們的工作站做到的事情,也就是 Java,但是那是另一段故事我們先暫且不談,這樣的影響對(duì)工程師來(lái)說,就是 “什麼都看不到”,現(xiàn)在微軟派武功心法全部都蒙上了一層馬賽克,因?yàn)樗械臇|西都是被包裝過的,相對(duì)的工程師們無(wú)法去真正的了解這套武功心法,你想要做的 事情如果超出了武器(軟體)能應(yīng)付的范圍,你只能放棄,也是因?yàn)榘b的太好,在發(fā)生問題想要 Debug 的時(shí)候你根本看不到作業(yè)系統(tǒng)層面的問題,只能按下那個(gè)回報(bào)給微軟的按鈕,因此在微軟派以這樣的概念全力發(fā)展 GUI 的歷史后,取而代之所捨棄的就是這個(gè) “問題”,我把問題用雙引號(hào)包起來(lái)的原因是因?yàn)椋瑢?duì)一般使用者來(lái)說這并不算是個(gè)問題,因?yàn)樗麄兏惺懿坏剑蚁嘈胚@或許也是微軟的成功原因之一。
Linux 門則是把原先上古時(shí)代的傳統(tǒng)發(fā)揮的***,但就像我前面提到的,Linux 門自己的內(nèi)戰(zhàn)打的不亦樂乎,當(dāng)你踏入了 Linux 門之后,你會(huì)發(fā)現(xiàn)常常當(dāng)你想使用 Linux 上面所需要的武器 A 的時(shí),他會(huì)告訴你你必須先有武器 B 的 1.13 版,然后武器 B 的 1.13 版必須先有裝備 C 的 2.01 版,然后裝備 C 的 2.01 版需要 Linux 心法的 1.03 版,然后結(jié)果你發(fā)現(xiàn)你在用的是 Linux 心法 2.0 版,因此雖然 Linux 門繼承了上古 Unix 門的良好傳統(tǒng),讓你可以像高手般的打造自己的武功,也可以完全的掌控整個(gè)作業(yè)系統(tǒng),但是常會(huì)因?yàn)檫@些武器的相依性給搞瘋,還沒用到武器,就先被武器給弄死 了。
再談 GUI
所以你大概可以體會(huì),GUI 開始算是一個(gè)作業(yè)系統(tǒng)的分水嶺,他讓每個(gè)門派的心法看起來(lái)變得很不一樣,微軟派的設(shè)計(jì)讓你看不到作業(yè)系統(tǒng)層面的東西,因?yàn)闁|西幾乎都是被包裝好的,但是你 可以在微軟派的 windows 系列武功上使用相對(duì)良好的 GUI,但是由于微軟派的 GUI 設(shè)計(jì)是跟底層綁在一起的,因此有時(shí)候 GUI 的崩潰也讓系統(tǒng)一起崩潰了,就出現(xiàn)了傳說中的藍(lán)白畫面,Linux 門的設(shè)計(jì)非常開放,你可以隨時(shí)取用串接你想用的心法,但是在 GUI 方面就差強(qiáng)人意,大部分是一些看起來(lái)就像是山寨微軟派或蘋果教的產(chǎn)物,當(dāng)然現(xiàn)在來(lái)說有些表現(xiàn)較為優(yōu)異的像是 Ubuntu 之類的,但用過就知道還是有差,而蘋果教正好是取其兩家之長(zhǎng),一個(gè)擁有高度 usability 的 GUI 介面加上可以自行設(shè)計(jì)的武器系統(tǒng),Mac OS 感覺就像是上古流傳下來(lái)的神器再用對(duì)武器施法的卷軸衝到 +10 那樣強(qiáng)大,在 Mac OS 上使用繼承于教主所開發(fā)的心法 NeXTStep 的進(jìn)化版本 Cocoa,這套心法提供了一個(gè)統(tǒng)一的作業(yè)系統(tǒng)執(zhí)行環(huán)境,所有基于 Cocoa 心法所研發(fā)出來(lái)的新武器都有了統(tǒng)一的介面,這個(gè)統(tǒng)一的介面讓你可以 100% 的控制所有的程序,而且 Mac OS 本身就已經(jīng)提供了完整的開發(fā)環(huán)境給所有的工程師,反觀在 Linux 門缺乏這個(gè)在 GUI 上統(tǒng)一的介面,因此他們的 GUI 看起來(lái)就挺杯具,而微軟派的 Windows 系列在從 Vista 以后希望打造出一個(gè)完全建構(gòu)于新心法 .NET 框架的環(huán)境來(lái)達(dá)成像是統(tǒng)一介面的環(huán)境,但是由于其設(shè)計(jì)哲學(xué)上的差異他們還是有差異,而且 .NET 心法的一個(gè)致命傷就是仰賴著使用者必須自行去更新 .NET 版本,如果他沒有更新成適合的版本那你所開發(fā)的武器可能他就沒有辦法使用。
后記
其實(shí)是簡(jiǎn)短的故事整理,對(duì)于使用 Mac 或是 PC 的來(lái)寫程序比較好,其實(shí)兩派各有說法,個(gè)人淺見只是文化上的差異,一個(gè)最簡(jiǎn)單考慮的重點(diǎn)就是你想開發(fā)哪個(gè)平臺(tái)上面的軟體,那麼你***就使用該平臺(tái)來(lái)開發(fā), 你想開發(fā) Windows 上面的應(yīng)用程序,那麼趕快安裝 Visual Studio.NET,你想開發(fā) Mac 上面的程序那就趕快買臺(tái) Mac 安裝好你的 XCode,當(dāng)然,你也可以考慮 Java 來(lái)開發(fā)跨平臺(tái)的程序,但是用過都知道在 GUI 的顯示在不同平臺(tái)上還是會(huì)有差異的,那如果是開發(fā) Web 的程序來(lái)說,個(gè)人淺見如果你是使用 PHP、Ruby、Python 等程序語(yǔ)言,那麼 Unix-base 的環(huán)境還是比較適合你,因?yàn)槟惚仨毘3Hプ粉櫮愕?Application 在系統(tǒng)的運(yùn)行狀況來(lái)做效能的調(diào)教或是 Debug,而這是在 Windows 平臺(tái)上的相對(duì)弱項(xiàng)。
已經(jīng)看過太多的戰(zhàn)文在討論 unix 好還是 windows 好,其實(shí)就像我說的是文化上的差異,微軟的文化是以一般使用者為出發(fā)點(diǎn)而設(shè)計(jì)的平臺(tái),如果是由一個(gè) Unix 的工程師來(lái)設(shè)計(jì)一個(gè)軟體,他可能會(huì)開始先設(shè)計(jì)一個(gè)文字介面的核心,然后才加上一層 GUI 的皮,這樣這支程序才可以為其他程序設(shè)計(jì)師來(lái)自動(dòng)化操作,因?yàn)?Unix 的哲學(xué)是以程序設(shè)計(jì)師為出發(fā)點(diǎn),反觀 Windows 工程師會(huì)傾向于先做出一個(gè)使用者操作的畫面,然后才去寫核心部分,對(duì)于 99.999999999% 的使用者不寫程序的 Windows 這是很正常的事。另外 Windows 跟 Unix ***的差異還是在資訊透明度,Windows 上核心底層的東西必須仰賴微軟更新后才會(huì)修復(fù),因?yàn)槟愫茈y去看到底層的原始碼,而 Unix 由于開放的關(guān)系你可以隨時(shí)進(jìn)入底層去找出錯(cuò)誤來(lái)修正他,但這也不算是 Unix 就比較好的觀點(diǎn),因?yàn)檫@單純是設(shè)計(jì)理念的不同,Windows 傾向于我?guī)湍闾幚硭械讓拥膯栴},你專心寫你的程序就好,而 Unix 則是我讓你看光光,你不開心就改沒關(guān)系,因此兩派信徒互相嘲笑對(duì)方,其實(shí)只是設(shè)計(jì)理念上的差異罷了。
雖然我用 Mac,但我相信比爾蓋茲在 Windows 上寫程序還是會(huì)把我震住的,所以我從不嘲笑 Windows 的工程師,所以請(qǐng)依照你的需求挑選你的平臺(tái)就好,如果要開發(fā)微軟的程序,那麼用微軟的環(huán)境還是最無(wú)痛的!
本文最初發(fā)表在gogojimmy.net,文章內(nèi)容屬作者個(gè)人觀點(diǎn),不代表本站立場(chǎng)。