[转载]程序到底是什么?算法为王!
程序到底是什么?算法为王!LEWISLAU 06年5月13日
这段时间正在完成我的大专毕业设计。呵呵,我要强调“大专”,是为了说明,我其实很菜,水平有限,随手涂鸦一下。所以列为看官读罢,如果觉得写的好,留几个字儿;如果觉得是垃圾,那完全可以批评我,首先要保持向各位前辈学习的态度!
为什么想到说这个话题?因为我最近一直在思考(人类一思考,上帝就想笑!),目前我不断的学习WINDOWS这些东西,它太庞大了,任何一个技术点,都够你啃一段时间。而且每年不断的新技术的出现,这个游戏玩儿下去,始终不是个办法。明显感觉到自己失去了方向?!而且我越来越觉得原来WINDOWS就象一本词典,里面一个个技术难点就是一个个的“词条”。那么我们怎么造一个句子出来?多少要遵循一定“语法”,“语法”是什么?鄙人认为就是算法!!字典里的“词条”是拿来查的,“语法”才是要学的。而我们总是淹没在华丽的“词藻”之中,忽视了语法,到头来才发现原来语言的魅力存在于“语法”之中,而不是华丽的“词藻”。
我曾花了大半年学习MFC这个东西,正当我入门并开始慢慢掌握它的时候,WTL出来,你追的赢么?且不说还有OWL,VCL... ... 所以学习程序的初期就框架,个人觉得不是最优的选择。
再说说其他方面的影响我思考这个问题的原因,前几天和李SIR谈论前途问题,李SIR的一句话,估计我要记一辈子 ——“学程序不懂算法,跟没学一样!”。然后还有个事儿就是,下午去图书馆,正好看到4月份儿《程序员》,主题是“算法的力量”,里面有李开复老师的文章,还有凌小宁的,认认真真的看过一次以后,忽然发觉自己找到了方向!所以今晚才来写点心得!
我认识一个微软的MVP,比我大一点点。以前我就在想,他凭借什么能力能当选MVP?我看过他在BLOG上写关于C++的东西,我觉得自己对C++语言的熟悉不在他之下,为什么他就牛B?当我看到他BLOG上关于算法的笔记,我真的佩服了,他对算法的研究很细腻。以下是他的BLOG地址,有兴趣的朋友可以看看 http://spaces.msn.com/liangzhen/ 既然知道了差距的存在,知道差距存在的原因。我没有理由不去挽回!!!
现在才深深的醒悟过来,原来自己以前绕了很大一个圈儿。悲哀的是浪费了很多宝贵的时间;庆幸的是现在已经醒悟。其实对于算法究竟有多大的使用价值,我是说不清楚的,因为以前写程序的时候我很少用到算法。以前努力学习了一段时间,后来没有坚持下来。不过学了一些算法有一点明显的感觉就是,对一些问题理解上要好一些。
然后,就是在《编程高手箴言》中有这样一段:“所有的语言只是很花哨的表面东西。高手马上就能透过它的表象而看到它的本质。这样才是真正的高手。他不需要再去学什么Java,或者其他什么语言。当他真正要写个Java程序的时候,只要把Java程序拿过来看一看,瞄一瞄书,就全都清楚了。如果这时他学VB就更容易了,我想他不用一天的时间,就能学会。到达高手的境界以后,所有的事物都是触类旁通的。”
再看这段“程序员,尤其现在很多的程序员,都被误导从MFC入手,这就很容易形成一种封闭式的思维模式。这也是微软希望很多人只能学点表面的东西,不致成为高手,所以他大力推荐MFC之类的工具,但也真有很多人愿意去上他的当,最后真正迷失方向。说他做不了程序吧,他也能做程序,但是如果那个程序复杂一点,出现问题时,问题出在哪里就搞不清楚了,反正是不清楚。如果你真正有一种开放性的思维,在你能够成为高级程序员的时候,对MFC这些是不屑一顾的,MFC、VB根本不会在考虑的范围之内。”
现在着实有点后悔以前那么牛气冲天的就向MFC杀去了!!在此告诫初学者些,虽然我很热衷MFC这个东西,但是他的确有“一叶障目”的能力!!但是他的确是APPLICATION FARMEWORK的典范,个人认为学习下还是可以,但是万万不能花太多时间。不然你也只得落得和我一样的下场!
我现在万分后悔,我在MFC上至少花了半年的时间,结果到头来发现它只是个“花瓶”。为什么这样说?!《深入浅出MFC》看完了,看了几次,什么感觉,MFC的点点滴滴都在我脑海里留下了深刻的影响。有的时候我都认为自己能够仿造MFC的方式封装一套APPLICATION FARMEWORK出来。但是用的时候,就是一些界面上的东西,其程序的核心很少用MFC来完成。。。 。。。所以现在告诫想学MFC的朋友,MFC花个一两个月学习下就OK,当然这一两个月不是什么怎么应用?而是学习MFC的原理,《深入浅出MFC》看完前十章应该都能满足你的要求了!除非你只对微软的东西感兴趣,只向学微软的东西。(就像我以前一样!)那也没话说。还有就是其实SDK才是你需要学习的,不过不是去学习SDK成千上万的函数,而是去学习如何快速学习SDK里面函数的用法!
现在我说说我自己对学习程序的建议,是我学习程序的真实体会,虽然我也是个菜鸟,以下内容也是我以后学习的方向:
1,认认真真的学习算法,虽然你现在还不知道它以后到底对你有多大的影响!
2,无论如何要学习计算机组成原理,操作系统原理等基础课程,即使你觉得它没多大用,但是你要相信“万变不离其宗”这个道理。
3,应用程序框架(APPLICATION FRAMEWORD)都是次要的,思想才是最重要的,思想是什么?程序的思想就是算法!!!
4,汇编语言还是要学习一下的,虽然现在已经很少用它做开发。但是不论你在WINDOWS还是LINUX中,如果你懂汇编,调试起来很方便。
5,如果有时间,有精力,有挑战的欲望,可以看看LINUX的源码。它会让你觉得程序这个东西在你的面前是如此透明!
再次声明:我也很菜,随手写点想法。说的对,大家一起提倡;说错了的,大家指出,我会改正!!