下面我们先了解一下计算机与程序设计
大家都知道计算机这个名词,那么什么是计算机的概念呢?
计算机是根据指令操作数据的设备。
它有两个非常明显的特性,功能性和可编程性。
如果一台设备只有功能但是不可编程,那么它不是计算机。
计算机的发展也十分值得关注
计算机是参照摩尔定律来发展的,表现为指数方式。
具体来说,是计算机的硬件所依赖的集成电路规模是参照摩尔定律来发展的,因此,计算机的运行速度也接近几何级数快速增长。同时表现为计算机所能高效支撑的各类运算功能(高效运行的各类功能单元)不断丰富发展。
在计算机演变过程中,计算机的性能和功能是交替、交织发展的
那么谈及摩尔定律,这就是一个非常有意思的话题
摩尔定律(Moore’s Law)是计算机发展历史上最重要的预测法则,它是由Intel公司的创始人之一戈登·摩尔在1965年提出的。摩尔定律说了这么一件事:
单位面积集成电路上可容纳晶体管的数量约每两年翻一番。
通过这个描述是我们可以了解,它是一个预测法则而不是一个定律。
同时,计算机的很多硬件像CPU/GPU、内存、硬盘,以及由它们组成的电子产品都是基于集成电路来设计的,因此它们的发展都遵照摩尔定律。
我们有了对摩尔定律的描述,我们来看一下实际摩尔定律的发展情况。
我们来对1971年到2016年期间的集成电路晶体管数量进行实测。
在1971年,Intel公司推出了一款叫4004的处理器,这款处理器可以进行简单的数学运算,它只有2300个集成电路晶体管。
那么到2015年,在行业界推出的SPARC M7处理器包含了10,000,000,000(100亿)个晶体管。
那么1971年到2015年中间过去了44年,如果按照摩尔定律每两年翻一番来计算,理论上会有222的倍数增长,也就是说理论上应该增长四百万倍。
那实际上呢?我们以这两个处理为基准,实际上增长了四百三十五万倍。比摩尔定律的发展还略微高了一点。因此我们看到,摩尔定律的预测还是相当准确的。
在计算机整个的发展当中,我们必须要理解计算机的发展是按照指数方式进行的。**在当今世界上,计算机的发展是唯一一个长达50年有效,且按照指数发展的技术领域。**因此我们到今天可以看到,计算机可以深刻的改变人类社会,甚至可以改变人类本身,这都是因为摩尔定律预示的计算机性能的变化所导致的。
可以预见未来的30年,作为业内的很多专家,经过预测表明:摩尔定律还将持续有效。
程序设计也叫编程,它是深度应用计算机的主要手段,同时,程序设计本身也已经成为当今社会需求量最大的职业技能之一。随着人工智能的发展,我们发现很多岗位即将或已经被计算机程序所接管,而在未来,程序设计将是生存技能。
程序设计语言也被称为编程语言,是程序设计的具体实现方式。
比如中国的汉语,有6000多个常用的汉字,而组成的词语不计其数。但是对于python这门语言来讲,它的最重要的单词只有几十个,组织的规格只有十几种,因此我们说它比自然语言更简单。同时因为我们说程序是要被计算机所执行的,这要求我们程序必须很严谨,不能出现二义性。同样的代码计算机只有一种理解,这才是程序设计语言必须达到的效果。此外,编程语言要告诉计算机其中数据的特性和特点,使得计算机的操作更加精确。
编程语言主要用于人类和计算机之间的交互。甚至有学者认为编程语言也可能变成人与人之间的交互语言。如果真的有那么一天,编程将从娃娃抓起
程序设计语言有很多种,但是生命力强劲的却不多。
历史上,编程语言出现了有600多种,但绝大部分都将或已经不再被使用,我们都知道的C语言诞生于1972年,它是第一个被广泛使用的编程语言。直到今天,很多的计算机专业的程序员都在使用C语言来完成程序设计。而Python语言诞生于1990年,或将是未来最好用最流行的编程语言。
Java天下第一!!
编程语言按照执行方式划分,分为编译和解释两种。
编程语言的执行方式
在具体介绍编译和解释概念之前,我们先了解两个说法。
一个说法叫源代码,源代码指的是按照某种编程语言的语法来编写的计算机程序,这种源代码是人类可以很容易理解的
另一个叫目标代码,是指计算机可以直接执行的代码,一般来讲,人类不太可读,只有设计CPU、设计计算机的专家才能读懂代码的含义。
这就是源代码和目标代码的区别。
那么怎么将人类编写的程序变成机器可以识别的目标代码呢?
这里就出现了程序执行的两种方式:
一种方式我们叫编译,它是将源代码一次性转换成目标代码的过程。当程序员编写好一段代码之后,经过一个叫编译器的软件可以将这段代码翻译成目标代码,也就是翻译成计算机可以直接执行的代码。然后呢,我们可以执行这段代码,它获取程序该有的输入并产生输出结果,这就是编译结果。
此外,还有另外一种执行过程,它是将源代码根据代码的行数和执行方式逐条地提取源代码的内容,并逐条地转换成目标代码同时逐条运行目标代码的过程,这个过程中,读取源代码每行代码和程序输入的软件或者一个程序我们叫解释器。它通过运行源代码和程序的输入来获得程序的输出。
我们对比编译和解释可以发现,编译相当于一次性的翻译,我们将程序员编写的源代码变成目标代码之后,我们就不再需要源代码。这样我们就可以对使用目标代码的运行程序。
而解释呢,它是每次都需要源代码参与才能够运行程序,它有点像英文中的实时的同声传译。
对这两种执行源代码的方式,就带来了不同的程序实现的方式。
我们做根据这两种执行方式的不同,可以将编程语言分为两类。
一类叫静态语言,它是使用编译执行的编程语言,比如我们熟知的C语言、C++、Java语言等,它都有一个软件叫编译器,可以将我们写的源程序变为目标代码,并执行目标代码。
另外还有一种编程语言叫脚本语言,它是由解释执行来完成程序设计。比如像Python语言、JavaScript语言、PHP语言。我们编写完源代码之后我们需要一个解释器,它就可以直接执行源代码,并逐条的产生相关的运算结果。
那么静态语言和脚本语言有什么不同呢?
在优势上呢,两个各有不同:
静态语言需要编译器一次性的生成目标代码,因此,在生成目标代码的过程中,我们可以运用更多的优化过程,可以使产生的目标代码执行的更快。但是对于脚本语言来讲了,它在翻译的过程中也要去执行,所以很难加载更多的优化。但是每次执行的时候由于需要源代码的存在,使得我们在维护程序的时候变得很灵活。同时保留源代码,可以程序功能可以跨多个操作平台去运行。
作为一个编程小白来讲,怎么去理解编写程序这样一件事情呢?
这里提供一个简单的说法,通过理解一个基本编写方法,我们将大概知道如何去编写一个程序,那么这个方法就叫做IPO。
其中:
I是指Input输入,表示程序的输入。
P是Process处理,是指程序的主要逻辑。
O是Output输出,程序的输出。
IPO方法讲解的是在编写程序的时候,我们要知道程序的输入是什么,输出是什么,如何从输入达到输出。
首先我们看一下输入,程序有很多种的输入方式,比如我们可以从文件中获得输入、从网络中获得输入,从程序的控制台获得输入、从交互界面获得输入…甚至,我们可以在程序中给出一些全局的内部参数当输入。
任何程序都是有一个输入的,输入是一个程序的开始。
那么程序的结果是什么呢?
大家都知道,那就是输出。程序经过一定运算之后,将程序的结果输出给控制台,输出为图形界面,输出为文件,通过网络输出,或输出给操作系统的内部变量。这都是程序的输出方式。
**输出是一个程序展示运算结果的方式。**可以想象一下,如果一个程序只有输入没有输出,它不表现为任何输出,这样的程序就是没有任何意义的。
那么在从输入到达到输出的过程中,我们要理解什么叫处理。
**处理就是将输入数据进行计算,产生输出结果的过程。**这种通用的处理方法我们统称为算法,算法是程序最重要的部分,算法也是一个程序的灵魂。
那么计算机能够解决什么样的问题呢?我们来举个栗子。
比如说一朵花,它到底美还是不美呢?有很多的人,这个人多还是不多呢。这样的问题计算机是无法解决的。计算机只能解决问题中的计算部分。或者说计算机在一个待解决问题中,只能辅助完成计算部分。
我们说计算机只解决计算问题,但是一个问题可以由不同角度来能理解,产生不同的计算需求,而每一个计算需求呢又有输入、输出、处理的过程。这样我们就需要对整个编程解决问题的步骤有一个了解。其中最重要的一个问题就是我们要理解什么是问题的计算部分。
使用编程解决问题呢,有若干个步骤:
第一步骤是分析问题,它指的是分析问题的计算部分,也就是说我们要想清楚我们使用编程,到底能够解决这一问题的哪一个计算需求。
在明确这样一个问题之后,我们要划分边界,即划分问题的功能边界,也就是说我们要规划我们的输入、处理和输出的过程,这样生成程序的输入输出的全套的一个流程。
进一步,我们要设计算法,即设计问题求解的基本算法,并关注算法本身。
在完成上述三个步骤之后,我们才进入第四个步骤,编写程序,去编写问题的基本程序,我们简称编程。
编写程序之后,程序是否能够正确运行呢?我们还需要经过调试测试,保证程序正确运行。
在程序运行一段时间之后,进一步,我们需要升级维护,适应问题的变化,来使程序达到更长的生命周期。
这六个步骤解决问题相对完整。我们也可以给出求解计算问题的精简步骤。其实解决一个计算问题分三步就够了。
第一步,我们确定IPO,明确计算部分以及功能的边界;
第二,我们根据确定的IPO编写程序,将计算求解,从设计,变为现实;
第三,我们调试程序,确保程序按照正确的逻辑,并且能够正确运行。
下面我们再来聊一聊计算机编程的那些事。
可能有人会问,为什么要学习计算机编程?
因为编程是件很有趣的事。
我们说计算机编程能够训练思维,编程本身体现了一种抽象交互关系、自动化执行的一种思维模式,我们把它叫做计算思维。计算思维是区别于以数学为代表的逻辑思维和以物理为代表的实证思维之外的第三种思维模式。这种思维能够促进人类思考,增进观察力和深化对交互关系的理解。
编程能够增进认识。
编程不单纯是求解计算问题,我们不仅要思考如何去解决计算方法,还要思考用户体验、执行效率,以及这个程序是否符合当下社会的需求等。因此我们说,编程能够帮助程序员加深用户行为以及社会和文化认识。
此外呢,编程能够带来乐趣。
编程能够提供展示自身思想和能力的舞台,它会使你通过一台电脑,把你的所思所想变为现实,我们可以看到,世界因为你的程序增加了新的颜色,你自己变得更酷,并且你心里有很强烈的心理满足感。在一个全新的信息空间里,思考创新,这是编程可以带来乐趣的方式。
编程能够提高效率。
它能更好的让你利用计算机解决问题,可以显著的提高你在工作中、生活中、学习中的效率。它也是为了你的理想的实现提供了一种借助计算机的高效手段。
还有重要的一点,变成可以带来就业机会。
编程是信息时代最需要的工作内容,而程序员是信息时代最重要的岗位之一。无论是国内还是国外,对程序员岗位的缺口都在百万级以上的规模。而且计算机已经渗透到各个行业,就业前景非常广阔。而计算机就业的标志的工具就是编程能力。
在学习编程的过程中,有一些误区。
最大一个误区是有人会认为编程很难学,实际上掌握方法之后编程非常容易学习。
主要是三点:
首先,是要掌握编程语言的语法,熟悉基本概念和逻辑。
其次,要结合计算问题思考程序结构,会使用编程套路。
最后,参考案例多练习多实践,学会举一反三。
这样才能在最短的时间,用最有效的方式学会编程。
虽然,讲真,在学着Java和HTML的同时,我并不是很愿意再多学一门Python,因为语法会混,造成不必要的麻烦,但是考虑之后还是决定细致化研究一下,因为同为编程语言,他们有很多相通的地方,所谓条条大路通罗马,很多Java学习过程中遇到的不解,在学Python后有些问题便不解自通了。所以,技多不压身,放手学吧。
转载请注明出处