提醒:本页面将不再更新、维护或者支持,文章、评论所叙述内容存在时效性,涉及技术细节或者软件使用方面不保证能够完全有效可操作,请谨慎参考!

原文发表于2009年2月9日

这几天睡觉前翻了翻几本图书馆借的计算机书籍,原作是外国人写的,看的是翻译的,有时翻译的确实可以了,害得我看书就像复读机一样,一句话有时看了几遍才理解,到后来有个东东直接就看不懂了,说翻译尊重原著也好,但也至少在看不懂的地方加点译者的说明啊,难怪有老师建议直接看英文原著呢,不过我看到字母就想睡觉。其实每次放假前都在图书馆借好几本书,每次都看不了几页,但不借回来又觉得心痒,哎,没得说了。

上次那本计算机书非要和那个离散数学挂个勾,其实问题很好理解,非要弄个数学的解释再挂个记不住的名词,汗,不知道俺离散没学好啊。不过说实在的数学对于计算机还是比较重要的。

我觉得比较通俗些的还是老吴送的那本《高质量C/C++编程》林锐主编的,这本书不错,有利于代码编码水平的提高。

常常还有人问我怎样才能学好一门编程语言,我总结了些供参考(C/C++风格):

注重课堂效率,上课时尽量不要做无关的事情,经常思考老师提出的代码,重点理解这个代码解决的什么问题,解决这个问题的目的是什么,该如何解决这个问题(几步走?),你自己是否有另外的办法也能解决这个问题。当然不要把老师的代码和书上的代码看得很神圣,这些代码也会出现问题,要敢于提出自己的见解而不是思维被束缚,另外代码也是个很灵活的东西,书上和老师提出的代码的某些语句是可以进行相关语句的等价替换的,比如像if else if等等阶梯型if判断 你就该考虑是否可以用switch代替了,常常思考这些问题有助于你的代码书写的灵活性,并且在以后深入学习中也有很大帮助,比如像代码效率及代码风格等等。另外在代码风格上还要提点意见,变量风格的问题,不要像以前一样定义int a, b, c, d这样看似毫无意义的变量,为什么会觉得程序枯燥和天书呢,其实这些不太好的变量名对这个造成一定的影响。比如像动物园有老虎,斑马,熊猫,统计一下数量,很多同学拿到手定义个int a, b, c分别代表老虎、斑马和熊猫的数量,然后就开始组织代码,到最后会发现代码越来越枯燥,于是就没有兴趣再写下去,或者隔段时间后看自己的代码又看不懂了,其实变量可以这样定义,int tiger, zebra, panda,这样就很形象了,比如像老虎生了只小老虎,老虎数量增加tiger++,熊猫不幸挂了一只于是panda--。这样就很容易理解了吧^_^(很有意思吧,代码就像做游戏一样的),当然,为了使代码更清晰你也可以这样定义int tiger_count, zebra_count, panda_count,千万不要怕多敲字哦。对于一些语句要求适当缩进,这个为了别人阅读你的程序更是为了方便你自己阅读自己的程序,如果怕缩进狂敲空格的话可以尝试着TAB键,很神奇哦。

多动手比较重要,上文中也提到些编码的注意点。遇到编程问题了,先不要急于看别人的程序代码,先尝试着自己想想这个问题应该怎么解决,先把大问题分为小问题,小问题再想解决步骤,再各个击破。自己写完程序后,再对比别人的代码,看看自己有什么不足,如果别人的代码要优于你,你可以进一步理解吸收别人的代码,如果别人的代码不如你,你可以与别人交流意见或者集合自己和别人的长处进一步的改善自己的代码,代码不是背出来的而是写出来的。注重培养自己使用程序解决问题的习惯,作为学习了计算机程序语言的学生有些计算问题明显就无需自己用计算器一个一个的算,完全可以尝试着使用代码去解决问题,一个printf加个公式然后循环下运行,结果全出现在屏幕上,这比起那些用计算器手工按着算的要方便快捷多了吧。我觉得很多人怕动手主要是一种畏惧心理,觉得程序是一种很深奥的东东,我们这些凡夫俗子是看不懂的那,再加上动手少又不熟练,等自己真的想动手时却大脑一片空白,由此下去恐怕有些恶性循环的倾向,首先要根除编程是少部分人专利的思想,要肯定自己在程序上的所作所为,增强自信心,别人能做的自己一定能行!不要害怕编程,顺便提一下,上次C++考完后很多人纷纷卸载VC++,这又何必呢,自己以后也用得到,VC++能占你多大空间?没有《魔兽》大吧?为什么你们就不能容忍一个学习工具的存在?有人说VC++会影响到魔兽的运行,这个纯属无稽之谈,VC++的调试器只不过接管了Windows的默认调试程序,再加上有些魔兽运行出错,于是原先该弹出的该程序遇到问题需要关闭的对话框被VC++的调试器所替代,于是你们就冤枉VC++,有次魔兽崩溃出现个Debug Error上面有个Visual C++的字样,于是问我机器上没有VC++为什么还会这样?我现在告诉你你玩的魔兽使用VC++写的,它崩溃了弹出的就是VC++的错误框和VC++编程工具一点关系都没有。还有些同学对于编程不感兴趣,我在下面也将提到兴趣的作用,首先我们不谈你以后会不会从事计算机行业,但是编程已经成为一个实实在在的本领。上次有个搞水文的同学和我交流过,她在提到水文地理需要处理大量的数据什么的有时会很繁琐,这时我就建议她去学好编程了,编程在很大程度可以减轻你的作业负担,除非你去搞文科的,我相信工科类,理科类和金融类都可以让计算机帮你减轻计算统计负担,你可以把剩余的时间用来泡杯咖啡然后去享受日光浴,何乐而不为呢?

