為什么越簡(jiǎn)單的技術(shù)對(duì)于開(kāi)發(fā)人員越難
簡(jiǎn)單 != 容易
從Amazon Web服務(wù)到 AngularJS之類的web框架,便利性 驅(qū)動(dòng) 著世界上最好的技術(shù)。但是,更加快速地、變得有效率的“便利性”,經(jīng)常伴隨著一個(gè)隱藏的價(jià)格標(biāo)簽:為了變得真正有效率,你將不得不花些功夫。
偉大的技術(shù)經(jīng)常貌似簡(jiǎn)單,新手們直覺(jué)上不需要太多努力就可以“學(xué)習(xí)”。當(dāng)人們認(rèn)為他們已經(jīng)掌握了這門技術(shù)、而他們真正做的所有工作相當(dāng)于是一個(gè)“hello world”程序的等價(jià)物時(shí),問(wèn)題就出現(xiàn)了。在你歸咎于這個(gè)工具之前,你往往需要投入時(shí)間以正確地使用它。
關(guān)于AngularJS的“復(fù)雜感受”
讓我們用AngularJS做例子。AngularJS是一個(gè) web應(yīng)用程序框架——JavaScript代碼類庫(kù)、模板和其它軟件的集合,目的是讓開(kāi)發(fā)人員更加容易地開(kāi)發(fā)動(dòng)態(tài)網(wǎng)頁(yè)或web app。
正如 Anand Mani Sankar建議 的,問(wèn)題在于AngularJS入門容易,簡(jiǎn)單掩蓋了框架的力量:
[AngularJS]通過(guò)抽象了很多內(nèi)部的復(fù)雜度,而只暴露程序開(kāi)發(fā)人員關(guān)心的東東,大大簡(jiǎn)化了應(yīng)用程序的開(kāi)發(fā)過(guò)程。
聽(tīng)起來(lái)這是一項(xiàng)偉大的工作,它也讓新手們?cè)谕瓿傻谝粋€(gè)“hello world”應(yīng)用程序后,就覺(jué)得掌握了這套系統(tǒng):
AngularJS旅程會(huì)產(chǎn)生復(fù)雜的感受。學(xué)習(xí)曲線與其它JS框架有著很大的不同。進(jìn)入的門檻非常低。但是,當(dāng)你開(kāi)始深入的時(shí)候,學(xué)習(xí)曲線突然變得陡升了。
Sankar然后引用了 Ben Nadel關(guān)于AngularJS旅程的幽默描述:
當(dāng)然,一些人被卡在了谷底。比如,George Butiri從Google搜索到了很多關(guān)于“The reason Angular JS will fail”的文章。Butiri解釋道,AngularJS實(shí)際上相當(dāng)難,沒(méi)有給出太多專門的例子來(lái)解釋為什么是這樣子,至少超過(guò)了“因?yàn)槲腋矚gjQuery。”
太容易失敗了
很多最好的技術(shù)都是這樣。它剛開(kāi)始時(shí)簡(jiǎn)單,不過(guò)如果你想真正掌握它,你將不得不投入大量時(shí)間。一些人開(kāi)始勢(shì)頭很好,發(fā)現(xiàn)了復(fù)雜,然后抱怨這門技術(shù)沒(méi)有永遠(yuǎn)地保持出乎意料的好。
對(duì)不起,真正的技術(shù)不是那樣運(yùn)轉(zhuǎn)的。它總是需要努力,如果不能以正確的方式運(yùn)行,就會(huì)失敗。
看看NoSQL數(shù)據(jù)庫(kù),我在這個(gè)世界花了太多的時(shí)間。
NoSQL對(duì)于新手而言,無(wú)論是MongoDB、HBase還是Cassandra,喜歡 兜售它的無(wú)模式特性(schema-less)。關(guān)系型數(shù)據(jù)庫(kù)的舊世界需要僵硬的模式而且狂熱!在NoSQL的新世界,定義數(shù)據(jù)結(jié)構(gòu)的模式消失了,DBA們消失了,規(guī)則消失了!真簡(jiǎn)單??!
當(dāng)然,這完全是胡扯。正如我的同事 Asya Kamsky喜歡說(shuō)的,“NoSQL != NoDBA.”(NoSQL與“沒(méi)有數(shù)據(jù)庫(kù)管理員”不是一回事兒。)
NoSQL 不代表“沒(méi)有DBA”。如果有人試圖這樣說(shuō)服你,他們很可能要向你推銷什么。這不意味著你有一個(gè)具有“DBA”頭銜的團(tuán)隊(duì)或人員——然而,如果你有一個(gè)數(shù) 據(jù)庫(kù),無(wú)論它是關(guān)系型,還是非關(guān)系型,那么一定有人擔(dān)任“DBA”角色——如果他們不知道他們做的事情,那么在問(wèn)題出現(xiàn)之前,一大堆工作將不會(huì)完成或被考 慮到。
瀏覽關(guān)于NoSQL數(shù)據(jù)庫(kù)、AngularJS或大部分你喜歡的技術(shù)方面的文章,我保證,如果不是大部分,也有很多是由那些感覺(jué)受欺騙的人寫(xiě)的,技術(shù)沒(méi)有按照這種用戶想要的方式運(yùn)行,因?yàn)樗麄儧](méi)有真正的投入。的確,有時(shí)候是技術(shù)失敗了。多數(shù)情況則是令人觸目驚心的。
但是,當(dāng)技術(shù)沒(méi)有神奇地減掉我們需要的工作時(shí),我們常常在抱怨。
杠桿越少,幸福越多?
從這兩者得到好處的一種方式就是通過(guò)可管理的服務(wù),比如Amazon web服務(wù)的 Redshift。Redshift是一個(gè)運(yùn)行在云端的、完全管理的數(shù)據(jù)倉(cāng)庫(kù)。“完全管理”意味著它更容易使用,但是它也意味著用戶失去了他們可能在Teradata或另一種企業(yè)數(shù)據(jù)倉(cāng)庫(kù)中的一些把手和杠桿(the knobs and levers)。
然而,這恰恰就是問(wèn)題的關(guān)鍵。
正如AWS數(shù)據(jù)科學(xué)的總經(jīng)理Matt Wood最近告訴我的,Redshift和其它AWS服務(wù)致力于通過(guò)移除復(fù)雜讓用戶易于使用。給用戶更少的“杠桿”意味著AWS也給他們更少的失敗方式。當(dāng)然,技巧是在產(chǎn)品簡(jiǎn)單與用戶控制之間找到平衡。
例如,Airbnb對(duì)Redshift剛開(kāi)始是如何容易感到 洋洋得意,但是隨后就需要一些折衷(和投入):
我 們面臨的第一個(gè)挑戰(zhàn)就是模式遷移。即使Redshift是基于Postgres 8.0的,“微妙的”不同仍然足夠大,強(qiáng)迫你用Redshift的方式工作。我們盡量自動(dòng)化模式遷移,但是問(wèn)題比我們最初期望的更大,我們認(rèn)為它超出了試 驗(yàn)的范圍。在Redshift里,索引,時(shí)間戳類型,數(shù)組,不被支持,這樣你需要在你的模式里排除它們,或找到變通方案。
無(wú)論如何,Airbnb投入了努力,看到了至少五倍的性能提升和巨大的成本節(jié)約。起步容易,但是也值得繼續(xù)投入。
也有很多偉大的軟件,它們看起來(lái)使用簡(jiǎn)單。為了走出對(duì)于任何偉大技術(shù)的新手狀態(tài),你將不得不有目的地使用,你將不得不投入時(shí)間和努力來(lái)掌握它。
可以有免費(fèi)的軟件,但沒(méi)有免費(fèi)的午餐。
英文原文:http://readwrite.com/2014/09/08/simple-technology-hard-not-easy-angularjs-nosql
譯文地址:http://www.itjhwd.com/simple-technology-hard-not-easy-angularjs-nosql/