69、Python番外篇:从编程范式看如何学习一门编程语言的精髓

引言

在之前的文章中,我们曾聊过如何学习一门编程语言,当时是从程序的构成的角度来分析、展开的,主要提及了数据的表达 + 数据的处理,也就是数据结构 + 算法的内容。这个角度对应到所有编程语言,基本都是适用的。但是,实际上编程语言的种类有很多,每种语言又有各自所独有的特性。如果我们不能掌握到一门编程语言所独有的特性,有时候,甚至不能说我们真正学会了这门语言。

所以,今天这篇文章,我打算从编程范式的角度切入,继续聊聊关于如何学习编程语言的话题。

本文的主要内容有:

1、什么是编程范式

2、常见的编程范式的特点及适用场景

3、结合编程范式深入学习编程语言

什么是编程范式

所谓“范式”,可以简单理解为“示范”、“样板”等,也可以理解为对一些相对固定的问题域所总结、形成的最佳实践所需要遵从的基本原则、模式等。

所谓“编程范式(Programming Paradigms)”是在组织和构建程序中所应用的思维模式、方法论或者是一套需要遵循的实践原则。理解和掌握编程范式有助于程序员快速选择最合适的方法来进行编程,以解决特定的问题。

需要说明的是,由于具体的业务场景、问题域的不同,对应就存在多种不同的编程范式。如同我们选择编程语言时,语言之间没有绝对的高下之分。编程范式也是一样的,各自有其使用的场景和领域。因此,选择了适合的编程范式,可以编写出更加高效、可扩展、易于维护的程序。但是,如果选择了不太适合的编程范式,则可能是“削足适履”,处处都显得拧巴。

编程范式与编程语言是多对多的关系,一个编程语言可能支持一种编程范式,也可能支持多种编程范式。不同的编程语言,可能同属于同一种编程范式。

常见的编程范式的特点及适用场景

虽然在之前的文章中,我们从来没有特别提到“编程范式”的概念。其实,编程范式类似于“道”的概念,属于一种“日用而不自知”的状态。我们至少已经应用过过程式编程、面向对象编程,其实它们就是两种最常见的编程范式。

常见的编程范式大概有如下几种:

1、过程式编程(Procedural Programming):是基于函数和过程的,强调的是执行顺序及状态的共享。这个范式也是大多数编程新手最先接触、并且使用最多的一种编程范式。

2、面向对象编程(Obejct-Oriented Programming, OOP):基于类和对象,通过类的抽象、封装、继承、多态等特性,构建更加可扩展、易维护的软件系统。

3、函数式编程(Functional Programming, FP):以纯函数为基础,强调数据的不变性和函数的组合。

4、声明式编程(Declarative Programming):强调描述需要的结果,而不是如何去实现它。

5、逻辑编程(Logic Programming):以逻辑声明和规则为基础,进行程序的构建,通过推理引擎获得计算结果。

6、并发编程(Concurrent Programming):以并发概念为基础,通过多线程、多进程模型来构建并发执行的程序。

7、反应式编程(Reactive Programming):以系统能够对外部事件做出快速响应为出发点,关注数据流和变化的传播。

接下里,分别介绍一下这些编程范式的主要特征、适用的场景,以及支持该编程范式的典型的编程语言。

过程式编程

主要特征:

1、基于过程:程序之间是通过过程(函数、子程序等)来组织的。

2、顺序执行:代码按照顺序执行,依赖控制流程的循环、分支判断。

3、状态共享:过程之间通过全局变量、局部变量等来实现程序的状态共享。

适用场景:

1、系统编程:比如操作系统、中间件等的开发。

2、嵌入式系统:如设备驱动程序、软硬件的接口等。

3、简单的工具、脚本:日常重复的工作内容的自动化脚本、数据处理脚本等。

典型的编程语言:

1、C语言:最典型的过程式编程语言,科班出身的开发者的入门语言。需要特别说明的是,C语言始终没有过时,关键看适用场景,系统编程、嵌入式系统中还是在广泛使用C语言编程。

2、Pascal、Fortran:古董级编程语言,除了特定领域、历史系统维护,应该较少被使用了。

面向对象编程

主要特征:

1、类和对象:程序通过类和对象来进行组织。

2、抽象:强调从业务中的实体、功能进行抽象,定义类。

