首先我想说的是,对于想学好的编程的人来说,无论从哪一门语言开始入手,语言的本身其实并不是我们最应该的关心的,至少不是作为一个初学者首先关心的。
也可以说开始让你觉得困难的地方不一定是语言的本身(如语法syntax等),而是整个编程的思想和编程的结构。事实上你所学习的python语言的语法和操作方面,比起c/c++和java等语言来说呢,算是对于初学编程的人来说相对比较简单的入门的了。
01
理解什么是编程
在学习编程之前,你得理解什么是编程,为什么我们需要编程?
了解好了我们要学习的对象我们才能知道从哪个方面下手把它学好。至于我自己的理解呢,狭义上编程其实就是对于不同语言写出不同的代码(什么是编程?),而编程的目的就是通过编程语言来和计算机交流并且操控它为我们工作,实现我们需要的东西(算法algorithm等)(为什么我们需要编程?)。
然而具体根据我们需要实现什么来选择编程语言,比如对于安卓来说,就是java,xml等,对于ios来说,就是object c之类的。因此正如我之前所描述的那样,编程语言是为我们与计算机交流所服务的,就像我们学习世界上某个国家的语言是为了与某个国家的人交流,而不是为了学某种语言而学习某种语言的,语言不是我们学习编程的最终目的,恰恰是开始!
02
如何学好编程
在了解了我们为什么要需要编程以后呢,我们再来讨论下该如何把它学好。
其实编程的入门呢,应该是一个学习编程思想,深入理解什么是编程的一个过程。
而至于选择什么语言呢最开始其实并不是那么重要,甚至可以运用伪代码来学习,但是为了方便初学者学习,能实际实现的语言更加能够让初学者理解编程。
这也就是说为什么大多数学校(至少是大多数美国computer science(计算机科学)本科)的第一门课叫做intro to computer science with XXX language(用XXX语言实现的计算机科学入门)。
再次不厌其烦的声明,这里的with也是说明了后面的xxx语言是为了辅助我们学习计算机科学入门的工具,计算机科学入门才是我们的重点,而不是叫XXX语言课。
这里也不得不吐槽,一些国内的计算机培训机构为了能迅速培养程序员而专门鼓吹某某语言强,而只专注于培养学生编程语言学习的本身。这样培养出来的只能是仿照他人的程序调用者,而不是自己曾经希望的计算机科学工作者。
03
编程入门干货
好了,说了这么多大话,下面来一些干货,让你对计算机科学入门能够快一点。
计算机科学入门的第一课除了我之前说的那些为什么要学编程,什么是编程的一些理论话以外,第一个实际的东西就是所有程序员都知道的Hello World(至少对于大多数情况下来说)。
在python中就是:
"print "Hello, World!"
在java就是:
public class ClassName {
public static void main(String [] args) {
System.out.print("Hello, World!");
}
}
在c++ 就是:
#include
int main{
std::cout << "Hello, World!";
return 0;
}
这三个呢其实表示的都是同一个意思,就是通过系统输出string(一串字符串)
有输出就有输入,比如input() (python), cin(c++)等。输入与输出是几乎每一个编程语言都具备的,也是人与计算机交流最基础的手段之一。
然后一般就会开始介绍数据类型(data type),比如int,double,long,boolean等(在python中相对简单,因为在定义变量(variable)的时候系统能够自动识别对变量的初始化值或者赋值值的数据类型)。
这里要强调虽然数据类型看起来很简单,但是我们知道无论人与人交流还是人与计算机交流,信息的交换是最基础的目的,而在计算机科学中信息的交换基于数据的交换,所以数据对于计算机科学十分重要。而随着今后的学习,要逐渐掌握并熟练运用各数据类型,明确什么时候运用什么数据类型等。甚至今后还会学到抽象数据类型(abstract data type)。
紧接着就是学习一些判断语句(if/else语句,switch语句等)和循环语句(while循环, for循环, do while循环等),这里面呢涉及一个十分重要的数据类型(boolean布尔值),简单地就是对和错(true和false)。虽然boolean的基本概念很好理解,但是boolean是布尔代数的基础。
基础的布尔代数在离散数学中有所涉及,所以这里强调一点,对于计算机科学学生或者想学好计算机来说,数学十分重要,尤其是离散数学。
不像很多大学对数学的淡漠态度,相反他们应该重视数学思想在计算机学习中的培养。离散数学是计算机科学的基础,微积分线性代数等是离散数学的基础,所以大学中所安排的数学课程不应该受到学生和老师的忽视。在今后无论是数据结构还是算法的学习中,数学的基础都能很好的帮助你学习好计算机科学。
随后就是学习函数(function)的概念。函数本质上就是将我们与计算机交流和操作的过程抽象形成方便我们多次使用的一种方法,所以函数在编程中也叫方法(method)。可以使我们在做相同类型的操作的时候,能够有一个类似的方法来解决,而不是每次都重复输入大量的类似内容。
在计算机科学中,化繁为简是一个很好的习惯,而函数正是帮助我们简化程序的一个基础。函数通常由返回类型或者函数的数据类型(我们希望通过函数获得的),参数(我们给予函数所需的),和函数的主体(函数是如何运作的)。
函数也恰好体现了人与计算机交流的一种途径,人给予函数参数,函数给予我们返回值(或者有时函数是void类型,也就是不返回任何值,但是void通常也是会完成我们需要的特定操作),也恰好是信息交换的一种方法。
04
关于面向对象编程
在学习c++的时候还会涉及到指针(pointer)这个概念,这是在c++中一个很重要的概念,也以后需要注意的东西,等你自己学到就会明白。
在学习完我之前所提及的那些(虽然我没有全部详细涉及)比较基础的计算机编程的概念后,你就会涉及OOP(object-oriented programming 面向对象的编程)。在高级编程语言中大量涉及甚至是基础,也是今后的编程趋势。
实际上只运用之前所讲的东西进行编程的话,可以狭义的成为面向过程的编程。实际上OOP是在函数之后,又一个简化我们编程的一种手段,我们将事情更加抽象但更加方便。通过定义我们自己的数据类型, 建立对象(object)来实现对数据的管理和操作。
通过对象来和计算机进行深入和有目的性的交流。面向对象编程的三大核心(重要但不仅限于):封装(encapsulation),继承(inheritance),多态(polymorphism) 。封装就是把我们定义的数据类型组装成一个整体,从而形成一个个可用的对象(有点像工厂流水线上的模具),继承就是获得某个或某些父类的一些特性在新的子类中运用(就如同子女从父母身上遗传的一些特性),多态就是实现我们所规定的一些抽象的可以运用或者重新定义的方法(简而言之就是一个事物可以在不同对象身上呈现的多种状态)。
面向对象编程不仅简化方便了我们的编程,同时保护了数据在交换过程中的隐私。类似private的,只能是自己对象才能知道和拥有(就如同自己的钱包只能自己掌控一样),类似public的,可以展示在main函数(主函数)中为其他数据所用。由此清晰地界定了数据的使用界限,也是编程历史上具有划时代意义的一个进步。
说了这么多,只是简单的描述了计算机的入门脉络,在以后还会学到数据结构(如何管理我们的数据),以及算法等等。希望能对你有所帮助。
至于技巧,我觉得最重要的就是你学习编程的方法,也就是我反复强调的,不仅仅专注于编程语言的本身,而是要随着深入地学习,不断掌握和理解编程的主要思想。
最后,非常感谢您阅读我的文章!有任何问题可以后台私信我,我都很乐意解答。