从论坛上关于C++的探讨,让我想起的是孔已己:"回字有四种写法".
做为过来人,我想告诉你们,不要以为C++是一切,不要以为学会写高难度
的程序就能成为计算机高手.有意思的是,很多计算机科学家大师根本不
会写程序.
程序是什么?程序只是把人能看懂的数学算法变成计算机能懂的逻辑符号.
本质上和建筑工人差不多.建筑学家一定要亲手砌过墙吗?
我不止一次看见人嘲笑:XXX学校教计算机还是BASIC呢.我就是从BASIC开
始学遍程的,而且使用basic长达5年之久.之后我用二星期转到了汇编,在学
习汇编的二星期里,我使用它写了一个简单的图形届面游戏.写成后我认为我
学会汇编了。二年后我又用三天学习了c语法,继而用一个月的时间写了一个
小型CAD,该程序至今(快10年了)还在我们的国家级科研单位使用。
说我自己的经历并不是想证明我比谁强,只是想以此指出很多后来者在学习上
的误区。不同编程语言不过是具有不同逻辑符号的集合而已。无论你使用循环
还是递归,知道CPU都是在线性工作同样重要。
很多人抱怨C++太难了,我想告诉你们的解决办法就是:不要去理会哪些难点.
奔腾CPU具有几百条汇编指令,其中80%不常使用,40%几乎不出现在我们的常
用软件中.条条大道同罗马,干嘛非一棵树上吊死?
我有个朋友从C++教程学起,而后是《Thinking in C++》,《Inside C++》,
《C++ reference》,总之是看完了这个C++看那个C++,两年了告诉我说,"我
觉得我还没领会C++的精髓",我问它使用C++解决了哪些典型问题,结果他除了
用MFC写过一些界面程序外,没有任何成果.这样的学习有意义吗?
我商业编程的时间已经8年,学习遍程已经15年了,所看过的关于语言的书估计
也超不过6本,通常我每学一种语言看一本书,目前我只会basic,asm,C/C++,
java.但这丝毫不影响我解决很多别人解决不了的问题.
我从没看过上面那些C++的书,但我从来不会觉得我的C++语法知识不够,不会
我就不用.如果你觉得自己苯,那恰恰说明你的程序最容易懂!C++封装继承的
目的不就为了让程序好懂吗?这才是OOP的精髓!如果你按照自己的方法写出了
世界上最好懂的程序,那你就可以根据自己的经验创建D++,E++,还学C++干什
么?
语言仅仅是一个工具,C++又只是这些工具中的一个,我们没有必要在这上面浪
费时间!需要你学习掌握的东西还多着呢!你的英语词汇量够吗?计算机的前沿
在西方,不懂英文你永远是技术上的后进者.操作系统原理你掌握了吗?这是我们
写应用程序的重要前提,也是我们学习软件结构设计的经典案例.你的数学知识
够吗?计算机说倒底是个复杂的数学处理器,没有数学知识我们根本无法解决向
模式识别这类的问题,甚至连数理统计也无法完成,比如你知道如何算合理库存
吗?如果不知道你肯定写不出ERP的核心代码,即使你破掉10000本C++书也是无
可奈何.
继而我希望大家再多多看看软件工程和模式设计方面的书.这些书每看一便你的
层次就提高一点!看不懂也没关系,先看自己懂的,然后就去编程解决问题,之后
再翻回头来看,把自己在实践中得到的经验提升到理论高度,然后再用理论去
指导自己的下一次实践.这将是一个良性循环.
解决问题也有很多东西等待我们去看,去学.比如网络协议,比如无线通讯协议...
这些协议都是学界泰斗们的力作,从中我们可以学到很多协议之外的东西.比如
模式设计.
也许你可以写出一个程序,它能管理1000个线程同步异步协同工作,我们顶多说
你是个优秀的程序员.而第一个提出OS应该以线程作为调度单元的才是科学家,
即使它根本不知道在Windows中线程是如何创建的.
孔已己说"回字有四种写法",我们笑了他一百年.但当你死抠着语法不放的时候,
有没有意识到自己已经成为了新时代的孔已己?或许你希望后人再笑100年?
ps:我想笔者的意思不是说不要学习语言,而是不要死抠着语言的一个细枝末节不放。毕竟做为开发人员不掌握一门语言是不实现的,这个世界不可能大师满世界跑。这是我作为一个C++初学者的感想。
////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////
看了以上的东西,若有所误,但是我同样不赞成作者关于学习语言的观点,我认为应该要熟练并且很透彻的了解一门语言,语法的种种细节。这样可以帮助你很好的解决具体的问题,以及提高你,当然是在程序员的层面的编码功底。
然而,我想说,并且作者也说到的是,不要仅仅把语言当作语言,它仅仅是一门工具,不要把它提到一个很高的面上。逻辑,算法,数据结构,数学……这些才是精髓所在。
换句话说,基础的,底层的才是我们更应该重视的。
之所以想到这些,因为身边的人们,越来越多的不重视基础的东西,盲目的去追求所谓的高端,要知道,在中国,找个.net,java的程序员是相当容易的,要找个c,c++甚至懂汇编,搞点低层技术的,那是非常困难的,这个现象也直接导致了今天中国IT行业的现象,缺乏人才,人力资源过剩。难道我们就不该思考下我们究竟缺少的什么吗?
再想到我们现在的的大学,相信在读大学的同人都有感慨,大学能学到什么啊?确实,我所在大学虽然不最好,但是也是全国排名靠前的,并且在全国仅有的30所示范性软件学院中,也是中高级别的。但是呢,我们学了什么?我可以跟你说,什么也没学到,别指望每周一,二节的专业课,所谓的教授,博士,能确实给你什么,nothing。最基本的一点导向性也是很模糊的,没人告诉你该怎么做,怎么学。醒悟的早的现在就成为佼佼者,醒悟的晚的,现在仍然在迷茫中,中庸者,就我这样了!现在才知道,大学给了我们什么,自学的空间。
所以,想想什么是最重要,最需要的,然后利用自己的优势---读大学和上计算机学校是有区别的---发挥自我学习的能力,利用充足的时间和优越的环境。
乱说了大堆,无聊憋的,希望对迷茫者有点启发!
[此贴子已经被作者于2007-6-6 21:38:37编辑过]