着手处理一个新的课题的时候才发现自己的无力。之前虽然也做过关于QT的课题,但面对一个新的任务还是有种无从下手的感觉,想思考一下怎样系统的学习一项编程语言。
编程语言与外语一样,首先是作为一个庞大的学科而建立起来的,之前对其过于轻视。不同的语种,对应java,C++等有着完全不同的使用习惯和内容。就连基于C和C++的软件也有matlab,qt,vc等等不同的版本,虽然if,while等都存在,但使用的方法有着各自不同的区别。就像一门语言的不同方言,听着差不多,但真的去使用还要有一个过程。
那么,在重视了编程语言的学习态度之后,如何很好的掌握这门语言呢?首先回顾一下我之前的学习方法。第一次接触编程应该是在交大的时候学习C++,完全是按着教材老师在上面讲课我们在下面听,然后把教材给的例子搞懂敲到电脑上。熟练了以后再根据例子做一些改变编自己的程序。这种学习方法为以后埋下了隐患,因为养成了面对一个新的问题先去找相应类似的例子再修改的习惯,极其低效。
刚开始学习QT的过程与此类似。承接了学校的一个本科生科研项目,要求在linux系统下进行插补,涉及算法、动画、界面、人机交互等一系列交互编译。虽然功能听起来简单,但对于一个初学者而言很头疼。扯远了,继续谈方法论。也是买本书,开始看,都是看了几章就看不下去,因为前面的概念相比C无非多出一个信号和槽算是新颖的,后面的内容都是分别针对不同的类实现不同的功能,大部分跟课题相关度不大,也就没有深究。而真的开始着手做的时候还是以前的老思路,看到问题先从书上附的例子和其他地方找来的源代码里找相似的,找到了就改成差不多的,最后算是拼凑出来一个东西,现在觉得这种思路不可取。
那么如何能够脱开例子独立的完成一段程序或者至少是一个功能呢?我想最重要的有几点:
1. 了解所有程序共通的基本框架。对于QT来说,就是ui,cpp和头文件之间的关系以及初始定义。
2. 要能对于几个基本的常用的类及其常用的函数很熟悉。能够熟练运用。比如qpaint,qevent等。
3. 要能在需要的时候找到相关的类(注意,不是相关的例子),并能够通过QT帮助读懂,知道怎么在程序中使用,并确切的落实下来。
在搭建一个完整的程序的过程中也要注意:
a. 由简单到复杂,逐渐增加程序的功能。先搭出基本框架,再在其上添枝加叶。这个过程可以不断的自己做一些小的程序来试,最后整合成一个具有多种功能的完整project。
b. 也是所有类似的项目共通的,做一件事的时候专心做,比如今天的任务就是里面的一个小功能,那做的时候就不要老想着和其他功能的衔接啊什么的,只做一件事,并且做好。
说了这么多,我们回过头来看如何达到上述的目标。1很简单,hello world看懂就行,每一本教材的第一章基本都会给出这方面说明。2和3就比较难了,从书中很难快速的达到我们的要求。想想有什么常规的学习手段:
I. 书本及其后附例子,这无疑是最多人使用的方法。然而看书太慢,而且编程主要还是要会用。而且千万别用电子书,这种严肃的学习一定是要用实体书的。书的作用主要是对这个语言有一个初步的系统了解,并完成要求1,然后在一些和课题很相关的书上又正好有这方面内容的地方(这种可能性极少)仔细翻阅,了解原理。
II. 网上资源:
国内个人博客:优秀的个人博客是一个牛人的成长史,看看这些可以少走很多弯路。
国内论坛:交流经验和问题,共享资源。缺点是里面的水平参差不齐,且找到的问题很多也没有人给出解决方法。可以在上面找找资料。源代码的话最好不要从上面下,可能会被误导。
国外论坛:这是重头,要想真正学好一门语言,我觉得这很重要。以前没有重视。
官方网站:多半是一些帮助和下载。
III. 一个好的软件本身就应该会教你怎么使用它,去学。
IV. 高校网络可以找到一些优秀的论文。
确定了基本的学习途径之后我们如何来学习?基本的思路是:先了解基础,再在战斗中学。具体的想法我也只是一个初步构想:
1)先找最经典的教材,看头几章了解一下这个软件。
2)搜索优秀的论坛和博客,看看上面有什么好的学习建议。
3)按照软件的指导来学。
4)找到常用的类,并看几遍例子,懂了以后抛开例子自己写一段稍加修改的程序。
5)了解能够被利用的类,在真正用到的时候能知道怎么找出来并会用。
6)给一些大型程序写注释,时间允许的话自己编一个一样的。
7)开始着手做项目,先在上述的资源里找类似的以启发灵感避免重复劳动,然后get to work。
以后会不定期回来修改这篇文章,希望大家在评论中给出宝贵的意见,谢谢。