【编程】前言︱使用编程语言开发

ggjong / 2023-05-03 / 原文

【编程开发】

编程开发·记·前言篇

内容皆为本人原创,请勿转载

编程语言这里一般特指高级编程语言、可以通过现有流行技术运用加以实现功能应用开发的语言。

一、编程的定义

以下内容来自维基百科

电脑程序设计(英语:Computer programming),或称程式设计(programming),是给程序解决出特定问题的过程,软体开发过程中的重要步骤。程序设计方法往往以某种程序设计语言为工具,给出这种语言下的程序。程序设计过程一般包括分析、设计、编码、测试、除错等不同阶段。


计算机程序(英语:Computer Program)是指一组指示电子计算机或其他具有讯息处理能力的电子装置每一步动作的指令,通常用某种程序设计语言编写,运行于某种目标体系结构上。打个比方,一个程序就像一个用汉语(程序设计语言)写下的红烧肉菜谱(程序源代码),用于指导懂汉语的人(体系结构)来做这个菜。 计算机程序是软件的一个组成部分,它还包括文档和其他无形组成部分。通常,以英文文本为基础的计算机程序要经过编译和连结而成为一种人们不易看清而计算机可解读的一连串数字的格式,然后放入运行。这种程序也叫作编译语言。未经编译就可运行的程序,通常称之为脚本程序(script)或解释型语言。

由此看到,编程(programming)的目标是创造出一组能够解决特定问题具有讯息处理能力的电子装置每一步动作的指令

这里的定义和算法的描述感觉类似,实际上,维基百科相关的定义:

算法(英语:algorithm),在数学(算学)和电脑科学之中,指一个被定义好的、计算机可施行其指示的有限步骤或次序[1],常用于计算、数据处理和自动推理。算法是有效方法,包含一系列定义清晰的指令[2],并可于有限的时间及空间内清楚的表述出来[3]。
算法中的指令描述的是一个计算,它执行时从一个初始状态和初始输入(可能为空)开始,[4]经过一系列有限[5]而清晰定义的状态最终产生输出[6]并停止于一个终态。一个状态到另一个状态的转移不一定是确定的。包括随机化算法在内的一些算法,都包含了一些随机输入。[7][8]
早在尝试解决希尔伯特提出的判定问题时,算法的不完整概念已经初步定型;在其后的正式化阶段中人们尝试去定义“有效可计算性[9]”或者“有效方法[10]”。这些尝试包括库尔特·哥德尔、雅克·埃尔布朗和斯蒂芬·科尔·克莱尼分别于1930年、1934年和1935年提出的递归函数,阿隆佐·邱奇于1936年提出的λ演算,1936年埃米尔·莱昂·珀斯特的Formulation 1和艾伦·图灵1937年提出的图灵机。即使在当下,依然常有符合直觉的想法难以定义为形式化算法的情况。[11]

不难看出,算法定义所要求的是有限次序并且是有效方法(包含一系列指令,必须在有限时间与空间清楚的表述出来);同样目标是一系列指令,算法的划分却对指令细节有了更多的要求。我们不难总结出算法要求能够实施的特定指令,而编程的目标是为了解决特定问题;两者的表述侧重点不同,事实上也大不相同。

二、特定问题的形成与指令

我们通常意义上的编程指的是计算机编程(上文提到),这是基于并应用于计算机电子设备(具有讯息处理能力的电子装置)的指令,实际上,我们完全可以扩大范围来理解,前提是有这样一种指令执行的等价物。

1.指令

以下将有大量内容来自维基百科

在计算机技术中,指令是由指令集架构定义的单个的CPU操作。在更广泛的意义上,“指令”可以是任何可执行程序的元素的表述,例如字节码。
在传统的构架上,指令包括一个操作码(opcode)——它指定要进行什么样的操作,例如“将存储器中的内容与寄存器中的内容相加”——和零个或者更多的操作数(operand)——它可能指定参与操作的寄存器、内存地址或者立即数(literal data)。操作数可能还包括寻址方式,它确定操作数的含义。[注 1]
在超长指令字(VLIW)构架中(包括很多微指令(microcode)构架)多个并发的操作和操作数在一条单独的指令中被指定。
指令的长度相差悬殊,从一些微控制器(microcontroller)中的4位(bit)到一些超长指令字系统中的几百位。大部分现代的个人计算机、大型计算机、超大型计算机中的处理器的指令尺寸在16到64位之间。在一些构架中,特别是RISC构架中,指令长度是固定的,通常与其构架的字长一致。在其他的构架中,指令有不同的长度,但通常是字节或者半个字的整数倍。
构成程序的指令很少以它在机器内部的数值形式而直接的被使用;它们可以被程序员通过汇编语言加以表示,或者,更常见的,被编译器生成。


