我大约刚开始学编程时就看到这篇文章了(下面简称《C#风潮》),这是一篇被转载了上万次的名文,可参见这里文章搜索。今天无意间又看到它,《C#风潮》显然是很不错的文章,作者列举学习中的实例包括自己的经历,将自己对技术学习的深刻理解,清晰地展示给我们,并指出了学习的方向。又一年就要过去了,现在重读,联想这几年的经历和认识的发展,我觉得有一些新的体会。
文章的第一句话是:“我始终认为,对一个初学者来说,IT界的技术风潮是不可以追赶的,而且也没有能力去追赶。”
作者没有直接解释原因。为什么呢,现在我有点明白了。很显然,如果你能比别人更早地认识到一项新技术的潜力,你就比别人有更好的发展机会,获得更大的收获。作者的想法是,作为初学者,他不太可能具备判断技术前景的能力。其实这种能力其实在真正的技术人员中,也只有少数人具备。
接着,作者对大学的师弟师妹们忽视基础课程,学习C#等“先进”语言感到痛心。可是,为什么同学们会把课本扔了呢?我来解释吧,乏味的课程、过时的教材、水平低下的师资、脱离实践的教学让大学生们失去了方向。作者是非常有才华的,他在大学的成功是个别案例。说实话,中国的大学教育让每个有识之士都痛心。
最近常在看李开复等大家的博客,开始体会到一点学习的本质,就是忘掉你学到的知识和技能后剩下来的东西。不管是大学生也好,初学编程者也好,如果没有面临眼前的生活压力,就请追随自己的激情和兴趣,选你最喜欢的技术吧,不用管那些科班的教授专家怎么说。你可能走得不是他们指定的阳关大道,但关键是,要去学,有目的地学,不管是C#也好还是汇编也好,都可以找到共通的学习方法。
如果你对新技术感兴趣,完全可以勇敢地去追。当然也不能为了赶流行风潮,看到别人追我也追,而是为了它的学习价值。确实有绝大多数新技术是昙花一现,但有旺盛生命力的技术也在不断扎根发芽。现在早已证明了,当年涌现C#语言及其所在的.Net平台不是一阵风,而是一场革命。即使某项技术失败了,也未必就是技术本身的问题,比如可能是过于超前了,但其中蕴含的思想却可能非常可贵。将思想和方法学到手,会让人终身受用。
接下来作者讲了几个初学者的误区。第一个是“认为计算机技术等于编程技术”,这个说不上什么误区,人的认识是随着对事物了解的逐渐深入而提升的,这是一个持续无止境的过程。很多人开始连网络和服务器都搞不清,自然不会对计算机技术有多全面的认识。不过我认为,对于初学者来说,只要能像作者后面说的“日三省乎己”,时常想想自己学了些什么,还有些什么相关的东西需要掌握,自己对什么最感兴趣之类问题,对计算机技术认识自然会丰富并立体起来。
第二个误区是“咬文嚼字的孔已己作风”,双手赞成,这显然是应试教育的恶果。有个作者的师弟跟他说:“C++ 太难了,学了这里忘了那里,学了继承忘了模板。”作者的回答道:“你不去学就容易了”。作者说,“死抠C++的语法就和孔已己炫耀茴字有几种写法一样毫无意义。你根本不需要对的C++语法太关心,动手编程就是了,有不记得的地方一查MSDN就立马搞定。”编程是创造性思维的结晶,不像马哲那样可以靠死记硬背,而要结合实践加以理解贯通。而如果你对这个技术点的应用有相当的心得,让你再描述一下这个知识点,你说得会比国内绝大多数技术书籍上那些专家写得还要好。
联想到前几个月,园子上有个热门文章关于最近面试的一点感想,讲面试时询问对方“delegate
在.net framework1.1,2.0,3.5各可以怎么写”的问题。老赵为此连作三篇文章(从.NET中委托写法的演变谈开去)详述了对delegate
这个技术点的心得,事实充分,论证严密,证明这确实是一个能够检验面试技术人员水平的好问题。这才是真正地学懂了、学会了!不过好问题也是有条件的,这个问题将来会在网上广泛传播,要是再有面试官出这样的题目,就值得商榷了,有可能会真的招到像孔已己一般的牛人。不过时下的环境各种浮躁,从那篇文章的评论中,可以看到山间竹笋和墙上芦苇盛行,连孔已己都不多见了。
第三个误区点到《C#风潮》文的核心,“不顾基础,盲目追赶时髦技术”。作者举了自己的亲身经历,并与同学对比,看上去很有说服力。综合看这篇文章,作者不经意泄露了他的潜意识,即从汇编到C++到VC的道路才是编程的武学正宗,其他都是“歪门邪道”。作者下面对各个编程相关课程的描述也证明了这一点。
首先,编程语言没有高低之分,编程开发者的水平,当然也包括他的报酬,和他用语言没有关系。C++程序员能拿到的薪水,C#或VB程序员一样能达到,并且未必就得比C++程序员付出的努力多。只是由于C#是更容易入门的语言,所以菜鸟程序员要多得多,显得好像不如C++“高贵”,其实这反倒是它先进的体现。
至于说数据结构和操作系统原理是学习编程的基础,前者还算可以,可以使你更好地理解性能、存储、算法的概念。至于操作系统原理,如果你有志于参加个Windows 8开发(微软总部已经在招聘了),当然是必须学好的。但对于一般地C/S、B/S以及嵌入式开发,我实在是想不明白了解操作系统原理有什么必要性。当然了解了更好,但是可能还不如花半小时研究一个性能测试工具的使用更有意义。
其实,并不是先学HTML和VB导致作者的同学在毕业时输给了作者,而是那位同学不够努力和专注。他没有在Web开发上,达到与作者相同的高度。我认为初学者真正的第三个误区是(如果第一个算的话),不明白成功源自努力和专注。开始作者说,师弟师妹们把课本扔了花钱买C#、ASP的书看,但据我所知,绝大多数人花钱买了书,看不几页也丢到一边了。大学新生,只要去将毕业的师兄师姐物品处理摊拉,肯定能淘到好多新书。同样,很多人买了电脑,开始是想练编程,过不多久就成了网游用机。
这也不能怪这些初学者。国内出版的技术书籍水平实在不敢恭维,近两三年还好了些,翻译的书多了,也有个别不错的国内作者,但对初学者一开始就看出某本书的价值还是困难了点。再就是应试教育环境下长大,大家自学能力和意识普遍很差,大学里又没有人指引,实践机会也少,遇到一些困难和困惑,结果自然就是放弃了。
作者还以课程描述的形式,设计了他理想中的Windows程序员技术学习路线。我想他认为这条路线适应于所有想成为程序员的人,但还是保留了一下。我觉得《操作系统原理》、《计算机体系结构》大致了解一下就行,不了解也没太大关系。《数据结构》还是比较重要的,尤其是其中的思路和方法。英语的重要性就不用说了,至于《大学英语》就算了,那不是我们需要的,多看原版技术书籍和文章吧。软件工程也非常重要,作者的学习方法非常值得称道:“不要花太多的时间 去记条条框框,看不懂就跳过去。在每次自己完成了一个软件设计任务(不管是练习还是工作)以后再来回顾回顾,每次都会有收获”。许多开发人员甚至技术管理人员,都完全没有软件工程的概念和意识,你如果有,哪怕是一点,也是将对未来你的发展弥足珍贵。
这些课程中,作者相当推崇《Windows 程序设计》,现在情况也不一样了。作普通windows程序设计,.Net平台下开发效率要远超过C++平台。就是在C++平台中,VC++也属于较难上手的,C++ Builder则容易得多。我们有很多的选择,每个人的情况都不一样,适合自己的才是最好的。
最后,作者谆谆提出了对初学者的忠告:为你的将来着想,把最多的时间花在学习上。只要去学,只要不是学害人的东西,学什么都要比把时间荒废要好得多。环境也许无法改变,但你可以改变自己。
纵观全文,不可否认,《C#风潮》是有部分保守的观点。 但多年之后重读此文,在到处是浮躁的大学,浮躁的业界,浮躁的社会中,这篇文章依然能闪光。