嗯,這真是件很辛苦的事情,你看,老中醫(yī)就過(guò)得很輕松,收銀員也過(guò)得很輕松,官員當(dāng)然過(guò)得更輕松。沒(méi)別的,絕大多數(shù)正常的人類,學(xué)會(huì)一種技能,則無(wú)需進(jìn)一步學(xué)習(xí)其他的,大致上就能夠或輕松或艱難的生活下去。這個(gè)所謂絕大多數(shù),應(yīng)該是90%。
那么,程序員或者好聽(tīng)一些,軟件工程師這種職業(yè),為什么就過(guò)得更辛苦一些呢?
因?yàn)槲覀儗?shí)際上完全沒(méi)有必要每天甚至每個(gè)星期甚至每個(gè)月都要學(xué)習(xí)新知識(shí),因?yàn)楹芏嗨^的新知識(shí)都是些將簡(jiǎn)單的問(wèn)題復(fù)雜化的東西,它們既沒(méi)有令事情變得更簡(jiǎn)單,有時(shí)候甚至引起倒退,更多的時(shí)候是盲目的消耗了程序員的精力而一無(wú)是處。
我們完全可以過(guò)得非常輕松。
舉個(gè)例子,大家知道微軟的Wpf、Wcf和WF這些新的東西,其中任何一個(gè)專題,程序員都需要花費(fèi)大量的時(shí)間去學(xué)習(xí),當(dāng)然,也許學(xué)習(xí)半年之后,還是碰到很多疑惑。人的一生有多少個(gè)半年呢?這樣的學(xué)習(xí)對(duì)你究竟有什么好處呢?
簡(jiǎn)單的拿Wpf做例子,你需要了解這種新東西誕生的理由。
微軟的工程師認(rèn)為,桌面編程應(yīng)該有一個(gè)類似Html的界面設(shè)計(jì)方式,使用一種規(guī)范的Xaml來(lái)描述界面,這是第一個(gè)動(dòng)因。第二個(gè)主要的動(dòng)因,是微軟的.net框架,這上面需要有專門的本地應(yīng)用開(kāi)發(fā)技術(shù),微軟的工程師認(rèn)為Winform形式太過(guò)落伍了。
還有其他原因嗎?
當(dāng)你看到非常炫目的界面效果之后,你會(huì)覺(jué)得震撼,震撼之后你會(huì)覺(jué)得不學(xué)習(xí)實(shí)在就太會(huì)落伍了。
可是結(jié)果呢?
你想要用他開(kāi)發(fā)桌面軟件,面臨的第一個(gè)問(wèn)題,就是每個(gè)用戶下載的時(shí)候都需要下載好幾百兆的東西,還不一定保險(xiǎn)。因?yàn)閄P也好、Vista也好、Windows7也好還是Windows 2008 R2也好,老實(shí)說(shuō)你要下載的包都不相同。
第二個(gè)問(wèn)題是用戶安裝你的軟件非常困難,這些打包附帶的東西顯然無(wú)法讓用戶在安裝你的軟件之后,還有更多的興趣再看一眼。
第三個(gè)問(wèn)題是開(kāi)發(fā)應(yīng)用并不簡(jiǎn)單,有太多的概念,比如Xaml、比如樣式、比如Trriger、比如StoryBoard、比如MVVM,沒(méi)有圖表控件、沒(méi)有自動(dòng)完成控件,完成一件最簡(jiǎn)單的任務(wù)你比以前可能需要更多的時(shí)間,而非更少。
第四個(gè)問(wèn)題是有太多的細(xì)節(jié),比如Command如何帶參數(shù)、比如進(jìn)度條怎樣后臺(tái)展現(xiàn)進(jìn)度,嗯,我敢肯定的說(shuō),包括微軟的開(kāi)發(fā)工程師在內(nèi),整個(gè)地球上用Wpf開(kāi)發(fā)應(yīng)用的程序員們,只有不到十個(gè)人有一個(gè)通用的方案,來(lái)使用進(jìn)度條簡(jiǎn)單的在后臺(tái)報(bào)告進(jìn)度。
第五個(gè)問(wèn)題是慢,驚人的慢。大家可以看看“飛信”,這是一個(gè)微軟控主導(dǎo)決策的,嗯,使用.net 2.0。為了解決程序發(fā)布的問(wèn)題,專門弄了個(gè)微型的.net框架,但是你將它與QQ比,是不是覺(jué)得慢得太多?持續(xù)多年以后,移動(dòng)的先生們不耐煩了,才有的現(xiàn)在的基于C++的原生版本,請(qǐng)比較一下速度。這里特別提醒一下,飛信的開(kāi)發(fā),是中國(guó)移動(dòng)投入巨資、得到微軟中國(guó)整個(gè)團(tuán)隊(duì)無(wú)微不至的支持的,這些高人甚至赤膊上陣親自動(dòng)手,這樣使用他們的開(kāi)發(fā)工具,歷時(shí)數(shù)年也不過(guò)是做出一個(gè)被淘汰的產(chǎn)品。先生,請(qǐng)掂量一下,你比他們這些家伙更厲害嗎?你比孩子的母親對(duì)孩子更了解嗎?
嗯,最后可以看到,包括微軟自己在內(nèi),地球上并沒(méi)有太多基于Wpf的產(chǎn)品。少得可憐,但它確實(shí)浪費(fèi)了至少一百萬(wàn)程序員的生命,基本上每個(gè)程序員因此短命了半年以上。
微軟則繼續(xù)想在僵尸的基礎(chǔ)上,禍害更多的人,于是出現(xiàn)在Web領(lǐng)域,老天,有了Silverlight,事實(shí)無(wú)情的宣告這種妄想進(jìn)一步失敗,依然找不到多少有點(diǎn)看點(diǎn)的Silverlight的商業(yè)應(yīng)用。微軟碰了一鼻子灰,但他成功的繼續(xù)禍害了50萬(wàn)以上的另一批程序員,這個(gè)時(shí)間估計(jì)超過(guò)半年,因?yàn)閾?jù)說(shuō)Web程序員更固執(zhí)、也更舍不得告別已經(jīng)浪費(fèi)的生命。
故事還沒(méi)有完結(jié),微軟開(kāi)始將這一套東西轉(zhuǎn)到手機(jī)領(lǐng)域。
我仿佛看見(jiàn)一只野狗,被左邊的一個(gè)人踢了一腳,這個(gè)人叫桌面應(yīng)用;又被右邊的人踢了一腳,這個(gè)人叫做Web應(yīng)用;然后,他高高的跳向空中,嗯,空中等著他的那個(gè)人叫手機(jī)開(kāi)發(fā),他是不是也長(zhǎng)著一雙腳呢?
他們推出WP7,這種微軟最新的手機(jī)操作系統(tǒng),開(kāi)發(fā)工具是Silverlight,我已經(jīng)看到他失敗的那一天了……
這是新技術(shù)典型的例子,你不用責(zé)怪微軟,dos到Windows,是一種包裝,將底層封鎖;Win32到.net FrameWork是第二次包裝,繼續(xù)封閉第二底層;.net“原生”開(kāi)發(fā)到Wpf又是一種包裝,這是封閉了WinForm的內(nèi)容改用Xml呈現(xiàn)的包裝。
你能夠想象得到,每一次包裝,顯然都帶來(lái)運(yùn)算效率的下降,這種包裝如果成功,是有益的,因?yàn)橛布阅墚吘乖诳焖俚脑鲩L(zhǎng)。當(dāng)然,也正由于這種包裝,電腦發(fā)展幾十年之后,我們常見(jiàn)的應(yīng)用基本上都沒(méi)有真正的變快,甚至與二十年前比較更慢了。
同時(shí),開(kāi)發(fā)應(yīng)用軟件,好象每經(jīng)過(guò)一次包裝,復(fù)雜度又增加許多,而開(kāi)發(fā)成本又上升許多。
這很矛盾,不是嗎?多數(shù)時(shí)候,微軟的目的都是讓開(kāi)發(fā)更簡(jiǎn)單,這是沒(méi)錯(cuò)的。
但什么是簡(jiǎn)單?
我的理解是:第一是概念盡可能少,理解上簡(jiǎn)單。第二才是代碼盡可能少,實(shí)現(xiàn)上簡(jiǎn)單。
微軟幾乎百分之百的工程師,和幾乎百分之百的高層決策人員,都不理解第一個(gè)問(wèn)題,“概念要盡可能少”。
嗯,你這么想想吧,剛剛看到有研究Prism的,我估計(jì)此人又要浪費(fèi)半年以上的生命。
這是個(gè)什么東西呢?MVVM框架嗎?依賴注入嗎?模塊化嗎?
看看上面這句話,普通人定然看不懂,這也是我們絕大多數(shù)程序員漸漸變得不會(huì)說(shuō)人話的原因。
你只要看到Prism那些難以理解的代碼,然后看到使用這種編程框架需要理解多少個(gè)概念,使用這種框架開(kāi)發(fā)應(yīng)用會(huì)使人多么發(fā)狂。對(duì)于一個(gè)團(tuán)隊(duì)來(lái)說(shuō),這又會(huì)造成多大的災(zāi)難。
請(qǐng)記住,即使你誤入了微軟的賊船,也一定要記。好看蚊媾R一項(xiàng)新的技術(shù)的時(shí)候,花費(fèi)5分鐘的時(shí)間了解一下,它的目的是什么?它是否達(dá)到了這些目的?使用這種東西需要理解的概念多不多?有無(wú)可能在一天內(nèi)完全掌握?
如果不能,忽略它。
微軟是沒(méi)錯(cuò)的,錯(cuò)的是你,先生,你不知辨別,你也不知道自己究竟有多長(zhǎng)的生命。
想一想,還是列出一個(gè)清單吧:
1、Asp.net Mvc V3:可以看一下,新的視圖引擎確實(shí)更簡(jiǎn)單
2、WCF:忘掉它,這是微軟希望擴(kuò)展和取代Web服務(wù)的東西,它不是標(biāo)準(zhǔn),這些年也基本上很少有應(yīng)用。
3、WPF:忘掉它,要開(kāi)發(fā)原生應(yīng)用,還是老老實(shí)實(shí)的用VC+Mfc,要好看一點(diǎn),用Vs2010里的Ribbon體系。
4、WF:不需要關(guān)注,當(dāng)然,如果你從事工作流范疇的開(kāi)發(fā),這個(gè)有一定益處,問(wèn)題是性能也堪憂
5、Sql2008 R2的數(shù)據(jù)挖掘部分:忘掉它,基于數(shù)據(jù)庫(kù)的挖掘,基本上是很難實(shí)用的.
6、Silverlight:請(qǐng)轉(zhuǎn)向Html 5吧,或者現(xiàn)實(shí)一些,F(xiàn)lash。你不應(yīng)該這樣特立獨(dú)行,遵循多數(shù)人的標(biāo)準(zhǔn)吧
7、Wp7:躲遠(yuǎn)一點(diǎn),買手機(jī)也不要買這種
8、Silverlight手機(jī)開(kāi)發(fā):不要碰,賺不到錢的
9、嵌入式開(kāi)發(fā)WinCe或windows Mobile:轉(zhuǎn)向Android或者linux吧
10、Ado.net Entity FrameWork :忘了它,這只是微軟在面臨強(qiáng)抱的時(shí)候無(wú)力的呻吟,它希望能夠?qū)崿F(xiàn)數(shù)據(jù)庫(kù)和對(duì)象之間的無(wú)縫連接、也希望解決領(lǐng)域驅(qū)動(dòng)開(kāi)發(fā)問(wèn)題,但是老天,十年之內(nèi)請(qǐng)大家不要幻想這種DDD的方式能為成為現(xiàn)實(shí)---這也意味著所有程序員失業(yè)先…
11、linq:關(guān)注但一定要慎用,linq To Sql性能肯定不如原生Ado.net直接訪問(wèn)數(shù)據(jù)庫(kù),linq To Object很多基于IEnumerable接口的,很顯然在針對(duì)數(shù)組和IList的時(shí)候較之直接編程性能大幅下降。
12、TFS:重要,很好的工具,但記住一定要用基本安裝,只使用源碼管理和基本的項(xiàng)目管理,不要安裝SharePoint之類,簡(jiǎn)單就好
13、Tfs的Scrum模版:重要,這樣一種方法論,對(duì)個(gè)人對(duì)團(tuán)隊(duì)都有益處
14、Vs2010的單元測(cè)試項(xiàng)目:重要,這是改變個(gè)人變成習(xí)慣,改變心態(tài)的習(xí)慣。不會(huì)TDD的基本上是苦瓜程序員。會(huì)了,你就是蜜瓜程序員。