• 现代化编程模式(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,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的目的应该是:你能够识别和分辨出哪些才是编程里正确的道路,从而找到先进的编程资料和避免误读落后的编程资料。关于这点,我总结了口诀如下:

    1. 快是王道!
      凡是要一分钟以上才能看到编程运行结果的都是落后的编程模式,现代化模式是一两秒就能看到运行结果的。凡是要通过debug和看log这么耗时的行为,我们都要思考是否通过BDD来减少时间。
    2. 节省脑力是王道!
      现代化编程模式已经可以实现了只需要告诉计算机你的目标即可!如果还需要费脑子去想if/else/switch/for/foreach。那你就落后了。
    3. 能够独立完成任务,不依赖别人是王道!
      Mock+BDD已经可以让你不需要过多等待和依赖其他程序员的工作了。

    大家下周sharing见!

    风险提示:

    我的blog文章和我所翻译和所写的书籍不一样:

      • 没有像书籍一样经过三审三校。所以不像书籍一样严谨和全面。
      • 都有当时特定的阅读对象,然而每篇blog的阅读对象都不一样,这点和书籍十分不一样。所以如果你读起来觉得怪怪的,那很有可能是你与该篇blog阅读对象差异很大。
      • 所有文章全部不构成任何投资建议。如因采纳这些文章而进行投资所造成的亏损,我不负任何责任。
  • 相关阅读:
    WSS页面定制系列(1)如何启用表单页面的编辑模式
    [转载]Customizing the Context Menu of Document Library Items
    MOSS publishing功能:创建页面到子文件夹
    CodeArt.SharePoint.CamlQuery_0.9发布(源码)
    WSS页面定制系列(2)定制单个列表的表单页面
    WSS页面定制系列(3)重写表单的保存逻辑
    MOSS字段编辑权限控制方案(3)重写表单字段呈现逻辑
    WSS(MOSS)如何修改Rich文本编辑器的宽度
    web录音的实现
    WSS 扩展文件夹的属性如何给文件夹添加扩展字段
  • 原文地址:https://www.cnblogs.com/adalovelacer/p/modern-program-pattern.html
Copyright © 2020-2023  润新知