公告:九九网站目录为广大站长提供免费收录网站服务,会员可在线完成投稿无需添加友情链接。只收录内容正规合法的网站;快审网站软文10元

点击这里在线咨询客服
新站提交
  • 网站:8452
  • 待审:21
  • 小程序:9
  • 文章:3601
  • 会员:2183

 

在英语中,program一词的本意是a plan of activities for achieving something——为了达到某个目的而计划的一系列行为。

而中文里程序二字则可以解释为流程化的工作序列。这可能更接近英语中procedure一词,实际上procedure这个单词也常常被用于指代计算机程序,他更加强调的是程序中流程化这一特性。

大多数人人生接触到的第一个程序可能就是小时候妈妈第一次让你独自出门买东西:

出门后右转,走过第一个路口,找到那个挂着红色牌子的商店,告诉老板你要买一袋盐,然后把钱交给老板,并把盐带回家。

也许你觉得自己的母亲不会讲的这么啰嗦,但如果你回忆人生中第一次做某件事的时候父母的表现,我相信你一定会联想起千叮万嘱这个词。这正是因为在你面对一个陌生问题时,你需要了解这个问题当中的一切细节。

这是一个程序的第一个重要特征:

不可使用对方尚未理解的概念

在前面的例子中,如果当时的这个小孩已经有了识字的能力,那么妈妈可能不会告诉他红色牌子的商店,而会直接说鑫鑫超市,又或者这个孩子是一个红绿色盲,那么妈妈可能会改为说长方形牌子,最上面画着一颗小星星的商店。

显然,面对不同的人,我们需要根据他的知识结构做出不同的指示。在计算机程序中也是一样,不过幸运的是,这个世界上大多数计算机都是非常标准而统一的结构,所以大多数人可能不会真正遇到这样的问题。尽管如此,针对不同类型的计算机,编写不同的程序并不是一个罕见的现象。最常见的一个例子是,现在的很多程序都分为32位版本和64位版本,这就是因为在2010年开始的十年间,64位操作系统开始快速普及,导致市面上同时存在大量两种不同的计算机,使得软件开发者不得不为两种不同的用户提供不同的程序。而在更加专业的领域,与我们平时使用的个人电脑结构不同的计算机则更加常见,他们都需要运行为他们量身定制的程序。

计算机真正能够理解的概念屈指可数——高电位(1)、低电位(0)、和一些基本的CPU指令。但在计算机诞生后的这些年里,它早已学会了各种各样的事情,每台计算机都安装了各种各样的库(Library),正如字面意思,Library就像是一个图书馆,供计算机查阅他需要的知识,所以我们把他叫做计算机的知识库。如果你的计算机中缺少某些库,那么就意味着他有一些做不了的事情。一个最常见的例子是在Windows中运行软件时,提示你缺少某些特定的DLL文件。(DLL:Dynamic Link Library——动态链接库)。

在计算机语言里,这一原则具体体现为一切皆有定义。新手最常犯下的错误之一就是习惯了与人类交流的模式——不管对方懂不懂,先说出来,如果对方表示不懂,再来解释。尽管计算机也会表示不懂,可对很多中国学生来说,计算机的提示自己也看不懂,交流就无法继续进行下去了。当然,这也和计算机本身的性格有关,计算机在看到一个不懂的概念时,他并不会一脸疑惑的告诉你I don’t understand,而是反过来认为这是你的不对,因为你使用了一个undefined identifier(未定义的标识符)。

这也许是因为计算机语言最早就是由一帮严谨的数学家为了专业人士设计的,他们并不在乎一般人在看到这些术语之后一脸茫然的反应。掌握术语并不算是一件很难的事情,我们学习任何一个学科都会遇到大量新的术语,但却会成为新手学习过程中一个不小的障碍,尤其是在大多数中文教材中,往往不会逐一解释这些术语,导致了很多大学生在学习C语言整整一学期之后,还看不懂最基本的错误信息。

当然这件事也在渐渐好转,undefined identifier是最早的说法了,现代语言的错误提示已经越来越人性化,甚至一些语言的错误提示已经完全中文化,这对国内想要学习计算机语言的人来说无疑是一个好消息。

程序的第二个重要特性是:

必须拥有精确的步骤

编写程序不是告诉电脑去做一件事,而是教电脑去做一件事。

通常来讲,按一个程序办事是按照他所陈述的步骤去做。如果你只是简单的对一个尚未学会买盐的小孩说我想要一包盐,那么你什么也得不到。计算机甚至不会主动向你请教如何去做,他只是简单的告诉你这句话我听不懂。

