伴隨著AngularJS的壓力,寫代碼常常是吃力的

jopen 10年前發布 | 9K 次閱讀 angularjs

伴隨著AngularJS的壓力,寫代碼常常是吃力的

        英文原文:coding can be punishing at times...with a stress on AngularJS

        我這里提到的觀點是程序員相當熟悉的。我來自 90 年代早期的C語言世界。有很少的可用工具,我不得不為每個小東西寫一個鏈接列表。我樂此不疲,毫無怨言。現在看起來蠢多了。但是,這就是世界本來的樣子,你不得不一點一點地寫代碼。

        如今編程情景與往日大大不同了。因為開源、StackOverflow,當然還有 Google,產生了很多協作。每個問題都被人問過了,還有一堆回答。對于程序員這算作快樂的時光,可用的框架和工具的數量十分驚人。

        我上手了 Servlets、JSP、JQuery、JS、AngularJS 等等,到現在,我在 AngularJS 上花了一年多的時間。我有一分為二的觀點,不是關于它能解決什么問題,而是對于來自各個社區的程序員所能獲得的信息。有太多不同的聲音和不同的方式在解釋 著同樣的問題。我擔心我在這里寫的觀點也能引發討論。與K&R C【注1】做個比較,一本也是唯一一本權威的、精確的、清晰的解釋C語言的書。當然,還有其它書。但是,解決了編程結構的、非常詳細的語法和語義的語言可 以在一本小書里完美地表達出來。如何根據它去解決問題,在很多帶有實例的其它書里做了解釋。就是這樣。

        現在,有了網絡,每個人都成為了作家。每個問題 Google 都能拋出一百多萬個鏈接。那么你究竟怎么才能就某個問題給出一個簡單、清晰的答案?答案是非常簡單的,只是迷失了,我的意思是,迷失在了信息的海洋里。這 是你為民主付出的代價。數百萬的聲音,無數的東東。看看,我并不同意我要說的觀點。

        到處都有 AngularJS 的代碼示例和 demo,如果你對 JavaScript 認識足夠多,可以理解 JavaScript 設計模式、控制反轉(Inversion of Control,縮寫為 IoC)、范圍階層(scope hierarchy),依賴注入【注2】、面向對象 JS 以及發布/訂閱通知【注3】等等,就好像能夠做得很好。然而,并沒有一樣東西來給你解釋其原理以及討論 AngularJS 如何引入這些方面的。擁有海量的 demo 和特定例子。O’Reilly 的 AngularJS 書根本沒有覆蓋到以一種簡單方式、讓所有人理解的基礎方面。這只是我曾經看過的唯一一本書。很多次,語法雜亂,難以理解。只有你花了 1 年時間才能弄明白。你也被一直混在一起的中括號、大括號和$符搞暈。膽小的肯定就躲了。

        由于存在很多已有的、解決問題的不同變體,在某人想解決頭疼的業務問題時,它放大了這種痛苦。語法令人悲催,如果你是新手,剛剛接觸的時候,能 夠帶來進度上的巨大延期。沒有來自 AngularJS 團隊或提供支持的其他人的視頻,這本應該通過簡單地閱讀語法來簡化生活的,卻徒增煩惱。

        還有這是關于測試的喋喋不休,測試所有地方減輕壓力是不錯。AngularJS 有來自于像 Yo、Grunt、Bower、Karma、Jasmine 等社區的穩定的工具支持。我后來才試用了一些工具。特別地,我發現就像使用 AngularJS 框架一樣,這些工具也缺乏解釋其原理以及與其它工具如何關聯的簡化文檔。

        舉個例子,Yo 是一個腳手架服務,用來生成 AngularJS 文件的模板,它與 Bower 交互來下載依賴項、用 Grunt 運行任務。用簡單的可視化圖表就可以解釋清楚,而不需要立即深入配置的、大量的文字或 demo 示例。

        毫無疑問,一旦你熟悉了,它們會簡化工作。但如我所言,對新手就不是這樣了,它們看到要嘗試的數量和初期花費的時間就敬而遠之了。

        我請求過這些工具的作者,讓他們用更為簡潔的英語、可視化的東東以及例子來提供更加簡單、更加基本的說明,而不僅僅只是絕對沒有解釋、反而期望讀者自己搞清楚的、demo 的代碼片段。

        為了明白什么是更好的解釋,我給出關于 AngularJS 作用域的鏈接。這更為基本、圖文并茂以及涵蓋了大量腳本。https://github.com/angular/angular.js/wiki/Understanding-Scopes

        如果你認為我是在抵制 AngularJS,那就錯了。我尊重團隊所付出的努力,尊重不計成本解決問題的社區,尊重他們解決糾纏在一起的 HTML/CSS/JS 來讓生活更美好的各種方式。我用了,并從中受益。唯有的抱怨就是理解它們(我這里說的理解,是指用簡單的方式搞清楚它們)所遇到的、剛開始的難度,新手能 夠編寫復雜行為的代碼,會碰到整個網絡協作中的術語和問題,讓人費解。

        這些新工具需要在文檔內容上有更大改善,這些工具是由在 StackOverflow 回答問題的聰明人編寫的,不要只是就為什么展望一個東東以及他們如何用每個人可以理解的方式解決問題張貼文檔。

        為了結束本文,我舉個例子,我花了一天才搞定某個問題的例子。我當時使用 Yo/Grunt 運行著關于 AngularJS 指令的 Karma 測試,我出錯的地方是,在 karma.conf.js,我把帶有 AngularJS 的腳本放在了我自己腳本的后面,結果沒有編譯我的指令,也就沒有生成 HTML,JQuery 也找不到。對于創造這些工具的人來說,這可能是一個簡單的、低級的錯誤。還有,這可能與 AngularJS 或 Karma 沒有關系,可能這是 JS 里依賴載入的問題。然而,既然我對這些都不熟,我只好搜尋了每個地方,從語法到配置文件、到 StackOverflow、Google,不知疲倦地嘗試了很多不同的選項,直到最后,關于指令沒有被生成的 HMTL 錯誤才被我發現。

        天哪!生活應該比這更美好的。

  • 注1:K&R 是C語言的開發者 Brian W.Kernighan,Dennis M.Ritchie (人名),C是指他們的著作《C程序設計語言》,被譽為C語言”圣經”,所有C程序開發人員都必看的書,但書內容過于簡潔,不適用于初學者。
  • 注2:控制反轉(Inversion of Control,縮寫為 IoC),是面向對象編程中的一種設計原則,可以用來減低計算機代碼之間的耦合度。其中最常見的方式叫做依賴注入(Dependency Injection,簡稱 DI),還有一種方式叫“依賴查找”(Dependency Lookup)。http://zh.wikipedia.org/wiki/%E6%8E%A7%E5%88%B6%E5%8F%8D%E8%BD%AC
  • 注3:發布/訂閱(Publish/subscribe 或 pub/sub)是一種消息范式,消息的發送者(發布者)不是計劃發送其消息給特定的接收者(訂閱者)。http://zh.wikipedia.org/wiki/%E5%8F%91%E5%B8%83/%E8%AE%A2%E9%98%85
                    <span id="shareA4" class="fl">   

                        </span>
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!