以禪悟禪,體驗AngularJs的優雅哲學

WittBulter發表於2017-02-23

“武功百訣,以意為先,那才是武功的精骨神髓;招式身法,都不過是皮毛而已。若無精骨,皮毛何在?但若得了武道神髓。再學皮毛便是易如反掌了。”   ……

萬子良道:“方少俠方才所施展的那兩手,與天下各門各派之招式俱不相同,卻不知有何來處?”   鐵娃道:“這道理又與寫文章一樣,武功本天成,妙手自得之。李白倚馬千言,信筆俱是文章;我大哥上通武道,舉手投足間便都是絕妙的招式。無論文武,若是拘泥於一定的規格程式中,便落了下乘了。”

萬子良慨然長嘆道:“果然高明……果然高明……”“武功百訣,以意為先,那才是武功的精骨神髓;招式身法,都不過是皮毛而已。若無精骨,皮毛何在?但若得了武道神髓。再學皮毛便是易如反掌了。”

他用衣袖擦了擦嘴,接著又道:“別人學武,都是自易至難,但我大哥天賦與人不同,學武自也與人不同,他學武乃是自難而易,先已滲透了萬物自然變化之理,得通武道精髓之意,那招式身法便不學也會了。這道理正如畫畫一樣,若是不解畫意,畫得縱是逼真,但不能傳神,最多也不過是個畫匠而已;若是妙參畫意,信筆揮來,便都是絕妙丹青了。”

眾人雖都是武林高手、名門子弟,但聽了這番武學中至深至奧的道理,也不覺人人為之心動神馳。

————浣花洗劍錄

題目有點玄之又玄,其實禪是什麼我也不知道,只是偶然覺得這和我要表達的某種思想有點類似,就和浣花洗劍錄這段說的一樣,我並不是想告訴多少人寫angularjs或者寫程式應該怎樣怎樣,這樣的功法招式太多了,網上隨便一搜就有幾十個教程,而且講的比我更深邃易懂。然而令我擔心的是如果只是這樣無盡的學下去,真的就能領悟或者說直白的說學會它嗎?

如果有使用過或看別人使用過AngularJs的同學就會發現,AngularJs並沒有帶來多少所謂的功法招式,它不像JQ一樣教你該如何走位如何閃躲騰挪,而是企圖用一種完全的思維方式衝擊前端開發者固有的思想,這類似於架構或設計思想,它負責解放你,然後你仍舊去做自己該做的事,只不過做起來更簡單更有意思而已。

在闡述架構思想的迷人之處之前,我想先說說AngularJs的實用性(因為很多人都在懷疑這點)。Misko(AngularJs創始人)用業餘時間開發出Angular時便用它重寫了17000行的業務程式碼,完成它們時只用了3周,而程式碼量被削減到驚人的1500行,聽起來好像還不夠驚人,但要知道的是這17000行的前端程式碼曾經花費了一個團隊6個月的時間。我從書裡看到這段話時和很多人一樣,感覺這個框架牛逼快吹上天了,直到有一天我也碰見了一個複雜的WEB頁面,而且我也用Angular完全重寫了一遍,結果只用了短短的130行!而這個頁面的原作者大約寫了2400行,當然還要拋去他引用的那些亂七八糟的庫不算。另外值得一提的是我的程式設計習慣是一個”}”會佔用一行。

當然我的意思並不是越少的業務程式碼就越能體現框架的實力,但至少這讓我看到了Angular的真正迷人之處——它儘可能的用少量的程式碼和解耦式的思想為你構建專案,儘管這並不適合所有人。在我越來越深入瞭解Angular時才能慢慢感覺到,雖然它已經足夠的好,但也無法改變你的隊友/同事對它的看法,很多前端開發者在習慣命令式的程式設計之後幾乎無法理解這樣一個重量級框架的設計思想,也對程式碼的維護無從下手,這時候你想要三言兩語告訴他們“庫”並不能完成所有的事是一件很難的事。

“以禪悟禪”意欲傳達這樣一種意思。

你通過一段的時間學習掌握了javascript的基礎,然後背下了很多的JQ式類庫的API,沉浸在日復一日的業務邏輯開發中,直到幾年過去才會發現和曾經的自己並沒有什麼區別,除了掌握一些奇淫巧技以外只剩下每天的抱怨,甚至認為javascript也不過如此。

這時候你開始注意到java,oc等等其他的技術,但是學起來發現javascript語言帶來的積累並沒有想象中的多,使用其他語言編寫程式碼時也不知如何下手,當然如果你足夠努力也可以用它們去編寫一些業務程式碼,但時間長久之後依舊讓你感到厭煩——在日復一日的修煉中很多人只顧著寫“禪”而忘記去悟“禪”——沒有思索開發模式和設計思想是真正的問題所在。

在對javascript所有了解之後,AngularJs能夠快速的賦予你完全的不同的設計理念,我並不想一條條例舉它與你天天用著的JQ有什麼不同之處,因為Angular也不能解決所有的問題,而且還會帶來很多流行框架擁護者的反感。我的意思是當你真正的想要了解一門語言的優雅之處時,不妨試試各種不同思維模式的框架而不僅僅侷限於用它,瞭解它的設計思想,閱讀原始碼,學習別人的設計模式等等。時間久了自然會扔掉手中的劍,趨於無劍勝有劍。

5278ae3f33aef-e1439571203713

我也認識幾個非常反感框架和庫之類的朋友,他們和我說只有學習原生的語言才有可能真正的理解它,到時候就能自己寫框架了,何必去花時間學這些更新迭代的框架。聽起來好像沒錯(學習原生真的很重要),但到今天為止我還沒有見他們掏出什麼框架出來,而且我也不相信他們可以寫出優良的框架或是封裝工具庫之類的東西。有時候就是這樣,你花時間勤奮苦學十幾年年師門劍法,結果下山遇到令狐沖被一劍刺傷,你一邊想為什麼一邊爬起來的時候就聽見他說:“我也沒學什麼劍法啊,怎麼這麼厲害….”。

我的本意就是這樣,我並不想安利AngularJs,也不想告訴別人思維模式啊設計思想啊有多重要,因為很多人都在忙著背劍譜,根本沒空搭理我。我也不能用一篇文章就改變他們的思想,只是想借這個機會為真正的劍客介紹一套劍法,你要問我這套劍法是什麼,我也不知道。它很厲害,很優雅,很禪,但沒有劍招。

相關文章