`
wangjie2013
  • 浏览: 169167 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

 
阅读更多

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

转自:http://www.nowamagic.net/librarys/veda/detail/2497

 

 

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

 

我们绝大多数程序员都是用命令式编程,因为学校教的编程就是命令式的,什么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(锯子),函数式编程(锯),那么对某些树效率就会高很多。

 

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

分享到:
评论

相关推荐

    python核心编程(中文第二版)

    <br>对于这本书还有一点我觉得很欣慰,它不但介绍了OO思想,也很好的对函数式编程方法进行了普及,把Python语言的特点进行了很全面的介绍。对于想了解函数式编程的人,起到了很好的入门效果。而且本人也正在尝试...

    Scala实用指南-高清带目录

    感谢你选择本书来学习和练习这门编程语言,你将感受到在一种编程语言中融合面向对象和函数式编程这两种编程范式所带来的巨大优势。 Java 生态系统是目前用于开发和部署企业级应用最强大的平台之一。Java 平台几乎...

    一个月挑战c++ 电子书

    理,C++语言是由C语言发展而来的一种新的支持面向对象的语言,从一开始接触它,它的魅力就深深的吸引着我,起初我和很多想要学习它的人一样,觉得它很难懂,当时为了看懂,想明白一些现在看来真的很容易的例子时,...

    《一个月挑战C++》 chm格式电子书

    理,C++语言是由C语言发展而来的一种新的支持面向对象的语言,从一开始接触它,它的魅力就深深的吸引着我,起初我和很多想要学习它的人一样,觉得它很难懂,当时为了看懂,想明白一些现在看来真的很容易的例子时,...

    Python基础教程全案.pptx

    Python 程序编程学习 Python基础教程 Python基础教程全案全文共349页,当前为第1页。 Python基础教程 Python是什么意思 Python是什么 Python是干什么的 Python能做什么 Python安装教程 Python开源框架 Python函数与...

    maria:面向初学者的ClojureScript编码环境

    –玛丽亚·蒙特梭利(Maria Montessori) 新手经常遇到的一个问题是Clojure必须立即学习所有内容:JVM,堆栈跟踪,新编辑器,函数式编程,以及and...。工具,堆栈跟踪和编程语言esoterica的组合? 如果我们摆脱他们...

    asp.net知识库

    VS2005 ASP.NET本地化学习笔记&感受 在自定义Server Control中捆绑JS文件 Step by Step 深度解析Asp.Net2.0中的Callback机制 使用 Web 标准生成 ASP.NET 2.0 Web 站点 ASP.NET 2.0基于SQLSERVER 2005的aspnetdb.mdf...

    自己动手写操作系统(含源代码).part2

    我虽然已经有多年不写代码了,但看这本书的时候,让我又重新感受到做程序员的乐趣:用代码建设属于自己的系统,让电脑听从自己的指令,对系统的每个部分都了如指掌。 黑客(hacker)实际是褒义词,维基百科的解释是...

    自己动手写操作系统(含源代码).part1

    我虽然已经有多年不写代码了,但看这本书的时候,让我又重新感受到做程序员的乐趣:用代码建设属于自己的系统,让电脑听从自己的指令,对系统的每个部分都了如指掌。 黑客(hacker)实际是褒义词,维基百科的解释是...

    软件工程知识点

    软件项目往往开始于任务立项,并需要以“软件任务立项报告”的形式针对项目的名称、性质、目标、意义和规模等作出回答,以此获得对准备着手开发的软件系统的最高层描述。 2.项目可行性分析 在软件任务立项报告被...

Global site tag (gtag.js) - Google Analytics