程序员开发windows linux,好程序员不用windows作开发环境
好程序員不用windows作為開發(fā)環(huán)境,今天我想就這個(gè)點(diǎn)吐槽一下。最近因?yàn)楣ぷ麝P(guān)系,需要在windows機(jī)器上工作一段時(shí)間,作為一個(gè)用了多年windows,然后切換到ubuntu作為工作環(huán)境兩年時(shí)間,然后切換到mac大概3年多時(shí)間只到最近被迫用回windows的程序員,我大概有自己的一些感觸。當(dāng)然,如果你碰巧用了微軟的技術(shù)棧,或者在開發(fā)windows平臺(tái)應(yīng)用或者是windows phone應(yīng)用,很遺憾,你沒什么太多選擇。如今我寫的程序主要是web居多,移動(dòng)的以iOS為主,輔以一些小工具或者庫,了解我的這個(gè)背景后,大概會(huì)覺得我不那么偏激一些。
好程序員首先追求效率,這一點(diǎn)體現(xiàn)在方方面面。他們不會(huì)過度依賴于IDE,而會(huì)大量使用命令行工具。他們希望一切都盡可能地快,不光程序運(yùn)行要快,開發(fā)過程也要流暢、沒有阻礙和干擾,無聊重復(fù)的工作希望能夠通過工具自動(dòng)完成。
舉個(gè)我每天都要用的terminal來說,如果你在mac或者linux上學(xué)習(xí)掌握了bash以及一些核心的GNU linux工具箱的用法,那么在所有l(wèi)inux平臺(tái)和mac平臺(tái)上都可以很高效,并且切換無成本。現(xiàn)在的shell多數(shù)都用了readline這個(gè)庫,也就是說它們支持類似的一套快捷鍵,例如Ctrl+a回到一行開頭,Ctrl+e到一行結(jié)尾,Ctrl+r可以匹配查找歷史命令,等等。而直到Windows 8,系統(tǒng)自帶的terminal工具cmd還和windows 95里的cmd沒什么區(qū)別,好像微軟從來沒期望windows上的程序員去使用命令行工具(你們用visual studio就夠了)。不要說快捷鍵,連進(jìn)行最基本的copy paste都是一個(gè)非常痛苦的事情,更不要提在中文windows下你只能選擇一種系統(tǒng)默認(rèn)字體,窗口的大小不能簡(jiǎn)單拖拽進(jìn)行調(diào)整…… 我確實(shí)看到很多windows上開發(fā)的程序員都不怎么用命令行工具,他們默認(rèn)遵循了windows的設(shè)計(jì)哲學(xué),那就是一切都通過GUI(圖形界面)來完成。
前面提到linux下的GNU工具箱,如果你用過grep、find等工具應(yīng)該不會(huì)陌生,現(xiàn)在除了這些傳統(tǒng)工具,還有ack、autojump等新的工具,對(duì)于程序員來說十分順手。在mac下,通過brew或者port,也可以很容易通過命令行工具從遠(yuǎn)程軟件庫安裝這些工具。而在windows下面,準(zhǔn)備好這樣一套環(huán)境必須得費(fèi)一番功夫。當(dāng)然你可以選擇cygwin,或者一些較小的linux工具移植(例如mingw utils, GnuWin32等),現(xiàn)在也有nuget和chocolatey這樣的軟件安裝和版本管理工具(類似linux下的apt-get或者mac下的brew),但是仍不是非常理想,不同工具的安裝體驗(yàn)也非常不同,而它們對(duì)linux的模仿也剛好印證了linux類系統(tǒng)的先進(jìn)。
最近我也發(fā)現(xiàn)了好幾個(gè)windows上cmd工具的替代,例如powershell,有它自己的優(yōu)勢(shì),還有類似powercmd,powertab,console2等工具,也是希望能夠給windows帶來更多類似linux和mac上terminal類工具的功能。
除了terminal本身,shell script也比win上的batch script強(qiáng)太多了,powershell的出現(xiàn)讓windows也具備了較強(qiáng)的腳本能力,然而shell腳本的強(qiáng)大和廣泛應(yīng)用還是powershell不能比的。在linux上,init和系統(tǒng)配置大多是shell腳本,不論是用bash、ruby還是python寫出來的腳本,使用起來和用C語言寫成的sed、awk等工具沒有什么區(qū)別,作為用戶,這些腳本的使用體驗(yàn)就和原生工具一樣,我們熟悉的vagrant、chef、hg等工具都是腳本寫的。而windows上,bat腳本的能力有限不說,其執(zhí)行體驗(yàn)也差了很多。
不僅是工具,在執(zhí)行效率上linux也比windows強(qiáng)很多。
我們現(xiàn)在開發(fā)很多web應(yīng)用,很少有部署在windows平臺(tái)上的,如果你是采用pythong、ruby或者java等語言來開發(fā)web,多數(shù)情況下你會(huì)部署到linux平臺(tái)上。為什么,因?yàn)閘inux平臺(tái)執(zhí)行效率高,而且作為老牌服務(wù)器平臺(tái),有很多免費(fèi)的優(yōu)秀開源服務(wù)器軟件。這樣,我們很多程序員往往在windows上寫java代碼,在linux上部署war包。
可能有人會(huì)問,linux作為服務(wù)器效率固然不錯(cuò),作為開發(fā)環(huán)境也許差點(diǎn)。我目睹過一個(gè)團(tuán)隊(duì)從windows切換到linux開發(fā)環(huán)境后,構(gòu)建腳本的執(zhí)行時(shí)間從十幾分鐘縮短到了7分鐘左右。linux的文件系統(tǒng)比windows要快,很多腳本解析器的實(shí)現(xiàn)也更高效,因此解釋執(zhí)行的效率也更高。
除了效率,我也關(guān)注體驗(yàn)。
在mac上,所有程序的界面風(fēng)格都是一樣的,任何一個(gè)工具和應(yīng)用,你都可以用同樣的快捷鍵來進(jìn)行基本操作,而在windows上,大多數(shù)的程序交互風(fēng)格都不一樣;linux和mac上所有命令行工具都是差不多的參數(shù)語法,而windows上的命令各有各的參數(shù)風(fēng)格;linux和mac上所有命令行工具都有man文檔,而windows上大部分工具都沒有合適的文檔;在大多數(shù)linux平臺(tái)上,ruby、python、java已經(jīng)默認(rèn)安裝了,而在windows上,光安裝ruby+rails就有一個(gè)專門的團(tuán)隊(duì)來為其制作安裝包了。
在linux和mac上,我在命令行里基本上可以完成所有任務(wù);在windows上,如果我要ssh服務(wù)器,我要打開putty,如果我要啟動(dòng)mysql,我得找到mysql工具的快捷方式,啟停服務(wù)我要到service管理窗口,加個(gè)環(huán)境變量我得鼠標(biāo)左右鍵點(diǎn)擊n多次到一個(gè)尺寸不能調(diào)整的小窗口里手動(dòng)添加,完了我還得不得不重啟cmd窗口。
在linux和mac上,現(xiàn)在很容易可以寫一個(gè)腳本,把一個(gè)開發(fā)環(huán)境所需要的所有內(nèi)容都自動(dòng)化安裝執(zhí)行好,我們不需要一個(gè)文檔來記載每一個(gè)新來的程序員所需要做的安裝準(zhǔn)備工作。在windows上,我也用powershell寫過類似的東西,開發(fā)和維護(hù)這套腳本的體驗(yàn)都不太好。
我承認(rèn)習(xí)慣是一個(gè)很強(qiáng)大的力量,畢竟當(dāng)初我從win xp切換到ubuntu的時(shí)候,也是花了好一陣才能適應(yīng)。現(xiàn)在之所以我這么抱怨windows,也可能是我在mac下活的久了的緣故。加之現(xiàn)在的IDE例如intellij和Visual Studio已經(jīng)把java和.Net開發(fā)支持的很不錯(cuò)了。但是如果你的工作不只是在開發(fā)機(jī)上寫寫代碼,你應(yīng)該能夠體會(huì)我前面說的那些差異。且不說windows平臺(tái)作為web應(yīng)用的部署平臺(tái)早已沒有任何競(jìng)爭(zhēng)力,在我看來,作為開發(fā)環(huán)境,也已沒有任何吸引力。
總結(jié)
以上是生活随笔為你收集整理的程序员开发windows linux,好程序员不用windows作开发环境的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 矩阵和线性代数
- 下一篇: 安卓 camera 调用流程_安卓如何做