从面向对象到函数式编程: 我们正在构建更成熟的关注点隔离生态系统

2016.11.17, 深圳, Ken Fang

在谈论关注点隔离生态系统前, 我想,首先需要谈谈 Procedure Programming, Functional Programming , Object Oriented Programming 。

Procedure Programming 就宛如是在写文章、小说;好写却很难维护;我想这是大家都很清楚的。

Object Oriented Programming 主要是要解决 Procedure Programming 上的问题;毫无结构可言、长篇大论的文章。所以,软件设计的思维;关注点隔离;也在这个时代诞生。

但是,要做到关注点隔离,不是个容易的事;除了要有工程实践、框架,更要有程序语言来共同达到。

因为,要真正做到关注点隔离应该是:不要有 Side effects

而过去我们在 C++,Java,虽然,有做到关注点以接口的方式隔离,并以框架做到将关注点动态的注入,但在实际的实现层 (代码层)上,却没法消除所谓的 Side effects。所以,在并行处理、多执行绪下,便要十分的小心,以避免犯错。

Functional Programming 主要便是要解决这个问题;Side effects 。而不是要推翻 Object Oriented Programming, 也不是在关注点隔离上有什么不同或创新的思维与做法。

Scala 在实现 Functional Programming 有相当好的抽象的做法;比 Object Oriented 要更简洁、抽象,更容易开发出 DSL。

所以,我想软件开发在关注点隔离上的生态系统是越来越成熟了;因为,有了 Functional Programming 与 Docker。

因为,关注点隔离生态系统的成熟,软件开发的效率与质量,将会获得指数型的增长。这才是我们真正该关注的。至于,抽象、艺术,这些教科书的玩意⋯真的很重要吗?

John Carmack 的名言:

"Sometimes, the elegant implementation is just a function. Not a method. Not a class. Not a framework. Just a function."

我想,Scala 最大的优点,也是它最大的缺点;Scala 使得我们可将函数式编程置于面向对象的框架下,使得我们的代码可经由面向对象而获得隔离,同时也经由函数式编程,使得我们的代码降低或甚至没有 Side effects 。所以,Scala 是同时在面向对象中,融入了函数式编程;也就是说, Scala 是将面向对象与函数式编程融入到了一个世界里去; Scala 不是将面向对象与函数式编程, 当成是两个不同的世界。

所以,Scala 很难入手的主要原因便是:要是只用面向对象的思维或著是只用函数式编程的思维,便没法学会 Scala; 而是要同时运用面向对象与函数式编程的思维才行。

这就是我说的,Scala 最大的优点,也是它最大的缺点;但,真正理解了以后,学习起来便会非常的有趣。

我想,这世界本来就没必要去区分所谓的,用了函数式编程,便需舍弃面向对象。我认同 Scala , 喜欢 Scala, 主要的原因是:它完美的整合了面向对象与函数式编程。而这样完美的整合,使得我们可构建ㄧ更简洁,更纯净的世界;我想,这才是我们真正所想拥有的。

當然,也有許多人不認同⋯所以,就有了 GO⋯

GO; 好学, 开发出的代码也易读、易懂。所以,也比 Scala 易维护⋯但,这种事,就如同萝卜、青菜各有所爱⋯还真不知道怎么说?

总之,深入去了解每个程序语言背后的思维、故事,将每个程序语言都当成是个艺术品欣赏,会比较有趣的。

函数式编程从在 LISP 的时代,到现在,就从来没有像面向对象ㄧ样的,有所谓的设计模型这样的思维。

如同我先前所说的,函数式编程,不是在软件架构的关注点隔离上,有什么创新的做法。也就是说,在软件架构上的设计,还是可用面向对象的方式进行关注点隔离,但,在实现层便可用函数式编程,进行再更进一步的隔离,而达到降低或甚至消除 Side effects 的目的。

软件架构的层次:经由面向对象隔离。

实现层 (代码层)的层次:经由函数式编程隔离。

"当我们能找得到个方法;将产品从需求分析、架构设计、设计、开发、测试,都能做得到将所谓的 Side effects 降到最低,甚至是没有的时候,那许多产品开发上关于效率与质量的问题,都将能获得解决。

到时就只剩下是目前还没法完全去解决的问题;网络脆弱的问题与安全性的问题。

但在解决产品开发效率与质量的问题上,我们正在ㄧ步一步的找出解决的方案⋯"

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏一个会写诗的程序员的博客

附录B 编程的本质附录B 编程的本质编程的本质N小结编程简史名词纪要参考资料

尼古拉斯·沃斯(Niklaus Wirth,1934年2月15日—),生於于瑞士温特图尔,是瑞士计算机科学家。Pascal语言之父。

10530
来自专栏程序人生

[技术] 谈谈Python

昨天的文章收获了不少有价值的回复。不少人发现了一个大bug,那就是「上帝的归上帝,撒旦的归撒旦」。囧死我了。脑手不同步这病怎么治啊~以后我写完文章争取好好复查一...

45650
来自专栏函数式编程语言及工具

Scalaz(0) - 写在前面

  面向对象编程范畴(OOP)从80年代C++到90年代java的兴起已经经历了几十年的高潮,是不是已经发展到了尽头,该是函数式编程(FP)开始兴旺发达的时候了...

18860
来自专栏Play & Scala 技术分享

为什么要创建开放源码的PlayScala社区?

29650
来自专栏平凡文摘

如果电脑技术最初是中国人发明的,那现在编程是不是就是中文的?

20550
来自专栏程序人生 阅读快乐

Java编程思想-第4版

本书赢得了全球程序员的广泛赞誉,即使是最晦涩的概念,在Bruce Eckel的文字亲和力和小而直接的编程示例面前也会化解于无形。从Java的基础语法到最高级特性...

9120
来自专栏知晓程序

还在找好用的计算器?这 5 款小程序,能满足你 99% 的需求

今天,知晓程序(微信号 zxcx0101)就为你推荐 5 款简单、实用、有意思的「计算器」小程序,它们不仅功能强大,而且无需安装,随用随开。

12010
来自专栏vue学习

前言

underscore.js一直听说都是一个很经典的库,很适合新手入门,所以历经小半年断断续续的学习,总算是把它敲完了。然后又过了一段时间到了现在,回过头来,打算...

10910
来自专栏武军超python专栏

2018年8月26日python常识和各大语言发展史

今天遇到的新单词: precision  n精确度 generator n发电机,生产者,生成器

13940
来自专栏技术博客

设计模式原则(单一、开放封闭、里氏代换、依赖倒转、迪米特法则五大原则)

        如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力,当变化发生时,设计会遭受到意想不...

12620

扫码关注云+社区

领取腾讯云代金券