寫程式該選 Mac 還是 PC?

雖然我用 Mac,但我相信比爾蓋茲在 Windows 上寫程式還是會把我電假的,所以我從不嘲笑 Windows 的工程師,所以請依照你的需求挑選你的平台就好,如果要開發微軟的程式,那麼用微軟的環境還是最無痛的!
評論
評論

本文刊登於《好麻煩部落格》,作者為 Jimmy Kuo,是一名 Ruby on Rails 工程師,曾擔任過 Rails Girls 教練,很會煎牛排。

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

一個競爭的市場,就會有對立的產生,這世界存在著很多不同的領域,領域好比是個江湖的縮影,因此就有許多門派的紛爭,例如說瀏覽器領域有著最大宗的 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 的工程師,所以請依照你的需求挑選你的平台就好,如果要開發微軟的程式,那麼用微軟的環境還是最無痛的!



精選熱門好工作

產品經理

海神波塞頓有限公司
臺北市.台灣

獎勵 NT$15,000

Senior Human Resources Manager [Lead]

新加坡商拍拖有限公司台灣分公司
臺北市.台灣

獎勵 NT$15,000

資料庫管理人員 (總公司)

明台產物保險股份有限公司
臺北市.台灣

獎勵 NT$15,000