在 Mac 上進行開發比在 Windows 上效率更高嗎?如何量化和比較這兩個平台的開發效率?


Bug 一定是寫出來的。

高質量的庫一定是測出來的。

當 open source 界的大多數人使用 linux/unix的時候,你非要用 windows ,那麼你就一定是個義務的兼容性測試員。


當年用windows的時候totalcommander + vim + hoekey(可能還有其他的工具),覺得已經很高效了,甚至覺得有點離不開windows了,但寫腳本的時候總是很彆扭,於是就開始嘗試ubuntu,經過一段時間的適應後,覺得ubuntu真是開發人員的絕佳伴侶,尤其是apt-get。但心中還是有個疙瘩,ubuntu的ui和ux有很大的進步空間,而且沒有一款能用的設計工具(gimp實在是征服不了)。再後來,用了Mac後,之前的種種遺憾都消失了,只留下震撼。最大的遺憾就是相見恨晚。

如果從高效的角度來說,win / linux / mac每個platform都可以做到很高效。如果還想追求優雅的話,mac是更好的選擇。又因為mac的unix血統,所以如果不是微軟系程序員的話,選擇mac吧。


要看開發什麼東西。如果針對Linux平台開發,Mac效率要高很多,因為大部分已有的Linux命令都能在Mac上跑,Mac上搭的環境與Linux基本一致,最重要的,Mac和Linux都支持的GCC,但沒有原生Windows支持。

如果針對Windows開發,那隻能用Windows。


簡單來說,Mac 的開發效率在很多情況下是很高的。注意,我不是特指那種針對 Linux 或者 XX 平台的開發。這種限定在某個技術框架內然後用系統相似度來約束的情況,我相信不是提問者的重點。重點在於,在兩個平台上,用「各自適用」的技術,開發一個用戶所需的「功能」(比如使用 Twitter 這樣的高級層面的功能,而不是改窗口顏色這樣的低級功能),相對效率高低是什麼。

澄清了問題。先不分析,先說說工作中的實際感受。我們的應用在 Windows 和 Mac 上都有發布,大概共享 80% 以上的代碼,其它近 20% 是平台相關。在開發過程中遇到的 Windows-only 問題要比 Mac-only 問題多,包括 build 環境的問題(Windows 下缺少預設安裝的工具,Vistual Studio 對 C++ 的處理比較繁複等等),還有 API 的細節問題,以及硬體問題等等。

接下來我想說說我自己的分析。

第一是 Mac 的開發模式比較清晰簡單。Windows 發展了這麼久,期間經歷了很多變遷。就拿 API 來說,最早是簡單的 DLL 暴露 C 介面,後來加入支持 C++ 的 DLL,接著又開始推崇 COM,接下來又是 C# 。每次技術的變遷都希望能開創一個新局面(比如 COM 希望能成為 API 的主要形式),但是結果是舊的取代不了,新的又不夠強大。有時因為推出時機問題,技術又搞得不必要的複雜(比如 COM 的四種線程模式)。至今,是 MFC/SDK 代表的 native 要被 C# 和 WFP 取代,還是 C# WFP 只是給企業開發預備的而 native 仍然是今後商業 app 的基石都沒有定論。相比之下,Mac 上這種技術 paradigm 的變遷比較少。比如 Cocoa 取代 Carbon ,十年來一直穩定的進行。Mac 說一種技術舊了, 它的比重就會慢慢持續減少。

Mac 上的文檔並不完美,但是基礎部分很清晰,而且保持不斷更新。相比之下,MSDN 的基礎部分很凌亂,也比較陳舊。可能 Microsoft 認為那是 20 多年前推出的東西,大家都清楚了,也不太上心維護。拿消息循環這個概念來說,至少我本人是在 Cocoa 的文檔里明白的。拿 COM 的 apartment thread model 來說,當年很多人都不明白,還是後來借鑒 EJB 的文檔才搞明白這個概念。

第二是 Mac 是 UNIX。成為 UNIX 本身並不會自動成為絕對優勢,但這讓 Mac 里的很多技術問題都有先例可循。也讓 Mac 在開發技術上採取了開放的多的姿態。比如,Mac 的 graphics model 取自 PDF,3D 採用 OpenGL。而 Windows 的技術都是自己單獨搞一套。不見得單獨搞一套都不好(據說 DirectX 11 就比 OpenGL 3.0 強),但是從總體看,凡事單獨搞一套佔據了 Microsoft 不少精力。而且有時候顧此失彼。而且開發者凡事都要從 Microsoft 的視角重頭學起。

第三 Mac 是軟硬體一體。減少了硬體相關的很多問題。而且 2010 年以後開發的軟體甚至都不用考慮 32 位問題。


開發是個涵義挺寬的詞,我覺得效率高否取決於你到底主要做哪方面的活兒。

1. object-c/ iphone / mac桌面軟體開發。這個只能在mac上進行,沒得選。如果比較Visual Studio開發windows桌面應用,嗯,我覺得各有千秋。 以我個人的感覺,使用object-c開發比當年用MFC, COM, ATL要舒服得多,當然兩者嚴格來說也不是一個時代的產物。和C#相比,後者的內存管理當然要省事的多,新的xcode on lion支持ARC,相對簡化了以前的retain / release patterns,但是還是要管理不是? VC及C#另外有一個「優勢」是開源及盜版控制項很多,庫多也是挺大的優勢。

