作者:邹彦傧
前些日子在CSDN看到一篇文章,虽然是写笔者的人生经历,但里面提及的技术让我目瞪口呆(呆了半天说不出话来),(高中生的写尼姆达病毒源代码分析,清华研究生写了Linux服务器集群系统,Lion 是四年制中专生.....),嗨,想想这些,再看看自己,都20来岁了,想想在这方面不可能有多大建树了,真是有些伤感。静下心来,参考了一些资料,总结了一些专家点评再加上一点个人的感悟,写了这篇文章希望能对后来者有些帮助使后来者少走些弯路 。
曾几何时,为了一段程序的通过,翻阅了不知多少本册子,设置了不知多少个断点,耗费了不知多少个时辰,流了不知多少的汗水,哦,忘记了吃饭,忘记了睡觉。累乎?
曾几何时,当调试窗口出现 0 Error 0 Warning ,程序按照意图通过,一切的一切,全然不在话下,征服的快感顿生,哦,忘记了吃饭,忘记了睡觉。乐乎?
要学习编程是要有很大恒心和毅力的,首先你要明确自己的目标,想好自己编程是为了干什么。如果你学习仅仅只是一时想编出QUAKE和成为比尔盖次的冲动,那么我劝你还是应该不要开始学习,因为这样的目标很难支持你日后大量的学习。而且你的年龄不能太大(最好是中学或者大学生)。
无论学习编程还是计算机的其它方面,首先是培养兴趣,这点非常重要,如果有兴趣,编程会使你有强烈的兴奋感,你自然就有了强烈的求知欲。不然它就会是一份枯燥的工作,你也不可能深入学习下去。一开始可以看一些计算机软硬件杂志比如说<>,对于里面提及的计算机操作技巧尽量动手试试,这样会使你有些成就感,这很好,要的就是这个。其实学习一些"Crack技术"也是培养兴趣的一条捷径,上网看看,或去书店找找《黑客,就这么几招》之类的东东看看(想想这些"漫画书":->的作用这就于限此吧),当你发现开始对计算机产生兴趣后,那么就开始学习专业知识吧,上面提及的东东可以不用再看了,你可能觉得从中学了不少知识,但要清楚的是这些都是一些三流的非专业知识。你还有很长的路要走,得赶快上路,不要在上面浪费时间了!
一开始你可以学习BASIC语言,这个语言并不会耽误你太多的时间,学习它完全是为了入门,让你对电脑编程有一个比较初步的认识。,知道一些最基本每条语句的功能,搞清楚一些基本的数据结构(尤其是数组)对于一些其余用途的函数最好不要做任何学习,因为这样只会分散你的注意力,并天马行空地多写些小程序自娱自乐,当你能够可以熟练的运用BASIC编出猴子选大王,以及电脑出题考试之类的程序时,你就可以开始后面的学习了。(之所以选择BASIC也是为了培养兴趣,选择C就显得有点不适合了,就教材而言BASIC教材上的的屏控制比C教材上来得丰富得多,而一般的C教材上基本上没有这方面的介绍,这对于自己想些小程序来做很有利)。
接下来是可以看C了,学C主要是学过程化的程序设计,学会把自己的程序分成许多的函数(或过程),养成良好的编程习惯。这时可以多看一下高人的程序,不一定要懂意思,主要是学会别人程序的格式(比如变量如何起名,怎么划分函数)。除开掌握基本的控制流语句外,应该学习一些很简单的I/O函数和数学函数。C的学习主要是你舍弃原来BASIC程序那种把所有语句积成一大堆的风格,要学会使用函数,提高代码重用性。对于指针之类的东西如果实在看不懂可以先不去管,到后面会有办法。当你能够比较自如的用C编写一些小的计算程序时,你就可以开始你的数据结构的学习了(数学的学习主要是在学校,自己要多用心)。数据结构你可以一点一点慢慢看,并不需要专门空出一段时间来专门研究,这样的目的是让你能够很好的掌握它,要学会用数据结构的知识来规范自己的程序设计和提高程序的效率。对数据结构引起足够的重视。如果说计算机专业的学生与非计算机专业的最根本的差别绝对是数据结构(数学大家都一样学了,主要看你自己学得好坏)。对数据结构的掌握与运用能力是衡量你编程能力的一个很重要的指标。有的人对于看了链表,栈,树,广义表这些东西就头痛。然而这些东西往往能使你的程序的效率比别人高出百倍。
学完C我认为接着最好学习汇编。从最基本的DOS汇编开始,买本《IBM PC汇编程序设计》(清华黄皮)一定要一点一点吃透,实在看不懂就跳,反复的严读是一定可以看懂的。汇编是一定要掌握的,因为它涉及到很多最基本的知识。掌握了汇编和对I/O有了个很彻底的认识后,应该去学编译原理。这个东西并不要精通,但是一定要知道,在大脑里要有一个这样的概念,这对你对程序语言的控制能力都有很大的帮助。这样最基本的学习就算完成了。一般智力正常的人前一段东西应该都是可以掌握的。接着后面的学习就要看你自身的造化了。这个时候你应该研究一下数据结构,不要分散自己学习的注意力,要知道数据结构是异常重要的如果你觉得自己已经对于树,连表,堆栈之类的东西和排序,递归之类的算法已经十分清楚,就可以开始学习Window程序设计了(Microsoft毕竟是老大)。
对于SDK的学习非常重要,写Windows程序的人对API不了解是不可想象的,它就相当于计算机专业的学生得学操作系统和组成原理这两门基础课一样(当然SDK可比这两门课来得有趣和重要得多)搞清windows基本消息机制和系统原理,为以后的编程打下基础,以后学RAD也就快得多得多,对于API没有必要去硬记,只要理解了有个印象就行。千万不要一开始就学VB,DELPHI,BCB之类的东西(这是一个很多人都容易犯的错误,而且很多人犯了这样的错误,自己都没觉得,如果你有作职业选手的心,一开始学这些东西是绝对的错,我也犯过这样的错,好痛),这些东西 在一开始学会对你造成很坏的影响。有可能会把 你引入另外一个错误的学习方向而忽略了真正应该掌握的东西。
对Windows程序设计有一定掌握后,就开始学习C++了,学习前一定要有个正确的认识,那就是C和C++是两个不同的东西(很多垃圾书会使你觉得C++只是带类的C)。学习C++是为了学习面向对象的程序设计,这个时候你对于指针应该也能够掌握了(有汇编的基础),主要抓住C++和C相比的一些新特性,对于多态之类的特性要注意理解掌握,如果没有搞懂就坚决不要往下学习。一些基本的概念掌握以后可以看一些别人设计的程序,学习别人怎么利用面向对象的方法来设计程序的。这个东西也是人之间拉开档次的一个环节,可以和数据结构在同等重要的地位。
对于C++有了一定掌握后,你就可以学习VC 或 BCB,DELPHI了(建议是VC) 之类的开发工具了,当然学之前先学它们的语言和类库,比如MFC或VCL。如果你在第四阶段就上VB DELPHI 或BCB并发现有问题而倒回来重新学习,到了这里你就会深切地感受到你写程序时游韧有余,运用自如得多了。
以后的OLE(ActiveX),.NET,数据库就要看自己的发展方向而定了,在以后的学习上同样要注意的是原理的学习,就好象学习数据库或网络编程一样,千万别一开始就用BCB或DELPHI这样的RAD。
最后引以候老师的一就话:省下一个浪漫的夜晚吧,人生还很长,你可能因此获得无数个愉快的工作天。
以上只是本人一些愚见(也未提及相关学习书籍),希望大家指出不正确的地方并与我多多交流:
QQ:46898363