感謝大家購買我的書
首先十分感謝大家購買我的書,在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我只講大家最容易理解的幾點:
- 調試診斷快
- 不用動腦跟着感覺走導致行動快
- 不用等待他人協作導致自身行動快
調試診斷快
在傳統的編程模式中,我們是這樣編程的:
- 啪啪啪敲一堆鍵盤之后,程序寫完了。
- 跑起來試一下,oh! No! 出錯了!(耗時幾分到十幾分鍾)
- 這時候就加斷點調試,先進一點的就不加斷點,而是看log來診斷。(至少耗時一分鍾起)
大家可以看到,第二步和第三步耗時都是以分鍾為單位的。如果unlucky,第三步可能要按小時甚至天為單位。為了加深大家的印象,sharing的時候我會視時間多少而現場演示一遍這個痛苦的傳統編程模式。
但是現代化的編程模式是以秒為單位的,比以分為單位的傳統編程模式快了一個數量級!!!
Sharing的時候我以JavaScript為編程語言,Visual Studio Code為編程工具,框架選karma + jasmine + AngularJS(我故意沒選最近的Angular而是選AngularJS,也是為了證明現代化編程模式是通用的)來演示現代化編程模式是如何以秒為單位進行調試診斷的。
現代化編程模式以秒為單位進行調試診斷的要點在於:
- 每Save一次就會把所有BDD Test cases在一兩秒內跑完!
- 基於上一點,也就是說,與傳統的編程模式相比,我馬上就能知道結果,而不是要等幾分鍾。
- 基於上一點,就可以每改一點代碼,就馬上Save,同時就馬上知道結果。如果此時發現BDD Test Case變紅了,馬上就知道剛才改的哪一處代碼有錯誤。馬上就能知道原因,馬上就能夠Fix!這里的每改一點代碼可以理解成:每改一行代碼,每改一個字符,等等。
- 因為每次修改代碼的粒度是如此之小,小到每一行和每一個字符,可謂:一步一個腳印。並且每次改動都能保證程序是能BDD Test Case跑通過的,自然也就不需要加斷點調試和看log來診斷了。
- 然而人總是會犯錯的,程序出錯時,現代化編程模式不需要通過加斷點調試和看log診斷這種這么古老的方式,而是通過不斷的加BDD Test Case和縮小Scope來定位問題發生的地方以及去解決。
這部分實操內容也是這次Sharing的大頭。
不用動腦跟着感覺走導致行動快
傳統的編程模式需要程序員去動腦,去思考程序代碼的流程,所以需要寫if/else/switch/for/foreach等語句。然而動腦是很容易累的,同時又是很耗時間的,所以傳統的編程模式自然是快不起來的!
“動腦是不可能動腦的啦,做生意又不會,只能跟着感覺走寫寫代碼才能生活這樣子”
竊-格瓦拉
現代化編程模式改變了思路,不再去思考程序代碼的流程:
|
傳統的編程模式 |
現代化編程模式 |
程序員所要做的 |
需要動腦思考如何做,需要明確的指出每一步該怎么做。 |
只需要告訴計算機你的目標即可! |
相關編程語句和庫 |
if/else/switch/for/foreach |
LINQ,Reactive Extensions, 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的目的應該是:你能夠識別和分辨出哪些才是編程里正確的道路,從而找到先進的編程資料和避免誤讀落后的編程資料。關於這點,我總結了口訣如下:
- 快是王道!
凡是要一分鍾以上才能看到編程運行結果的都是落后的編程模式,現代化模式是一兩秒就能看到運行結果的。凡是要通過debug和看log這么耗時的行為,我們都要思考是否通過BDD來減少時間。 - 節省腦力是王道!
現代化編程模式已經可以實現了只需要告訴計算機你的目標即可!如果還需要費腦子去想if/else/switch/for/foreach。那你就落后了。 - 能夠獨立完成任務,不依賴別人是王道!
Mock+BDD已經可以讓你不需要過多等待和依賴其他程序員的工作了。
大家下周sharing見!
風險提示:
我的blog文章和我所翻譯和所寫的書籍不一樣:
- 沒有像書籍一樣經過三審三校。所以不像書籍一樣嚴謹和全面。
- 都有當時特定的閱讀對象,然而每篇blog的閱讀對象都不一樣,這點和書籍十分不一樣。所以如果你讀起來覺得怪怪的,那很有可能是你與該篇blog閱讀對象差異很大。
- 所有文章全部不構成任何投資建議。如因采納這些文章而進行投資所造成的虧損,我不負任何責任。