為什麼越簡單的技術對於開發人員越難

TP_funny發表於2014-09-11


簡單 != 容易

從 Amazon Web 服務到 AngularJS 之類的 web 框架,便利性驅動著世界上最好的技術。但是,更加快速地、變得有效率的“便利性”,經常伴隨著一個隱藏的價格標籤:為了變得真正有效率,你將不得不花些功夫。

偉大的技術經常貌似簡單,新手們直覺上不需要太多努力就可以“學習”。當人們認為他們已經掌握了這門技術、而他們真正做的所有工作相當於是一個“hello world”程式的等價物時,問題就出現了。在你歸咎於這個工具之前,你往往需要投入時間以正確地使用它。

關於 AngularJS 的“複雜感受”

讓我們用 AngularJS 做例子。AngularJS 是一個 web 應用程式框架——JavaScript 程式碼類庫、模板和其它軟體的集合,目的是讓開發人員更加容易地開發動態網頁或 web app。

正如 Anand Mani Sankar 建議的,問題在於 AngularJS 入門容易,簡單掩蓋了框架的力量:
[AngularJS]通過抽象了很多內部的複雜度,而只暴露程式開發人員關心的東東,大大簡化了應用程式的開發過程。

聽起來這是一項偉大的工作,它也讓新手們在完成第一個“hello world”應用程式後,就覺得掌握了這套系統:
AngularJS 旅程會產生複雜的感受。學習曲線與其它 JS 框架有著很大的不同。進入的門檻非常低。但是,當你開始深入的時候,學習曲線突然變得陡升了。

Sankar 然後引用了 Ben Nadel 關於 AngularJS 旅程的幽默描述


當然,一些人被卡在了谷底。比如,George Butiri 從 Google 搜尋到了很多關於“The reason Angular JS will fail”的文章。Butiri 解釋道,AngularJS 實際上相當難,沒有給出太多專門的例子來解釋為什麼是這樣子,至少超過了“因為我更喜歡 jQuery。”

太容易失敗了

很多最好的技術都是這樣。它剛開始時簡單,不過如果你想真正掌握它,你將不得不投入大量時間。一些人開始勢頭很好,發現了複雜,然後抱怨這門技術沒有永遠地保持出乎意料的好。

對不起,真正的技術不是那樣運轉的。它總是需要努力,如果不能以正確的方式執行,就會失敗。

看看 NoSQL 資料庫,我在這個世界花了太多的時間。

NoSQL 對於新手而言,無論是 MongoDB、HBase 還是 Cassandra,喜歡兜售它的無模式特性(schema-less)。關係型資料庫的舊世界需要僵硬的模式而且狂熱!在 NoSQL 的新世界,定義資料結構的模式消失了,DBA 們消失了,規則消失了!真簡單!!

當然,這完全是胡扯。正如我的同事 Asya Kamsky 喜歡說的,“NoSQL != NoDBA.”(NoSQL 與“沒有資料庫管理員”不是一回事兒。)
NoSQL 不代表“沒有 DBA”。如果有人試圖這樣說服你,他們很可能要向你推銷什麼。這不意味著你有一個具有“DBA”頭銜的團隊或人員——然而,如果你有一個資料庫,無論它是關係型,還是非關係型,那麼一定有人擔任“DBA”角色——如果他們不知道他們做的事情,那麼在問題出現之前,一大堆工作將不會完成或被考慮到。

瀏覽關於 NoSQL 資料庫、AngularJS 或大部分你喜歡的技術方面的文章,我保證,如果不是大部分,也有很多是由那些感覺受欺騙的人寫的,技術沒有按照這種使用者想要的方式執行,因為他們沒有真正的投入。的確,有時候是技術失敗了。多數情況則是令人觸目驚心的。

但是,當技術沒有神奇地減掉我們需要的工作時,我們常常在抱怨。

槓桿越少,幸福越多?

從這兩者得到好處的一種方式就是通過可管理的服務,比如 Amazon web 服務的 Redshift。Redshift 是一個執行在雲端的、完全管理的資料倉儲。“完全管理”意味著它更容易使用,但是它也意味著使用者失去了他們可能在 Teradata 或另一種企業資料倉儲中的一些把手和槓桿(the knobs and levers)。

然而,這恰恰就是問題的關鍵。

正如 AWS 資料科學的總經理 Matt Wood 最近告訴我的,Redshift 和其它 AWS 服務致力於通過移除複雜讓使用者易於使用。給使用者更少的“槓桿”意味著 AWS 也給他們更少的失敗方式。當然,技巧是在產品簡單與使用者控制之間找到平衡。

例如,Airbnb 對 Redshift 剛開始是如何容易感到洋洋得意,但是隨後就需要一些折衷(和投入):
我們面臨的第一個挑戰就是模式遷移。即使 Redshift 是基於 Postgres 8.0 的,“微妙的”不同仍然足夠大,強迫你用 Redshift 的方式工作。我們儘量自動化模式遷移,但是問題比我們最初期望的更大,我們認為它超出了試驗的範圍。在 Redshift 裡,索引,時間戳型別,陣列,不被支援,這樣你需要在你的模式裡排除它們,或找到變通方案。

無論如何,Airbnb 投入了努力,看到了至少五倍的效能提升和巨大的成本節約。起步容易,但是也值得繼續投入。

也有很多偉大的軟體,它們看起來使用簡單。為了走出對於任何偉大技術的新手狀態,你將不得不有目的地使用,你將不得不投入時間和努力來掌握它。

可以有免費的軟體,但沒有免費的午餐。

英文原文:Why Even "Simple" Technology Can Be HardFor Developers
相關閱讀
評論(2)

相關文章