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

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

相关文章

来自专栏牛客网

热乎乎的VIVO一面二面面经;JAVA开发

【每日一语】现在不是去想缺少什么的时候,该想一想凭现有的东西你能做什么。——海明威《老人与海》

633
来自专栏牛客网

三七互娱秋招提前批 java服务端

    我是在6月5号参加了三七互娱的秋招的web后端线上笔试,第二天又参加了java服务端的线上笔试,之后去三七大楼参加open day,然后面试时一面,二面...

941
来自专栏Java学习网

程序员最容易犯的几个技术上的错误

程序员最容易犯的几个技术上的错误 为钱而编程   如果你对编程不感兴趣,你的代码一定会写的很烂。结果不仅仅你的事业没有任何前途,你的团队也会因此而痛苦不堪。  ...

2228
来自专栏包子铺里聊IT

跟花和尚学系统设计:System Design 101

谁是花和尚? 花和尚是一个定居西雅图的程序员,喜欢研究和总结System Design, 并传授给大家。花和尚在MITBBS一篇 "我的SystemDesign...

3836
来自专栏Java职业技术分享

普通程序员如何让面试官无以言表并高薪聘请?

相信不少的程序员都有过类似的困惑:如果我没有大型的项目经历,也不能靠技术征服面试官,那我要怎么才能给面试官留下一个好印象呢?

160
来自专栏牛客网

阿里凉经 简历+1面+2面

Java final volatile 关键字 volatile指令重排序 举个重排序例子

731
来自专栏java工会

学java就两个问题

1648
来自专栏牛客网

阿里和腾讯面经c++(已过)

春招很忙,就面了两个公司,碰巧都过了,算回报牛客.我本人不喜欢什么小细节都讲,碰到不熟悉的请自己查资料(因为有的东西每个人理解不一样) 阿里6轮面试(已签) 1...

88912
来自专栏牛客网

快手-数据岗面经

2590
来自专栏斑斓

【第三格】如何实现领域驱动设计

从Eric Evans写下经典名著Domain-Driven Design: Tackling Complexity in the Heart of Softw...

3665

扫码关注云+社区