2. Ruby/ Python開發,拜unix shell所賜,這種unix平台上的腳本開發實在比在windows上爽太多。無論是textmate還是vim/Emacs/git/rvm,你要在windows上折騰這個不是不可以,問題是實在太費勁。

3. java/j2ee開發,兩者相差不多。我個人覺得windows平台下可能開發效率更高些。無他,IDE在win下感覺運行更快。在mac下運行eclipse或是idea並不會比在windows上快,單從性能上來說買台mac可比買台類似配置win開發機貴多了(只認性能不談UX)。

4. web開發 我覺得各有各的好處吧,mac上有些開發工具,像CSSEdit coda真是太棒了。mac有個不方便的就是IE的調試,這個又是迴避不了的,畢竟IE用戶占絕對大頭。node.js和CoffeeScript除外,這個雖然還是javascript,但是嚴格來說還是屬於後端開發,使用類unix系統要相對方便的多。


補充一個看法:

Mac上用虛擬機跑Windows和原生基本無差別

Windows上用虛擬機跑Mac和原生差別就大了


微軟可能不是多注重用戶體驗,但微軟從最初就極為注重開發者關係。決定一個操作系統能否成功,有多少人為其開發軟體要比有多少人覺得他好用來的實在得多,注重開發效率是微軟骨子裡得基因,很難說其它系統上開發效率能比在windows上開發windows的東西高出多少。

另一方面,Mac得開發效率也很高。主要歸功於unix作為程序員們都喜愛的大玩具,其開發效率本來就非常高,Mac又是恰好是圖形界面最好的unix。至於Xcode的開發效率,那實在是有太多可以吐槽的地方了。


跳出某種具體的語言和開發工具對效率的影響,mac下的效率是高於windows的,沒有了360告訴你又打敗了多少電腦,沒有桌面上的各種遊戲的快捷方式,沒有了qq時不時給你彈個廣告和新聞,沒有了windows告訴你他剛剛更新了一個update所以你必須在10分鐘里重啟電腦。。。。你的效率怎麼可能不高呢


開發效率和知識儲備有關,和平台無關


我認為很可能是用mac的開發效率高,個人認為這個和用mac的人的態度有一定的關係。

我認為最重要的態度就是為了節省自己的時間願意花錢

我身邊的幾個在mac上的開發人員,都是自己買的電腦沒有使用公司配發的筆記本。

因此這個首先就是一個態度問題,那就是你自己的開發機器你是願意公司發給你什麼就用什麼,還是自己買一個自己喜歡的,並且長期的維護它?

然後這些mac上的開發人員都是正版軟體的支持者,比如sublime這種都是有自己買的付費license的。正所謂工欲善其事必先利其器,願意自己花錢買軟體,要比花時間去找各種破解/或者免費的替代品要節約很多時間。

再比如說我們公司的wifi一直不是很好,一般人(比如我)也就是罵罵公司然後忍下來了,但是我們那位用mac的同事不一樣,他從家裡帶了一個無線路由過來,這個路由因為用的人少自然效果就好很多。

在這一件件事情下來,他們用錢為自己買到了方便,節省了時間,因此我認為開發效率會高一些。


希望大家明確一點,開發環境和運行環境是兩回事,這裡討論的重點明顯是開發環境下的開發效率,最後部署在Linux平台的程序在windows上開發調試很正常甚至更高效。至於Mac和Windows上的開發比較,我覺得可以分兩個層面吧,IDE之於編輯器(vim/emacs/組合工具)、IDE工具之間的比較(VisualStudio和XCode)。第一個層面的我覺得完全取決於個人愛好,我個人熱愛IDE。這裡有一篇相關文章,王垠寫的編輯器與IDE。至於VisualStudio和XCode的使用體驗希望有切身感受的人講講,我個人非常喜歡用VisualStudio,每次想要新功能的時候都是尋找相關插件。這裡推薦幾個我感覺優秀的插件。Visual Assist X,C++開發必備,各種代碼跳轉和提示支持,大大擴展VS原有同類功能。vs.php,編寫到調試全流程支持,非常方便,無需部署LAMP(LNMP)或者WAMP環境。WinGDB,在Windows上開發Linux程序,我暫時只在C/C++上使用這個,額,神器,真的是神器。可通過SSH遠程調試Linux上的程序,我個人主要用它來研究開源代碼,比如nginx。要知道很多開源代碼代碼量很大,結構又很複雜,可視化的調試跟蹤代碼脈絡很有效。PTVS,這個是支持Python開發的插件,並且集成了Django,可自動生成其框架,並可視化的使用Django相關的命令工具,比如同步數據什麼的,強烈推薦。最後提到的是VsVim,看名字也許就能猜出來,這是個vim插件,這樣就可以在VS的編輯界面使用 H,J,K,L,I,DD ……了,你懂得,真完美


看自己開發的是什麼,比如開發iPhone應用還是在mac里方便。我很多開發朋友都是根據自己的開發項目選不同的操作系統。其實我看主要的還是自己用的順手才行。


推薦閱讀:

有介紹codeblocks的書嗎?
如何看待ASP.NET 5 is dead?
Facebook 為什麼不用 .NET?
使用基於LGPL授權QT的『歪歪yy語音』允許反編譯嗎?
mysql的資料庫設計到底該不該加約束,比如非空約束,外鍵約束等。因為我看到我們公司的DBA在設計資料庫結構的時候都是不加任何約束的,這樣對性能的提高有多大,會不會影響到數據的完整性。新手求大牛解答?

TAG:Mac | 軟體開發 | MicrosoftWindows |