APP下载

C语言中的哲学思想体现探究

2023-03-24袁丽华习腾彦

电脑知识与技术 2023年4期
关键词:数据结构世界观方法论

袁丽华 习腾彦

关键词:算法;数据结构;范式;方法论;世界观

1 引言

自从宾夕法尼亚大学诞生人类首台计算机以来,计算机技术得到飞速的发展,同时,计算机技术融入了社会各行业的专业技术之中,推动着各种领域技术的革新和发展。社会各行各业亟需具有专业知识和计算机素养的复合人才。高等院校肩负着培养各类专业大学生在计算机应用方面的知识和素养。C 语言多年来一直是应用领域很广的计算机语言之一,既可用于编写操作系统又可用于应用软件开发,国内绝大多数理工科专业将C语言设置成为本专业的基础课程,甚至是核心课程。可见,C 语言在计算机教育与应用以及计算机人才培养方面具有重要的地位和作用。

目前C语言的课程改革主要涉及两个方面,一是教学方法的改革,二是课堂思政建设。C语言教学改革的新方法新理念层出不穷,引入了任务驱动、线上线下混合教学、课堂翻转等方法,注重培养学生计算思维能力、编程能力等。例如,刘杰等以OBE 理念制定教学目标,优化教学内容,采用线下线上混合的教学模式,构建可持续改进的考核评价体系,保证教学过程的良性循环[1]。熊启军等注重实践教学,结合多媒体的应用,将微视频融入C语言程序设计的实验教学之中[2]。朱新波采用任务驱动方法,运用设计教学机器人,激发学生的学习兴趣,增强学生的实践能力[3]。袁丽华提出采用承上启下的教学模式帮助学生接受新知识,同时兼顾应用和巩固已有的知识[4]。

2016年12月习近平总书记在全国高校思想政治工作会议上强调高校思想政治工作关系高校培养什么样的人、如何培养人以及为谁培养人这个根本问题[5]。习近平总书记指出要坚持把立德树人作为中心环节,把思想政治工作贯穿教育教学全过程,实现全程育人、全方位育人,努力开创我国高等教育事业发展新局面[5]。近年来,高等院校很重视课堂思政的建设,作为高校人才培养在德育方面的重要手段和环节。各高校C语言课程的思政建设也有条不紊地开展和实施,目前C语言的课程思政建设主要停留在思政元素的挖掘和设计上[6-8],但是C语言蕴含的哲学思想鲜有研究。解放军国际关系学院的宣克祥指出“计算机教学不但要给学生传授计算机科学技术,更要给学生讲清计算机科学的思想渊源和计算机技术当中丰富的哲学方法。只有这样,我们才能传授知识,启迪智慧,真正培育出属于我们民族自己的创造能力和精神”[9]。本文将探讨C语言的标准、算法、数据结构、结构化语言等中蕴含的哲学思想,将C语言的课程建设提高到哲学层面,引导学生形成正确的世界观和方法论。

2 C 语言的范式

“范式(Paradigm) ”这一概念是由托马斯·库恩在《科学革命的结构》[10]中首先提出来的,他认为每一门科学的发展阶段都有其独特的内在结构,这种结构的模型被定义为“范式”。“范式”具有历史性,是科学技术各个发展阶段的规则、习惯和工具。C语言的發展史和C语言标准的进化史即为C语言各阶段发展的“范式”,成为各个阶段采用C语言编程的规则、习惯和工具。

图1以年代进化的形式非常直观地呈现出了C语言的发展历程。跟随图1的时间轴,可以了解到C语言的前身是1960年的ALGOL语言,这是一门面向问题的高级语言,偏离硬件远,因此,基于上述缺点,它并不适合于编写系统程序。在此基础上,剑桥大学于1963 年公布了Combined Programing Language(CPL) ,虽然改善了ALGOL离硬件远的缺点,但CPL存在规模较大的不足,仍然不适合系统软件的编写。1967 年,Matin Richards在CPL语言的基础上将其简化成了Basic Combined Programming Language(BCPL) ,而且Matin Richards同样来自剑桥大学。三年后,也就是1970年,来自贝尔实验室的Ken Thompson又对BCPL 进行了简化与修改,并将其取名为B语言。1972年,美国贝尔实验室的Dennis Ritchie在BCPL和B语言的基础上设计出新的语言,标志C语言的诞生。之后,UNIX的内核和应用程序全部被C语言改写。从此,C 语言成为UNIX环境下使用最广泛的主流编程语言。