指令集架构(英语:Instruction Set Architecture,缩写为ISA),又称指令集或指令集体系,是计算机体系结构中与程序设计有关的部分,包含了基本数据类型,指令集,寄存器,寻址模式,存储体系,中断,异常处理以及外部I/O。指令集架构包含一系列的opcode即操作码(机器语言),以及由特定处理器执行的基本命令。
不同的处理器“家族”——例如Intel IA-32和x86-64、IBM/Freescale Power和ARM处理器家族——有不同的指令集架构。[1]
指令集体系与微架构(一套用于执行指令集的微处理器设计方法)不同。使用不同微架构的电脑可以共享一种指令集。例如,Intel的Pentium和AMD的AMD Athlon,两者几乎采用相同版本的x86指令集体系,但是两者在内部设计上有本质的区别。
一些虚拟机器支持基于Smalltalk,Java虚拟机,微软的公共语言运行时虚拟机所生成的字节码,他们的指令集体系将bytecode(字节码)从作为一般手段的代码路径翻译成本地的机器语言,并通过解译执行并不常用的代码路径,全美达以相同的方式开发了基于x86指令体系的VLIW处理器。

这就是指令:指令集架构定义的单个的CPU操作。更多内容涉及计算机底层原理知识暂不表述。
到了这里,编程的本质一下子显露了出来,它不想我们想象中的软件一样复杂反而是已经很稀松平常的事情,只不过发生在某个我们很少接触但是无处不在的领域。

2.特定问题的形成

以下将有大量内容来自维基百科

科学,通常指关于自然界、社会和思维发展规律的分科知识体系,其产生和发展均以人类的社会实践为基础,是实践经验的总结。


科学(英语:science[a])[1]是一种系统性的知识体系,它积累和组织并可检验有关于万物的解释和预测[2][b]。科学强调预测结果的具体性和可证伪性,这有别于空泛的哲学。科学也不等同于寻求绝对无误的真理,而是在现有基础上,摸索式地不断接近真理。故科学的发展史就是一部人类对宇宙的认识偏差的纠正史。


1919年第6卷第1号陈独秀发表《本志罪案之答辩书》,提出“本志同志本来无罪,只因拥护那德谟克拉西(民主democracy的音译)和赛因斯(科学science的音译)这两位先生,才犯了这几条滔天大罪的。我们现在认定只有这两位先生,可以救治中国政治上、道德上、学术上、思想上一切的黑暗。若因为拥护这两位先生,一切政府的压迫,社会的攻击笑骂,就是断头流血,都不推辞。”第一次将科学与民主称为“赛先生”与“德先生”。[10]


问题很难有一个确定的、无异议的定义,但是,一般来说都问题包含有以下三个基本成分:
上下文-和问题相关的场景,指一组已经是明确已知的,关于问题条件的描述。
目标-指关于构成问题结论的明确描述。
障碍-指问题的正确解决方法不是显而易见的,必须通过一定的思维活动,才能找到答案。
一般而言,问题是由于某些导致不能达到目的或者实现目标的认识障碍。它是指现状有些不理想的部份,没有被解决,或者事态出现意外。通常,问题也可能是因为要得到答案。


解决问题或解难是兼具创造性、操作性的思维方式和智性活动。对问题的发现和澄清,经常是解决问题的第一步。许多在人工智慧、工程、数学、医学中发展及应用的解决问题技巧也和心理学中研究的心理问题解决技术有关。


抽象化(英语:Abstraction)是指以缩减一个概念或是一个现象的资讯含量来将其广义化(Generalization)的过程,主要是为了只保存和一特定目的有关的资讯。例如,将一个皮制的足球抽象化成一个球,只保留一般球的属性和行为等资讯。相似地,亦可以将快乐抽象化成一种情绪,以减少其在情绪中所含的资讯量。
抽象化的过程普遍存在于所有人类社会的思维过程当中,也是所有人类语言的一部分,也就是说,抽象化的过程是普世文化通则之一。


