好程序員不用windows作開發環境

好程序員不用windows作為開發環境,今天我想就這個點吐槽一下。最近因為工作關系,需要在windows機器上工作一段時間,作為一個用了多年windows,然后切換到ubuntu作為工作環境兩年時間,然后切換到mac大概3年多時間只到最近被迫用回windows的程序員,我大概有自己的一些感觸。當然,如果你碰巧用了微軟的技術棧,或者在開發windows平臺應用或者是windows phone應用,很遺憾,你沒什么太多選擇。如今我寫的程序主要是web居多,移動的以iOS為主,輔以一些小工具或者庫,了解我的這個背景后,大概會覺得我不那么偏激一些。

好程序員首先追求效率,這一點體現在方方面面。他們不會過度依賴于IDE,而會大量使用命令行工具。他們希望一切都盡可能地快,不光程序運行要快,開發過程也要流暢、沒有阻礙和干擾,無聊重復的工作希望能夠通過工具自動完成。

舉個我每天都要用的terminal來說,如果你在mac或者linux上學習掌握了bash以及一些核心的GNU linux工具箱的用法,那么在所有linux平臺和mac平臺上都可以很高效,并且切換無成本?,F在的shell多數都用了readline這個庫,也就是說它們支持類似的一套快捷鍵,例如Ctrl+a回到一行開頭,Ctrl+e到一行結尾,Ctrl+r可以匹配查找歷史命令,等等。而直到Windows 8,系統自帶的terminal工具cmd還和windows 95里的cmd沒什么區別,好像微軟從來沒期望windows上的程序員去使用命令行工具(你們用visual studio就夠了)。不要說快捷鍵,連進行最基本的copy paste都是一個非常痛苦的事情,更不要提在中文windows下你只能選擇一種系統默認字體,窗口的大小不能簡單拖拽進行調整…… 我確實看到很多windows上開發的程序員都不怎么用命令行工具,他們默認遵循了windows的設計哲學,那就是一切都通過GUI(圖形界面)來完成。

前面提到linux下的GNU工具箱,如果你用過grep、find等工具應該不會陌生,現在除了這些傳統工具,還有ack、autojump等新的工具,對于程序員來說十分順手。在mac下,通過brew或者port,也可以很容易通過命令行工具從遠程軟件庫安裝這些工具。而在windows下面,準備好這樣一套環境必須得費一番功夫。當然你可以選擇cygwin,或者一些較小的linux工具移植(例如mingw utils, GnuWin32等),現在也有nuget和chocolatey這樣的軟件安裝和版本管理工具(類似linux下的apt-get或者mac下的brew),但是仍不是非常理想,不同工具的安裝體驗也非常不同,而它們對linux的模仿也剛好印證了linux類系統的先進。

最近我也發現了好幾個windows上cmd工具的替代,例如powershell,有它自己的優勢,還有類似powercmd,powertab,console2等工具,也是希望能夠給windows帶來更多類似linux和mac上terminal類工具的功能。

除了terminal本身,shell script也比win上的batch script強太多了,powershell的出現讓windows也具備了較強的腳本能力,然而shell腳本的強大和廣泛應用還是powershell不能比的。在linux上,init和系統配置大多是shell腳本,不論是用bash、ruby還是python寫出來的腳本,使用起來和用C語言寫成的sed、awk等工具沒有什么區別,作為用戶,這些腳本的使用體驗就和原生工具一樣,我們熟悉的vagrant、chef、hg等工具都是腳本寫的。而windows上,bat腳本的能力有限不說,其執行體驗也差了很多。

不僅是工具,在執行效率上linux也比windows強很多。

我們現在開發很多web應用,很少有部署在windows平臺上的,如果你是采用pythong、ruby或者java等語言來開發web,多數情況下你會部署到linux平臺上。為什么,因為linux平臺執行效率高,而且作為老牌服務器平臺,有很多免費的優秀開源服務器軟件。這樣,我們很多程序員往往在windows上寫java代碼,在linux上部署war包。

可能有人會問,linux作為服務器效率固然不錯,作為開發環境也許差點。我目睹過一個團隊從windows切換到linux開發環境后,構建腳本的執行時間從十幾分鐘縮短到了7分鐘左右。linux的文件系統比windows要快,很多腳本解析器的實現也更高效,因此解釋執行的效率也更高。

除了效率,我也關注體驗。

在mac上,所有程序的界面風格都是一樣的,任何一個工具和應用,你都可以用同樣的快捷鍵來進行基本操作,而在windows上,大多數的程序交互風格都不一樣;linux和mac上所有命令行工具都是差不多的參數語法,而windows上的命令各有各的參數風格;linux和mac上所有命令行工具都有man文檔,而windows上大部分工具都沒有合適的文檔;在大多數linux平臺上,ruby、python、java已經默認安裝了,而在windows上,光安裝ruby+rails就有一個專門的團隊來為其制作安裝包了。

在linux和mac上,我在命令行里基本上可以完成所有任務;在windows上,如果我要ssh服務器,我要打開putty,如果我要啟動mysql,我得找到mysql工具的快捷方式,啟停服務我要到service管理窗口,加個環境變量我得鼠標左右鍵點擊n多次到一個尺寸不能調整的小窗口里手動添加,完了我還得不得不重啟cmd窗口。

在linux和mac上,現在很容易可以寫一個腳本,把一個開發環境所需要的所有內容都自動化安裝執行好,我們不需要一個文檔來記載每一個新來的程序員所需要做的安裝準備工作。在windows上,我也用powershell寫過類似的東西,開發和維護這套腳本的體驗都不太好。

我承認習慣是一個很強大的力量,畢竟當初我從win xp切換到ubuntu的時候,也是花了好一陣才能適應?,F在之所以我這么抱怨windows,也可能是我在mac下活的久了的緣故。加之現在的IDE例如intellij和Visual Studio已經把java和.Net開發支持的很不錯了。但是如果你的工作不只是在開發機上寫寫代碼,你應該能夠體會我前面說的那些差異。且不說windows平臺作為web應用的部署平臺早已沒有任何競爭力,在我看來,作為開發環境,也已沒有任何吸引力。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容