在C语言诞生之后,图1时间轴上的后续的年代演示了C语言各个发展阶段的C语言标准的进化历程。1978年,丹尼斯里奇(Dennis Ritchie) 和布莱恩科尔尼干(Brian Kernighan) 合作出版了《The C Program⁃ming Language》著作,被当作那时期的非正式的C语言标准说明,这一阶段的C 语言被誉为“K&R C”。1983年,美国国家标准委员会(American National Stan⁃dards Committee,ANSC) 下属计算机与信息处理部(X3)成立了“X3J11技术委员会”负责制定“一个无二义性的硬件无关的C语言标准”,并制定了C语言标准草案。1989年,ANSI正式通过C语言标准草案并且成为美国国家标准,后被称为C89标准。1990年,在C 语言标准委员会ISO/IEC JTC1/SC22/WG14(ISO/IEC联合技术第I委员会第22分委员会第14工作组)的努力下,国际标准化组织(ISO) 批准了ANSI C成为国际标准。于是ISO C(又称为C90) 就这样诞生了。1995年对C90进行了细微的技术扩充,经过技术扩充后的C90被改称为C95。1999年,ANSI和ISO又通过了最新版本的C语言标准和技术勘误文档,该标准被称为C99。2011年12月8日,ISO/IEC JTC1/SC22/WG14正式发布了C11标准。C语言标准作为“范式”,推动了C语言在不同领域的应用和发展。图2归纳了C 语言的一些主要运用,既可用于编写操作系统又可用于应用软件开发,应用软件方面涉及数据库、办公软件、服务器、数据处理等。

3 算法蕴含的哲学思想

“算法+数据结构=程序”这一公式,最早是由瑞士著名计算机科学家尼克劳斯·沃思(Nikiklaus Wirth) 提出的。数据结构的概念是指将两种数据类型,基本数据类型和复合数据类型,以结构化的组织方式在计算机上对数据进行存储;而算法就是如何利用这些结构化的数据来解决实际问题的方法,可以理解为详尽的实施步骤。简而言之,数据结构是程序处理问题的数据载体,而算法是程序解决“怎样做”的问题。

算法是编程的方法论,是计算机程序的核心或灵魂。通常有两种方式来处理较为复杂的问题:第一种是自顶向下,逐步细化的方式;第二种方式则是自下而上,逐步积累。C语言采用的是自顶向下,逐步细化的方法,这个处理方式是C语言编程的方法论。C语言通过模块化设计将复杂的问题分解为若干个小问题,从而实现逐步细化功能。C语言的模块化编程依赖于函数,这是C语言的最大特点。C语言是函数化的语言,至少包含一个主函数,即main函数。图3是C 语言模块化程序设计示意图,表达了C语言解决复杂问题的一般思路和方法,解决问题的通用的方法论。主函数是通过调用f1、f2和f3这三个函数来完成总任务要求,换句话来说,对一个复杂问题,细化成了三个功能问题f1、f2和f3;而f1再细化分解成f4和f5,f2则通过调用f6、f7和f8来实现,f3则分解为f8和f9;其中f6调用了f5,f8调用了f7。

图3充分说明了C程序设计的方法论是采用自顶而下,逐步细化的思想,体现了“分而治之”的策略。C 语言采用结构化的语言实现函数的模块化,通过顺序结构、选择结构以及循环结构三种基本结构完成结构化编程。三种结构的示意图如图4所示,选择和循环结构还可以派生成其他形式。三种结构有一个共同特点,每种结构都是单入口以及单出口。基于这一特性,可以依据任务的要求,将不同数量的三种结构,像搭积木似的完成需要的功能。

算法具有以下特点[11]:

(1) 有穷性:算法不能是无限的操作步骤,实际上,“有穷性”是指“在合理的范围之内”,但是“合理的范围”通常是由人们的常识和需要而定,并无严格标准。

(2) 确定性:算法中不能包含模棱两可、条件不清晰的步骤,每一个步骤都必须是确定的。

(3) 有零个或多个输入:执行算法时需要从外界获取必要的信息,单个输入或者多个输入,算法也可以没有输入。

(4) 有一个或多个输出:算法是为了解决实际问题,“解”就是输出,算法具有至少一个解。没有输出的算法是没有意义的。

(5) 有效性:算法中的每一个步骤都是行之有效的,并得到确定的结果。

算法可用多种形式表示,常用的有用自然语言表达的算法步骤、流程图、伪代码和程序的源代码。以求解5!为例,表1罗列了这四种常用的算法表示方法。

4 C 语言数据结构的哲学思想体现

唯物辩证法认为世界上一切事物都不是孤立存在的,而是和周围其他事物相互联系的,整个世界就是一个普遍联系着的有机整体。C语言有丰富的数据结构,大体可分为基本类型、构造类型、指针类型、枚举类型和空类型,如图5所示。C语言的各种数据结构之间的内在联系能够充分体现唯物辩证法的联系观点:(1) 数组、结构体、共用体等类型的数据都与基本数据类型有着紧密的联系,它们都是由基本数据类型构造而成;(2) 指针也与基本数据类型密切相关,在定义指针变量时,必须为指针变量指定“基本类型”,其作用是为定义的指针变量指定指向的变量类型;(3) 指针、结构体、共用体也能构造出各自相应的数组数据。

