现代化编程模式(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的官网 //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)

专业术语

命令式编程

声明式编程

 

 

 

补充多一句:声明式编程语言通常用作解决人工智能和约束满足问题。哈哈,看到这里大家都懂的啦。

从上面的表格对比中可以看出,“只需要告诉计算机你的目标”的现代化编程模式明显就比“还需要明确的指出每一步该怎么做。”的传统编程模式节省脑子很多!!!

大家可以看看 //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阅读对象差异很大。
    • 所有文章全部不构成任何投资建议。如因采纳这些文章而进行投资所造成的亏损,我不负任何责任。