在计算机科学中,抽象化(英语:Abstraction)是将资料与程序,以它的语意来呈现出它的外观,但是隐藏起它的实作细节。抽象化是用来减少程式的复杂度,使得程式设计师可以专注在处理少数重要的部份。一个电脑系统可以分割成几个抽象层(Abstraction layer),使得程式设计师可以将它们分开处理。

在编程中,特定的问题是务必与编程有关的部分,是问题抽象后能够使用编程给出抽象问题的答案。作为编程的前提,特定问题是编程的先决条件,如果没有需要解决的问题,那自然也不需要编程去解决问题。

三、题外话

1.三个领域

这三个领域指的是:历史、经济、技术方法。

历史

来源自维基百科

历史(现代汉语词汇,古典文言文称之为史),指人类社会过去的事件和行动,以及对这些事件行为有系统的记录、诠释和研究[2]。历史可提供今人理解过去,作为未来行事的参考依据,与伦理、哲学和艺术同属人类精神文明的重要成果。历史的第二个含义,即对过去事件的记录和研究,又称历史学”,或简称“史学”。隶属于历史学或与其密切相关的学科有年代学、编纂学、家谱学、古文字学、计量历史学、考古学、社会学和新闻学等,参见历史学[3]。记录和研究历史的人称为历史学家,简称“史学家”,中国古代称为史官。记录历史的书籍称为史书,如《史记》、《汉书》等,粗分为“官修”与“民载”两类。
广义的历史,泛指一切事物的发展过程,包括自然史和社会史[4]:380。不一定同人类社会发生联系。在哲学上,这种含义下的历史称为历史本体,例如宇宙历史、地球历史、世界历史、中国历史等等。通常仅指人类社会的发展过程,它是史学研究之对象;一般说来,关于历史的记述和阐释,也称为历史[4]:380。而狭义的历史则必须以文字记录为基础,即文字出现之后的历史才算历史,在此之前的历史被称为史前史。又可以称为人类史或社会史,而脱离人类社会的过去事件称为自然史。一般来说,历史学仅仅研究前者,即社会史[2]。

经济

经济(英语:Economy)一词用于统称一定范围(国家、区域等)内,组织生产、分配、流通、消费活动和关系的系统,通常以货币为媒介,以财货或服务为结果。研究经济问题、探讨经济发展规律、解释经济现象成因的社会科学,称为经济学。

技术

技术(英语:technology,词源为古希腊语:τέχνη + -λογία,意为“技巧学说”)[1]可以指人类对机器、硬体或人造器皿的运用,但它也可以包含更广的架构,如系统、组织方法学和技巧。它是知识进化的主体,由社会形塑或形塑社会,如电脑等新技术的增生使人们相信技术是社会进化的决定性力量。换句话说,它是驱动改变的自发性动力。最好放弃化约主义的观点,而将技术视为包含了社会、政治、历史及经济因素等一起作用,而造成改变之面向社会网络的一组成元素:不论有形或无形。
最初,人类会把石块等自然界的材料,制作成一些简单的工具,这已是技术的起源。而史前人类发现生火的方法,也增添了食物的来源和种类;轮子的发明则令人类的运输变得更为方便。这些都是古时技术的例子。现今的发明,如印刷机、电报、电话、电脑、手机、网路和网际网路,为人类提供了新的通信途径。不过,技术并不总是用在改善生活的用途上:无论是原始的棍棒还是大杀伤力的核武器,都是为追求破坏性能而发明的。
技术对社会的影响不容忽视,就连现今全球的经济都离不开技术发展的成果。而许多技术生产、加工的过程中,可能会产生一些无用途的副产品,成为污染排放的来源,并耗用了大量的自然资源,引致不同的环境问题。新技术的发展,亦会带来一些新的伦理问题,或是改变大众的习惯。其中的例子包括,原来用作描述机器运作的效率一词,近来也被广泛用在表示人的工作能力上。
对于技术的发展,哲学上亦有不同的论调。其中新卢德主义和无政府原始主义大致上都反对现代技术在社会的应用,认为技术并未真正改善人类的生活之馀,还破坏了环境,疏远人与人之间的关系。与之相反,超人文主义和科技进步主义的意识形态则认为技术有助人类进步,以及可以突破人类遇到的限制。

方法

为达成某个特定目的,可以用来实践(实际操作)的模式或过程(步骤),并包括使用的工具或技巧。

2.理解个人所处地位

在上述三个领域中,定位个人所处各个领域中的位置,知其变与不变。