热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

为什么会有人喜欢函数式编程?

为什么80%的码农都做不了架构师?函数式编程能过去除变量也即状态将系统看成一个真正的(名符其实)的“计算”机。是一种在现行图灵模型上

为什么80%的码农都做不了架构师?>>>   hot3.png

函数式编程能过去除变量也即状态将系统看成一个真正的(名符其实)的“计算”机。是一种在现行图灵模型上进行邱奇式编程的方法。

图灵模型生机勃勃的原因是它更符合人类认知。但是大部分人显然并没有意识到这一点。从面向过程到面向对象的转向就是证据。面向过程在本质上与面向函数其实一样,它也是一种希望在状态机(图灵机)上实现计算式(邱奇式)编程的方法。单纯的计算语义并不符合真实“世界”的情况,所以它在问题域相对比较简单的情况下还是可行的。因为在这种情况下的语义转换还不是太复杂。一旦问题域本身也变得比较复杂时,它的缺点才开始暴露出来。因为本身已经很复杂的语义转换,再加上复杂的问题域使用这种转换几乎不可能进行。

这可能正是面向对象最终兴起的原因。但是等到人们真正进入面向对象的门槛,才发现如前文所分析的那种结果:面向对象要求很高的编程技巧!除了线程安全以外,更主要的是它还要求很强的“状态管理”能力(很奇怪的是,状态管理竟然从来没有成为软件开发中的一个研究课题,甚至是主要话题------暂时还是先把它列入以后的研究课题吧)。而将系统稳定性指望在程序员身上显然不是一件靠谱的事情。这正是(至少是某些FP者所宣称的那样)某些人最终从面向对象或面向过程转向FP的原因。

因为FP没有状态,只有计算。

而单纯地分析计算模型的能力是没有意义的。因为现实中肯定存在计算型的应用也存在非计算型的应用。至于究竟是后者占了大多数还是前者占了大多数我们并不知道。只有真正的技术采用者自己才知道(也有些不知道的)自己的应用究竟是什么类型的。

这里的计算指的是单纯地以输入输出为工作模式的系统模型。这种模型的问题在对面向过程的分析中已经讨论过。所以它与面向过程拥有同样的问题:在倒洗脚水时把孩子一起倒掉了。不想要状态,却把“对象”也一起倒掉,与不想要洗脚水,却连孩子也一起倒掉是一个道理。

当然,如果洗脚水里面本来就没有孩子的话那就另当别论。但是无论如何,在“倒”以前最好还是看一下会比较好。

 


转:https://my.oschina.net/digerl/blog/34305



推荐阅读
  • 本文介绍了基于Java的在线办公工作流系统的毕业设计方案,涵盖了MyBatis框架的应用、源代码分析、调试与部署流程、数据库设计以及相关论文撰写指导。 ... [详细]
  • 深入解析 Zend Guard 4 功能与配置
    本文旨在通过图文并茂的方式详细介绍 Zend Guard 4 的核心功能及其配置方法,特别适合英文阅读能力有限的技术人员。文中不仅提供了详细的步骤说明,还附带了实际操作中的注意事项,帮助读者更好地理解和应用这一工具。 ... [详细]
  • 重新审视Kubernetes的必要性
    近期,我注意到不少人误以为我是Kubernetes的推广者。实际上,我只是分享了一些适合用Kubernetes解决的案例。本文旨在探讨Kubernetes的适用场景,并提供一些替代方案。 ... [详细]
  • 酷家乐 Serverless FaaS 产品实践探索
    本文探讨了酷家乐在 Serverless FaaS 领域的实践与经验,重点介绍了 FaaS 平台的构建、业务收益及未来发展方向。 ... [详细]
  • Golang与微服务架构:构建高效微服务
    本文探讨了Golang在微服务架构中的应用,包括Golang的基本概念、微服务开发的优势、常用开发工具以及具体实践案例。 ... [详细]
  • 配置PicGo与Gitee结合Typora打造高效写作环境
    本文详细介绍了如何通过PicGo和Gitee搭建个人图床,并结合Typora实现高效的文章撰写。包括创建图床项目、生成访问令牌、安装配置PicGo和Typora等步骤。 ... [详细]
  • 本文介绍了如何使用Workman框架构建一个功能全面的即时通讯系统,该系统不仅支持一对一聊天、群组聊天,还集成了视频会议和实时音视频通话功能,同时提供了红包发送等附加功能。 ... [详细]
  • 构建高性能Feed流系统的设计指南
    随着移动互联网的发展,Feed流系统成为了众多社交应用的核心组成部分。本文将深入探讨如何设计一个高效、稳定的Feed流系统,涵盖从基础架构到高级特性的各个方面。 ... [详细]
  • 本文详细解析了Java中流的概念,特别是OutputStream和InputStream的区别,并通过实际案例介绍了如何实现Java对象的序列化。文章不仅解释了流的基本概念,还探讨了序列化的重要性和具体实现步骤。 ... [详细]
  • 深入解析轻量级数据库 SQL Server Express LocalDB
    本文详细介绍了 SQL Server Express LocalDB,这是一种轻量级的本地 T-SQL 数据库解决方案,特别适合开发环境使用。文章还探讨了 LocalDB 与其他轻量级数据库的对比,并提供了安装和连接 LocalDB 的步骤。 ... [详细]
  • 优雅地记录API调用时长
    本文旨在探讨如何高效且优雅地记录API接口的调用时长,通过实际案例和代码示例,帮助开发者理解并实施这一技术,提高系统的可观测性和调试效率。 ... [详细]
  • 本文详细记录了一位Java程序员在Lazada的面试经历,涵盖同步机制、JVM调优、Redis应用、线程池配置、Spring框架特性等多个技术点,以及高级面试中的设计问题和解决方案。 ... [详细]
  • 本文深入探讨了领域驱动设计(DDD)中的聚合概念及其在事件溯源架构中的应用。聚合是一组紧密相关的类,这些类作为一个整体运作,形成一个有明确边界的组织。只有通过聚合根才能与聚合内的对象进行交互。 ... [详细]
  • 本文档旨在提供C语言的基础知识概述,涵盖常量、变量、数据类型、控制结构及函数定义等内容。特别强调了常量的不同类型及其在程序中的应用,以及如何正确声明和使用函数。 ... [详细]
  • 本文提供了多个关键点来帮助开发者提高Java编程能力,包括代码规范、性能优化和最佳实践等方面,旨在指导读者成为更加优秀的Java程序员。 ... [详细]
author-avatar
爱心永溢真情永远
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有