对于初学者而言,如何学习编程?

Python011

对于初学者而言,如何学习编程?,第1张

对于初学者而言,如何学习编程?

首先,应该掌握最基本的编程知识,这样才能够保证明白自己想要做什么(能够看懂代码,但是不会自己编写,没关系!)再次,多动手编一些简单的小程序,并且逐步加深

上面都是计算机处理信息、理解信息的例子。

上个世纪,几个超前的前辈(图灵、冯诺依曼)搞了几个东西,使我们进入了信息时代,计算机已经融入我们生活的方方面面,我们的衣(淘宝)食(美团)住(携程)行(滴滴),其实都离不开计算机技术的支持。

如果要给计算机定义两个特点,那么将会是形式化和抽象化。在计算机的世界里面,定义了各种各样的标准和规定,所有事情都按规则办事。其中有定义人如何给指令让计算机计算,计算机跟计算机之间如何沟通等等的规定。而抽象化则是解决问题的能力,如何把一个事实的问题,摒弃一些无关因素,然后把它抽象成一个典型的通用的问题。所以计算机的需要的逻辑思维能力非常强。

这里可以讲形式化和抽象化的例子。数学其实就是这样子。我们首先会把现实问题抽象成数学问题,关于数学问题的描述以及求解,都用数学自己的语言去做。在数学世界里,是非常形式化和规范化的。

计算机瞬息万变,但是有一个原则,怎么方便就怎么来。从PC时代,到现在的移动端时代,再到以后物联网时代,一旦时机和环境成熟,更高效率的解决方案将会替代以前的方法。

计算机学什么?

计算机有几个代表课程,分别是:高级程序设计语言、数据结构、算法导论、计算机网络、操作系统、计算机系统(计算机组成原理)、编译原理等等。

高级程序设计语言:它是一门语言,它是用来人类向计算机传递指令用的。就好像我们的英语一样,是来传达我们人类的意思的,也有像主谓宾这种规则。比如C++,java,python就属于高级程序设计语言。高级语言搭建了人类跟机器的桥梁。

数据结构数据结构讲的是数据跟数据之间的关系。数据结构的意义在于我们更好地表示数据,操纵数据。比如在学生信息表中,张三跟王五是两个数据,他们的关系是同等的线性关系,所以我的学生信息表是一个列表。而装子弹的弹夹也是子弹和子弹之间是线性关系,但是有个区别就是先装进去的子弹最后才能取出来。又比如我们的家谱:

则是一种树形的数据结构,因为论辈分和血缘关系,家族成员是从属关系(我是你父亲,你是我儿子)。

又比如一个交通地图:

他是一个图的数据结构,这里的数据是一个个地点。地点和地点之间可能有直接通道或者没有通道。图是最复杂的数据结构。

算法导论:有了数据的表示,数据的结构,我们计算机专业还要去思考怎么去更好地处理数据,用什么样的方法去处理数据,这些方法就是算法。算法可以理解为解决问题的步骤。举个例子,给你十个数字:

123,524,521,789,342,254,765,242,653,913

让你从小到大排序,你会怎么排序(你是怎么做到从小到大排序的)?

可能的方法是每次从中挑选一个最小的数字出来,先挑最小的123,再挑最小的242,。。。,直到最后得到一个排序。

但是如果你对10000个数据进行从小到大排序,这种方法可能就很慢,我们计算机专业就要研究更快的方法。比如下面这种:

先按百位数排序,将同一个百位数的数字(比如242和254的百位数都是2)归为一组,在这一组内再按十位数排序,再按个位数排序:按百位数排序,得到242和254一组,再按十位数排序得到242,252,然后再把每个百位数的排序结果串起来,就得到最终的结果了。可以证明,这种方法是更加快速的方法。

又比如,你在做一个数学计算题,你算123*456+789*987,你会怎么算?你会先算123*456,再算789*987,然后再加起来得出计算结果。在这个过程中,你就使用了一种算法,叫做分治法,就是你会把一个问题变成几个子问题再求解。

又比如,你卖东西找零钱给人,找8块5,你会先给5块,再给3张1块,再给5毛,这是一种贪心算法。

上面都是属于我们计算机专业要学习的东西,因为这些方法更高效,我们计算机追求的就是高效率。可以这么说,计算机的科学家,都有多多少少的完美主义,他们都想至善至美的找到最高效的方法去解决问题。

计算机网络:计算机网络学的是计算机和计算机之间的通讯。换句话说,就是两个计算节点如何传递信息。这里,我们也是去探索如何更快、无差错、安全地传播我们的数据。

为了传播数据,就要指定统一的标准,不然就不知道你传的是什么东西。计算机网络就像我们的快递分发。比如天猫的快递小哥,从北京要送快递到广州。他将会收到一个快递,快递由包裹包着,包裹上面写着收件人,收件人地址等信息。然后快递小哥就出发了,从广州到了上海中转站,然后在这个中转站有一个路线图,你说你要送到广州,那么下一站是去杭州,再下一站就到广州,最后把包裹送到你手里。这个过程,如何去建立中转站,中转站要有什么功能,包裹如何包装,包裹要有什么信息,都是我们计算机网络要去学习的东西。

操作系统:windows就是一个操作系统,操作系统就是一个指挥中心,它的任务是资源的调度和分配,工作的安排等等。资源的调度可以这样考虑,我们可以考虑银行贷款,你开了一家银行,你有100万,现在有5个人向你贷款,每个人的贷款数额不一样,你要怎么贷款给他们?当他们的贷款总额小于100万的时候直接全部统一贷款,当贷款总额大于100万之后呢?又来了3个人要贷款呢?在考虑还有4个人计划在下个月还款的情况呢?工作的安排就好像你要做一件大事,比如建一个房子,你会先买砖头、钢筋水泥,买好后,你要叫师傅去建框架,建好后你要装修,等等,你都要安排人员去办,这时候,你就是一个操作系统。除此之外,操作系统还要管理你的个人文件,比如你下载了一个文件,放到哪里,你卸载的一个软件,具体要做什么东西,你清空了回收站,又会发生什么,这些都是操作系统负责。

计算机系统:这门课讲计算机的构成,每个部件之间如何协调工作。计算机有CPU、内存、磁盘、显示器、打印机、键盘、鼠标等,那么他们如何工作呢?这门课就讲这些。

这门课比较关键的有流水线(跟工厂流水线一样)、缓存(先把东西放到仓库,再批量地拿)、中断(多个软件在执行,为什么不会卡顿?)等技术。

编译原理:这门课据说是程序员三大浪漫,我就不解释了。