在计算机的世界里,程序是使用计算机语言而不是中文书写的。计算机语言是一种形式化语言,他拥有严格的语法和规则。其他常见的形式语言像是数学公式、化学式等,都具备这一特点。与我们平时使用的自然语言最大的不同是,形式语言没有容错性,我们平时说话即使有一些口误,对方也基本能够听懂,但计算机语言则容不得半点错误,即使是少一个标点符号也不行。尽管无数人在让计算机理解自然语言这件事上付出了长期的努力,但至今成效甚微,在未来的数十年里我们也许可以期待人工智能发展到能够让我们不再学习计算机语言而是和计算机直接对话,但现在我们仍然不得不学习计算机语言来和计算机进行交流。

不过形式化语言也有他的好处,否则人们也不会发明数学符号并广泛使用了。形式化语言最大的好处就是他的精确性。如果你玩过这样一个游戏——看一副画并向另一个人描述出来,让他画出你看到的东西,你会发现我们平时使用的语言实在是糟糕透了。几乎没人能较好的还原他听到的东西,这不是指绘画技巧的问题,而是即使你看到的用规尺画出的标准几何形状的组合,对方也很难画出和你看到的一模一样的东西。但如果你学过坐标系,那么你可以轻松的用数学语言精确的描述你看到的内容,而另一个有数学素养的人也能一分不差的把你看到的东西重新画出来。

最后,程序的第三个重要特性是:

程序是写给人看的

可能很多人对此抱有疑惑,既然叫计算机语言,那当然是给计算机看的了,怎么能是给人看的呢?这就涉及到计算机语言的一种分类了方法了。我们通常把计算机语言分为机器语言、汇编语言和高级语言。其中计算机能看懂的,只有机器语言。那么机器语言是什么样子的呢?是只有0和1组成的一个超长的数字串。没有人能看懂机器语言,当然这并不是说人们一点都看不懂,否则人类和计算机也无法交流了,简短的程序,如果认真学习过相关知识的话,总是有人能看懂的,但对于一个现代的工程的规模,动辄上百万行的高级语言代码,翻译成机器语言后,是数亿、数百亿的0和1。这就真的没有人可能看懂他了。汇编语言是披着英语外衣的机器语言——他采用基本的逐字翻译法,也就是把how old are you翻译成怎么 老 是 你的翻译法。这在计算机的远古时代确实帮了人们不少忙,但在大型工程中他的意义几乎为0——你大可想象一下以这种方法翻译的莎士比亚名著会是什么样子。

只有高级语言是真正的意译。尽管阅读起来仍然比自然语言困难的多,但好歹是人类可以通过简单学习能看懂的东西了。可能有人要问,为什么不从自然语言直接翻译到机器语言呢,答案异常简单,正如我们在上文中提到过的——因为这是一个世界难题。

对于买盐这样的小程序,或者说,对于大家在学习编程过程中做的作业题这种级别的小程序,这件事其实并不重要——因为你几乎不会回来再看这段程序了。但如果不是在教一个小朋友买盐,而是要为他准备一套完整的小学课程,情况就不同了。尽管最终的教材(对应机器语言)是让小朋友越容易理解越好,但教材的背后,一定有一个完整的团队记录了编篡这套教材的思路和种种未写入教材的细节——否则未来修订教材的时候麻烦可就大了。

计算机程序也是一样,为了让计算机最方便理解我们的意图,机器语言是按照计算机的思考模式来编写的。而计算机和我们的脑回路差别之大,可能比纳美克星人还要严重(这个例子可能不是很恰当,因为纳美克星人的思考模式和地球人并无区别,或许我应该说三体人)。从高级语言到机器语言的翻译过程中,丢失了海量的信息,而这些信息,恰恰是对人类来说至关重要的解决问题的思路。

新手最常犯的一个错误就是,为了让计算机看懂不择手段,以至于三天之后自己都看不懂自己曾经写过什么。而这个问题最严重的地方在于,直到进入职场,他才会暴露出来,而在此前你却对自己的学习进度感觉良好,因为你所有的程序都能正确运行,给出正确结果——除了无法维护和修改。

分享到:

  admin

注册时间:

网站:0 个   小程序:3 个  文章:0 篇

  • 452

    网站

  • 9

    小程序

  • 3601

    文章

  • 83

    会员

赶快注册账号,推广您的网站吧!
热门网站
最新入驻小程序

跳一跳2022-08-22

跳一跳是微信开发的一款小游戏,有

数独大挑战2018-06-03

数独一种数学游戏,玩家需要根据9

答题星2018-06-03

您可以通过答题星轻松地创建试卷

全阶人生考试2018-06-03

各种考试题,题库,初中,高中,大学四六

运动步数有氧达人2018-06-03

记录运动步数,积累氧气值。还可偷

每日养生app2018-06-03

每日养生,天天健康