“编程”,英文为:programming,意指编写程序,设计程序。在如今大多语境下,编程从单纯的设计一系列程序转变为特指的: 对于计算机体系,进行运算流程的设计,而设计方式则是“编程”,就是大家所说的“写代码”,而“代码”则常常是程序的常规表现形式。
如此阐述介绍编程,对于没有接触过编程和编程语言的学习者而言是不友好的。我们先试着通过理解几个例子和了解计算机的发展再思考上面的关系。
计算机(computer)的最初始的作用就是“计算”(compute)。在战争中,军备设备和通信密码破译都需要对数据进行大量计算。1944年正在负责美国的氢弹研制工作的冯∙诺依曼也遇到了这个问题。氢弹的研制需要解决大量的计算问题,当时并没有好的计算机,而冯∙诺依曼自己则靠心算。
此时,美国陆军为了研制长程火炮,委托宾夕法尼亚大学电机工程的教授莫奇利和他的学生埃克特博士设计和研制人类第一台通用电子计算机,就是大名鼎鼎的——“ENIAC”。
世界上第一台通用计算机而由于设计上的限制,ENIAC想要对于不同的计算需求做计算前,还需要修改电路,但对于如此一个庞然大物,修改电路可没有那么简单。好在冯∙诺依曼意识到这个问题的严重性,在1944年就向军方建议再造一台新的、通用的计算机,这样他就和莫奇利、埃克特一起提出一种全新的设计方案,称为艾迪瓦克(EDVAC,Electronic Discrete Variable Automatic Computer,离散变量自动电子计算机),而EDVAC其实才是世界上第一台程序控制的通用的电子计算机,并且是今天所有计算机的鼻祖。冯诺依曼也在因为其大顶层设计思路——冯诺依曼体系更加广为人知(莫奇利、埃克特同样伟大)。冯诺依曼体系也成为计算机相关专业课程必备知识。后续的计算机体系结构模型也不多,出名的有哈佛结构,后面再来说吧。
冯诺依曼体系结构(von Neumann architecture)对于编程,其中最重要的就是和计算机“交流”。我们要让计算机帮我们运算,是ok的,但我们要事先告诉计算机它该专门运算,怎么去做。“交流”就是为了这个目的。举个栗子,而我作为一个四川人,只需要使用四川话即可,若是来了一个留学的美国小伙,我可以选择我还勉强能使用的英语。那么若是一个意大利小姐姐呢?我只会Ciao,而她的中文也不能独挡一面。那么这个时候我们常常选择一个“中间的”办法去解决问题。比如用一个我们都掌握的非母语语言——English。
编程语言的诞生与上面的例子。无论熟悉或不了解计算机的人大多都知道计算机和 “二进制” 有千丝万缕的联系,即计算机是‘0’,‘1’的世界。因为,计算机实质是使用高电平和低电平两个物理状态来表示数据的,那么内部的运算,数据的表达,控制的流程等等等所有的一切都是以二进制的形式表达的,这种质朴无华的表达方式所构成的一套系统,就像一门语言——机器语言。不过这门语言一定是晦涩难懂的,因为它由始至终都只有2个字母:0,1。想要表达设计2000个“单词”你会超过10位“字母”去表达。这意味着,你的任何数据位数会变得很大,大到你操作这个数就记不住上一个数是多少了。
一个简单的 50 + 45 变成了: 00110010 + 00101101,这还没有展示‘+’号的编码。一个5位的表达式变成得超过20位。
50+45 变成了“复杂”的 00110010+00101101为了解决这个问题,大师们设计了 “汇编语言”,把一个一个的指令变成了助记符 ,比如,原来我设计的系统里10000000代表“加法”,而汇编中,ADD这个单词就表示了加法。 而运算数据也可以直接用10进制或16进制,其中的转换由计算机自动完成。这极大得简化了编程的工作量,增大了程序员的效率喔,值得一提的是世界上第一个程序员是女士喔。
由此之后再进行分化,新技术与新需求的碰撞使得设计出了更高级的编程语言:C,Python , PHP...不胜枚举。对于如此多的语言,选择时在于你的需求和领域是什么。是硬件还是软件,人工智能还是大数据分析,服务器端还是用户端...这样编程语言贴合需求而分化的高级语言也大大提高了编程的效率和速度。
IEEE Spectrum_2018年度顶级编程语言排行榜编程就是告诉计算机,该怎么做,是在此刻加一下储存器区编号8951和编号8952数据,还是立刻跳过5个指令,直接从当前那一条指令开始,又或者要读写编辑一张1024*1024像素的图片,又或从网络中截取下一个的数据包。。。命令有大有小,但大的命令都是由小的命令堆叠起来的,共同构建起了一个或高效或bug横飞的程序代码罢了。
网友评论