开始学习函数式编程后对编程的一些新感受
转自:http://www.nowamagic.net/librarys/veda/detail/2497
最近开始学习函数式编程,打算深入进去,掌握函数式编程的思路。具体学习足迹可以看看 现代魔法学院的《编程范式篇》。以后关于技术类的东西,大部分都会整理成专题,章节,发布在学院中,而博客则回归更为轻松随意的状态。
我们绝大多数程序员都是用命令式编程,因为学校教的编程就是命令式的,什么C、Java等等(当然他们也可以用函数式编程)。函数式编程和命令式编程不是一个相对应层次的概念。理论上,函数式编程的理论基础是Lambda演算,指令式编程基于图灵机。从程序员角度来看,函数式编程不支持赋值操作,一个函数的执行只会返回一个值,不会有任何副作用,所以看上去,一个函数就是一个大的表达式。
这里不再深入去谈函数式编程,更多可以看看前面提到的那个专题。
1. 编程到底是什么?
编程(程序设计)实际上是一个对现实世界中的事物抽象,并由计算机语言实现的过程。核心的步骤就包含三个:理解、抽象、实现。
不同的理解思路,会导致完全不同的抽象结果;不同的抽象结果就会提供各不同的理解。最后根据理解和抽象,由特定的语言完成时间,但其结果要想完全理解还需要前两个步骤支撑。
有点像建筑中的“房子是什么,房地产设计,盖房子”。
2. 编程的发展过程到底有哪些?
程序设计的历史,按照我的理解大致的几个主要阶段:
- 计算机程序设计历史前阶段;主要是纸带、存储器等原始方式。
- 计算机语言初级阶段;主要以汇编语言为主,面向的主要内容是“数据存储+指令集”;
- 计算机广泛工业语言设计阶段;主要以C语言为主的大面积应用,此时由C语言更面向人易懂的方向发展。并且操作系统,编译器,数据库软件开始发展;面向的主要内容是“程序=算法+数据结构”。此时在计算机软件设计学科中主要运用的还是“面向过程”的设计思路。
- 计算机语言高级发展阶段。主要是一些面向对象语言的出现。主要体现在C++语言的出现。主要面向的内容是“应用=对象+通讯”的方式。甚至很多语言开始“一切皆对象”的设计理念。面向对象的语言主要在该阶段得到了大力提倡。因为C++的复杂,Java的出现降低了复杂度,又充分利用了面向对象的特点。让面向对象的设计更是得到了大面积的推广和应用,尤其在企业级应用开发中。
- 各类语言频繁出现的繁荣各阶段。各类变成设计语言如面向WEB变成,函数式语言,面向并发的语言,终端设备的编程语言等等;这个阶段不好做评论。
3. 编程的过程解决的问题有哪些?
- 汇编语言:解决CPU指令集和存储系统的交互问题,提供“可编程”的能力
- 面向过称语言:提供小面积的问题解决思路,一个系统的代码如果不多,通过面向过程思路将系统划分为多个过程(多个函数+各类数据结构)进行系统设计。提供了初级规模的系统设计问题。
- 面向对象语言:当面向过程面对复杂的系统,复杂的世界时。如何“更好的理解和抽象”编程问题,变得更加重要。通过面向对象语言的特点“封装、继承、多态”,让程序分析和设计能容纳更大的编程范围和系统规模,也让程序设计人员更好的理解和抽象提供了非常重要的作用。
- 面向**语言:面向WEB,面向高并发,面向切面,函数式语言,终端开发等是在现有程序设计语言基础上不断改进,并解决特定领域特定问题的发展衍生;
4. 面向对象编程思想的重要性体现是什么?
大家都知道,面向对象的三大特性“封装、继承、多态”,但个人认为其中的“封装”是面向对象的最核心的特点。
究其原因,主要是“封装”让一个人可以理解的系统范围可以变得更广,可以让我们“更好的理解和抽象”我们所看到的世界。之前一个老师提到面向对象 时,提到的是“间接”,我想间接也可以认为是“封装”的升级版。面向对象的思想带来“可维护性,可扩展性,可理解性”等让我们能在效率和水平上更加长进的 东西。
5. 编程,就是控制复杂性
且慢!
面向对象虽然有如此多好处,C++与Java都因此得以广泛地使用。但是,一味地追求可维护性,却忽略了一点:编程,就是控制复杂性。还记得编程发 展史初级阶段那会的“数据存储+指令集”,“程序=算法+数据结构”么?函数式编程语言,能够让你的编程更纯粹,更加直接地面向问题的本质。(《函数式编程有哪些优点?》)
6. 总结一句话
无论是面向过程、面向对象、还是函数式编程,都是编程范式,即编程的方法。而具体用什么编程语言则是工具。
我们编程的目的就是解决具体问题,而不是说比较工具与方法的优劣。比如你要砍一棵树,用斧子横砍能够砍倒,用锯子斜锯也能锯断,而非要比较斧子和锯子的优劣而意义不大,横着砍和斜着锯也没多大关系。我们的目的就是要木材,这就是编程最本质目的。
当然,我还是推荐多掌握几个工具,多学会几个方法。比如你现在只会PHP(斧子),命令式编程(砍),那么你见到什么树都只能用斧子砍。假如你再懂Python(锯子),函数式编程(锯),那么对某些树效率就会高很多。
不严谨的一个比喻,仅作参考。
相关推荐
这部分可能涵盖了学生对课程的个人感受,包括对函数式编程的理解加深、技能提升,以及对课程内容、教学方法和课程改进的建议。 总结,函数式编程是一种强大的编程范式,它通过引用透明性、纯函数和高阶函数等概念,...
函数式编程是一种编程范式,强调程序的数据流和变换,而非对状态和逻辑的控制。它鼓励使用无副作用的纯函数,即给定相同的输入,函数总是返回相同的结果,且不改变外部状态。这种编程方式有助于减少错误,提高代码的...
通过比较传统的面向对象编程方式与函数式编程,读者可以更深入地理解后者在处理复杂问题时的灵活性和高效性。 #### 第二部分:C#中的函数式编程基础 ##### 章节3:函数、委托与lambda表达式 这一章节详细介绍了C#...
通过“ancestors-java8”项目,你可以实践这些功能,从实际应用中感受Java 8函数式编程的魅力。通过创建、操作家谱数据,你将更好地理解如何在实际场景中运用新特性,提升代码质量和效率。同时,这个项目也是学习和...
<br>对于这本书还有一点我觉得很欣慰,它不但介绍了OO思想,也很好的对函数式编程方法进行了普及,把Python语言的特点进行了很全面的介绍。对于想了解函数式编程的人,起到了很好的入门效果。而且本人也正在尝试...
1. 学习曲线陡峭:Scala 语言的学习曲线陡峭,需要一定的编程基础和函数式编程的知识。 2. 与 Java 语言的集成:Scala 语言与 Java 语言的集成需要一定的经验和实践。 3. 工具支持不够完善:Scala 语言的工具支持...
"少儿编程-Scratch项目源代码文件案例素材.zip"是一个专为少年儿童设计的编程学习资源,它通过生动有趣的案例,引入了算法练习和分段函数的概念,旨在帮助孩子们在娱乐中掌握编程基础。 Scratch是麻省理工学院(MIT)...
这个过程揭示了Python代码的简洁性和高效性,使学习者能直观感受到编程的魅力。 总的来说,Python编程基础的学习涉及编程环境的设置、基本语法的理解、数据类型的应用以及算法的初步实践。通过实际操作,学习者将...
安装Anaconda后,可以利用其内置的Jupyter Notebook进行交互式编程,这使得代码编写、测试和展示变得更加直观和便捷。 要绘制爱心,我们需要使用Python的turtle库。turtle库是一个图形绘制模块,它提供了一个简单的...
C语言属于典型的高级计算机软件编程语言,相比于传统编程语言,C语言更加抽象,学习者不能直观感受操作过程,只能在软件语句编写完成调试后才能对结果有感知。此外,C语言表意元素体系中含有大量算法与数据式应用...
学习这些例子,不仅可以熟悉VB6.0的基本语法和编程习惯,还能加深对面向对象编程的理解,为后续深入学习.NET框架或其他编程语言打下坚实的基础。实践是检验真理的唯一标准,通过实际操作这些编程例子,可以更直观地...
IDLE提供了交互式逐行编程和脚本式多行编程两种方式,前者适合初学者快速测试代码,后者则适合编写完整的程序。在IDLE中,学习者可以通过新建文件并输入代码,然后保存为.py扩展名的文件,以便日后调用和修改。 ...
3. 函数是编程中的一个核心概念,它允许我们将一些代码组织起来,以执行特定的任务。在Python中,函数通过def关键字定义,可以接受参数并返回结果。 4. 列表是一种有序的集合,可以随时添加和删除其中的元素。列表...
本书内容全面,从基本语法到高级特性,如函数式编程、面向对象编程等均有涉及,同时还提供了丰富的实战案例,让读者能够学以致用。 ### 四、适用人群 无论是Python新手还是有一定基础的开发者,甚至是希望深入了解...
为了让孩子更易于接触和理解编程,Scratch应运而生,它由麻省理工学院设计开发,以简单直观的积木式编程块,面向7至16岁儿童,让他们在拼接代码块的过程中学习到编程的基本概念。 在这个名为“Scratch少儿编程项目...
总结来说,这个程序提供了一个使用VC++实现的函数计算工具,用户可以通过编译源代码来理解和学习函数运算的实现过程,同时也能实际操作感受其功能。对于VC++初学者和需要进行函数计算的开发者来说,这是一个宝贵的...
9. **函数式编程**:JavaScript同样支持函数式编程风格,如高阶函数、纯函数、柯里化、函数组合等。函数式编程强调将计算视为数据的变换,避免副作用,提高代码可读性和可维护性。 10. **Node.js和服务器端...
Scratch,由麻省理工学院(MIT)媒体实验室“终身幼儿园团队”开发,是一款面向儿童的图形化编程工具,旨在激发孩子们对计算机科学的兴趣。这个压缩包中包含了一个名为“圣诞快乐(1).sb3”的项目文件,它是一个基于...
这份课件将带领学习者从VB的基本概念开始,逐步深入到面向对象编程和高级应用。 在VB学习的第一站,我们首先介绍VB的发展历史,为学习者提供一个宏观的视角,了解VB如何随着时间的推移而演变,以及它在当今编程语言...