是谁在死记硬背学编程?
没错,是我!
记得刚开始学编程那会儿,没有任何计算机基础,编程语法大多靠背——C++语法,操作系统各项定义,计算机网络各种协议......
后来我发现,不只我一个人这样学习,身边不少同学都是如此,认为学习一门编程语言最重要的就是掌握其语法。所以为了将语法烂熟于心,最直接的方法就是记忆。
我们记忆了什么是常量,什么是作用域,什么是多态......
看到这里你可能觉得我会说:编程语言不重要,编程思维才是最重要的,那么问题来了,到底什么才是编程思维呢?我并不是来宣扬这句编程届名言的,因为它不适合一个初学者,初学者可能既不知道什么是编程思维,也对编程语言比较生疏。
我想分享的是:学习编程语言的语法确实很重要,只有理解、熟悉了语法才能更好地应用一门编程语言,所以我们去背诵记忆编程语言的语法也是可以理解的,不过这可能不是最好的办法。
光凭记忆语法,是很难学会编程的,反而是用这门编程语言一段时间之后再回过头看看那些语法,说不定突然就理解了。
其实编程语言的语法也是可以通过理解来学习的。
举一个我大学时刚学C++时遇到的一个语法问题:我们称它为const问题。
可能有同学没有学过C++,我简单解释一下,const是一个C++的关键字,最常用来定义常量。譬如:
const int MAX_VAL = 23;
const string SCHOOL_NAME = “Peking University” ;
那么我们把MAX_VAL称为整型常量,把SCHOOL_NAME称为字符串常量,这些常量在其生命周期内其值都不能被修改。
上面两个语句是很好理解的,再看看下面的呢?
const int * p=&n;
int * const p;
const int *const p;
上面三个语句看起来就不是那么好理解了吧?我刚学习const语句的时候也被这些复杂的语句给难到了,只能死记硬背,按顺序,这三个语句分别是:
const int * p=&n; //指向整型常量的指针,它指向的值不能修改
int * const p; //指向整型的常量指针 ,它不能再指向别的变量,但指向(变量)的值可以修改
const int *const p; //指向整型常量的常量指针,它既不能再指向别的常量,指向的值也不能修改
很明显,p是一个指针,并且指向常量,这两点大家都能轻而易举地看明白。难点就是const到底控制着谁,谁不能被修改?
之前遇到这种问题我也是死记硬背的,不过后来就慢慢地理解它了,因为C++作为一门流行了那么久,那么多人用的编程语言,这其中一定有它的设计哲学。
问题来了,如何去理解呢?
很简单,const修饰谁,谁的值就不能变,这其实和英语中不同词性单词的位置排列一样。对于一个名词,我们找离它最近的const。
如下面飘红的词:
const int * p = &a;
int * const p = &a;
第一个const修饰的是 int ,int指代的是整型变量,也就意味着,指针p指向的值是不能修改的,也就是a的值不能变,但是p还可以指向别的变量,比如说指向b。
第二个const修饰的是p,p指代的是指针,也就意味着这个指针不能被修改,因为指针变量存的是地址,也就是说p存了一个地址后就不能存其他地址了,换句话说就是它不能指向别的变量了,但是p指向的变量的值可以改变。比如p指向a,a原来等于1,现在我们可以把a的值改为2,但是p在生命周期内只能指向a,不能指向b或者其他值。
那么const int *const p 就很好理解了,它指向的值不能修改,也不能再指向别的变量。
感兴趣的同学还可以用这个套路去理解一下 const this 指针,看看是不是适用呢?
以上用一个小例子分享了一下如何去理解一门编程语言,其实可以通过理解学习编程的地方还有很多,比如形参、实参、传值、传引用、函数指针、友元、多态、重载等等等等,大家都可以尝试换种思路去理解,很多知识点一下子就能明白啦。
我们需要记住,学习编程的出发点不是应付考试。
当然,除了编程语言,很多其他的知识,如软件分层、设计模式,都是水到渠成式的设计。
大家别忘了点个赞哟!
在学习python中有任何困难不懂的可以加入我的python交流学习QQ群:932749660,多多交流问题,互帮互助,群里有不错的学习教程和开发工具。资源分享