1. 程式人生 > >現代化程式設計模式(1)-快

現代化程式設計模式(1)-快

感謝大家購買我的書

首先十分感謝大家購買我的書,在Tommy和Julisa購買我的書的時候,我承諾會開Sharing給大家。我開Sharing的目標就是讓像Tommy和Julisa這樣的基礎比較低的人都能夠學會程式設計。所以我就以Tommy和Julisa為目標制定sharing課程,不再按照書籍章節順序一章一章的講。

現代化程式設計模式核心 – 快

我這本書最值得學習的地方不是.NET,所以這節sharing我故意不用.NET來演示,而是採用JavaScript來演示。

我這本書最值得學習的地方也不是併發。

我這本書最值得學習的地方是“現代化的程式設計模式”。也就是如下標黃處

 

 

 

現代化程式設計模式核心只有一個字,就是 – 快!

為了顯示出快,我故意挑選了最慢的JavaScript來做這次sharing的演示語言!

現代化程式設計模式適用於所有現代化的程式語言,包括.NET/(C#和F#),Java,Python,JavaScript,Scala,Clojure,Swift。所以無論是我書中的C#和F#,還是我這次sharing用的JavaScript,都是通用的。最典型的就是本書第6章所講的Rx,它就有多個程式語言的版本:Java,JavaScript,.NET,Scala,Clojure,Swift。以下截圖取自Rx的官網 http://reactivex.io/

 

 

 

快主要來自兩個方面:

  • 程式執行速度快。
  • 程式設計速度快。

程式執行速度快

從大家的反饋來看,大家不太關注這點,所以我這次sharing先不講,以後再講。

程式設計速度快

所有技術的進步趨勢都是越來越容易,門檻越來越低,程式設計也同樣如此!

現在我回首十九年前(2001年)我用C語言寫出第一個程式的時候,當時的程式設計門檻是相當的高。與今天相比真是天壤之別。程式設計門檻越來越低,程式設計工具環境越來越完善,當時的Turbo C 2.0還是跑在Dos上的。這些基礎設施的完善決定了我們程式設計速度會越來越快。

在這次sharing我只講大家最容易理解的幾點:

  • 除錯診斷快
  • 不用動腦跟著感覺走導致行動快
  • 不用等待他人協作導致自身行動快

除錯診斷快

在傳統的程式設計模式中,我們是這樣程式設計的:

  1. 啪啪啪敲一堆鍵盤之後,程式寫完了。
  2. 跑起來試一下,oh! No! 出錯了!(耗時幾分到十幾分鍾)
  3. 這時候就加斷點除錯,先進一點的就不加斷點,而是看log來診斷。(至少耗時一分鐘起)

大家可以看到,第二步和第三步耗時都是以分鐘為單位的。如果unlucky,第三步可能要按小時甚至天為單位。為了加深大家的印象,sharing的時候我會視時間多少而現場演示一遍這個痛苦的傳統程式設計模式。

但是現代化的程式設計模式是以秒為單位的,比以分為單位的傳統程式設計模式快了一個數量級!!!

Sharing的時候我以JavaScript為程式語言,Visual Studio Code為程式設計工具,框架選karma + jasmine + AngularJS(我故意沒選最近的Angular而是選AngularJS,也是為了證明現代化程式設計模式是通用的)來演示現代化程式設計模式是如何以秒為單位進行除錯診斷的。

現代化程式設計模式以秒為單位進行除錯診斷的要點在於:

  1. 每Save一次就會把所有BDD Test cases在一兩秒內跑完!
  2. 基於上一點,也就是說,與傳統的程式設計模式相比,我馬上就能知道結果,而不是要等幾分鐘。
  3. 基於上一點,就可以每改一點程式碼,就馬上Save,同時就馬上知道結果。如果此時發現BDD Test Case變紅了,馬上就知道剛才改的哪一處程式碼有錯誤。馬上就能知道原因,馬上就能夠Fix!這裡的每改一點程式碼可以理解成:每改一行程式碼,每改一個字元,等等。
  4. 因為每次修改程式碼的粒度是如此之小,小到每一行和每一個字元,可謂:一步一個腳印。並且每次改動都能保證程式是能BDD Test Case跑通過的,自然也就不需要加斷點除錯和看log來診斷了。
  5. 然而人總是會犯錯的,程式出錯時,現代化程式設計模式不需要通過加斷點除錯和看log診斷這種這麼古老的方式,而是通過不斷的加BDD Test Case和縮小Scope來定位問題發生的地方以及去解決。

這部分實操內容也是這次Sharing的大頭。

不用動腦跟著感覺走導致行動快

傳統的程式設計模式需要程式設計師去動腦,去思考程式程式碼的流程,所以需要去if/else/switch/for/foreach等等。然而動腦是很容易累的,同時又是很耗時間的,所以傳統的程式設計模式自然是快不起來的!

“動腦是不可能動腦的啦,做生意又不會,只能跟著感覺走寫寫程式碼才能生活這樣子”

竊-格瓦拉

現代化程式設計模式改變了思路,不再去思考程式程式碼的流程:

 

傳統的程式設計模式

現代化程式設計模式

程式設計師所要做的

需要動腦思考如何做,需要明確的指出每一步該怎麼做。

只需要告訴計算機你的目標即可!

相關程式設計語句和庫

if/else/switch/for/foreach

LINQ, Promises (不應該再出現if/else/switch/for/foreach)

專業術語

指令式程式設計

宣告式程式設計

 

 

 

補充多一句:宣告式程式語言通常用作解決人工智慧和約束滿足問題。哈哈,看到這裡大家都懂的啦。

從上面的表格對比中可以看出,“只需要告訴計算機你的目標”的現代化程式設計模式明顯就比“還需要明確的指出每一步該怎麼做。”的傳統程式設計模式節省腦子很多!!!

大家可以看看 https://baike.baidu.com/item/%E5%A3%B0%E6%98%8E%E5%BC%8F%E7%BC%96%E7%A8%8B/9939512 來預習一下

 

 

 

不用等待他人協作導致自身行動快

自從進入移動網際網路時代之後,因為客戶端裝置的多樣化,前後端分離已經成了大趨勢。同時也帶來了一個大問題:前後端程式設計師協作的問題!

接著前面“除錯診斷快”一節中所share的內容,傳統的程式設計模式對前後端程式設計師聯調的依賴性比較高。而現代化程式設計模式因為可以通過mock的方式來模擬絕大部分後端的響應,前端程式設計師不再需要等待後端程式設計師的工作了,從而節約了這部分時間,導致自身在專案進度中更快更有保障。

在這次sharing中我所使用的Karma(BDD框架)和Jasmine(包含了httpbackend mock庫的unit testing框架)在其他程式語言中都有對應的框架和庫,再次體現了現代化程式設計模式是在各種程式語言中是通用的!!!

總結和動手口訣

在這次sharing之前,我請了兩位老夥計參觀了一下,都得到了好評,希望參加的有經驗的程式設計師也同樣會一聲驚歎!

當然,非程式設計師還是不可能只通過這一次sharing就馬上學會程式設計的,所以對於你們來說,這次sharing的目的應該是:你能夠識別和分辨出哪些才是程式設計里正確的道路,從而找到先進的程式設計資料和避免誤讀落後的程式設計資料。關於這點,我總結了口訣如下:

  1. 快是王道!
    凡是要一分鐘以上才能看到程式設計執行結果的都是落後的程式設計模式,現代化模式是一兩秒就能看到執行結果的。凡是要通過debug和看log這麼耗時的行為,我們都要思考是否通過BDD來減少時間。
  2. 節省腦力是王道!
    現代化程式設計模式已經可以實現了只需要告訴計算機你的目標即可!如果還需要費腦子去想if/else/switch/for/foreach。那你就落後了。
  3. 能夠獨立完成任務,不依賴別人是王道!
    Mock+BDD已經可以讓你不需要過多等待和依賴其他程式設計師的工作了。

大家下週見!

風險提示:

我的blog文章和我所翻譯和所寫的書籍不一樣:

    • 沒有像書籍一樣經過三審三校。所以不像書籍一樣嚴謹和全面。
    • 都有當時特定的閱讀物件,然而每篇blog的閱讀物件都不一樣,這點和書籍十分不一樣。所以如果你讀起來覺得怪怪的,那很有可能是你與該篇blog閱讀物件差異很大。
    • 所有文章全部不構成任何投資建議。如因採納這些文章而進行投資所造成的虧損,我不負任何責任。