基本类型数据是C语言数据的核心和基础,有4 种最常用的基本类型数据,它们是整型、字符型、单精度浮点型和双精度浮点型。每种类型有不同的输入输出引用格式,系统为它们分配不同的存储空间,具体值罗列在表2中[4]。表3汇总了C语言各种数据类型定义的一般形式,一般形式中的类型符与表2中的类型符一致,具体运用时即为表2中罗列的某种基本类型。这表明各类数据之间的关联性。

基本類型处理的是简单的单个变量或数据。数组则是处理批量数据,并且同一数组具有相同的数据类型,数据类型仍然为4种基本类型。指针是C语言独有的数据类型。指针的引入使得数据的访问除了按变量名的直接访问方式外,多了一种间接的访问方式。这种访问方式能依据变量地址来访问,大大提高程序运行速度。此外,通过调用以指针变量为参数的函数,实现修改多个变量值的目的,而普通变量作为函数的参数只能得到一个返回值。表3中的前3种数据的类型的种类是固定的,常用表2罗列的4种类型,但是表3罗列的最后两种数据,结构体和共用体,属于用户自定义的数据结构,它们是根据用户需求自定义生成,因而具有无限种类型。指针和用户自定义数据也可以定义相应的数组变量处理对应的批量数据。可见,C语言处理的数据由简单到复杂,由单个变量到批量数组,由单一类型数据到成员表列的多类型合成数据,由有限种类的数据到自定义无限种类,数据访问方式由直接访问到间接访问。C语言的数据结构体现了唯物辩证法的联系与发展的世界观。

5 结构化语言的哲学思想体现

5.1 选择结构的哲学思想体现

唯物辩证法认为事物是矛盾的统一体,包含着相互矛盾对立的两个方面,主张“一分为二”全面的观点分析问题和处理问题。C语言提供了全面分析问题的选择结构,而选择控制语句有if语句、条件运算符和switch语句,其中应用面最广的是if语句。If-else语句具有“一分为二”的哲学理念,对给定的条件进行判断后,形成两条分支,条件成立执行if中的语句,相反,如果不成立则执行else中的语句。else为if的对立面,else不带条件,不能单独使用,必须和if结合在一起,充分体现了矛盾的对立与统一性。if语句有三种常用的表现形式:

(1) if(表达式)语句

(2) if(表达式)语句1

else 语句2

(3) if(表达式1) 语句1

else if(表达式2) 语句2

else if(表达式3) 语句3

else if(表达式m) 语句m

else 语句m+

形式(1) 只考虑条件成立的分支,形式(2) 是典型的“二选一”模式,而形式(3) 则对应“多选一”的情况。If语句的选择控制结构把可能遇到的问题情况都考虑到了,有利于我们全面地分析问题。

5.2 循环结构的哲学思想体现

众所周知唯物辩证法的量变和质变之间的关系,事物的发展和变化始终从量变开始,量变是质变的前提和必要准备。而质变是量变的必然结果。质变又为事物新的量变而开辟道路,使事物在新质的基础上开始新的量变。事物的发展就是这样不断由量变到质变,又在新质的基础上开始事物新的量变,如此循环往复,不断变化。计算机语言用循环结构来实现周而复始的变化,到达量变到质变的飞跃。C语言提供了三种循环控制语句,分别是while语句、do-while语句和for语句,三种语句功能相似,但略有不同,可以互相替换。通常引入循环控制变量来控制循环的进程(对应量变)和终止(对应质变)。首先在进入循环结构之前,对循环控制变量设置初值,然后每运行一次循环体,循环变量就会累加一个步长,从而让循环控制变量的值不断趋近于循环终止条件,如此循环反复,使循环控制变量形成量变积累,直到循环条件不满足,跳出循环结构,达到质变,循环终止,执行循环结构的后续语句。在应用循环语句编程时,最忌讳的是“死循环”,死循环产生不了量变到质变的飞跃,循环无休无止,程序无法正常结束,得不到正常的结果。因此,在编程中必须杜绝死循环情况的出现。

6 结论

本文首先回顾了C语言的发展历程,指出C语言标准的进化史可视为其在各个发展阶段的“范式”,推动着C语言的应用。随后进一步阐述了算法、数据结构和结构化语言蕴含的方法论和世界观。通过对C 语言哲学思想的剖析,为C语言的课堂思政建设奠定坚实的基础,有利于培养学生的辩证唯物主义世界观。C语言具有符号语言的特点,后续将继续研究C 语言中的语言哲学思想。另外,冯·诺依曼提出了计算机哲学思想,C语言作为一门经典的计算机设计语言,具有计算机哲学思想研究价值和意义,后续也将进一步加以研究。

猜你喜欢

数据结构世界观方法论
智能化的“世界观”
汉学方法论值得关注
方法论视角下的制定法解释
远洋东方境世界观售楼处
法本位的方法论阐释
UAF的方法论意义
走向理性:近代以来中国世界观的嬗变
“翻转课堂”教学模式的探讨——以《数据结构》课程教学为例
TRIZ理论在“数据结构”多媒体教学中的应用
《数据结构》教学方法创新探讨