坂本龍馬曾經(jīng)對(duì)土佐勤王黨成員檜垣直治說(shuō):“今后在室內(nèi)亂打亂斗的情況會(huì)多起來(lái)。我喜歡小太刀拦耐,小太刀靈活耕腾,比太刀實(shí)用〔當(dāng)時(shí)流行太刀〕∩迸矗”之后直治帶了小太刀再見龍馬扫俺,他卻掏出來(lái)一柄手槍:“這個(gè)比小太刀更具威力」毯玻”坂本龍馬拜勝海舟為師后狼纬,直治帶了槍再見龍馬,這次龍馬掏出的是一部《萬(wàn)國(guó)公法》(一本國(guó)際法方面的書):“手槍只能殺傷敵人骂际,此書可以振興日本疗琉!”西鄉(xiāng)隆盛曾對(duì)坂本龍馬說(shuō):“你前天所說(shuō)的和今天所說(shuō)的不一樣,這樣你怎么能取信于我呢歉铝。你作為天下名士必須有堅(jiān)定的信念盈简!”坂本說(shuō):“不是這樣的。孔子說(shuō)過(guò)柠贤,君子從時(shí)香浩。時(shí)間在推移,社會(huì)形勢(shì)在天天變化臼勉。因此邻吭,順應(yīng)時(shí)代潮流才是君子之道!西鄉(xiāng)宴霸,你一旦決定一件事之后囱晴,就想貫徹始終。但這么做瓢谢,將來(lái)你會(huì)落后于時(shí)代的畸写。”
上面這段話恩闻,摘自維基百科關(guān)于“坂本龍馬”的條目艺糜。這段話給我很大的震撼:那可是明治維新時(shí)代啊幢尚!只有思想家才有這樣的見識(shí)和洞察力〕崧ィ可為什么說(shuō)起他尉剩?因?yàn)樵诟簝?nèi)的朋友聊最近發(fā)生的“格斗狂人20秒KO太極高手”的事情。我提到毅臊,李連杰的經(jīng)典電影《精武門》里面的高手船越跟陳真有過(guò)一段精彩的對(duì)話:
船越:中國(guó)人的武功是強(qiáng)調(diào)個(gè)人的修為理茎,而不注重實(shí)戰(zhàn)。
陳真:技擊的目標(biāo)是講求擊倒對(duì)方管嬉。
船越:你完全錯(cuò)了皂林,年輕人我告訴你,要擊倒對(duì)方最好的方法就是用手~槍蚯撩。練武的目標(biāo)是要將人的體能推到最高極限础倍。
這段話,是影片的精彩之筆胎挎。然后朋友告訴我沟启,這來(lái)源于坂本龍馬,遂查詢到坂本龍馬的資料犹菇。
鋪陳了這么多德迹,我到底要說(shuō)什么?其實(shí)很簡(jiǎn)單:人要與時(shí)俱進(jìn)揭芍,順應(yīng)時(shí)代潮流胳搞。
這對(duì)于技術(shù)也是一樣的道理。即不要固守既有的東西,不要永遠(yuǎn)抓著一個(gè)東西不放肌毅,僅僅因?yàn)槟氵^(guò)去對(duì)它很熟悉币厕。對(duì)于Windows開發(fā)、.Net芽腾、C++語(yǔ)言旦装,我也持這個(gè)態(tài)度 –它們過(guò)時(shí)了,已經(jīng)不能代表產(chǎn)業(yè)的潮流摊滔。當(dāng)然阴绢,這并不是說(shuō)它們沒用,而是說(shuō)艰躺,當(dāng)你有機(jī)會(huì)做選擇的時(shí)候呻袭,可能在大部分場(chǎng)合都不會(huì)選擇它們。因?yàn)榭傆懈训姆桨缚梢蕴娲?/p>
我以為整個(gè)產(chǎn)業(yè)的重點(diǎn)腺兴,早已從單機(jī)模式轉(zhuǎn)向移動(dòng)設(shè)備及其相關(guān)聯(lián)的互聯(lián)網(wǎng)服務(wù)上左电。而且還會(huì)有進(jìn)一步的發(fā)展和轉(zhuǎn)移,比如智能設(shè)備页响。
微軟公司沒有抓住機(jī)會(huì)并順應(yīng)這一潮流篓足,這是它們喪掉信息技術(shù)浪潮之巔的根本原因。它在Internet剛興起的時(shí)候就錯(cuò)過(guò)一次闰蚕,而且連帶著缺乏革新的C++一起衰落了栈拖。要知道,多年以來(lái)Windows上核心的開發(fā)技術(shù)没陡,都是以C++為主的涩哟,要使用Visual C++工具包。程序員里面盼玄,能熟練使用C/C++開發(fā)的贴彼,那真的是有相當(dāng)不錯(cuò)技術(shù)功底的。在“程序員鄙視鏈”中埃儿,位于頂層器仗。不是因?yàn)檎Z(yǔ)言太難學(xué) – 這是一部分因素,核心原因是因?yàn)槿狈Ω叨瘸橄篁蚬俊?yōu)秀的封裝青灼,開發(fā)者不得不親自對(duì)OS的API接口進(jìn)行操作,學(xué)習(xí)操作系統(tǒng)底層的設(shè)計(jì)妓盲、準(zhǔn)確理解各種重要概念杂拨、精確操作各種進(jìn)程、線程悯衬、同步接口等等弹沽。這些東西不是朝夕之功檀夹,需要很長(zhǎng)時(shí)間的積累。
Web時(shí)代來(lái)臨策橘,單機(jī)操作系統(tǒng)的重要性大大下降炸渡。因?yàn)樾畔⑿枨蟮谋举|(zhì),是要傳播丽已。這個(gè)時(shí)候蚌堵,單機(jī)就成了生產(chǎn)力工具了。
Web就是OS沛婴。你可以根據(jù)這個(gè)論斷吼畏,映射一下:
應(yīng)用程序 – 網(wǎng)站;操作協(xié)議 – HTTP嘁灯;文件系統(tǒng) – 數(shù)據(jù)庫(kù)/分布式泻蚊;打開網(wǎng)站 – DNS;檢索信息 – 搜索引擎丑婿;這種類比有一大串性雄。
Web開發(fā)迅速改進(jìn)、革新羹奉,發(fā)展速度比起傳統(tǒng)單機(jī)軟件開發(fā)模式秒旋,感覺快了10倍。10多年前的網(wǎng)站開發(fā)還很原始簡(jiǎn)陋尘奏,現(xiàn)在你再看看滩褥?翻天覆地。而你再看看Windows單機(jī)軟件的開發(fā)炫加,甚至連畫個(gè)圖片按鈕都得自己從頭來(lái),這什么年代了铺然?這充分反應(yīng)了社會(huì)需求俗孝。
移動(dòng)互聯(lián)網(wǎng)興起10年,人類真正實(shí)現(xiàn)了“信息在指尖”的夢(mèng)想魄健。Web其實(shí)是跟著移動(dòng)開發(fā)一起進(jìn)步的赋铝,并未衰落。因?yàn)橐苿?dòng)設(shè)備后面沽瘦,可全是一套套的Web技術(shù)在支撐服務(wù)啊革骨。它們是互補(bǔ)融合的。
而在這些一套套的技術(shù)里面析恋,C++已經(jīng)給逼到了墻角良哲,基本沒什么位置了≈恚或者從另外一個(gè)角度說(shuō)筑凫,C/C++已經(jīng)變成基礎(chǔ)工具構(gòu)件,專門用于系統(tǒng)、其它工具的開發(fā)巍实。比如用C/C++實(shí)現(xiàn)其它語(yǔ)言的引擎滓技。但是具體的應(yīng)用級(jí)工作,大半退位給其它選項(xiàng)棚潦。你會(huì)用C++去開發(fā)web應(yīng)用么令漂?除非去開發(fā)服務(wù)器擴(kuò)展,否則不會(huì)丸边。因?yàn)槟鞘亲詫赖兀到y(tǒng)的瓶頸是I/O,不是CPU原环,用腳本性能足夠好了挠唆,而且開發(fā)速度快得多,維護(hù)也容易的多嘱吗。
另外玄组,語(yǔ)言之爭(zhēng),已經(jīng)演化為社區(qū)之爭(zhēng)谒麦。典型表現(xiàn)就是分發(fā)系統(tǒng)俄讹。各種流行的腳本語(yǔ)言,都有自己設(shè)定的打包分發(fā)系統(tǒng)绕德。如PHP的Composer患膛,Javascript的npm,Python的pip等等耻蛇。社區(qū)設(shè)定標(biāo)準(zhǔn)踪蹬,只要符合標(biāo)準(zhǔn)就可以上傳分發(fā),下載使用臣咖。這種模式下跃捣,開發(fā)跟搭積木無(wú)異,要什么功能夺蛇?直接找個(gè)實(shí)現(xiàn)的最好的包疚漆,拿來(lái)用就是了。除非你覺得不滿意刁赦,無(wú)法滿足自己的需求娶聘,想重搞一個(gè)。否則沒理由重新發(fā)明輪子甚脉。你告訴我C++的代碼咋分發(fā)丸升?一套C++ Class發(fā)過(guò)來(lái),連編譯都無(wú)法跨平臺(tái)宦焦。在語(yǔ)言實(shí)現(xiàn)上发钝,Python/PHP/JS這類語(yǔ)言有天然的優(yōu)勢(shì)顿涣。這種開發(fā)效率,比C++快了N倍酝豪。
過(guò)去涛碑,C++開發(fā)有個(gè)比較強(qiáng)的需求:客戶端。操作高效孵淘、使用流暢的客戶端還是有它的應(yīng)用場(chǎng)景的蒲障。但這個(gè)需求在減弱。
一是移動(dòng)端瘫证、Web端在侵蝕揉阎,對(duì)Windows客戶端需求不再那么強(qiáng)烈了。筆記本背捌、臺(tái)式機(jī)廠商的日子比較難過(guò)毙籽。
二是其它語(yǔ)言特別是用Html5/JS/CSS技術(shù)實(shí)現(xiàn)的客戶端,日益成熟毡庆。早晚會(huì)吞噬C++ UI開發(fā)的大部分市場(chǎng)坑赡。早期的HTML界面實(shí)現(xiàn)很弱,缺陷很多么抗,特別是性能毅否。但是基于高效的V8 JS引擎、webkit引擎內(nèi)核技術(shù)的新開發(fā)模式蝇刀,已經(jīng)脫胎換骨螟加。因?yàn)椴⒉徽{(diào)用什么IE接口,沒有那么多跨進(jìn)程的COM調(diào)用消耗吞琐,所以性能好得多捆探。
三是實(shí)現(xiàn)效果大相徑庭≌舅冢基于新一代CSS技術(shù)的UI徐许,效果絢麗,個(gè)性化突出卒蘸,這些完全是C++ UI開發(fā)望塵莫及的。C++想實(shí)現(xiàn)出來(lái)翻默?累死你缸沃。而且這也不是業(yè)務(wù)邏輯,做它又覺得虧修械。
眼下多語(yǔ)言競(jìng)爭(zhēng)趾牧、分割應(yīng)用需求是大趨勢(shì),每個(gè)語(yǔ)言占據(jù)各自的山頭肯污,再向外延伸翘单。PHP專注于WEB開發(fā)吨枉、Java做后端應(yīng)用、Python做網(wǎng)絡(luò)哄芜、數(shù)據(jù)分析貌亭、JS做前端應(yīng)用,如此等等认臊。這種條塊分割圃庭,也逼著你要多學(xué)點(diǎn)不同的編程語(yǔ)言了。
對(duì)C++熟悉的人失晴,優(yōu)點(diǎn)是基礎(chǔ)好剧腻,缺點(diǎn)是思維往往被微軟那一套模式束縛了,學(xué)的越是好涂屁,擺脫起來(lái)越是難书在。但是如果確實(shí)擺脫了,功力又確實(shí)比只會(huì)腳本的深拆又。出個(gè)什么狀況儒旬,可以一口氣扎進(jìn)去,翻看源代碼遏乔,追蹤系統(tǒng)調(diào)用义矛,徹底理解并解決問題。遇到腳本的性能瓶頸盟萨,用C/C++做個(gè)擴(kuò)展模塊凉翻,性能如飛。
所以各位如果碰見好的C++開發(fā)捻激,盡量別錯(cuò)過(guò)制轰,拉進(jìn)來(lái),讓他轉(zhuǎn)型胞谭。技術(shù)水平上有很大把握優(yōu)于直接從腳本開發(fā)入行的人垃杖。
只會(huì)C++開發(fā)的朋友,也關(guān)注點(diǎn)新發(fā)展吧丈屹,堅(jiān)守沒有意義调俘。順應(yīng)時(shí)代潮流才是君子之道。