3、封装:将属性、状态和操作、功能封装在对象的内部。

4、继承:通过继承机制实现共性的复用。

5、多态:同一个操作作用于不同类型的对象,呈现出不同的行为。

适用场景

1、大型复杂系统:不同于系统编程,更强调的是复杂业务系统。

2、游戏开发:游戏角色、逻辑、引擎等。

3、图形图像处理:如CAD、图像编辑等。

典型的编程语言

1、Java/C#:企业级应用,可以说被最广泛地使用。

2、C++:游戏开发等对性能有所要求的场景。

3、Python:一切皆对象的设计理念,对面象对象范式的支持最为彻底。
 

函数式编程

主要特征:

1、纯函数:强调使用没有副作用的纯函数,不会改变外部状态。

2、不可变性:数据不可变,所有的操作均返回新的数据。

3、高阶函数:函数可以作为参数、返回值进行传递。

4、组合:通过对函数的组合实现更加复杂的操作。

适用场景

1、数据的处理和分析:比如流式数据处理。

2、并行计算:由于不可变性的特征,天然具备线程安全特性,适合并行计算。

3、递归算法:比如对复杂数据结构,如树、图的处理等。

典型的编程语言

1、Lisp、Haskell

2、Scala

3、Python

声明式编程

主要特征:

1、描述结果:描述需要什么,无需考虑如何实现。

2、不可变性:通常数据是不可变的。

3、高抽象:代码高度抽象,减少样板代码。

适用场景

1、数据库查询:比如SQL查询。

2、配置管理:如mvn、yaml等配置文件管理。

3、用户界面构建:如html、css等。

典型的编程语言

1、SQL:这里需要为SQL正名,有些人不把SQL当做一门编程语言。但是,SQL是一门特别实用、半衰期最长的一门编程语言。在数据库查询、管理方面始终是最实用的。

2、HTML:也是编程语言啊,早期被误解为美工的语言。

逻辑编程

主要特征:

1、基于逻辑:由逻辑声明和规则组成。

2、推理引擎:通常需要通过推理引擎计算结果。

3、声明式:程序员描述逻辑关系,推理引擎负责求解。

适用场景

1、机器学习与人工智能:自然语言处理、各种专家系统。

2、数学建模:线性规划、调度等问题。

典型的编程语言

1、Prolog

2、Datalog

并发编程

主要特征:

1、多线程、多进程:通过线程和进程实现并发执行。

2、同步、异步协作:通过同步、异步机制进行子任务之间的协同。

3、并发数据结构:锁、信号量、消息队列等。

适用场景

1、网络服务器:如http服务器、数据库服务器等。

2、实时系统:如嵌入式系统、控制系统。

3、高性能计算:科学计算、金融分析等。

典型的编程语言

1、Go

2、Erlang

3、Java、Python

反应式编程

主要特征:

1、数据流和变化传播:关注数据流和变化的传播。

2、响应式:系统能对外部事件做出快速响应。

3、组合和变换:通过组合和变换操作处理数据流。

适用场景

1、GUI开发:前端开发、桌面应用等。

2、实时数据处理:物联网、金融等。

3、事件驱动系统:监控系统、通知系统等。

典型的编程语言

1、JavaScript

2、Scala

3、Java

结合编程范式深入学习编程语言

在对编程语言相关语法特性已经有所掌握的基础上,想要进一步深入学习一门编程语言,可以尝试通过以下步骤:

1、了解编程语言所支持的编程范式,选择支持最好的编程范式。

2、深入理解该编程范式的主要特征,并探究该编程语言对当前编程范式各个特性的实现机制。

3、结合编程范式的核心特性进行大量的编码实践,一方面加深对编程语言相关特性的掌握程度,另一方面,基于实践反复印证编程范式的特性以及加深对这些特性存在必要性的理解。

4、基于对编程范式的深入理解,应用到实际的业务场景中的项目实战。进一步思考该编程范式的契合点,以及如果使用其他范式,会产生的难以实现的阻塞点。

5、在对该语言、该编程范式的熟练掌握基础上,继续学习其他范式,通过对比分析,更加深刻体会不同范式各自的特征、使用场景及不足之处。在后续的工作中,更加自然地应用最适合的编程范式。

总结

