热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开始学习函数式编程后对编程的一些新感受

最近开始学习函数式编程,打算深入进去,掌握函数式编程的思路。具体学习足迹可以看看现代魔法学院的《编程范式篇》。以后关于技术类的东西,大部分都会整理成专题,章节,发布在学院中,而博客则回归更为轻松随意的状态。我们绝大多数程序员都是用命令式编程,因为学校教的编程就是命令式的,什么C、Java等等(当然他们也可以用函数式编程

最近开始学习函数式编程,打算深入进去,掌握函数式编程的思路。具体学习足迹可以看看 现代魔法学院的《编程范式篇》。以后关于技术类的东西,大部分都会整理成专题,章节,发布在学院中,而博客则回归更为轻松随意的状态。

我们绝大多数程序员都是用命令式编程,因为学校教的编程就是命令式的,什么C、Java等等(当然他们也可以用函数式编程)。函数式编程和命令式编程不是一个相对应层次的概念。理论上,函数式编程的理论基础是Lambda演算,指令式编程基于图灵机。从程序员角度来看,函数式编程不支持赋值操作,一个函数的执行只会返回一个值,不会有任何副作用,所以看上去,一个函数就是一个大的表达式。

这里不再深入去谈函数式编程,更多可以看看前面提到的那个专题。

1. 编程到底是什么?

编程(程序设计)实际上是一个对现实世界中的事物抽象,并由计算机语言实现的过程。核心的步骤就包含三个:理解、抽象、实现。

不同的理解思路,会导致完全不同的抽象结果;不同的抽象结果就会提供各不同的理解。最后根据理解和抽象,由特定的语言完成时间,但其结果要想完全理解还需要前两个步骤支撑。

有点像建筑中的“房子是什么,房地产设计,盖房子”。

2. 编程的发展过程到底有哪些?

程序设计的历史,按照我的理解大致的几个主要阶段:

  1. 计算机程序设计历史前阶段;主要是纸带、存储器等原始方式。
  2. 计算机语言初级阶段;主要以汇编语言为主,面向的主要内容是“数据存储+指令集”;
  3. 计算机广泛工业语言设计阶段;主要以C语言为主的大面积应用,此时由C语言更面向人易懂的方向发展。并且操作系统,编译器,数据库软件开始发展;面向的主要内容是“程序=算法+数据结构”。此时在计算机软件设计学科中主要运用的还是“面向过程”的设计思路。
  4. 计算机语言高级发展阶段。主要是一些面向对象语言的出现。主要体现在C++语言的出现。主要面向的内容是“应用=对象+通讯”的方式。甚至很多语言开始“一切皆对象”的设计理念。面向对象的语言主要在该阶段得到了大力提倡。因为C++的复杂,Java的出现降低了复杂度,又充分利用了面向对象的特点。让面向对象的设计更是得到了大面积的推广和应用,尤其在企业级应用开发中。
  5. 各类语言频繁出现的繁荣各阶段。各类变成设计语言如面向WEB变成,函数式语言,面向并发的语言,终端设备的编程语言等等;这个阶段不好做评论。

3. 编程的过程解决的问题有哪些?

  1. 汇编语言:解决CPU指令集和存储系统的交互问题,提供“可编程”的能力
  2. 面向过称语言:提供小面积的问题解决思路,一个系统的代码如果不多,通过面向过程思路将系统划分为多个过程(多个函数+各类数据结构)进行系统设计。提供了初级规模的系统设计问题。
  3. 面向对象语言:当面向过程面对复杂的系统,复杂的世界时。如何“更好的理解和抽象”编程问题,变得更加重要。通过面向对象语言的特点“封装、继承、多态”,让程序分析和设计能容纳更大的编程范围和系统规模,也让程序设计人员更好的理解和抽象提供了非常重要的作用。
  4. 面向**语言:面向WEB,面向高并发,面向切面,函数式语言,终端开发等是在现有程序设计语言基础上不断改进,并解决特定领域特定问题的发展衍生;

4. 面向对象编程思想的重要性体现是什么?

大家都知道,面向对象的三大特性“封装、继承、多态”,但个人认为其中的“封装”是面向对象的最核心的特点。

究其原因,主要是“封装”让一个人可以理解的系统范围可以变得更广,可以让我们“更好的理解和抽象”我们所看到的世界。之前一个老师提到面向对象时,提到的是“间接”,我想间接也可以认为是“封装”的升级版。面向对象的思想带来“可维护性,可扩展性,可理解性”等让我们能在效率和水平上更加长进的东西。

5.?编程,就是控制复杂性

且慢!

面向对象虽然有如此多好处,C++与Java都因此得以广泛地使用。但是,一味地追求可维护性,却忽略了一点:编程,就是控制复杂性。还记得编程发展史初级阶段那会的“数据存储+指令集”,“程序=算法+数据结构”么?函数式编程语言,能够让你的编程更纯粹,更加直接地面向问题的本质。(《函数式编程有哪些优点?》

6. 总结一句话

无论是面向过程、面向对象、还是函数式编程,都是编程范式,即编程的方法。而具体用什么编程语言则是工具。

我们编程的目的就是解决具体问题,而不是说比较工具与方法的优劣。比如你要砍一棵树,用斧子横砍能够砍倒,用锯子斜锯也能锯断,而非要比较斧子和锯子的优劣而意义不大,横着砍和斜着锯也没多大关系。我们的目的就是要木材,这就是编程最本质目的。

当然,我还是推荐多掌握几个工具,多学会几个方法。比如你现在只会PHP(斧子),命令式编程(砍),那么你见到什么树都只能用斧子砍。假如你再懂Python(锯子),函数式编程(锯),那么对某些树效率就会高很多。

不严谨的一个比喻,仅作参考。

本文地址:http://www.nowamagic.net/librarys/veda/detail/2497,欢迎访问原出处。


推荐阅读
  • 远程过程调用(RPC)是一种允许客户端通过网络请求服务器执行特定功能的技术。它简化了分布式系统的交互,使开发者可以像调用本地函数一样调用远程服务,并获得返回结果。本文将深入探讨RPC的工作原理、发展历程及其在现代技术中的应用。 ... [详细]
  • Python 内存管理机制详解
    本文深入探讨了Python的内存管理机制,涵盖了垃圾回收、引用计数和内存池机制。通过具体示例和专业解释,帮助读者理解Python如何高效地管理和释放内存资源。 ... [详细]
  • 本文档汇总了Python编程的基础与高级面试题目,涵盖语言特性、数据结构、算法以及Web开发等多个方面,旨在帮助开发者全面掌握Python核心知识。 ... [详细]
  • 编写了几个500行左右代码的程序,但基本上解决问题还是面向过程的思维,如何从问题中抽象出类,形成类的划分和设计,从而用面向对象的思维解决问题?有这方面的入门好书吗?最好是结合几个具体的案例分析的 ... [详细]
  • 本文介绍了数据库体系的基础知识,涵盖关系型数据库(如MySQL)和非关系型数据库(如MongoDB)的基本操作及高级功能。通过三个阶段的学习路径——基础、优化和部署,帮助读者全面掌握数据库的使用和管理。 ... [详细]
  • 二维几何变换矩阵解析
    本文详细介绍了二维平面上的三种常见几何变换:平移、缩放和旋转。通过引入齐次坐标系,使得这些变换可以通过统一的矩阵乘法实现,从而简化了计算过程。文中不仅提供了理论推导,还附有Python代码示例,帮助读者更好地理解这些概念。 ... [详细]
  • 本文详细介绍了福昕软件公司开发的Foxit PDF SDK ActiveX控件(版本5.20),并提供了关于其在64位Windows 7系统和Visual Studio 2013环境下的使用方法。该控件文件名为FoxitPDFSDKActiveX520_Std_x64.ocx,适用于集成PDF功能到应用程序中。 ... [详细]
  • Coursera ML 机器学习
    2019独角兽企业重金招聘Python工程师标准线性回归算法计算过程CostFunction梯度下降算法多变量回归![选择特征](https:static.oschina.n ... [详细]
  • Java 实现二维极点算法
    本文介绍了一种使用 Java 编程语言实现的二维极点算法。该算法用于从一组二维坐标中筛选出极点,适用于需要处理几何图形和空间数据的应用场景。文章不仅详细解释了算法的工作原理,还提供了完整的代码示例。 ... [详细]
  • 本文详细介绍了在XAMPP环境中如何修改Apache和MySQL的默认端口号,并确保WordPress能够正常访问。同时,提供了针对Go语言社区和Golang开发者的相关建议。 ... [详细]
  • 本文介绍如何利用栈数据结构在C++中判断字符串中的括号是否匹配。通过顺序栈和链栈两种方式实现,并详细解释了算法的核心思想和具体实现步骤。 ... [详细]
  • 本文详细介绍了如何检查和配置电脑上的PHP环境,包括位数、运行支持以及文件格式的打开方式。适合初学者了解PHP的基础知识和操作方法。 ... [详细]
  • 本文详细介绍了Java中实现异步调用的多种方式,包括线程创建、Future接口、CompletableFuture类以及Spring框架的@Async注解。通过代码示例和深入解析,帮助读者理解并掌握这些技术。 ... [详细]
  • 云屏系统基于嵌入式微系统msOS,旨在解决当前嵌入式彩屏GUI编程中硬件要求高、软件开发复杂、界面效果不佳等问题。该系统通过结合MCU和Android技术,利用Html5+JavaScript实现高效、易用的图形用户界面开发,使嵌入式开发人员能够专注于业务逻辑。 ... [详细]
  • 序列化与反序列化是数据处理中的重要技术,特别是在网络通信和数据存储中。它们允许将复杂的数据结构转换为可传输或存储的格式,再从这些格式恢复原始数据。本文探讨了序列化与反序列化的基本概念,以及它们在不同协议模型中的角色。 ... [详细]
author-avatar
冰忆ch
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有