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

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 条评论
登录 后参与评论

相关文章

来自专栏老九学堂

计算机编程领域最伟大的20个发明

小伙伴们这个咱们应该知道。 1 第一台计算机:“差分机”(1821年) “差分机”是1821年由英国政府委托科学家巴贝奇设计而成的,这台机器能提高乘法速度和改进...

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

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

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

673
来自专栏java一日一条

不拼颜值的编程世界你靠什么上位?

随着功能需求的逐步升级,编程语言的更新换代也变得越来越频繁,近年来编程语言的种类更是已经突破了600大关。在前浪不断被拍在沙滩上的编程语言世界里,斑斑却发现每一...

501
来自专栏CSDN技术头条

帮你提升 Python 的 27 种编程语言

【编者按】本文作者是 Python 的设计者之一 Nick Coghlan,总结了提升 Python 的 27 种编程语言,包括过程式编程、面向对象的数据模型、...

1837
来自专栏BestSDK

C++是程序界的“屠龙刀”,但是握刀的人经常用成“杀猪刀”

C++的初衷 1)早期C++许多的工作是对于C的强化和净化,并把完全兼容C作为强制性要求。C89、C99中许多的改进正是从C++中所引进。可见,Stroustr...

2784
来自专栏java一日一条

不拼颜值的编程世界你靠什么上位?

随着功能需求的逐步升级,编程语言的更新换代也变得越来越频繁,近年来编程语言的种类更是已经突破了600大关。在前浪不断被拍在沙滩上的编程语言世界里,斑斑却发现每一...

482
来自专栏杨建荣的学习笔记

从设计模式的设计原则感悟生活(r2笔记42天)

设计模式中的很多思想还是很有意思的,刚毕业的时候接触设计模式感觉有点高深,坐而论道,感觉还是有些虚,平时做的小练习还能自己捣鼓一番,自己使用一下设计模式,然后大...

3206
来自专栏哲学驱动设计

《Framework Design Guidelines 2nd Edition》推荐

前言     最近看了《FDG 2nd Edition》,也适当做了些笔记,在这里写这篇文章的目的主要有两个,一是对自己学习的一个记录、积累;另外,还可以用这...

17510
来自专栏java工会

一位10年Java工作经验的架构师聊Java和工作经验

时光飞逝,我事业中第一个十年已然结束了。在这十年里,让我收获了很多,跟大家分享一下我在 IT 职场方面的一些个人经验,不一定对每个人都实用,请大家仅作参考吧。

693
来自专栏ImportSource

DDD究竟是个啥?怎么落地?

领域驱动设计(Domain Driven Design,以下简称DDD)这个话题,经常会出现在各大技术圈。特别是微服务出现后,海内外的大佬们又把微服务和DDD放...

1203

扫码关注云+社区