本文简单介绍了编程范式的概念,然后列举了一些常见的编程范式,并比较了各个编程范式的主要特性、适用场景以及有代表性的编程语言。最后结合编程范式深入学习一门编程语言所建议遵循的学习步骤。

感谢您的拨冗阅读,希望对您有所帮助。

b26701ae518093b4d36d6783ea231afa.jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1534407.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

负载均衡:从理论到实践 ---day04

负载均衡 负载均衡1.什么是负载均衡2.负载均衡的分类硬件负载均衡软件负载均衡选择 3.引入负载均衡的好处 第一个Ribbon实例步骤1:步骤2:步骤3:步骤4: 问题1. 负载均衡的主要目标是什么?2. 负载均衡器的作用是什么&…

网络安全 DVWA通关指南 DVWA SQL Injection (Blind SQL盲注)

DVWA SQL Injection (Blind) 文章目录 DVWA SQL Injection (Blind)Low布尔盲注时间盲注sqlmap MediumHighImpossible 参考文献 WEB 安全靶场通关指南 Low 0、分析网页源代码 <?phpif( isset( $_GET[ Submit ] ) ) {// Get input$id $_GET[ id ];// Check database$geti…

鸿蒙HarmonyOS开发:一次开发,多端部署(界面级)天气应用案例

文章目录 一、布局简介二、典型布局场景三、侧边栏 SideBarContainer1、子组件2、属性3、事件 四、案例 天气应用1、UX设计2、实现分析3、主页整体实现4、具体代码 五、运行效果 一、布局简介 布局可以分为自适应布局和响应式布局&#xff0c;二者的介绍如下表所示。 名称简介…

DSLogic 逻辑分析仪的使用-I2C协议

一、I2C IIC-BUS&#xff08;Inter-IntegratedCircuit Bus&#xff09;最早是由PHilip半导体&#xff08;现在被NXP收购&#xff09;于1982年开发。 主要是用来方便微控制器与外围器件的数据传输。 它是一种半双工&#xff0c;由SDA&#xff08;数据&#xff09;和SCL&#xf…

MicroPython 片上psrom的支持,并将多个bin合成为一个bin

前两天在github上下载的MicroPython 版本1.20.0&#xff0c;怎么配置都无法开启片上psrom的支持&#xff0c;折腾了一周&#xff0c;都自我怀疑了&#xff0c;最后更新版本为1.23.0一编译直接就过了。。。下面记录下过的&#xff0c;过程&#xff0c;这边使用的是四线SPI的片上…

我平时是怎么找客户的?今天我的实战技巧,分享给大家

我常用的几个方法 1、利用WhatsApp&#xff0c;找客户的号码&#xff0c;去进行营销 学会这个方法&#xff0c;WhatsApp账号都能被你找到http://mp.weixin.qq.com/s?__bizMzg2MTcxNzAwMg&mid2247498845&idx1&sn039a87d60094cf6c166e2cf5e1f94a69&chksmce106…

【黑神话】无脑过大头怪(幽魂)教程,手残也能打过关!

在《黑神话悟空》这款扣人心弦的动作角色扮演游戏中&#xff0c;玩家将面对众多考验操作与策略的Boss战。其中&#xff0c;大头幽魂作为玩家早期就会遇到的挑战之一&#xff0c;其独特的战斗机制和技能组合&#xff0c;对新手玩家而言无疑是一次不小的考验。今天&#xff0c;就…

【附源码】用Python开发一个音乐下载工具,并打包EXE文件,所有音乐都能搜索下载!

现在听个歌&#xff0c;不是要这就是要那&#xff0c;乱七八糟的&#xff0c;下软件都下不赢。 于是决定加班熬夜来做一个&#xff0c;想怎么听就怎么听&#xff0c;大家自己看到就好&#xff0c;悄悄用&#xff0c;别告诉别人哈~ 好了不闲聊&#xff0c;开整&#xff01; 首先…

Element-ui el-table 全局表格排序

实现效果如下&#xff1a; 一、当页数据排序 如果只想要当前页面排序&#xff0c;只会涉及到前端&#xff0c;只需在<el-table-column>标签上添加 :sortable"true"即可 二、自定义排序 如果想要全局排序&#xff0c;需要自定义排序函数&#xff0c;请求后台排…

如何进行大模型训练和微调?(实战)

1、在项目中&#xff0c;如果prompt和function calling足够好&#xff0c;尽量不要微调&#xff0c;节约成本。 以下是针对function calling的slot&#xff0c;评估准确率&#xff08;识别准确度&#xff09;、召回率&#xff08;全面率&#xff09;&#xff0c;F1值。 从中可以…

System.out源码解读——err 和 out 一起用导致的顺序异常Bug

前言 笔者在写一个小 Demo 的过程中&#xff0c;发现了一个奇怪的问题。问题如下&#xff1a; // 当 flagtrue 时打印 a1 &#xff1b;当 flagfalse 时打印 a2。 public static void main(String[] args) {boolean flag false;for (int i 0; i < 10; i) {if (flag) {Sys…

基于python的宠物信息交流系统---附源码74885

摘 要 在当今社会&#xff0c;随着人们生活质量的提高和对精神健康的追求&#xff0c;宠物已经成为我们生活中不可或缺的伙伴。与家中宠物朝夕相处&#xff0c;我们与宠物之间建立了深厚的情感纽带。然而&#xff0c;宠物也有可能生病&#xff0c;需要接受医疗护理。与人类一样…

如何利用Samba跨平台分享Ubuntu文件夹

1.安装Samba 终端输入sudo apt install samba 2.配置Samba 终端输入sudo vim /etc/samba/smb.conf 打开配置文件 滑动文件到最底下 输入以下内容 [Share] # 要共享的文件夹路径 path /home/xxx/sambashare read only no browsable yes编辑完成后按一下Esc按键后输入:wq回…

动不动就下跪的三星,离开天津了

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 三星辉煌岁月已过&#xff0c;万事凋零!如果说IBM、惠普、戴尔、苹果、富士康的离开有点惋惜的话&#xff0c;那三星的离开就是“活该”了。 成立于1993年的天津三星电子有限公司与2024年9月6日注销了&#xff0…

基于JavaWeb开发的java ssm springboot+VUE疫情防疫系统系统前后端分离设计和实现

基于JavaWeb开发的java ssm springbootVUE疫情防疫系统系统前后端分离设计和实现 &#x1f345; 作者主页 网顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取…

MySQL字符集的转换

背景介绍 在使用MySQL过程中&#xff0c;如果字符集配置不当&#xff0c;可能会出现插入失败、数据乱码、 索引失效、数据丢失、查询不到期望结果等一系列使用异常的情况。因此&#xff0c;熟练掌握MySQL字符集和比较规则的配置方法&#xff0c;并在此基础上了解MySQL字符集与…

AMD CMD UMD CommonJs ESM 的历史和区别

这几个东西都是用于定义模块规范的。有些资料会提及到这些概念&#xff0c;不理清楚非常容易困惑。 ESM&#xff08;ES Module&#xff09; 这个实际上我们是最熟悉的&#xff0c;就是ES6的模块功能。出的最晚&#xff0c;因为是官方出品&#xff0c;所以大势所趋&#xff0c…

股价跌破1美元!这家激光雷达上市公司被沃尔沃「拖进」ICU

作为目前前装上车成本最高的传感器之一&#xff0c;绝大部分激光雷达初创公司的表现&#xff0c;令人沮丧。“很多时候&#xff0c;前方似乎有一个美好的未来&#xff0c;但事情并不总是按照预期发展。” 比如&#xff0c;作为曾经美股市值最高&#xff08;曾经巅峰期高达120亿…

【kafka-02】kafka集群搭建

Kafka系列整体栏目 内容链接地址【一】afka安装和基本核心概念https://zhenghuisheng.blog.csdn.net/article/details/142213307【二】kafka集群搭建https://zhenghuisheng.blog.csdn.net/article/details/142253288 kafka集群搭建 一&#xff0c;kafka集群搭建1&#xff0c;ka…

C++——深部解析哈希

好久不见给大家分享一张图片吧 目录 前言 二、库文件 1、哈希冲突 2 哈希函数 3、闭散列 三 、闭散列的实现和底层逻辑 1、哈希表&#xff08;闭散列&#xff09;的定义 2、哈希表&#xff08;闭散列&#xff09;的插入 3、哈希表&#xff08;闭散列&#xff09;的查找 4.哈希表…