咱们绝大多数程序员都是用命令式编程,由于学校教的编程就是命令式的,什么C、Java等等(固然他们也能够用函数式编程)。函数式编程和命令式编程不是一个相对应层次的概念。理论上,函数式编程的理论基础是Lambda演算,指令式编程基于图灵机。从程序员角度来看,函数式编程不支持赋值操做,一个函数的执行只会返回一个值,不会有任何反作用,因此看上去,一个函数就是一个大的表达式。程序员
这里再也不深刻去谈函数式编程,更多能够看看前面提到的那个专题。算法
编程(程序设计)其实是一个对现实世界中的事物抽象,并由计算机语言实现的过程。核心的步骤就包含三个:理解、抽象、实现。数据库
不一样的理解思路,会致使彻底不一样的抽象结果;不一样的抽象结果就会提供各不一样的理解。最后根据理解和抽象,由特定的语言完成时间,但其结果要想彻底理解还须要前两个步骤支撑。编程
有点像建筑中的“房子是什么,房地产设计,盖房子”。数据结构
程序设计的历史,按照个人理解大体的几个主要阶段:并发
计算机程序设计历史前阶段;主要是纸带、存储器等原始方式。编程语言
计算机语言初级阶段;主要以汇编语言为主,面向的主要内容是“数据存储+指令集”;函数式编程
计算机普遍工业语言设计阶段;主要以C语言为主的大面积应用,此时由C语言更面向人易懂的方向发展。而且操做系统,编译器,数据库软件开始发展;面向的主要内容是“程序=算法+数据结构”。此时在计算机软件设计学科中主要运用的仍是“面向过程”的设计思路。函数
计算机语言高级发展阶段。主要是一些面向对象语言的出现。主要体如今C++语言的出现。主要面向的内容是“应用=对象+通信”的方式。甚至不少语言开始“一切皆对象”的设计理念。面向对象的语言主要在该阶段获得了大力提倡。由于C++的复杂,Java的出现下降了复杂度,又充分利用了面向对象的特色。让面向对象的设计更是获得了大面积的推广和应用,尤为在企业级应用开发中。高并发
各种语言频繁出现的繁荣各阶段。各种变成设计语言如面向WEB变成,函数式语言,面向并发的语言,终端设备的编程语言等等;这个阶段很差作评论。
汇编语言:解决CPU指令集和存储系统的交互问题,提供“可编程”的能力
面向过称语言:提供小面积的问题解决思路,一个系统的代码若是很少,经过面向过程思路将系统划分为多个过程(多个函数+各种数据结构)进行系统设计。提供了初级规模的系统设计问题。
面向对象语言:当面向过程面对复杂的系统,复杂的世界时。如何“更好的理解和抽象”编程问题,变得更加剧要。经过面向对象语言的特色“封装、继承、多态”,让程序分析和设计能容纳更大的编程范围和系统规模,也让程序设计人员更好的理解和抽象提供了很是重要的做用。
面向**语言:面向WEB,面向高并发,面向切面,函数式语言,终端开发等是在现有程序设计语言基础上不断改进,并解决特定领域特定问题的发展衍生;
你们都知道,面向对象的三大特性“封装、继承、多态”,但我的认为其中的“封装”是面向对象的最核心的特色。
究其缘由,主要是“封装”让一我的能够理解的系统范围能够变得更广,可让咱们“更好的理解和抽象”咱们所看到的世界。以前一个老师提到面向对象时,提到的是“间接”,我想间接也能够认为是“封装”的升级版。面向对象的思想带来“可维护性,可扩展性,可理解性”等让咱们能在效率和水平上更加长进的东西。
且慢!
面向对象虽然有如此多好处,C++与Java都所以得以普遍地使用。可是,一味地追求可维护性,却忽略了一点:编程,就是控制复杂性。还记得编程发展史初级阶段那会的“数据存储+指令集”,“程序=算法+数据结构”么?函数式编程语言,可以让你的编程更纯粹,更加直接地面向问题的本质。(《函数式编程有哪些优势?》)
不管是面向过程、面向对象、仍是函数式编程,都是编程范式,即编程的方法。而具体用什么编程语言则是工具。
咱们编程的目的就是解决具体问题,而不是说比较工具与方法的优劣。好比你要砍一棵树,用斧子横砍可以砍倒,用锯子斜锯也能锯断,而非要比较斧子和锯子的优劣而意义不大,横着砍和斜着锯也没多大关系。咱们的目的就是要木材,这就是编程最本质目的。
固然,我仍是推荐多掌握几个工具,多学会几个方法。好比你如今只会PHP(斧子),命令式编程(砍),那么你见到什么树都只能用斧子砍。假如你再懂Python(锯子),函数式编程(锯),那么对某些树效率就会高不少。