现代化编程模式(1)-快
- 2020 年 6 月 23 日
- 筆記
- .NET并发编程实战, Concurrency in .NET, 现代化编程模式
感谢大家购买我的书
首先十分感谢大家购买我的书,在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我只讲大家最容易理解的几点:
- 调试诊断快
- 不用动脑跟着感觉走导致行动快
- 不用等待他人协作导致自身行动快
调试诊断快
在传统的编程模式中,我们是这样编程的:
- 啪啪啪敲一堆键盘之后,程序写完了。
- 跑起来试一下,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, 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的目的应该是:你能够识别和分辨出哪些才是编程里正确的道路,从而找到先进的编程资料和避免误读落后的编程资料。关于这点,我总结了口诀如下:
- 快是王道!
凡是要一分钟以上才能看到编程运行结果的都是落后的编程模式,现代化模式是一两秒就能看到运行结果的。凡是要通过debug和看log这么耗时的行为,我们都要思考是否通过BDD来减少时间。 - 节省脑力是王道!
现代化编程模式已经可以实现了只需要告诉计算机你的目标即可!如果还需要费脑子去想if/else/switch/for/foreach。那你就落后了。 - 能够独立完成任务,不依赖别人是王道!
Mock+BDD已经可以让你不需要过多等待和依赖其他程序员的工作了。
大家下周见!
风险提示:
我的blog文章和我所翻译和所写的书籍不一样:
- 没有像书籍一样经过三审三校。所以不像书籍一样严谨和全面。
- 都有当时特定的阅读对象,然而每篇blog的阅读对象都不一样,这点和书籍十分不一样。所以如果你读起来觉得怪怪的,那很有可能是你与该篇blog阅读对象差异很大。
- 所有文章全部不构成任何投资建议。如因采纳这些文章而进行投资所造成的亏损,我不负任何责任。