其次不要怕犯错误,不要以为编程上出错是什么惊天地泣鬼神的事情,一旦出现错误,要自己去分析代码而不是第一时间寻求别人帮助,别人帮你一次没有你自己找出来的印象深刻,对于编译的错误大多都很好找,据我分析看,大多数错误是由个人的粗心造成的,不要不把程序当回事,做事要细心,不要和我说粗心是自己的性格,我认为粗心是一个人的习惯问题,对待编程本来就不重视不认真的人当然在写代码时会粗心了,因此改掉自己对待代码粗心的坏习惯,从现在开始细心认真的对待代码的每个字符。还有些编译错误的情况是自己遗忘了某些语法结构或者对这些比较模糊,归结起来还是代码写少了,建议手边放本书(不要怕书重啦),遇到模糊的语法结构可以先查看书,这些语法问题随着你代码写的多了也就不存在了。这些错误大家还是比较乐于接受的但对于算法错误很多人都觉得无所适从,其实算法错误需要你仔细研究你的算法,掌握简单的调试技巧,比如像单步调试,设断点,在合适的地方插入输出语句(比如像printf)。另外对于变量类型某些变量是否初始化(就是定义后赋值)也要检查。遇到问题一定要先自己尝试着动手解决哦,不要害怕自己的行为给计算机造成伤害,计算机不是那么娇贵的而且你现在编写的程序尚不能给你心爱的机器造成不可逆的毁灭性打击的,假如有(当然不可能)那么恭喜你你回去和你父母说我学习都把机器学冒烟报废了,我相信你父母也会为你高兴的。

然后最重要的还是培养自己的编程兴趣,其实有些人在游戏能找到的成就感在编程中同样能找到,要记住的是计算机是个工具而不是专业游戏机(小休闲我也不反对,沉迷就不好了)。计算机就是用来计算的,如果你诚心想让计算机变成游戏机我建议你去买个“小霸王”(现在还买得到吗-_-!)自己慢慢去玩,你可能是个准职业玩家,但是你在玩游戏时有没有想过这些游戏是怎么来的,自己天天吃鱼,为何不自己尝试着去钓一次鱼呢?

补充几点:积累知识,记住你所遇到的问题以及解决方法,特别是在别人指导下的。不要说记不住了,我看有些玩游戏的程序字符记不住,游戏上的WASD、一大堆组合键和司马诸葛马岱赵云等等的技能啊什么的这些倒记住了,有次和老吴提到“超人”,只见他立马反应是“曹仁”,囧。我后来想他们为什么会记住呢就是因为他们对这个游戏特感兴趣,倘若能够对编程感兴趣,那些语法又何尝记不住呢?

可能写的比较乱,比较啰唆,大家提取点重点看吧,我能总结的先有这么多,等我想到其他方面的我再补充吧^_^,算是总结也算是动员大家学好编程的动员信吧。

最后想说明的是,大三下学期了,时间也不多了,建议准职业玩家们(不限于游戏玩家)可以放放手边的玩的事了,大学总不能什么都学不到吧。

2011年4月4日

时间过得很快,当我再一次翻到这篇文章时,已经工作半年多了,回想过去不禁感慨万千,工作后最大的感觉就是学习的时间少了,所以如果你还在大学,请好好珍惜大学时光,好好学习吧。另外对于代码缩进的Tab制表符,这个确实很方便,但是为了在各个计算机上缩进一致,还是推荐采用4个空格取代一个Tab制表键。当然有些编辑器可以自动将制表转换为4个空格,那就更好啦。